引言
C语言中的三大结构分别是顺序结构、选择结构和分支结构。
1、顺序结构,指按照程序顺序执行;
2、选择结构,指根据判断结果选择分支方向;
3、循环结构,指有一个循环体,可以根据判断条件决定循环多少次。
目录
一、顺序结构
顺序结构就是从头到尾一句接着一句的执行下来,执行完上一个语句就会自动执行下一个语句,是无条件的,不必做任何判断,直到执行完最后一句程序结束。
例:从键盘输入一个大写字母,要求改用小写字母输出。
#include<stdio.h> int main() { char x, y; scanf("%c", &x); if (x >= 'A' && x <= 'Z') { y = x + 32; printf("%c\n", y); } else { printf("this is a erro\n"); } return 0; }
运行结果:
![]()
这段代码属于典型的顺序结构,定义一个字符型变量x和y,从键盘中读取x,如果x的值为大写字母,则根据大写字母和小写字母的ASCLL码相差32,将大写字母+32得到小写字母(存入字符变量y中),并输出y的值,程序结束;如果输入x的值不是大写字母而是其他值,则会进入else语句,输出:this is a erro,程序结束。
二、选择结构
选择结构就是到某个节点后,会根据一次判断的结果来决定之后程序向哪一个分支方向执行。
1、用if语句实现选择结构
if语句是指编程语言中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。if语句的实现过程如下图所示。
if语句的一般形式: (1) if (表达式) 语句1 (没有else子句部分) (2) if (表达式) (有else子句部分) 语句1 else 语句2 (3) if(表达式1) 语句1 (在else部分又嵌套了多层的if语句) else if(表达式2) 语句2 ... ... else if(表达式m) 语句m else 语句m+1
例:输入三个数a,b,c,要求按有小到大的顺序输出。
#include<stdio.h> int main() { float a, b, c, tmp; scanf("%f %f %f", &a, &b, &c); if (a > b) //判断a和b的大小 { tmp = b; //借助变量tmp,实现变量a和变量b互换值 b = a; a = tmp; } //互换后,a小于或等于b if (a > c) //判断a和c的大小 { tmp = c; //借助变量tmp,实现变量a和变量c互换值 c = a; a = tmp; } //互换后,a小于或等于c if (b > c) //判断b和c的大小 { tmp = c; //借助变量tmp,实现变量b和变量c互换值 c = b; b = tmp; } //互换后,b小于或等于c printf("%5.2f %5.2f %5.2f\n", a, b, c); //顺序输出a,b,c的值 return 0; }
运行结果:
在经过第1次互换值后,a<=b,经过第2次互换值后a<=c,这样a己是三者中最小的(或最小者之一),但是b和c谁大还未解决,还需要进行比较和互换。经过第3次互换值后,a<=b<=c,此时,a,b,c3个变量已按由小到大顾序排列。顺序输出a,b,c的值即实现了由小到大输出 3个数。
2、用switch语句实现多分支选择结构
switch语句是多分支选择结构,用来实现如下图所表示的多分支选择结构。
switch语句的一般形式如下: switch (表达式) { case 常量1 : 语句1 case 常量2 : 语句2 ... ... ... case 常量n : 语句n default : 语句n+1 }
例:要求按照考试成绩的等级输出百分制分数段,A等为85-100分,B等为70-85分,C等为60-69分,D等为60分以下。成绩由键盘输入。
#include<stdio.h> int main() { char grade; scanf("%c", &grade); printf("Your score:"); switch (grade) { case 'A':printf("85-100\n"); break; case 'B':printf("70-84\n"); break; case 'C':printf("60-69\n"); break; case 'D':printf("<60\n"); break; default: printf("enter data error!\n"); } return 0; }
运行结果:
![]()
等级grade 定义为字符变量,从键盘输入一个大写字母,赋给变量grade,switch 得到 grade 的值并把它和各case 中给定的值(A',B',’C,'D'之一)相比较,如果和其中之一相同(称为匹配),则执行该case 后面的语句(即 printf 语句)。输出相应的信息。如果输入的字符与'A',B',’C,‘D'都不相同,就执行 default 后面的语句,输出“enter data error!'的信息。注意每个case后面的语句中,最后都有一个break语句,它的作用是使流程转到switch语句的末尾,即结束switch语句。
三、循环结构
循环结构有一个循环体,循环体里是一段代码。对于循环结构来说,关键在于根据判断的结果,来决定循环体执行多少次,如下图所示。
1、用while语句实现循环
while语句可以简单记为:只要当循环条件表达式为真(即给定的条件成立),就执行循环语句。
while语句的一般表达形式:while(循环条件表达式) 语句
例:求1+2+3+···+100。
#include<stdio.h> int main() { int i = 1; int sum = 0; while (i <= 100) { sum = sum + i; i++; } printf("sum=%d", sum); return 0; }
运行结果:
![]()
定义变量i的初值为1,sum的初值为0,进入循环体,第一次累加后,sum的值为1,加完后,i的值加1,为下次累加做准备,直至当i>100,条件表达式i<=100的值为假,循环体结束,输出1+2+3+···+100的累加和。
2、用do···while语句实现循环
除了while语句以外,c语言还提供了do···while语句来实现循环结构。如:
#include<stdio.h> int main() { int i = 1; //设定变量i的初值为1 do //循环结构开始 { printf("%d ", i++); //循环体 ,输出i的值,然后使i加1 } while (i <= 100); //当i小于或等于100时,继续执行循环体 return 0; }
它的作用是:执行(用do表示“做”)printf 语句,然后在 while 后面的括号内的表达式中检查i的值,当i小于或等于 100 时,就返回再执行一次循环体(prinff 语句),直到i>100 为止。执行此do…while 语句的结果是输出 1~100,共 100个数。
do···while语句的一般形式:
do 语句 //循环体 while(表达式);
do···while语句的特点:先无条件低执行一次循环体,然后判断循环条件是否成立,也就是说do···while循环至少执行一次。
例:用do···while语句求1+2+3+···+100.
#include<stdio.h> int main() { int i = 1; //设定变量i的初值为1 int sum = 0; do //循环结构开始 { sum = sum + i; //累加 i++; } while (i <= 100); //当i小于或等于100时,继续执行循环体 printf("%d\n", sum); return 0; }
运行结果:
3、用for语句实现循环
除了可以用 while 语句和do.while 语句实现循环外,C语言还提供了 for语句实现循环,而且 for 语向更为灵活,不仅可以用于循环次数已经确定的情况,还可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替 while 语句。其中,for循环的执行过程如下图所示。
for语句的一般形式:
for(表达式1;表达式2;表达式3) 语句
括号中三个表达式的主要作用:
表达式1:设置初始条件,只执行一次。可以为零个、一个或多个变量设置初值(如 i=1)。
表达式2:是循环条件表达式,用来判定是否继续循环。在每次执行循环体前先执行此表达式,决定是否继续执行循环。
表达式3:作为循环的调整,例如使循环变量增值,它是在执行完循环体后才进行的。
例:用for循环语句求1+2+3+···+100.
#include <stdio.h> int main(void) { int i = 0, sum = 0; for (i = 0, sum = 0; i <= 100; i++) { sum += i; } printf("sum = %d.\n", sum); return 0; }
运行结果:
注意:通过上文不难发现,for循环语句、while循环语句和do···while循环语句之间是可以相互转换的,在选择使用什么循环语句时要根据实际情况选择让自己代码更加简洁易懂的,而且各个循环语句之间还可以进行嵌套使用。