图片来自于网络
C语言语句由“;”结束或者由“{}”界定。初学者在编写程序的过程中,经常要么忘记在语句结束位置加上“;”,或者在每一行末尾都加上“;”。由于单独一个“;”就是一个合法的空语句,没有语法错误,这种在不恰当位置添加的“;”是无法通过编译器检查出来的。 C语言常用语句分类如下图: |
表达式后面加上“;”就是表达式语句,比如:a=a*10; 就是赋值表达式语句。 |
在函数调用表达式后面加上“;”,就是函数调用语句。 函数调用语句一般形式:函数名(实参表列); 例如,若有char s[20];,则下面就是两个函数调用语句:
|
单独一个“;”就是空语句。例如将一个串复制到另一个数组中:
上面的for语句的循环体就是一个空语句,由于复制字符串的工作都在 for后面的“()”中完成了,所以循环体无需做任何任务,因此为了for语句的完整性,循环体就是一个空语句。 |
单独一个“;”就是空语句。例如将一个串复制到另一个数组中:
上面的for语句的循环体就是一个空语句,由于复制字符串的工作都在for后面的“()”中完成了,所以循环体无需做任何任务,因此为了for语句的完整性,循环体就是一个空语句。 |
定义:由“{}”括起来的语句组就称为复合语句。 由于C语言的控制语句都要求在控制条件后面仅接一条语句,但通常情况下却需要多条语句才能完成需要处理的任务,因此需要使用复合语句。 C语言的复合语句还具有以下特点:
输出结果: |
从宏观上看,控制语句也是一条语句,因此C语言语句执行的顺序是按书写的顺序逐条执行的。如上面程序代码中,第4行到第9行总共4条语句,执行完int i; 后,将执行for循环语句;for循环语句执行完后将执行 return 0;语句。 从微观上看,程序执行到控制语句时,由控制语句决定接下来执行哪一条语句,例如上面的程序中的for语句,当i<5时,转到第8行执行,否则转到第9行执行。 |
对什么是一条语句的充分理解,有利于控制语句的编写和理解。 |
if(表达式) 语句;
|
if(表达式) 语句1; else 语句2;
常见问题:
上面程序代码没有输出结果,尽管第8行与第五行对齐,但实际上else是与第6行的if配对的,因此此程序无法表达分数低于60分则输出“不及格,要重修。” 该程序需要修改为如下才正确:
|
多分支结构有两种: (1)if...else if语句 其本质就是在else后面嵌套一个双分支结构,关键点是要注意else是与上面最靠近它的if配对的。
(2)switch语句 switch语句是一个开关语句,对表达式e有要求,必须得到一个整数值,所以e可以是整数表达式、字符表达式、枚举类型值。 switch一般形式如下:
switch语句特点:
特别要注意的是对语句的理解,switch(e){语句组}是一个语句,可以嵌套在switch结构中。例如:
输出结果: |
分析:a的值为0,从case 0后面的语句开始执行,遇到break才结束 switch语句。case 0后嵌套了一个switch语句,但该语句后面没有 break语句,因此执行switch(x){}语句后将继续执行“b++,y++;”语句。 |
一般形式:
说明: (1)循环体由一条语句构成:以“;”结束的简单语句或者“{}”括起来的复合语句。 (2)循环体内一定要有使循环结束的语句,否则构成死循环。 |
一般形式:
说明: (1)循环体由一个语句构成:以“;”结束的简单语句或者“{}”括起来的复合语句。 (2)循环体内一定要有使循环结束的语句,否则构成死循环。 |
一般形式:
说明: (1)循环体由一个语句构成:以“;”结束的简单语句或者“{}”括起来的复合语句。 (2)for()中的表达式都可以省略,但两个“;”不能省略。其中缺省表达式2时表示循环条件恒为真。 (3)一定要控制循环次数,使循环执行有限次数后结束,否则是死循环。 |
break语句可以用来结束switch语句,同时也可以与if配合用来结束一重循环。
|
continue语句用于结束本次循环,执行完continue后,continue后面的语句将不执行。
以上程序输出结果为:sum=25 |
用于函数中,目的是让函数返回一个值。函数中可以有多条return语句,但只会执行第一个return语句就结束函数调用。 |
goto语句充分体现了C语言的灵活性,它可以让程序跳转到goto后面的标号处开始执行,因此if+goto语句可以构建循环。
goto语句可以由循环体内跳转到循环体外,但不能由循环体外跳转到循环体内。
由于goto太过于灵活,一般不用。
//求1-10的和#includeint main(){ int i,sum=0; i=1;loop:sum=sum+i;//loop为标号,符合标识符命名规则 i++; if(i<=10) goto loop;//跳转到标号为loop处开始执行 printf("sum=%d\n\n",sum);}
//用goto语句结束循环#includeint main(){ int i,sum=0; i=1; for(i=0;;i++) { if(i>10) goto loop;//i>10则跳转到loop处执行 sum+=i; } loop:printf("sum=%d\n\n",sum);}