C 程序结构图示:
C 程序的执行部分是由语句组成的,程序的功能也是由执行语句实现的
语句可分为以下五类:
表达式语句:表达式+分号“;”组成
一般格式:
表达式;
函数调用语句:由函数名、实际参数加上分号“;”组成
函数名(实际参数表);
示例:
printf("C Program")
控制语句:
用于控制程序的流程, 以实现程序的各种结构方式
九种控制语句
复合语句:把多个语句用括号{}括起来组成的一个语句
{ x=y+z; a=b+c; printf(“%d%d”,x,a);}
复合语句内的各条语句都必须以分号“;”结尾,在括号“}”外不能加分号在程序中应把复合语句看成是单条语句,而不是多条语句
复合语句内的各条语句都必须以分号“;”结尾,在括号“}”外不能加分号
在程序中应把复合语句看成是单条语句,而不是多条语句
空语句:只有分号“;”组成的语句
空语句是什么也不执行的语句。在程序中空语句可用来作空循环体
while(getchar() !='\n') ;
只要从键盘输入的字符不是回车则重新输入
关系运算符,就是前面介绍的运算符的一类,如下
关系表达式
一般形式为:
表达式 关系运算符 表达式
a+b>c-d;x>3/2;'a'+1-i-5*j==k+1;a>(b>c); //表达式也可以是关系表达式,因此也允许出现嵌套的情况a!=(c==d);
关系表达式的值为:“真”和“假”,用"1"和"0"表示
if 语句:根据给定的条件进行判断,以决定执行某个分支程序段
三种形式:
基本形式:
if(表达式) 语句
if-else 形式:
if(表达式) 语句 1;else 语句 2;
语义:如果表达式的值为真,则执行语句 1,否则执行语句 2
if-else-if 形式:
if(表达式 1) 语句 1;else if(表达式 2) 语句 2;else if(表达式 3) 语句 3; …;else if(表达式 m) 语句 m;else 语句 n;
语义:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个 if 语句之外继续执行程序。 如果所有的表达式均为假,则执行语句 n。然后继续执行后续程序。
注意:
三种形式的 if 语句中,在 if 关键字之后均为表达式。 该表达式通常是逻辑表达式或关系表达式, 也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量
三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必 须把这一组语句用 {} 括起来组成一个复合语句。要注意的是在 } 之后不能再加分号
if(a>b) {a++; b++;}else {a=0; b=10;}
if 语句嵌套
一般形式表示:
if(表达式) if 语句;
或者
if(表达式) if 语句;else if 语句;
if-else 类型嵌套:
if(表达式 1) if(表达式 2) 语句 1;else 语句 2;
在一般情况下较少使用 if 语句的嵌套结构。以使程序更便于阅读理解
条件运算符
如果只执行单个的赋值语句时, 可使用条件表达式来实现。不但使程序简洁,也提高 了运行效率。
一般形式:
表达式 1 ? 表达式 2 : 表达式 3
如果表达式 1 的值为真,则以表达式 2 的值作为条件表达式的值,否则以表达式 3 的值作为整个条件表达式的值
if(a>b) max=a;else max=b;
可修改为:
max=a>b?a:b;
条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符
条件运算符 ? 和 : 是一对运算符,不能分开单独使用
条件运算符的结合方向是自右至左
a>b?a:c>d?c:d
理解为:a>b?a:(c>d?c:d)
一般表示:
switch(表达式){ case 常量表达式 1: 语句 1; case 常量表达式 2: 语句 2; … case 常量表达式 n: 语句 n; default : 语句 n+1;}
语义:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有 case 后的语句。如表达式的值与所有 case 后的常量表达式均不相同时,则执行 default 后面的语句
switch 语句中,“case 常量表达式”只相当于一个语句标号, 表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个 switch 语句,所以会出现了继续执行所有后面 case 语句的情况
#includeint main(){ float a,b; char c; printf("input expression: a+(-,*,/)b \n"); scanf("%f%c%f",&a,&c,&b); switch(c){ case '+': printf("%f\n",a+b);break; case '-': printf("%f\n",a-b);break; case '*': printf("%f\n",a*b);break; case '/': printf("%f\n",a/b);break; default: printf("input error\n"); }}
C语言提供了多种循环语句,可以组成各种不同形式的循环结构
goto 语句及其构成的循环
goto 语句是一种无条件转移语句
使用格式:
goto 语句标号;
标号:是一个有效的标识符,这个标识符加上一个“:”一起出现在函数内某处, 执行 goto 语句后,程序将跳转到该标号处并执行其后的语句
与 if 语句构成循环示例:
#include int main(){ int i,sum=0; i=1; loop: if(i<=100){ sum=sum+i; i++; goto loop;} printf("%d\n",sum);}
通常不用 goto 语句,,容易使程序层次不清、不易读,但在多层嵌套退出时, 用 goto 语句则比较合理
while 语句
while(循环条件表达式) 循环体语句
#include int main(){ int i,sum=0; i=1; while(i<=100){ sum=sum+i; i++; } printf("%d\n",sum);}
do...while 语句
do 循环体语句while(循环表达式);
do-while 循环至少要执行一次循环语句
for 语句
for(表达式 1;表达式 2;表达式 3;) 语句
for 语句最简单的应用形式:
for(循环变量赋初值;循环条件;循环变量增量) 语句
for(i=0;i<=100;i++) sum=sum+i;
for 循环中的“表达式 1(循环变量赋初值)”、“表达式 2(循环条件)”和“表达式 3(循环变量增量)”都是选择项可以缺省,但“;”不能缺省
省略了“表达式 1(循环变量赋初值)”,表示不对循环控制变量赋初值
省略了“表达式 2(循环条件)”,则不做其它处理时便成为死循环
省略了“表达式 3(循环变量增量)”,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句
3 个表达式都可以省略
for(;;;) //相当于 while(1)
表达式 1 可以是设置循环变量的初值的赋值表达式,也可以是其他表达式
表达式 1 和表达式 3 可以是一个简单表达式也可以是逗号表达式
for(sum=0,i=1;i<=100;i++)sum=sum+i;for(i=0,j=100;i<=100;i++,j--)k=i+j;
表达式 2 一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,只要其值非零,就执行循环体
循环嵌套示例:
#include int main(){ int i, j, k; printf("i j k\n"); for (i=0; i<2; i++) for(j=0; j<2; j++) for(k=0; k<2; k++) printf("%d %d %d\n", i, j, k);}
几种循环比较