3 C语言 流程控制 循环 跳转
3 C语言 流程控制 循环 跳转
选择: if switch
循环 while,do while ,for ,嵌套
跳转 break Goto continue
学习目标
u掌握选择结构语句
u掌握循环结构语句
前面的章节一直在介绍C语言的基本语法知识,然而仅仅依靠这些语法知识还不能编写出完整的程序。在程序中,通常需要加入业务逻辑,并对程序的流程进行控制。本章将重点讲解C语言中最基本的三种流程控制语句。
3.1 程序的运行流程图
流程图是描述问题处理步骤的一种常用图形工具,它是由一些图框和流程线组成的。流程图描述问题的处理步骤,形象直观,便于阅读。画流程图时必须按照功能选用相应的流程图符号,常用的流程图符号如图3-1所示。
图3-1 流程图符号
图3-1所示的流程图符号中,列举了四种图框和两种流程线,具体说明如下:
l 起止框用于表示流程的开始或结束;
l 输入/输出框用平行四边形表示,在平行四边形内可以写明输入或输出的内容;
l 判断框用菱形表示,它的作用是对条件进行判断,根据条件是否成立来决定如何执行后续的操作;
l 处理框用矩形表示,它代表程序中的处理功能,如算术运算和赋值等;
l 流程线用实心单向箭头或直线表示,可以连接不同位置的图框,流程线的标准流向是从左到右和从上到下,可用直线表示,非标准流向的流程线应使用箭头指示方向;
l 连接点用圆形表示,用于流程图的延续。
通过上面的讲解,初学者对流程图符号有了简单的认识,接下来先来看一个简单的流程图,如图3-2所示。
图3-2 判断奇偶数
图3-2表示的是一个判断奇偶数的流程图,下面针对该流程图中的执行顺序进行说明,具体如下:
第1步:程序开始;
第2步:进入处理框,将变量number赋值为1;
第3步:进入判断框,判断number是否为偶数,如果是偶数,则进入下面的输出框,输出number是偶数;否则进入左面的输出框,输出number是奇数;
第4步:输出完成后,进入结束状态,程序终止。
3.2 顺序结构语句
前面章节讲解的程序都有一个共同的特点,即程序中的所有语句都是从上到下逐条执行,这样的程序结构叫做顺序结构。顺序结构是程序开发中最常见的一种结构,它可以包含多种语句,如变量的定义语句、输入输出语句、赋值语句等。下面来看一个顺序结构的简单例子,通过程序实现按顺序输出“我爱C语言”,如例3-1所示。
例3-1
1 #include <stdio.h>
2 int main()
3 {
4 printf("我\n");
5 printf("爱\n");
6 printf("C\n");
7 printf("语\n");
8 printf("言\n");
9 return 0;
10 }
运行结果如图3-3所示。
图3-3 运行结果
在例3-1的程序中,使用了5个printf()语句,从上往下依次输出“我、爱、C、语、言”。从运行结果可以看出,程序是按照语句的先后顺序执行的。因此,可以说明该程序是一个顺序结构的程序。
3.3 选择结构语句
在实际生活中经常需要作出一些判断,比如开车来到一个十字路口,这时需要对红绿灯进行判断,如果前面是红灯,就停车等候,如果是绿灯,就通行。同样,在C语言中也经常需要对一些条件做出判断,从而决定执行哪一段代码,这时就需要使用选择语句。选择结构语句分为if条件语句和switch条件语句,接下来本小节将对它们进行详细地讲解。
1.1 关系运算符
在C语言中0代表假,非0代表真,
在计算机程序判断是根据一个条件返回是真还是假来做不同的操作。
1.1.1 <
1.1.2 <=
1.1.3 >
1.1.4 >=
1.1.5 ==
一个=号在C语言里面是赋值的,不是比较的,但是很多初学者爱犯一个严重的错误,就是用=号来比较两个数是否相等
1.1.6 !=
!=
1.2 关系运算符优先级
前四种相同,后两种相同,前四种高于后两种优先级
1.3 逻辑运算符
1.3.1 &&
逻辑与
1.3.2 ||
逻辑或
1.3.3 !
逻辑非
3.3.1 if条件语句
if条件语句分为三种语法格式,每一种格式都有其自身的特点,下面分别进行讲解。
1、if语句
if语句是指如果满足某种条件,就进行相应的处理。例如,小明妈妈跟小明说“如果你考试得了100分,星期天就带你去游乐场玩”。这句话可以通过下面的一段伪代码来描述。
如果小明考试得了100分
妈妈星期天带小明去游乐场
在上面的伪代码中,“如果”相当于C语言中的关键字if,“小明考试得了100分”是判断条件,需要用()括起来,“妈妈星期天带小明去游乐场”是执行语句,需要放在{}中。修改后的伪代码如下:
if (小明考试得了100分)
{
妈妈星期天带小明去游乐场
}
上面的例子就描述了if语句的用法,在C语言中,if语句的具体语法格式如下:
if (条件语句)
{
代码块
}
上述语法格式中,判断条件是一个布尔值,当判断条件为true时,{}中的执行语句才会被执行。if语句的执行流程如图3-4所示。
图3-4 if语句流程图
接下来通过一个案例来学习if语句的具体用法,如例3-2所示。
例3-2
1 #include<stdio.h>
2 int main()
3 {
4 //声明变量x
5 int x = 5;
6 //如果x的值小于10则执行if大括号中的代码
7 if (x < 10)
8 {
9 x++;
10 }
11 printf("x=%d\n" , x);
12 return 0;
13 }
运行结果如图3-5所示。
图3-5 运行结果
例3-2中,定义了一个变量x,其初始值为5。在if语句的判断条件中判断x的值是否小于10,很明显条件成立,因此{}中的语句会被执行,变量x的值将进行自增。从图3-5的运行结果可以看出,x的值已由原来的5变成了6。
2、if…else语句
if…else语句是指如果满足某种条件,就进行相应的处理,否则就进行另一种处理。例如,要判断一个正整数的奇偶,如果该数字能被2整除则是一个偶数,否则该数字就是一个奇数。if…else语句的具体语法格式如下:
if (判断条件)
{
执行语句1
……
}
else
{
执行语句2
……
}
上述语法格式中,判断条件是一个布尔值。当判断条件为true时,if后面{}中的执行语句1会被执行。当判断条件为false时,else后面{}中的执行语句2会被执行。if…else语句的执行流程如图3-6所示。
图3-6 if…else语句流程图
接下来通过一个实现奇偶数判断的案例来演示if..else语句的具体用法,如例3-3所示。
例3-3
1 #include<stdio.h>
2 int main()
3 {
4 int num = 19;
5 if (num % 2 == 0)
6 {
7 //判断条件成立,num被2整除
8 printf("num是一个偶数\n");
9 }
10 else
11 {
12 printf("num是一个奇数\n");
13 }
14 return 0;
15 }
运行结果如图3-7所示。
图3-7 运行结果
例3-3中,变量num的值为19,模以2的结果为1,不等于0,判断条件不成立。因此会执行else后面{}中的语句,打印“num是一个奇数”。
3、if…else if…else语句
if…else if…else语句用于对多个条件进行判断,从而进行多种不同的处理。例如,对一个学生的考试成绩进行等级的划分,如果分数大于等于80分等级为优,如果分数小于80分大于等于70分等级为良,如果分数小于70分大于等于60分等级为中,否则,等级为差。if…else if…else语句的具体语法格式如下:
if (判断条件1)
{
执行语句1
}
else if (判断条件2)
{
执行语句2
}
……
else if (判断条件n)
{
执行语句n
}
else
{
执行语句n+1
}
上述语法格式中,判断条件是一个布尔值。当判断条件1为true时,if后面{}中的执行语句1会执行。当判断条件1为false时,会继续执行判断条件2,如果为true则执行语句2,以此类推,如果所有的判断条件都为false,则意味着所有条件均未满足,else后面{}中的执行语句n+1会被执行。if…elseif…else语句的执行流程如图3-8所示。
图3-8 if…else if…else语句的流程图
接下来通过一个对学生考试成绩进行等级划分的案例来演示if…else if…else语句的用法,如例3-4所示。
例3-4
1 #include<stdio.h>
2 int main()
3 {
4 int grade = 75; //定义学生成绩
5 if (grade >= 80)
6 {
7 //满足条件grade >=80
8 printf("该成绩的等级为优\n");
9 }
10 else if (grade >= 70)
11 {
12 //不满足条件 grade >= 80 ,但满足条件 grade >= 70
13 printf("该成绩的等级为良\n");
14 }
15 else if (grade >= 60)
16 {
17 //不满足条件 grade >= 70 ,但满足条件 grade >= 60
18 printf("该成绩的等级为中\n");
19 }
20 else
21 {
22 //不满足条件 grade >= 60
23 printf("该成绩的等级为差\n");
24 }
25 return 0;
26 }
运行结果如图3-9所示。
图3-9 运行结果
例3-4中,定义了学生成绩grade为75。它不满足第一个判断条件grade>=80,会执行第二个判断条件grade>=70,条件成立,因此会打印“该成绩的等级为良”。
&多学一招:三元运算符
在C语言中有一种特殊的运算叫做三元运算,它和if…else语句类似,具体语法格式如下:
判断条件? 表达式1 : 表达式2
三元运算通常用于对某个变量进行赋值,当判断条件成立时,运算结果为表达式1的值,否则结果为表达式2的值。
例如求两个数x、y中的较大者,如果用if…else语句来实现,具体代码如下:
int x = 0;
int y = 1;
int max;
if (x > y)
{
max = x;
} else
{
max = y;
}
上面的代码运行之后,变量max的值为1。如果if…else语句用三元运算来替换,具体代码如下:
int x = 0;
int y = 1;
int max;
max = x > y ? x : y;
3.3.2 switch条件语句
switch 条件语句也是一种很常用的选择语句,和if条件语句不同,它只能针对某个表达式的值作出判断,从而决定程序执行哪一段代码。例如,在程序中使用数字1~7来表示星期一到星期天,如果想根据某个输入的数字来输出对应中文格式的星期值,可以通过下面的一段伪代码来描述:
用于表示星期的数字
如果等于1,则输出星期一
如果等于2,则输出星期二
如果等于3,则输出星期三
如果等于4,则输出星期四
如果等于5,则输出星期五
如果等于6,则输出星期六
如果等于7,则输出星期天
如果不是1~7,则输出此数字为非法数字
对于上面一段伪代码的描述,大家可能会立刻想到用刚学过的if…else if…else语句来实现,但是由于判断条件比较多,实现起来代码过长,不便于阅读。这时就可以使用C语言中的switch语句来实现这种需求。在switch语句中switch关键字后面有一个表达式,case关键字后面有目标值,当表达式的值和某个目标值匹配时,会执行对应case下的语句。接下来通过一段伪代码来描述switch语句的基本语法格式,具体如下:
switch (表达式)
{
case 目标值1:
执行语句1
break;
case 目标值2:
执行语句2
break;
……
case 目标值n:
执行语句n
break;
default:
执行语句n+1
break;
}
在上面的语法格式中,switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,就会执行相应case后的语句,否则执行default后的语句。关于switch语句中的break关键字将在后面的小节中做具体介绍,此处,初学者只需要知道break的作用是跳出switch语句即可。
接下来通过一个案例来实现根据数字输出中文格式的星期的功能,如例3-5所示。
例3-5
1 #include<stdio.h>
2 int main()
3 {
4 int week = 5;
5 switch (week)
6 {
7 case 1:
8 printf("星期一");
9 break;
10 case 2:
11 printf("星期二");
12 break;
13 case 3:
14 printf("星期三");
15 break;
16 case 4:
17 printf("星期四");
18 break;
19 case 5:
20 printf("星期五");
21 break;
22 case 6:
23 printf("星期六");
24 break;
25 case 7:
26 printf("星期天");
27 break;
28 default:
29 printf("输入的数字不正确...");
30 break;
31 }
32 return 0;
33 }
运行结果如图3-10所示。
图3-10 运行结果
例3-5中,由于变量week的值为5,整个switch语句判断的结果满足第19行的条件,因此打印“星期五”。程序中的default语句用于处理和前面的case都不匹配的情况,将第5行代码替换为int week = 8,再次运行程序,输出结果如图3-11所示。
图3-11 运行结果
在使用switch语句的过程中,如果多个case条件后面的执行语句是一样的,则该执行语句只需书写一次即可,这是一种简写的方式。例如,使用数字1~7来表示星期一到星期天,当输入的数字为1、2、3、4、5时视为工作日,否则视为休息日,这时如果需要判断一周中的某一天是否为工作日,就可以采用switch语句的简写方式,具体如例3-6所示。
例3-6
1 #include<stdio.h>
2 int main()
3 {
4 int week = 2;
5 switch (week)
6 {
7 case 1:
8 case 2:
9 case 3:
10 case 4:
11 case 5:
12 //当week 满足值 1、2、3、4、5 中任意一个时,处理方式相同
13 printf("今天是工作日\n");
14 break;
15 case 6:
16 case 7:
17 //当week 满足值 6、7 中任意一个时,处理方式相同
18 printf("今天是休息日\n");
19 break;
20 }
21 return 0;
22 }
运行结果如图3-12所示。
图3-12 运行结果
例3-6中,当变量week的值为1、2、3、4、5中任意一个值时,处理方式相同,都会打印“今天是工作日”。同理,当变量week值为6、7中任意一个值时,打印“今天是休息日”。
3.4 循环结构语句
在实际生活中经常会将同一件事情重复做很多次,比如在走路时,会重复使用左右脚,打乒乓球时,会重复挥拍的动作等。同样在C语言中,也经常需要重复执行同一代码块,这时就需要使用循环语句。循环语句分为while循环语句、do…while循环语句和for循环语句三种。接下来,本小节将针对这三种循环语句分别进行详细地讲解。
3.4.1 while循环语句
while循环语句和3.3小节讲到的条件判断语句有些相似,都是根据条件判断来决定是否执行大括号内的执行语句。区别在于,while语句会反复地进行条件判断,只要条件成立,{}内的执行语句就会一直执行,直到条件不成立,while循环结束。while循环语句的具体语法格式如下:
while (循环条件)
{
执行语句
………
}
在上面的语法格式中,{}中的执行语句被称作循环体,循环体是否执行取决于循环条件。当循环条件为true时,循环体就会被执行。循环体执行完毕时会继续判断循环条件,如条件仍为true则会继续执行,直到循环条件为false时,整个循环过程才会结束。
while循环的执行流程如图3-13所示。
图3-13 while循环的流程图
接下来通过while语句来实现1~4之间自然数的打印,如例3-7所示。
例3-7
1 #include <stdio.h>
2 int main()
3 {
4 int x = 1; //定义变量x,初始值为1
5 while (x <= 4) // 循环条件
6 {
7 printf("x = %d\n", x);// 条件成立,打印x的值
8 x++; // x进行自增
9 }
10 return 0;
11 }
运行结果如图3-14所示。
图3-14 while循环
例3-7中,x的初始值为1,在满足循环条件x <= 4的情况下,循环体会重复执行,打印x的值并让x进行自增。因此打印结果中x的值分别为1、2、3、4。值得注意的是,例3-7中的第8行代码用于在每次循环时改变变量x的值,直到循环条件不成立,如果没有这行代码,整个循环会进入无限循环的状态,永远不会结束。
3.4.2 do-while循环语句
do…while循环语句和while循环语句功能类似,二者的不同之处在于,while语句需要先判断循环条件,然后根据判断结果来决定是否执行大括号中的代码,而do…while循环语句先要执行一次大括号内的代码再判断循环条件,其具体语法格式如下:
do
{
执行语句
………
} while(循环条件);
在上面的语法格式中,关键字do后面{}中的执行语句是循环体。do…while循环语句将循环条件放在了循环体的后面。这也就意味着,循环体会无条件执行一次,然后再根据循环条件来决定是否继续执行。
do…while循环的执行流程如图3-15所示。
图3-15 do…while循环的执行流程
接下来使用do…while循环语句将例3-7进行改写,如例3-8所示。
例3-8
1 #include <stdio.h>
2 int main()
3 {
4 int x = 1; //定义变量x,初始值为1
5 do
6 {
7 printf("x = %d\n", x);// 条件成立,打印x的值
8 x++; // x进行自增
9 } while (x <= 4); // 循环条件
10 return 0;
11 }
运行结果如图3-16所示。
图3-16 do while实例
例3-8和例3-7的运行结果一致,这说明do …while循环和while循环能实现同样的功能。然而在程序运行过程中,这两种语句还是有差别的。如果循环条件在循环语句开始时就不成立,那么while循环的循环体一次都不会执行,而do…while循环的循环体还是会执行一次。若将例中的循环条件x<=4改为x < 1,例3-8会打印x=1,而例3-7什么也不会打印。
3.4.3 for循环语句
在前面的小节中分别讲解了while循环和do…while循环。在程序开发中,还经常会使用另一种循环语句,即for循环,它通常用于循环次数已知的情况,其具体语法格式如下:
for(初始化表达式; 循环条件; 操作表达式)
{
执行语句
………
}
在上面的语法格式中,for关键字后面()中包括了初始化表达式、循环条件和操作表达式三部分内容,它们之间用“;”分隔,{}中的执行语句为循环体。
接下来分别用“①”表示初始化表达式、“②”表示循环条件、“③”表示操作表达式、“④”表示循环体,通过序号来具体分析for循环的执行流程。具体如下:
for(① ;② ; ③)
{
④
}
第一步,执行①
第二步,执行②,如果判断结果为true,执行第三步,如果判断结果为false,执行第五步
第三步,执行④
第四步,执行③,然后继续执行第二步
第五步,退出循环
接下来通过一个案例对自然数1~4进行求和,如例3-9所示。
例3-9
1 #include<stdio.h>
2 int main()
3 {
4 int sum = 0; //定义变量sum,用于记住累加的和
5 for (int i = 1; i <= 4; i++) //i的值会在1~4之间变化
6 {
7 sum += i; //实现sum与i的累加
8 }
9 printf("sum = %d \n", sum); //打印累加的和
10 return 0;
11 }
运行结果如图3-17所示。
图3-17 运行结果
例3-9中,变量i的初始值为1,在判断条件i<=4为true的情况下,会执行循环体sum+=i,执行完毕后,会执行操作表达式i++,i的值变为2,然后继续进行条件判断,开始下一次循环,直到i=5时,条件i<=4为false,结束循环,执行for循环后面的代码,打印“sum=10”。
为了让初学者能熟悉整个for循环的执行过程,现将例3-9运行期间每次循环中变量sum和i的值通过表3-1罗列出来。
表3-1 sum和i循环中的值
循环次数 | sum | i |
第一次 | 1 | 1 |
第二次 | 3 | 2 |
第三次 | 6 | 3 |
第四次 | 10 | 4 |
3.4.4 循环嵌套
有时为了解决一个较为复杂的问题,需要在一个循环中再定义一个循环,这样的方式被称作循环嵌套。在C语言中,while、do…while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,这当中最常见的就是在for循环中嵌套for循环,具体语法格式如下:
for(初始化表达式; 循环条件; 操作表达式)
{
………
for(初始化表达式; 循环条件; 操作表达式)
{
执行语句;
………
}
………
}
接下来通过for语句的循环嵌套来实现使用“*”打印直角三角形,如例3-10所示。
例3-10
1 #include<stdio.h>
2 int main()
3 {
4 int i, j; //定义两个循环变量
5 for (i = 1; i <= 9; i++) //外层循环
6 {
7 for (j = 1; j <= i; j++) //内层循环
8 {
9 printf("*"); //打印*
10 }
11 printf("\n"); //换行
12 }
13 return 0;
14 }
运行结果如图3-18所示。
图3-18 运行结果
在例3-10中定义了两层for循环,分别为外层循环和内层循环,外层循环用于控制打印的行数,内层循环用于打印“*”,每一行的“*”个数逐行增加,最后输出一个直角三角形。由于嵌套循环程序比较复杂,下面分步骤进行详细地讲解,具体如下:
第一步,在第4行代码中定义了两个循环变量i和j,其中i为外层循环变量,j为内层循环变量。
第二步,在第5行代码中将i初始化为1,条件i <= 9为true,程序将首次进入外层循环的循环体。
第三步,在第7行代码中将j初始化为1,由于此时i的值为1,条件j <= i为true,程序将首次进入内层循环的循环体,打印一个“*”。
第四步,执行第7行代码中内层循环的操作表达式j++,将j的值自增为2。
第五步,执行第7行代码中的判断条件j<=i,判断结果为false,内层循环结束。执行后面的代码,打印换行符。
第六步,执行第5行代码中外层循环的操作表达式i++,将i的值自增为2。
第七步,执行第5行代码中的判断条件i<=9,判断结果为true,程序将进入外层循环的循环体,继续执行内层循环。
第八步,由于i的值为2,内层循环会执行两次,即在第2行打印两个“*”。在内层循环结束时会打印换行符。
第九步,以此类推,在第3行会打印3个“*”,逐行递增,直到i的值为10时,外层循环的判断条件i <= 9结果为false,外层循环结束,整个程序也就结束了。
3.4.5 跳转语句(break、goto、continue)
跳转语句用于实现循环执行过程中程序流程的跳转,在C语言中,跳转语句有break语句、goto语句和continue语句。接下来分别进行详细地讲解。
1、break语句
在switch条件语句和循环语句中都可以使用break语句。当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。当它出现在循环语句中,作用是跳出当前循环语句,执行后面的代码。接下来通过一个具体的案例来演示break语句如何跳出当前循环,如例3-11所示。
例3-11
1 #include<stdio.h>
2 int main()
3 {
4 int x = 1; //定义变量x,初始值为1
5 while (x <= 4) //循环条件
6 {
7 printf("x = %d\n", x); //条件成立,打印x的值
8 if (x == 3)
9 {
10 break;
11 }
12 x++; //x进行自增
13 }
14 return 0;
15 }
运行结果如图3-19所示。
图3-19 运行结果
例3-11中,通过while循环打印x的值,当x的值为3时使用break语句跳出循环。因此打印结果中并没有出现“x=4”。
2、goto语句
当break语句出现在嵌套循环中的内层循环时,它只能跳出内层循环,如果想要跳出外层循环则需要对外层循环添加标记,然后使用goto语句。接下来通过一个案例来演示如何使用goto语句,如例3-12所示。
例3-12
1 #include<stdio.h>
2 int main()
3 {
4
5 int i, j; //定义两个循环变量
6 for (i = 1; i <= 9; i++) //外层循环
7 {
8 for (j = 1; j <= i; j++) //内层循环
9 {
10 if (i > 4) //判断i的值是否大于4
11 {
12 goto end; //跳至标识为end的语句
13 }
14 printf("*"); //输出*
15 }
16 printf("\n"); //换行
17 }
18 end: return 0;
19 }
运行结果如图3-20所示。
图3-20 运行结果
例3-12中,在return语句前面增加了标记“end”。当i>4时,使用“goto end;”语句跳出外层循环。因此程序只打印了4行“*”。
3、continue语句
在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要使用continue语句。接下来通过一个1~100之内的奇数求和的案例来演示continue语句的使用,如例3-13所示。
例3-13
1 #include<stdio.h>
2 int main()
3 {
4 int sum = 0; //定义变量sum,用于记住和
5 for (int i = 1; i <= 100; i++)
6 {
7 if (i % 2 == 0) //如果i是一个偶数,执行if语句中的代码
8 {
9 continue; //结束本次循环
10 }
11 sum += i; //实现sum和i的累加
12 }
13 printf("sum = %d\n", sum);
14 return 0;
15 }
运行结果如图3-21所示。
图3-21 运行结果
例3-13使用for循环让变量i的值在1~100之间循环,在循环过程中,当i的值为偶数时,将执行continue语句结束本次循环,进入下一次循环。当i的值为奇数时,sum和i进行累加,最终得到1~100之间所有奇数的和,打印“sum= 2500”。
3.5 本章小结
本章首先介绍了程序的运行流程图,然后讲解了C语言中最基本的三种流程控制语句,包括顺序结构语句、选择结构语句和循环语句。
通过本章的学习,初学者应该能够熟练的运用if判断语句、switch判断语句、while循环语句、do-while循环语句以及for循环语句。掌握本章的内容就能够编写逻辑比较复杂的C语言程序并且有助于后面章节的学习。
3.6 习题
一、填空题
1、通常情况下使用______语句来跳出当前循环。
2、程序中的语句由上往下依次执行的是______结构语句。
3、for关键字后面()中包括了三部分内容,分别是初始化表达式、______和操作表达式
4、if条件语句分为三种语法格式,分别是______、______和______。
5、假设int x = 2,三元表达式 x>0?x+1:5 的运算结果是______。
二、判断题
1、程序的运行流程图中,处理框用平行四边形来表示。
2、break语句只用于循环语句中,它的作用是跳出循环。
3、do…while循环语句中的循环体至少会执行一次。
4、while循环中不能再定义另一个循环。
5、switch条件语句中,default语句可用于处理和前面的case都不匹配的值。
三、选择题
1、以下选项中,哪个不属于switch语句的关键字?
A、break B、case C、for D、default
2、下列语句哪些属于循环语句?(多选)
A、for语句 B、if语句 C、while语句 D、switch语句
3、以下选项中哪些描述是正确的?(多选)
A、循环语句必须要有中止条件否则不能编译 B、break关键字用于跳出当前循环
C、continue关键字用于终止本次循环,执行下一次循环D、switch条件语句中可以使用break
4、以下程序片段运行结束后,输出结果是?
for (int i = 1; i<7; i++)
{
if (i % 3 == 0)
{
break;
}
printf("%d", i);
}
A、123456 B、1245 C、123 D、12
5、请先阅读下面的代码
int x = 1;
int y = 2;
if (x % 2 == 0)
{
y++;
}
else
{
y--;
}
printf("y=%d",y);
上面一段程序运行结束时,变量y的值为下列哪一项?
A、1 B、2 C、3 D、4
四、程序分析题
阅读下面的程序,分析代码是否能够编译通过,如果能编译通过,请列出运行的结果。否则请说明编译失败的原因。
代码一:
#include<stdio.h>
int main()
{
int x= 4, j = 0;
switch(x)
{
case 1:
j++;
case 2:
j++;
case 3:
j++;
case 4:
j++;
case 5:
j++;
default:
j++;
}
printf(“%d”,j\n);
return0;
}
代码二:
#include<stdio.h>
int main()
{
int n = 9;
while (n > 6)
{
printf("%d\n",n);
n--;
}
return 0;
}
五、简答题
1、请说出你知道的跳转语句,并分别说明它们之间的区别。
2、请说明while循环与for循环的异同。
六、编程题
1、请编写程序,实现对奇数和偶数的判断。
提示:
1) 定义一个int类型变量x,该变量的值为5。
2) 使用if…else语句对x进行判断,如果是奇数就输出“x是一个奇数”,否则输出“x是偶数”。
2、请编写程序,实现对“1+3+5+7+…+99”的求和功能。
提示:
1) 使用循环语句实现自然数1~99的遍历。
2) 在遍历过程中,判断当前遍历的数是否为奇数,如果是就累加,否则不加。
相关文章