12C++循环结构-for循环(2)

一、循环变量为字符型

试编一程序,按字典顺序输出26个字母。

流程图:

程序代码如下:

c++ 复制代码
#include <iostream>    //包含输入输出流头文件iostream
using namespace std;    //指明程序 使用命名空间std(标准)
int main()
{
    char i;
    for (i='a';i<='z';i++)//循环变量可以是整数,也可以是字符。
    {
        cout<<i<<' ';
    }
    return 0;
}

思考:先顺序输出26个小写英文字母,再逆序输出26个大写英文字母。

循环可以是递增型循环,也可以是递减型循环。

c++ 复制代码
#include <iostream>
using namespace std;
int main()
{
  char i;
  for(i='a'; i<='z';i++)
    cout<<i<<' '; //''中有一个空格
  cout<<endl;
  for(i='Z';i>='A';i--)
    cout<<i<<'';  //''中有一个空格
  return 0;
}

运行结果:

a bcde fgh ijk Im n o pqrs tuv w xy z

ZYXWVUTSRQPONMLKJIHGFEDCBA

练习:

(1)字符型变量n,其初值为'a',则表达式n+3的值是()。

   A.65      B.68      C.'a'       D.100

(2)阅读程序写结果。

c++ 复制代码
#include <iostream>    //包含输入输出流头文件iostream
using namespace std;    //指明程序 使用命名空间std(标准)
int main()
{
    int x,y;
    char i,ans;
    for (i='a';i<'f';i++)
    {
        x=i-'a'+1;
        if (x%2==1) y=i+1;
        else y=i-1;
        ans=y;
        cout<<ans;
    }
    return 0;
}

x,y,i,ans的输出:_____________________

(3)完善第11,15行程序

按字典顺序输出大小字典对照表,先输出一个大写字典,再输出一个小写字母,即AaBbCcDd.......Zz。

c++ 复制代码
 4 #include <iostream>    //包含输入输出流头文件iostream 
 5 using namespace std;    //指明程序 使用命名空间std(标准) 
 6 int main()
 7 {
 8     int n;
 9     char i,j;
10     n='a'-'A';
11     for (i='A';    ;i++)
12     {
13         cout<<i;
14         j=i+n;
15                     ;
16     }
17     return 0;
18 }

二、打擂台-for语句的另一种形式

问题:试编一程序,输入10个数,输出其中最大的数。

以前学过,输入三个数求最大值时,先假设第一个数为最大值,把它赋值给max;然后,第二个数和max比较,若比max大,就把第二个数赋值给max;接着,第三个数和max比较,若比max大,就把第三个数赋值给max,有点儿类似打擂台。求10个数中的最大值可以采用同样的方法,如图示。

流程图:

c++ 复制代码
#include <iostream>
using namespace std;
int main()
{
  float max,x;
  int i;
  cout<<"请输入第1个数:";             
  cin>>x;
  max=x;
  i=2;
  for(;i<=10;i++)
  {
    cout<<"请输入第"<<i<<"个数:";   
    cin>>x;
    if(x>max) max=x;
  }
  cout<<"最大的数:"<<max; 
  return 0;
}

注:C++语言是很灵活的,可以把循环变量赋初值语句写在for循环语句前,也可以把循环变量增值语句写在循环体中。当循环体有多个语句时,就需要用"{}"把它们复合起来,成为一个整体。

练习:

(1)从ENIAC到当前最先进的计算机,冯·诺依曼体系始终占有重要的地位。冯·诺依曼体系结构的核心内容是()。

A.采用键盘输入

B.采用半导体器件

C.采用存储程序和程序控制原理

D.采用开关电路

(2)阅读程序写结果。

c++ 复制代码
#include <iostream>
using namespace std;
int main()
{
  long long i, ans=20;
  i=2;
  for(;i<ans;)
  {
    ans-=i;
    i+=3;
  }
  cout<<"i="<<i<<' '<<"ans="<<ans<<endl;  //''中有一个空格
  return 0;
}

i,ans输出:_______________________

3.完善程序。

输入n个数,输出最小的数。

c++ 复制代码
#include <iostream>
using namespace std;
int main()
{
  float min,x;
  int i, n;
  cout<<"n=";
  ____________;
  cout<"请输入第1个数:";
  cin>>x;
  min=x;
  for(i=2;_________;i++)
  {
    cout<"请输入第"<<i<"个数:";
    cin>>x;
    if(___)min=x;
   }
  cout<<"最小的数:"<< min;
  return 0;
}

三、break语句

问题:试编一程序,输入一个自然数,判断是不是素数。

素数,一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。如2,3,5,7,11,13,17等是素数,4,6,8,9,10,12,14,15等不是素数是合数,而1既不是素数也不是合数。

为了判断某数n是否为素数,一个最简单的办法是用2,3,4,5,·,n-1这些数逐个去除n,看能否除尽。只要能被其中的一个数除尽,n就不是素数,只有n不能被2~n-1之间的所有数除尽时才是素数。流程图如图

C++ 复制代码
#include <iostream>
using namespace std; 
int main()
{
  long long i,n; 
  bool flag;
  cout<<"n=";
  cin>>n;
  flag=true;
  for(i=2;i<n;i++)
    if(n%i==0) 
    {
      flag=false;
      break;
    } 
  if(flag) cout<<"是素数";
  else cout<<"不是素数";
  return 0;
}

注:break 语句是提前结束整个循环过程,不再判断执行循环的条件是否成立。continue语句只是结束本次循环,而不是终止整个循环的执行。

练习:

(1)在计算机中,Pentium(奔腾)、酷睿、赛扬等是指()。

A.显示器的型号

B.硬盘的型号

C.CPU的型号

D.生产厂家名称

(2)阅读程序写结果。

c++ 复制代码
#include <iostream>
using namespace std;
int main()
{
  int i, p, ans=0;
  p=1;
  for(i=1;i<400;i+=3)
  {
    p*=i;
    ans+=p:
    if(ans>=25)break;
  }
cout <<"ans="<< ans <<endl;
returm 0;
}

i,p,ans输出:________________

(3)完善程序。

输入一个数,判断其是不是素数。

c++ 复制代码
#include <iostream>
using namespace std;
int main()
{
  int count=0;
  long long i, n;
  _________________;
  for(i=2; i<n;i++)
    if(n%i==0)count++;
  if(___)cout<"素数";
  else cout<<"不是素数";
  return 0;
}

四、数位分离

问题:水仙花素雅端庄,清秀俊逸,香气馥郁。数学上有一种数称为水仙数。所谓水仙花数是一个三位数,它等于自己各个数位上数字的立方和。如153,它百位上的数字是1,十位上的数字是5,个位上的数字是3,13+53+33是153,等于它自己,因此153是水仙花数。

试编一程序,求出所有的水仙花数。

求水仙花数,要先学会分离百位、十位、个位上的数。153/100可以得到百位上的数字,(153/10)%10或(153%100)/10可以得到十位上的数字,153%10可以得到个位上的数字。

水仙花数是一个三位数,可以通过for循环把100~999所有的三位数都枚举出来,然后对每一个数进行计算和判断,若是水仙花数则输出。流程图如下:

c++ 复制代码
#include <iostream>
using namespace std;
int main()
{
  int ge,shi,bai,i;
  cout<<"水仙花数"<<endl; 
  for(i=100;i<1000;i++)
  {
    bai=i/100;
  	shi=(i/10)%10;
  	ge=i%10;
  	if (bai*bai*bai+shi*shi*shi+ge*ge*ge==i) 
      cout<<i<<"     "; 
  }
  return 0; 
}

可以增加一个计数器变量count,用于统计水仙数的个数。

练习:

(1)计算机有计算功能,那么这个"计算"是在( )中完成的。

   A.内存       B.中央处理器       C.硬盘       D.显卡

(2)阅读程序写结果。

c++ 复制代码
#include <iostream>
using namespace std;
int main()
{
  int a0=0, al=1, a2, i, n;
  cin>>n;
  for(i=2;i<n;i++)
  {
    a2=a0+al;
    cout << a2 << endl;
    a0=al;
    al=a2;
  }
return 0;
}

输入:5

a0,a1,a2,i,n输出为__________________________

(3)完善程序。

"消消乐"是一款老少皆宜的益智类游戏,游戏规则是找出三张及以上相同的连在一起的牌就可以消除。请编程找出三位数中可以玩"消消乐"的数,即个位、十位与百位上的数字相同。如222可以消除,123无法消除。

c++ 复制代码
#include <iostream>
using namespace std;
int main()
{
 int ge, shi, bai, i;
 for(i=100;i<1000;i++)
 {
   _________________;
   shi=(i/10)%10;
   ge=i%10;
   if(______)
    cout <<i<<endl;
  }
  return 0;
}