首页 > 编程语言 >13C++循环结构-for循环(3)

13C++循环结构-for循环(3)

时间:2024-12-27 20:34:06浏览次数:5  
标签:std 10 13 main int namespace C++ 循环 include

一、回文数

问题:“地满红花红满地,天连碧水碧连天”是一副回文联,用回文形式写成的对联,既可以顺读,也可以倒读,意思不变。在数学中也存在这样特征的一类数,称为回文数。设n是一任意自然数,将n各个数位上的数字反向排列所得自然数m,若m等于n,则n为回文数。例如,1234321是回文数,1234567不是回文数。

试编一程序,判断一个自然数是不是回文数。

如何将自然数n各个数位上的数字反向排列,组成新的自然数m?如输入的数n为123时,可先将m的初值设为0。第1次,先运用整除求余运算将n个位上的数字分离出来,即123%10得到3,再用m*10+3组成的新数赋值给m,然后将n的值缩小10倍;第2次,重复上面的步骤后,m为32,n为1;第3次,重复上面的步骤后,m为321,n为0。由于此时n的值为0,新数m构造完成,如图所示。

因为输入的自然数其位数是不确定的,因此每次分离数位时,循环次数也是不确定的。for语句使用很灵活,不仅可以用于循环次数已经确定的情况,而且也可以用于循环次数不确定而循环结束条件确定的情况。
流程图:

#include <iostream>    
using namespace std;
int main()
{
  int num,n,m;
  cin>>num;
  m=0;
  n=num;
  for(;n>0;)
  {
    m=m*10+n%10;
    n=n/10;
  }
  if(m==num) cout<<"是回文数"<<endl;
  else cout<<"不是回文数"<<endl;
  return 0;
}

可以把for语句在形式上稍作修改,程序如下:
for(n=num; n>0; n=n/10)m=m*10+n%10;

练习:

(1)下列文件扩展名为声音文件格式的是( )。

   A.doc      B.wav      C.exe      D.txt

(2)阅读程序写结果

#include <iostream>
using namespace std;
int main()
{
  int i,bai,ge, ans=0;
  for(i=100;i<=130;i++)
  {
    bai=i/100;
    ge=i%10;
    if(bai==ge)ans++;
  }
  cout << ans << endl;
  return 0;
}

i,bai,ge,ans的输出:________________
(3)完善程序。
输入一个数,判断是不是完全数。完全数是指此数所有的真因子(即除了自身以外的约数)之和等于自己。如6=1+2+3,就是完全数。

#include <iostream>
using namespace std;
int main()
{
  int n, i, sum=0;
  cout<<"n=";
  cin>>n;
  for(i=1;i<n;i++)
    if(n%i==0) ______________;
  if(_______)
    cout<"是完全数";
  elsc
    cout<"不是完全数";
  return 0;
}

二、斐波那契数列及长整型 long

斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,··,这个数列从第3个数开始,每个数都等于前面两个数的和。这个数列与大自然中植物的关系极为密切,几乎所有花朵的花瓣数都来自这个数列中的一项数字,同时在植物的叶、枝、茎等排列中也存在斐波那契数列。
试编一程序,输出斐波那契数列中的前10项。
斐波那契数列的前两项为1,从第3项开始,每一项的值是前面两项的和。可以先把第1项al和第2项a2赋值为1;求第3项a3时,只要把al+a2的和赋值给a3并输出即可,再把a2赋值给al,a3赋值给a2,为求下一项做准备;然后依次重复执行求第3项的步骤,求出前10项。流程图如:

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
  long i,a1,a2,a3;
  a2=a1=1;
  cout<<setw(5)<<a1;
  cout<<setw(5)<<a2; 
  for(i=3;i<=10;i++)
  {
    a3=a1+a2;
    cout<<setw(5)<<a3;
    a1=a2;
    a2=a3;
  } 
  return 0;
}

注:
在Dev-C+、Visual C++中,长整型 long的取值范围和整型int的取值范围是一样的,即-2147483648~2147483647,不要把长整型long当成超长整型long long的缩写。其实,C+并没有统一规定各类数据的精度、数值范围和在内存中所占的字节数,由各种C++编译系统根据自己的情况做出安排。C++只是规定int型数据所占的字节数不大于long型,long型数据所占的字节数不大于long long 型。

练习:

(1)如果开始时计算机处于小写输入状态,现在尼克反复CapsLock、字母键A、字母键S的顺序按键,在屏幕上输出的第符是字母()。

    A.A         B.S         C.a          D.s

(2)阅读程序写结果。

#include<iostream>
using namespace std;
int main()
{
  int a, b, i;
  cin>>a;
  b=l;
  for(i=l;i<a;i++)
  {
    b*=i;
    if(b%3==0)b/=3;
    if(b%5==0)b/=5;
   }
  cout <<b<<endl;
  return 0;
  }

输入:8
a,b,i的输出:____________________
(3)完善程序。
一个有规律的数列,其前6项分别是1,3,7,15,31,63。规律如图37.2所示,编程输出这个数列的前30项。

#include<iostream>
using namespace std;
int main()
{
  long long a, n;
  n=2;
  a=l;
  for(int i=l; i<=30;i++)
  {
    cout<<a<<endl;
    _____________;
    —————————————;
  }
  return 0;
}

三、逻辑判断与推理

问题:A、B、C、D四人中有一个人是小偷,已知四个人中有一个人说了假话,请根据四个人的供词来判断谁是小偷。
A:我不是小偷。
B:C是小偷。
C:D是小偷。
D:我不是小偷。
假设你是警察,请编个程序来判断一下,谁是小偷。
可以用1、2、3、4这四个数字分别作为A、B、C、D这四个人的编号。用变量i代表小偷,则四人所说的话可以分别用以下的逻辑式来表示:

A:我不是小偷,即i!=1。
B:C是小偷,即i==3。
C:D是小偷,即i==4。
D:我不是小偷,即i!=4。

如果说了真话,它的逻辑值就是“真”(true,值为1),说了假话它的逻辑值就是为“假”(false,值为0)。其中有一人说了假话,就是三个人说了真话,所以应该是:
(i!=1)+(i==3)+(i==4)+(i!=4)==3
i值由1到4枚举就可以得到结果。流程图如图:

#include <iostream>      
using namespace std;   
int main()
{ 
  int i;
  char xiaotou;
  for(i=1;i<=4;i++)
    if((i!=1)+(i==3)+(i==4)+(i!=4)==3)
    {
      xiaotou=64+i;
      cout<<"小偷是:"<<xiaotou;
      break;
    }
  return 0; 
}

运行结果:
小偷是:c
可以应用枚举和逻辑表达式解决一些逻辑判断和逻辑推理问题,实现初级的人工智能。让计算机像人一样学习、思考,让计算机听懂人的语言,让计算机自动进行程序设计等都是人工智能研究的内容。人工智能、基因工程和纳米技术被称为21世纪三大尖端技术。

练习:

(1)计算机如果缺少( ),将无法正常启动。

    A.内存         B.鼠标          C.U盘          D.摄像头

(2)阅读程序写结果。

#include <iostream>
using namespace std;
int main()
{
  int i,n;
  char ans;
  cin>>n;
  ans='0';
  for(i=l; i<n; i++)
    if((1%3=0)+(1%5=0)+(%2=0)==2)
      ans++;
  cout << ans << endl;
  return 0:
}

输入:15
i,n,ans的输出:______________
(3)完善程序。
一天,校长到机器人教室检查,看见一只仿生机器人——猴子,做得十分可爱,便问是谁做的,狐狸老师等人想和校长开个玩笑,于是狐狸老师说:“是尼克做的。”尼克说:“不是我做的。”格莱尔说:“不是我做的。”如果他们中有两个人说了假话,一人说了真话,请你判断是谁做的。

#include <iostream>
using namespace std;
int main()
{
   ______________;
  for(i=1;i<=3;i++)
    if((i==2)+(i!=2)+(____)==1)
      break;
  switch(i)
  {
    case l: cout <"狐狸老师做的 "<endl; break;
    case 2: cout <<"尼克做的 "<<endl; break;
    case 3: cout <<"格莱尔做的 "<<endl; break;
  }
 return 0;
}

四、for语句的应用

可以使用rand()%(9-1+1)+1随机产生一个一位数。我们设定0为加法,1为减法,使用rand()%2随机产生加减运算符。当是减法运算且x小于y时,可以交换x和y的值,也可以用y-x,以确保被减数大于减数。
试编一个“口算大师”程序,随机出10道一位数加减法的算术题,每完成一题后判断对错,每题10分,满分100分,全部完成后输出成绩。
流程图如:

#include <iostream>  
#include <ctime>  
#include <cstdlib>  
using namespace std;  
int main()  
{  
  srand(time(0));
  int x,y,symbol,ans;
  int n,temp,sum=0;   
  for(int i=0; i<10; i++)  
  {  
    x=rand()%9+1;  
    y=rand()%9+1;  
    symbol=rand()%2;  
    if(x<y&&symbol==1) 
    {     
      temp=x;  
      x=y;  
      y=temp;  
    }  
    switch(symbol)  
    {  
      case 0:  
        ans=x+y;  
        cout<<x<<'+'<<y<<'=';  
        break;  
      case 1:  
        ans=x-y;  
        cout<<x<< '-'<<y<<'=';  
        break;  
    }  
    cin>>n;  
    if(n==ans) 
    {
      sum+=10; 
      cout<<"    对! "<<endl;   	 
    }
    else  
      cout<<"    错! "<<endl;  
  }  
  cout<<"得分:"<<sum<<endl;  
  return 0;  
}  

练习:

(1)目前个人计算机的( )市场占有率最靠前的厂商包括Intel、AMD等公司。

   A.显示器      B.CPU      C.内存      D.鼠标

2.阅读程序写结果。

#include <iostream>
using namespace std;
int main()
{
  int i, x, y, n, ans=0;
  for(i=50;i<=60;i++)
 {
    x=i%10;
    y=i/10;
    n=x*l0+y;
    if(i+n<100)ans++;
  }
  cout <<ans <<endl;
  return 0;
}

(3)完善程序
利用随机函数,编一个与计算机玩剪刀、石头、布游戏的程序,同时统计出计算机赢的局数和你赢的局数。

#include <iostream>
#include<ctime>
#include <cstdlib>
using namespace std;
int main()
{
  const int MAX=10;
  srand(time(0));
  int m, n, countm, countn;
  countm=countn=0;
  for(int i=0; i<MAX; i++)
  {
    ______________;
    cout<<"请你出招"<<endl;
    cout<"1.剪刀2.石头3.布"<<endl;
    cin>>n;
    if(n<llln>3)
      cout<<"请输入1~3,此局无效!"<endl;
    else
    {
      switch(m-n)
      {
        case-2:
        case 1: cout <"计算机赢 !"<<endl; countm++; break;
        case_____:cout <"平局!"<endl; break;
        default: cout <"你赢!"<endl; countn++; break;
       }
     }
  cout<<"计算机赢:"<<__________<<endl;
  cout<<"你赢: "<< countn <endl;
 return 0;
}

标签:std,10,13,main,int,namespace,C++,循环,include
From: https://www.cnblogs.com/citStudy/p/18466959

相关文章

  • C#使用Tesseract C++ API过程记录
    TesseractTesseract是一个开源的光学字符识别(OCR)引擎,最初由Hewlett-Packard(惠普)实验室开发,后来由Google收购并继续维护和开源贡献。Tesseract可以识别多种语言的文字,广泛应用于将图片或扫描文档中的文本内容转换成可编辑的文本格式。随着深度学习技术的发展,Tesseract......
  • C#使用Tesseract C++ API过程记录
    TesseractTesseract是一个开源的光学字符识别(OCR)引擎,最初由Hewlett-Packard(惠普)实验室开发,后来由Google收购并继续维护和开源贡献。Tesseract可以识别多种语言的文字,广泛应用于将图片或扫描文档中的文本内容转换成可编辑的文本格式。随着深度学习技术的发展,Tesseract也整合......
  • C#调用C++代码,以OpenCV为例
    前言使用C#调用C++代码是一个很常见的需求,因此本文以知名的C++机器视觉库OpenCV为例,说明在C#中如何通过使用P/Invoke(平台调用)来调用C++代码。只是以OpenCV为例,实际上在C#中使用OpenCV可以使用OpenCVSharp这个项目,这是一个很优秀的项目,GitHub地址:https://github.com/shimat/opencv......
  • Hadoop YARN:调度性能优化实践13
      背景YARN作为Hadoop的资源管理系统,负责Hadoop集群上计算资源的管理和作业调度。美团的YARN以社区2.7.1版本为基础构建分支。目前在YARN上支撑离线业务、实时业务以及机器学习业务。离线业务主要运行的是HiveonMapReduce,SparkSQL为主的数据仓库作业。实时业务主要运......
  • C++项目中文乱码的排查和解决
    C++项目相关的字符编码有:代码字符编码:即源代码文件使用的字符编码,一般通过IDE可查看;编译器使用的字符编码:windows上MSVC默认使用的是当前系统设置的编码,中文系统默认是GBK;C++运行时字符编码:指程序运行过程中内存中变量的字符编码,可通过配置编译器修改默认编码,也可以通过字符......
  • 2024-2025-1 20241318 《计算机基础与程序设计》第十四周学习总结
    这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP(这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK14这个作业的目标<学习《C语言程序设计》第13-14章并完成云班课测试>作业正文https://i.cnblogs.com/posts/......
  • 【华为OD-E卷 - 猜字谜100分(python、java、c++、js、c)】
    【华为OD-E卷-猜字谜100分(python、java、c++、js、c)】题目小王设计了一个简单的猜字谜游戏,游戏的谜面是一个错误的单词,比如nesw,玩家需要猜出谜底库中正确的单词。猜中的要求如下:对于某个谜面和谜底单词,满足下面任一条件都表示猜中:变换顺序以后一样的,比如通过变换w和e......
  • 【Spring】三级缓存解决循环依赖问题
    参考地址:Spring循环依赖:https://zhuanlan.zhihu.com/p/700890658Spring三级缓存解决循环依赖的问题:https://blog.csdn.net/Trong_/article/details/134063622  ==================================================================1.什么是循环依赖?1>说白是一个或多个对......
  • 有序之美:C++ Set的哲学与诗意
    文章目录前言一.C++set的概念1.1set的定义1.2set的特点二.set的构造方法2.1常见构造函数2.1.1示例:不同构造方法2.2相关文档三.set的常用操作3.1插入操作详解3.1.1使用insert()插入元素3.1.2使用emplace()插入元素3.1.3插入区间元素3.2查找操作详......
  • 前端必备基础系列(四)事件循环
    EventLoop浏览器的事件循环是一个在javascript引擎和渲染引擎之间协调工作的机制。因为javascript是单线程的,所以所有需要被执行的操作都需要通过一定的机制来协调它们有序的进行。它的主要任务是监视调用栈(CallStack)和任务队列(TaskQueue)当调用栈为空时,事件循环会从任务队列......