目录
1. 条件判断语句
if(…) {…}
if(…) {…} else {…}
if(…) {…} else if(…) {…} … else if(…) {…} else {…}
switch() {case …: …; case …: …; … default: …;}
2、循环语句
while语句
do while语句
for语句
3、循环体中的跳转语句
break语句。
continue语句。
goto语句。
C语言有九种控制语句。 可分成以下三类:
1. 条件判断语句
if语句、switch语句;
2 .循环执行语句
do while语句、while语句、for语句;
3. 转向语句
break语句、goto语句(此语句尽量少用,因为这不利结构化程序设计,滥用它会使程序流程无规律、可读性差)、continue语句、return语句。
1. 条件判断语句
if(…) {…}
1.一般形式:
if (表达式) {语句;}
表达式:
a,用非 0 值表示真,用 0 表示假;
b,if(flag) 相当于 if(flag!=0);
c,浮点数无法与 0 比较,只能用近似的值比较;例: 1e-6 等于1x10的-6次方可以看成0来使用;
2.用于单分支选择结构;
3.如含有交叉关系,使用并列的if语句;
例1:输出两个整数中的最大值
#include <stdio.h>
void main()
{
int a,b;
printf("请输入两个整数:");
scanf("%d %d",&a,&b);
if(a>b)
{
printf("max = %d\n",a);
}
if(a<b)
{
printf("max = %d\n",b);
}
}
if(…) {…} else {…}
- 一般形式:
if(表达式) {语句1; } else { 语句2;}
- 用于双分支控制的条件语句;
- 用于非此即彼的关系时;
例2:输出两个整数中的最大值
例2关于对于非法字符的检查与处理
#include <stdio.h>
void main()
{
int a,b,max,data;
printf("Input a,b:");
data = scanf(" %d,%d",&a,&b);/*记录scanf()的返回值;*/
if(data!=2)/*根据scanf()的返回值判断输入数据个数或者格式是否错误*/
{
printf("格式输入错误!");
fflush(stdin);/*清除输入缓冲区中的错误内容(fflush()可能带来可移植性的问题)*/
}
else
{
max = a>b?a:b;/*三目运算符(a>b值为真则输出a的值,反之输出b的值)*/
printf("%d\n",max);
}
}
if(…) {…} else if(…) {…} … else if(…) {…} else {…}
-
一般形式:
if(表达式1) { 语句1;}
else if(表达式2) {语句2;}
…
else if(表达式n){语句n;}
else{语句n+1;} -
用于多分支的控制的条件语句;
例3:判断字符
#include <stdio.h>
void main()
{
char ch;
printf("请输入一个字符:");
ch = getchar();/*getchar、putchar专门用于字符输入输出;
getchar()写法上要写为 变量 = getchar();
putchar()用法为putchar(变量);
putchar('\n')输出一个控制符;
putchar('字母/字符');输出字母/字符;
*/
if(ch<=31)
{
printf("这是一个控制字符或通讯专用字符!\n");
}
else if(ch >= '0' && ch <= '9')
{
printf("这是一个数字!\n");
}
else if(ch >= 'A' && ch <= 'Z')
{
printf("这是一个大写字母!\n");
}
else if(ch >= 'a' && ch <= 'z')
{
printf("这是一个小写字母!\n");
}
else
{
printf("这是其他字符!\n");
}
}
switch() {case …: …; case …: …; … default: …;}
- 一般形式:
switch(表达式)
{
case 常量1:语句1;
case 常量2:语句2;
…
case 常量n:语句n;
default: 语句n+1;
} - 用于多路选择的语句;
switch语句相当于多个if-else语句;
(表达式)只能是char型或者int型;
case 后面至少要有一个空格,常量后面是冒号
(表达式)与 常量类型要保持一致;
记得记得记得 在需要跳出的时候,在语句后面加上break;
例4:简单的加减乘除计算
#include <stdio.h>
void main()
{
double a,b;
char ch;
printf("Input a(+ - * /)b:");
scanf("%f%c%f",&a,&ch,&b);
switch(ch)
{
case '+':
printf("%f%c%f=%.2f\n",a,ch,b,a+b);/*%.2f表示精度,可以理解为保留两位小数*/
break;
case '-':
printf("%f%c%f=%.2f\n",a,ch,b,a-b);
break;
case '*':
case 'X':
case 'x':
printf("%f%c%f=%.2f\n",a,ch,b,a*b);/*输入"x" "X" "*" 都执行这一条语句;不加break,会顺语句执行*/
break;
case '/':
printf("%f%c%f=%.2f\n",a,ch,b,a/b);
break;
default:
printf("请输入正确算式!\n");
}
}
2、循环语句
循环语句是用于重复执行某条语句(循环体)的语句,它包含一个控制表达式,每循环执行一次都要对控制表达式进行判断,如果表达式为真,则继续执行循环。C语言提供了3中循环语句,分别为while
语句,do while
语句和for
语句。
while语句
while语句是控制表达式在循环体之前的循环语句,它的格式如下:
while (表达式)
语句
这里的圆括号是强制要求的,圆括号之内的表达式为控制表达式,圆括号之外的语句为循环体。
while
语句的执行步骤,首先计算控制表达式的值,如果表达式的值不为0
(为真),则执行循环体,接着再次判断控制表达式,如果其值不为0
,再次执行循环体。执行这个步骤直到控制表达式的值为0
时停止。
/*************************************
* using_while_1.c *
* *
* 简单的while语句 *
*************************************/
#include <stdio.h>
int main()
{
int i = 1;
int sum = 0;
while(i <= 50)
{
sum += i;
i++;
}
printf("1到50之间(包括1和50)的整数之和为%d\n", sum);
return 0;
}
如果while
的控制表达式一直不为0,那么循环将一直进行下去,称为无限循环。这样的循环在循环体中都包含break
,goto
,return
或者导致程序终止的函数(如exit
等),以在适当的时机终止程序。
/****************************************
* using_while_2.c *
* *
* 无限循环与break *
****************************************/
#include <stdio.h>
int main()
{
int i = 1;
int sum = 0;
while(1)
{
if ( i > 50)
break;
sum += i;
i++;
}
printf("1到50之间(包括1和50)的整数和为%d\n", sum);
return 0;
}
do while
语句
do while
语句与while
语句非常相似,只不过do while
语句在每次执行完循环体之后对控制表达式进行判断的,因此do while
语句的循环体至少会执行一次,而while
语句的循环体可能一次都不被执行。do while
语句的格式如下:
do
语句
while(表达式);
其中控制表达式两端的括号也是必须的。
do while
循环的执行步骤如下:首先执行循环体,再计算控制表达式的值,如果表达式的值非零再继续执行循环体,然后再次判断表达式的值。这个过程持续进行,知道控制表达式的值为0,终止do while
语句执行。
建议对do while
的循环体都使用大括号包裹起来,因为大括号会使do while
语句被误认为是while
语句。
/*************************************
* using_do_while.c *
* *
* C语言中的do while循环 *
*************************************/
#include <stdio.h>
int main()
{
int i = 1;
int sum = 0;
do
{
sum += i;
i++;
}while(i <= 50);
printf("1和50之间(包括1和50)的整数之和为%d\n", sum);
return 0;
}
for
语句
for
语句的格式如下:
for (表达式1; 表达式2; 表达式3)
语句
表达式1是初始化步骤,只执行一次,表达式2是控制表达式,控制循环的终止,表达式3在每次循环的最后被执行。
for
语句的执行步骤是:首先执行表达式1进行初始化,然后判断表达式2的值是否为真,若为真,则执行循环体,然后执行表达式3.随后再次对表达式2的值进行判断,若为真,则再次执行循环体和表达式3,依次循环直到表达式2的值为0为止。
for
语句的3个表达式都可以省略,若省略表达式1,则在执行循环前没有初始化的操作;若省略第三个表达式,则执行完循环体后,没有再需要执行的语句,循环体确保循环能够在有限时间内终止;若省略第二个表达式,则每次判断都默认为真,除非在循环体内使用break
,goto
和程序终止函数外,循环不会停止。
/*************************************
* using_for.c *
* *
* C语言的for语句 *
*************************************/
#include <stdio.h>
int main()
{
int sum = 0;
int i;
for (i = 1; i <= 50; i++)
{
sum += i;
}
printf("1和50之间(包括1和50)的整数之和为%d\n", sum);
return 0;
}
3、循环体中的跳转语句
在循环体中可以使用break
,continue
和goto
跳转语句。
break
语句。
break
语句在循环体的中间设置退出点,用以跳出while
,do while
和for
循环,直接执行循环语句后面的语句。除此之外,break
语句还用于switch
语句,用以跳出switch
语句而直接执行switch语句后面的语句。对于嵌套的循环语句和(或)switch
语句,break
只能跳过其所在的那层循环或switch
语句。
continue
语句。
continue
语句并不跳出循环,而是将程序执行正好转移到循环体末尾处,跳过本次循环中循环体余下的内容。continue
语句只能用于循环体中。
/**************************************
* using_continue.c *
* *
* C语言中用于循环体的continue语句 *
**************************************/
#include <stdio.h>
int main()
{
int n = 0;
int sum = 0;
while (n < 10)
{
int i = 0;
scanf("%d", &i);
if (i == 0)
continue;
sum += i;
n++;
}
printf("以上十个非零数的和为:%d\n", sum);
return 0;
}
goto
语句。
goto
语句不仅可以用在循环体中,还可以用在程序的任何位置。与continue
和break
不同,它可以跳转到同一个函数中任何有标记的语句处。goto
依赖于定义在语句开头的标识符,其形式为:标识符 : 语句
。goto
语句的形式为:goto 标识符;
goto
易于造成程序混乱,代码难以阅读,并且其他跳转语句、return
和exit
语句能够满足大多数需要goto
语句的情况。除非万不得已,尽量不要使用。
/**************************************
* using_goto_in_loop.c *
* *
* C语言循环语句的循环体中使用goto语句*
**************************************/
#include <stdio.h>
int main()
{
int i = 0;
while (i < 10)
{
switch(i)
{
case 0:
case 1:
case 2:
case 3:
printf("%d 小于 4\n", i);
break;
default:
goto bigThan4;
}
i++;
}
bigThan4: printf("i开始不小于4\n");
return 0;
}