-
选择结构
- 判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件
为假时要执行的语句(可选的)。
C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false
if判断结构的一般形式
例: 输入两个实数,按代数值由小到大的顺序输出这两个数。
if else语句
Ø例:输入一个数,小于60输出不及格,否则及格。
Ø解题思路:
- 用scanf函数接收鍵盘输入的数
- 用if else语句实现条件判断,分别输出不及格和及格两种情况。
#include <stdio.h> //包含标准输入输出头文件
int main() //主函数main,程序的入口函数
{
int score; //定义一个整型变量score
scanf(“%d”,&score); //从键盘输入1个值
if(score < 60) // 条件判断
printf(“不及格\n”); // 语句1
else
printf(“及格\n”); // 语句2
return 0; //函数返回值为0
}
if.. else if ..else..语句
Ø例:按照考试成绩等级输出百分制,A等为85分以上,B等为70~84分,C等为60~69分,
D等为60分以下,成绩等级由键盘输入。
Ø解题思路:
- 用scanf函数接收鍵盘输入等级。
- 用if.. else if..else 语句实现条件判断, 输出等级对应的分数。
#include <stdio.h>
int main()
{
char grade;
scanf("%c",&grade);
if(grade == ‘A’) // 条件判断
printf(“85~100分\n”); // 语句1
else if(grade == ‘B’)
printf(“70~84分\n”); // 语句2
else if(grade == ‘C’)
printf(“60~69分\n”); // 语句3
else if(grade == ‘D’)
printf(“60分以下\n”); // 语句n
else
printf(“输入的等级错误\n”); //语句n+1
return 0;
}
最常用的3种if语句形式:
1. if (表达式) 语句1 (没有else子句)
2. if (表达式) 语句1
else 语句2 (有else子句)
3. if(表达式1) 语句1
else if(表达式2) 语句2
else if(表达式3) 语句3
┆
else if(表达式m) 语句n
else 语句n+1
switch语句
例: 要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为
60~69分, D等为 60分以下 。成绩的等级由键盘输入。
Ø解题思路:
- 判断出这是一个多分支选择问题
- 根据百分制分数将学生成绩分为4个等级
- 如果用if语句,至少要用3层嵌套的if,进行3次检查判断
- 用switch语句进行一次检查即可得到结果
三元运算符
例:输入两个数,输中两个数中最大的数
Ø解题思路:
- 用scanf函数接收鍵盘输入2个数
- 用if else语句判断最大最小值,这里用三元运算符取代if else
- 将得到最大值输出到屏幕
#include <stdio.h>
int main()
{
int a,b,max; //定义3个整型变量
scanf("%d %d",&a,&b);
max = a > b ? a :b; // 三元运算符取代if else语句
printf(“a,b中最大的数是%d\n”,max);
return 0;
}
-
选择结构的嵌套
Ø解题思路:
- 用if语句检查x的值,根据x的值决定赋予y的值
- 由于y的可能值不是两个而是三个,因此不可能只用一个简单的(无内嵌if)的if语句来实现
#include <stdio.h>
int main()
{
int x,y; //定义2个整型变量
scanf("%d",&x);
if(x < 0)
y = -1;
else
if(x == 0)
y = 0;
else
y = 1;
printf(“a,b中最大的数是%d\n”,max);
return 0;
}
-
循环结构程序设计
用do---while语句实现循环
#include <stdio.h>
int main()
{
int i=1,sum=0; //赋初值
do
{
sum=sum+i;
i++; // 条件值自增1
}while(i<=100); //do while语句的条件判断
printf("sum=%d\n",sum);
return 0;
}
用for 语句实现循环
Øfor语句的执行过程:
(1) 先求解表达式1
(2) 求解表达式2,若其值为真,执行循环体,然后执行下面第(3)步。若为假,则结束循环,转到第(5)步
(3) 求解表达式3
(4) 转回上面步骤(2)继续执行
(5) 循环结束,执行for语句下面的一个语句
循环的嵌套
- 一个循环体内又包含另一个完整的循环结构,称为循环的嵌套
- 内嵌的循环中还可以嵌套循环,这就是多层循环
- 3种循环(while循环、do…while循环和for循环)可以互相嵌套
Ø例:输出九九乘法表
Ø解题思路:
- 用一个循环变量i从1到9循环乘法口决的乘数
- 用另一个循环变量j从1到i循环乘法口决的被乘数
- 输出乘法口决
- 每次内层循环结束输出一个换行,方便阅读。
#include <stdio.h> //包含标准输入输出头文件
int main(void) //主函数,程序的入口
{
for(int i=1;i<=9;i++) //外层循环,从1到9循环口决的乘数
{
for(int j=1;j<=i;j++) //内层循环,从1到i循环被乘数
{
printf("%dX%d=%d\t",i,j,i*j);
}
printf(“\n”); //每次内层循环结束,输出一个换行符
}
return 0; //主函数的返回值为0
}
几种循环的比较
(1)一般情况下,3种循环可以互相代替
(2) 在while和do---while循环中,循环体应包含使循环趋于结束的语句。
(3) 用while和do---while循环时,循环变量初始化的操作应在while和do---while语句之前完成。而for语句
可以在表达式1中实现循环变量的初始化。
改变循环执行的状态
- 用break语句提前终止循环
- 用continue语句提前结束本次循环
用break语句提前终止循环
Øbreak语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句
例:有10000人捐款,每人捐款10~100元,超过10万元就停止捐款
Ø编程思路:
- 循环次数不确定,但最多循环10000次
- 在循环体中累计捐款总数
- 用if语句检查是否达到10万元
- 如果达到就不再继续执行循环,终止累加
- 随机数用rand()函数产生,需要引入stdlib.h头文件
#include <stdio.h> //标准输入输出库头文件
#include <stdlib.h> // 标准库头文件
int main(void) // 主函数
{
int every,total = 0; //定义两个整型变量
for(int i=0; i<10000;i++) //for循环语句
{
every = 10+rand()%91; //产生随机数
total += every; // 对每次捐款数进行累加
if(total > 100000) //判断捐款数是否超过10万
break; //中断循环并退出循环语句
}
printf("总共捐款人数是%d人,总捐款数是%d\n",i,total);
return 0;
}
用continue语句提前结束本次循环
Ø有时并不希望终止整个循环的操作,而只希望提前结束本次循环,而接着执行下次循环。这时可以用continue语句
例: 要求输出1~100之间的单数。
Ø编程思路:
- 1到100之间的每一个整数进行检查
- 如果能被2整除不输出,否则输出
- 无论是否输出此数,都要接着检查下一个数(直到100为止)。
#include <stdio.h> //标准输入输出头文件
int main() //主函数,程序的入口
{
for(int i=0;i<100;i++) //循环语句
{
if(i % 2 == 0) //判断是否是偶数
continue; //跳过本次循环,以下的语句被跳过
printf(“%d,”,i); // 输出单数
if(i == 51) //51个数输出一个换行
printf("\n"); //输出一个换行
}
printf("\n"); //输出一个换行
return 0; //主函数的返回值为0
}
break语句和continue语句的区别
- continue语句只结束本次循环,而不是终止整个循环的执行
- break语句结束整个循环过程,不再判断执行循环的条件是否成立