C流程控制

2015/09/09 C

C流程控制

流程控制

程序设计语言经过数十年的发展,结构化程序设计的趋势慢慢成为程序开发的主流,主要精神与模式是将整个问题从上而下、从大到小逐步分解成较小的单元,这些单元被称为模块(module)。

C语言是一种相当符合模块化设计精神的语言。也就是说,C程序是由各种函数组成的。所谓函数(function),就是具有特定功能的语句集合,可以视其为一种模块,不但方便程序的编写、减轻程序员的负担,还可以让程序日后易于修改和维护。

除了模块化设计,“结构化程序设计”(Structured Programming)还包括3种流程控制结构:“顺序结构”(Sequential structure)、“选择结构”(Selection structure)以及“循环结构”(Repetition structure)。也就是说,一个结构化设计的程序无论程序结构如何复杂,都可以使用这3种基本流程控制结构加以表达与陈述。

顺序结构

顺序结构就是程序语句自上而下、一个程序语句接着一个程序语句执行的结构。

程序区块

语句(Statement)是C语言最基本的执行单位,每一行语句都必须以分号(;)结束。在C程序中,我们可以使用“{}”(大括号)将多条语句包围起来,这些被包围的语句就称为程序区块(statement block,或语句区块)。 形式如下:

{
  程序语句;
  程序语句;
  程序语句;
}

在C语言中,程序区块可以被看作最基本的语句区块,使用上就像一般的程序语句,它也是顺序结构中最基本的单元。将上面的形式改成如下形式可能更加易于理解:

{ 程序语句; 程序语句; 程序语句;}

C语言的选择结构与循环结构经常使用这样的形式,只要记住一个概念,使用程序区块分析与编写程序时就比较容易阅读与了解。有时在编写程序的过程中可能会出现以下复合形式:

{
 程序语句;
   {
    程序语句;
    程序语句;
   }
}

这样的形式被称为嵌套(nesting)区块,即在程序区块中又包含一个程序区块。编写C程序时,使用选择结构与循环结构处理较复杂的运算,嵌套形式的程序区块经常会被广泛使用。

选择结构

选择结构(Selection structure)是一种条件控制语句,包含一个条件表达式,如果条件为真,就执行某些语句;一旦条件为假,则执行另一些语句。选择结构的条件语句是让程序能够选择应该执行的程序代码,就好比大家开车到十字路口,可以根据不同的情况来选择需要的路径。

选择结构必须配合逻辑判断式来建立条件语句,C语言中提供了4种条件控制语句,分别是if条件语句、if-else条件语句、条件运算符以及switch语句。

if条件语句

在说明关系运算符时曾经简单介绍过if条件语句的用法,C语言程序设计的if条件语句是个相当普遍且实用的语句。当if的判断条件成立时(返回1),程序就会执行括号内的语句;当判断条件不成立(返回0)时,就不执行括号内的语句,并结束if语句。

想要编写一段用来决定要穿什么样式衣服的程序时,要使用的分类条件是什么?可以使用C语言中的if语句条件表达式来达到目的。 if语句的语法格式如下:

if (条件运算符)
{
 程序语句;   
}  

如果{}区块中只包含一条程序语句,就可以省略“{}”大括号,语法如下:

if (条件运算符)
   程序语句;

在if语句下执行多行程序的语句称为复合语句,此时必须按照前面介绍的语法用“{}”(大括号)将语句区块包括起来。如果是单条程序语句,直接写在if语句下面即可。以下面的两个例子来说明。

  /*单行语句*/
  if(test_score>=60)
      printf("You Pass!\n");

只需要执行”You Pass!\n”这一行显示语句,所以不需要以大括号将程序代码包括起来。

  /* 多行语句 */
  if(test_score>=60){
      printf("You Pass!\n");
      printf("Your score is%d\n",test_score);/* 同时输出成绩 */
  }

除了要执行”You Pass!\n”这行显示语句外,还加入了一条显示分数的语句,所以必须用大括号将程序代码包括起来。

if-else条件语句

之前介绍的例子都是条件成立时才执行if语句下的程序,如果条件不成立也想让程序做点事情要怎么办呢?譬如今天不止要告知成绩及格的学生及格了,也要告知成绩不及格的学生不及格。在这样的情况下,我们只要以分数大于等于或小于60分作为条件依据就可以在“如果”分数符合此条件时显示及格,“否则”显示不及格,这时if-else条件语句就派上用场了。

if-else指令提供了两种不同的选择,当if的判断条件成立时,执行if程序语句区块内的程序;否则执行else程序区块内的程序语句,然后结束if语句。

当然,如果if-else{}区块内只包含一条程序语句,就可以省略大括号,语法如下:

if (条件表达式)
程序语句;
else
程序语句;

和if语句一样,在else语句下所要执行的程序语句可以是单行或用大括号包含的多行程序语句。用一个简单的例子来说明if-else语句的使用:

01      printf("请输入一个数字(1~100):");
02      scanf("%d", &num);     /*输入数值*/ 
03      if(num%2)            /*如果整数除以2的余数等于0*/
04       printf("您输入的数为奇数。\n");     /*就显示奇数"*/
05      else            /*否则*/
06       printf("您输入的数为偶数。\n");    /*输出偶数"*/

在第3行的if(num%2)判断式中,由于整数除以2余数只有1或0两种,因此当余数等于1时,条件表达式返回true(条件成立);当余数为0时,条件表达式返回false,执行第5行else之后的语句。

下面的范例程序使用if else语句让用户输入一个整数,并判断是否为2或3的倍数,但不能是6的倍数。

01  #include <stdio.h>
02  #include <stdlib.h>
03  
04  int main()
05  {
06    int value;
07      
08      printf("请任意输入一个整数:");
09      scanf("%d", &value);/* 输入一个整数 */ 
10  
11    if(value%2==0 || value%3==0)/* 判断是否为2或3的倍数 */ 
12     if(value%6!=0)
13     printf("符合所要的条件\n");
14     else
15     printf("不符合所要的条件\n");/* 为6的倍数 */  
16    else
17     printf("不符合所要的条件\n");  
18  
19     system("pause");
20     return 0;
21  }
  • 第9行:输出“请任意输入一个整数:”。
  • 第11行:使用if语句判断是否为2或3的倍数,与第16行的else语句为一组。
  • 第12~14行:是一组if else语句,用来判断是否为6的倍数。

在判断条件复杂的情况下,有时会出现if条件语句所包含的复合语句中又有另一层if条件语句,这样多层的选择结构称为嵌套if条件语句。在C语言中并非每个if都有对应的else,但是else一定会对应最近的if。除了if语句可以使用嵌套结构外,else语句也可以使用嵌套结构。为了程序阅读的便利性,我们并不鼓励大量使用else嵌套语句。请看以下例子:

01  if(price <200){
02      printf("buy this \n");
03  }else
04  {
05      if(price<400){
06    printf("ask mother\n");
07      }
08      else{
09    printf( "do not buy \n");
10      }
11  }

使用else语句要注意缩排,如果所执行的程序代码都是单行语句,就要加上大括号,不然很容易发生以下错误:

01  if(exam_done)
02  if(exam_score<60)
03   printf("再试一次!\n");
04  else
05   printf("成绩及格\n");  

从上面的例子可以看出这里的else属于哪条if语句吗?相信有点难,因此修改写成以下方式:

01  if(exam_done){
02      if(exam_score<60){
03        printf("再试一次!\n");
04      }
05      else{
06         printf("成绩及格\n");  
07      }
08  }  

这样就容易看出else属于哪一条if语句了,这就是善用缩排及大括号的好处。

接着来看if else if条件语句,这是一种多选一的条件语句,让用户在if语句和else if中选择符合条件表达式的程序语句区块,如果以上条件表达式都不符合,就会执行最后的else语句,也可以看成是一种嵌套if else结构。

事实上,C语言中并没有else if语法,以上语法结构只是将if语句接在else之后。通常为了增加程序的可读性与正确性,最好将对应的if-else以大括号包含在一起,并使用缩排效果。

下面的范例程序可以让消费者输入购买金额,并根据不同的消费等级提供不同的折扣,使用if else if语句输出最后要花费的金额

01  #include <stdio.h>
02  #include <stdlib.h>
03  
04  int main()
05  {
06      float cost=0;        /*声明整数变量*/
07       printf("请输入消费总金额:");
08       scanf("%f", &cost);      
09      if(cost>=100000)      
10        cost=cost*0.85;/* 10万元以上打85折 */  
11      else if(cost>=50000)  
12        cost=cost*0.9; /* 5万元到10万元之间打9折 */      
13      else 
14        cost=cost*0.95;/* 5万元以下打95折 */ 
15        printf("实际消费总额:%.1f元\n",cost);  
16      
17      system("pause");
18      return 0;
19  }
  • 第8行:输入消费总金额,因为结果会有小数点位数,所以变量采用单精度浮点数类型。
  • 第9行:if条件表达式为如果cost在10万元以上打85折。
  • 第11行:if条件表达式为如果cost在5万元到10万元之间打9折。
  • 第13行:else语句为cost小于5万元打95折。

条件运算符

C语言还提供了一种条件运算符,和if else条件语句功能一样,可以用来代替简单的if else条件语句,让程序代码看起来更为简洁,不过这里的程序语句只允许使用单行表达式。语法格式如下:

条件表达式?程序语句一:程序语句二;

条件表达式的结果如果成立,就执行“?”后面的程序语句一;如果不成立,就执行“:”后面的程序语句二。以if else说明相当于下面的形式:

if (条件表达式)
   程序语句一;
 else
   程序语句二;

下面使用if else语句判断所输入的数字为偶数或奇数:

01      if(num%2)     /*如果整数除以2的余数等于0*/
02       printf("您输入的数为奇数。\n");     /*为奇数*/
03      else     
04       printf("您输入的数为偶数。\n");    /*为偶数*/

如果改为条件运算符,格式如下:

(number%2==0)?printf("输入的数字为偶数\n"):printf("输入的数字为奇数\n");

下面的范例程序使用条件运算符判断所输入的两科成绩,并判断这两科成绩是否都大于等于60分,是代表及格,将会输出Y字符,否则输出N字符。

01  /*条件运算符练习*/
02  #include <stdio.h>
03  #include <stdlib.h>
04  
05  int main()
06  {
07   int math,physical;      /*声明表示两科分数的整数变量*/
08   char chr_pass;    /*声明表示合格的字符变量*/
09    
10    printf("请输入数学与物理成绩:"); 
11    scanf("%d%d",&math,&physical);
12    printf("数学 = %d 分与 物理 = %d 分\n",math,physical);
13    
14    chr_pass = ( math >= 60 && physical >= 60 )?'Y':'N';
15    /* 输出chr_pass变量的内容,显示该考生是否合格 */
16    printf( "该名考生是否合格? %c\n", chr_pass );  
17     
18     system("pause");
19     return 0;
20    }
  • 第7行:声明表示两科分数的整数变量。
  • 第8行:声明表示合格的字符变量。
  • 第12行:输入两科成绩。
  • 第14行:使用条件运算符判断该考生是否合格。

switch选择语句

if…else if条件语句虽然可以实现多选一的结构,但是当条件表达式增多时,使用时不如switch条件语句简洁易懂,特别是过多的else-if语句常会给日后程序维护带来困扰。 switch条件语句的语法格式如下:

switch (表达式)
{
case 判断值1:
       程序语句1;
         :
       break;
case判断值2:
       程序语句2;
         :
       break;
:
case判断值n:
      程序语句n;
        :
      break;
:
default:
      default 程序语句;
        :
}

首先来看switch的括号部分,其中所放的表达式是要与大括号里的case标签内所定义的判断值进行比较的变量。当获得变量中的数值后,程序开始与先前定义在case内的数字或字符进行对比,如果符合就执行该case下的程序代码,直到遇到break后离开switch程序区块;如果没有符合的数值或字符,程序就会执行default下的程序语句。

例如,以下代码段使用switch语句完成简单的计算器功能,可由用户输入两个数字,再键入+、-、*、/任意一个键就可以进行运算。

01      switch(op_key)
02      {
03        case '+':      /*如果op_key等于'+'*/
04         printf("\n%.2f %c %.2f = %.2f\n", a, op_key, b, a+b);
05         break;      /*跳出switch*/
06        case '-':  /*如果op_key等于'-'*/
07         printf("\n%.2f %c %.2f = %.2f\n", a, op_key, b, a-b);
08         break;   /*跳出switch*/
09        case '*':  /*如果op_key等于'*'*/
10         printf("\n%.2f %c %.2f = %.2f\n", a, op_key, b, a*b);
11         break;     /*跳出switch*/
12       case '/':      /*如果op_key等于'/'*/
13         printf("\n%.2f %c %.2f = %.2f\n", a, op_key, b, a-b);
14         break;       /*跳出switch*/
15       default:       /*如果op_key不等于 + - * / 任何一个*/
16         printf("表达式有误\n");     
17      }

default标签的使用是可有可无的,如果我们要去处理一些条件表达式的结果值并且不在预先定义的判断值内,就可以在default标签下定义要执行的程序语句。switch语句的执行过程重点整理如下:

  • 先求出表达式的值,再将此值与case的判断值进行对比,而switch的判断值必须是整数或字符。
  • 如果找到相同的值就执行case内的程序语句,执行完任意case程序区块后,并不会离开switch程序区块,而是往下继续执行其他case语句与default语句,因此在case语句的最后必须加上break指令来结束switch语句。
  • 如果找不到符合的判断值,就会执行default语句;如果没有default语句,就结束switch语句。

下面让我们用一个简单的例子来说明switch语句的使用,在此以不同的选择值来执行相同的程序语句,例如90分以上(含100分)都会输出A级。

01  int score = 0;
02  int level = 0;     
03  cout << "输入分数:";     
04  cin >> score;     
05  level = (int) score/10;     
06  switch(level) {      /*level为switch的条件表达式*/   
07      case 10:case 9:       
08    printf("A级\n") ;       
09    break;   
10      case 8:case 7:       
11    printf("B级\n") ;     
12    break;    
13      default:
14    printf("C级\n") ;       
15  }   

在上述例子中,如果level变量中的数值不是任何预先定义的值,就去执行default标签下的程序语句,这个例子中只要经计算后数值在7以下的都会评为C级。此外,我们对同一个case定义了两个不同的判断值,但是执行的是相同的程序语句,这是因为switch语句中可以一次定义多个判断值。

使用switch语句时要注意,在每一个执行程序区段的最后要加上break指令来结束此段程序区块,不然程序会继续按序执行,直到遇到break指令或者整个switch语句结束为止。

下面的范例程序使用switch语句输入所要购买的快餐种类,分别显示对应的价格,并使用break的特性设置多重case条件,大家可从这个范例中充分了解switch语句的使用时机与方法。

01  /#include <stdio.h>
02  #include <stdlib.h>    
03  
04  int main()
05  {
06    char select;
07    puts("    (1) 排骨快餐");
08    puts("    (2) 海鲜快餐");
09    puts("    (3) 鸡腿快餐");
10    puts("    (4) 鱼排快餐");
11    printf("    请输入您要购买的快餐:");
12    select=getche();/*输入字符并存入变量select*/
13      printf("\n===================================\n");
14      
15    switch(select)
16    {
17    case '1':         /*如果select等于1*/
18      puts("排骨快餐一份75元");    
19      break;   /*跳出switch*/
20    case '2':        /*如果select等于2*/
21      puts("海鲜快餐一份85元");      
22      break;   /*跳出switch*/
23    case '3':        /*如果select等于3*/
24      puts("鸡腿快餐一份80元");         
25      break;   /*跳出switch*/
26    case '4':        /*如果select等于3*/
27        puts("鱼排快餐一份60元");         
28      break;  /*跳出switch*/
29    default:        /*如果select不等于1,2,3,4中的任何一个*/
30      printf("选项错误\n");      
31    }
32      printf("===================================\n");
33      
34      system("pause");
35      return 0;
36  }
  • 第7~11行:输出各种快餐的售价与相关文字。
  • 第15行:根据输入的select字符决定执行哪一行的case,例如当输入字符为1时,会输出字符串“排骨快餐一份75元”,break指令代表直接跳出switch条件语句,不会执行下一个case语句。
  • 第29行:输入的字符若不符合所有case条件(1、2、3、4以外的字符),则执行default后的程序区块。

循环结构

C语言的循环结构主要谈到的是循环控制功能,循环(loop)会重复执行一个程序区块的程序语句,直到符合特定的结束条件为止。简单来说,循环结构可以执行相同的程序语句,让程序更符合结构化的设计精神。

例如想要让计算机计算出1+2+3+4+…+100的值,并不需要大费周章地在程序代码中从1累加到100,使用循环结构就可以轻松完成任务。基本上,循环结构按照结束条件位置的不同可以分为两种,分别是前测试型循环与后测试型循环。

C语言提供了for、while以及do-while三种循环语句来实现循环结构。for、while属于前测试型循环,do-while属于后测试型循环,在尚未开始正式介绍之前,先简单说明如下。

  • for循环语句:适用于计数式的条件控制,即已事先知道循环执行的次数。
  • while循环语句:循环次数未知,必须满足特定条件才能进入循环体;如果不满足条件测试,循环就会结束。
  • do-while循环语句:无论如何会至少执行一次循环内的程序语句,再进行条件测试。

for循环

for循环又称为计数循环,是程序设计中较常使用的一种循环形式,可以重复执行固定次数的循环,不过必须事先设置循环控制变量的起始值、执行循环的条件表达式以及控制变量更新的增减值。

for循环的使用方式

for循环语句的使用方式相当简单,语法格式如下:

for(控制变量起始值;条件表达式;控制变量增减值){
  // 程序
}

for循环的执行步骤说明如下:

  • 设置控制变量起始值。
  • 如果条件表达式为真,就执行for循环内的语句。
  • 执行完成后增加或减少控制变量的值,可根据用户的需求进行控制,再重复步骤2。
  • 如果条件表达式为假,就跳离for循环。

使用for循环计算从1加到100的C程序代码如下:

int i=1,sum=0;         /*声明i初值*/
for (; i<=100 ; i++)        /*省略变量起始值的设置,分号不可省略*/
{
    sum+=i;       /*执行累加运算*/
  printf("i=%d\t sum=%d\n", i, sum);
}

现在大家已经了解通过使用一个控制变量来让for循环重复执行特定的次数,结束条件成立时for程序区块就会终止执行。但是,有时在使用for循环时,由于设计程序代码时的疏忽,可能会发生循环无法满足结束条件的情况,因此永无止境地执行,这种不会结束的循环称为“无限循环”或“死循环”。

无限循环在程序功能上有时也会发挥某些作用,例如某些程序中的暂停动作(游戏设计)。如果大家想要编写无限循环,只需要将条件表达式“拿掉”,省略表达式后“;”必须保留,否则会造成编译上的错误。其格式如下:

for (;;)
  { 
  :
程序语句;

下面的范例程序使用for循环设计一个C程序,可输入小于100的整数n,并计算以下式子的总和:

1*1+2*2+3*3+4*4+…+(n-1)*(n-1)+n*n
01  #include<stdio.h>
02  #include<stdlib.h>
03  
04  int main()
05  {
06      int n,i;
07      long sum=0;/* 声明为长整数 */ 
08      
09      printf("请输入任意整数:"); 
10      scanf("%d",&n);
11      
12      if(n>=1 || n<=100)/* 控制输入范围 */ 
13      {
14      for(i=0;i<n;i++)
15       sum+=i*i; /* 1*1+2*2+3*3+…+n*n */ 
16       printf("1*1+2*2+3*3+...+%d*%d=%d\n",n,n,sum);
17      }
18      else 
19       printf("输入数字超出范围了!\n"); 
20        
21      system("pause");
22      return 0; 
23  }
  • 第7行:声明sum为长整数。
  • 第12行:如果所输入的值在1~100之间,就执行13~17行语句。
  • 第14行:使用for循环控制,设置变量i的起始值为0。循环条件i小于n,i的递增值为1,只要i大于n,就会离开for循环。
  • 第16行:输出计算后的结果。

嵌套循环

接下来为大家介绍for循环的嵌套循环(Nested loop),也就是多层次的for循环结构。在嵌套for循环结构中,执行流程必须等内层循环执行完毕才会继续逐层执行外层循环。 例如,两层式的嵌套for循环结构格式如下:

for(控制变量起始值1;条件表达式;控制变量增减值){
  // 程序
  for(控制变量起始值2;条件表达式;控制变量增减值){
  // 程序
  }
}

下面的范例程序使用两层嵌套for循环设计九九乘法表,其中i为外层循环的控制变量,j为内层循环的控制变量。两个for循环的执行次数都是9次,所以这个程序一共要执行81个循环,即输出81道乘法式子。

01  #include<stdio.h>/* 双层嵌套循环的范例 */ 
02  #include<stdlib.h>
03  
04  int main()
05   {
06     int i,j,n,m;  /*九九表的双重循环*/
07     
08     for(i=1; i<=9; i++)   /* 外层循环 */ 
09     {    
10       for(j=1; j<=9; j++)  /* 内层循环 */ 
11        {   
12         printf("%d*%d=",i,j);
13         printf("%d\t ",i*j);    
14        }
15         printf("\n");
16       }
17       
18         system("pause");  
19         return 0;
20     }
  • 第8行:外层for循环控制i输出,只要i<=9,就继续执行第9~16行。
  • 第10行:内层for循环控制j输出,只要j<=9,就继续执行第12、13行。
  • 第12、13行:输出i*j的值。

while循环

如果要执行的循环次数确定,使用for循环语句就是最佳选择;对于一些不确定次数的循环,while循环就可以派上用场了。while结构与for结构类似,都属于前测试型循环,两者最大的不同之处在于for循环需要一个特定的次数;而while循环不需要,只要判断条件表达式持续为true就能一直执行。

while循环内的程序语句可以是一条语句或多个语句形成的程序区块。如果有多条语句在循环中执行,就可以使用大括号包括住。

使用while循环必须自行加入起始值并设置一个变量作为计数器,每执行一次循环,程序区块中计数器的值就会改变,否则条件表达式永远成立将造成无限循环。while指令的语法如下:

while(循环条件表达式){
  
}

下面的范例程序使用while循环计算:当某数的数值是1000时,依次减去1,2,3…直到减到哪一个数时相减的结果为负数。因为不清楚要执行多少次,所以这种情况很适合用while循环实现。

01  #include<stdio.h>
02  #include<stdlib.h>
03  
04  int main()
05  {
06    int x=1, sum=1000;
07    while(sum>=0) /* while循环 */
08      {
09      sum-=x; /* x=1,2,3…*/
10      x++;
11    }
12    printf("x=%d\n",x-1);/* 之前预先加1了 */ 
13    
14    system("pause");
15    return 0;  
16  }
  • 第7行:定义while循环成立的条件为,只要sum>=0,第9行中的sum就依次减去x的值。
  • 第10行:x每进循环一次就累加一次,循环条件不成立(sum<0)时就显示最后x的值。
  • 第12行:因为之前第10行中x预先加1,所以要减1。

do while循环

如果想让循环中的程序代码无论如何至少被执行一次,那么while循环语句除了在条件成立时,否则是无法让循环内的程序区块被执行的。但是使用do-while语句就可以办到。do-while循环内的程序区块无论如何都至少会被执行一次,是一种后测试型循环。

do while循环语句和while循环语句十分类似,只要条件表达式为真就会执行循环内的程序区块。do-while循环最重要的特征是条件判断表达式在循环体的后面,一定会先至少执行一次循环内的程序区块,而前面所介绍的for循环和while循环都必须先执行条件判断表达式,当条件为真时才继续进行。

do while循环语句的语法格式如下:

do
{
   :
    程序语句;
}
while (条件表达式);  /* 此处记得加上; 号 */

下面的范例程序将设置整数变量check_key的值为0,当条件不成立时,大家可以观察使用while循环与do…while循环执行时的差异。

01  #include <stdio.h>
02  #include <stdlib.h>
03  
04  int main()
05  {
06    int check_key=0;   // 声明整数变量 check_key
07      
08      while (check_key == 1) 
09       printf("程序进入while循环\n");   /* while 循环 */
10      
11      do        
12       printf("程序进入do...while循环\n");   
13       while (check_key == 1);   /* do…while 循环 */
14    
15    system("pause");
16    return 0;  
17  }
  • 第6行:声明整数变量check_key,同时将初始值设置为0。
  • 第8行:while循环与第13行do…while循环的条件表达式都是check_key==1。
  • 第9行:不会执行while循环语句,因为条件判断不成立。
  • 第13行:在条件判断都不成立的情况下,do…while循环中至少执行一次第12行的语句才会跳离循环体。

下面的范例程序使用do while循环控制程序是否继续执行,并判断输入值除以2的结果,如果有余数就是奇数,反之则为偶数。

01  #include <stdio.h>
02  #include <stdlib.h>
03  
04  int main()
05  {
06     int input = 0;     
07     char replay=0;     
08     
09     do{  
10       puts("输入整数值:");
11       scanf("%d",&input);  /* 输入整数 */      
12       printf("输入的数是否为奇数?");
13      printf("%c\n",((input % 2) ? 'Y': 'N'));
14       /* 使用条件运算符来判断 */ 
15      printf("(1:继续 0:结束)?");
16       
17         replay=getche();/* 输入字符 */ 
18      printf("\n");
19      
20      } while(replay!='0');   /* do while循环 */     
21    
22    system("pause");
23    return 0;  
24  }
  • 第10行:无论如何都会执行一次。
  • 第13行:使用条件运算符判断input的值是否为奇数,如果是就输出Y字符,不是则输出N字符。
  • 第17行:使用getche()函数输入字符,可以不用另外按Enter键。
  • 第20行:使用replay字符值判断是否进行循环。

Search

    微信好友

    博士的沙漏

    Table of Contents