一、流程控制
(一)分支结构
- if分支语句:
- 格式一:
//若表达式为真,则执行语句块;若表达式为假,则不执行语句块。
if(表达式)
{
语句块//语句块只有一行时,可以省略{}
}
- 格式二:
//若表达式为真,则执行语句块1;若表达式为假,则不执行语句块2。
if(表达式)
{
语句块1
}
else
{
语句块2
}
vim编辑器全选对其命令:在命令模式下使用:ggvG=。ggvG:全选,=:对齐。
- 格式三:if的嵌套
if(表达式1)
{
语句块1//表达式1为真,语句块1执行
if(表达式2)
{
语句块2//表达式1和表达式2为真,语句块1和语句块2执行
}
else
{
语句块3//表达式1为真,表达式2为假,语句块1和语句块3执行
}
}
else
{
语句块4//表达式1为假,表达式4执行
}
练习:使用循环嵌套,判断输入的成绩的等级。
#include <stdio.h>
int main()
{
int grades;
printf("请输入你的成绩:");
scanf("%d",&grades);
if(grades >= 90 && grades <= 100)
{
puts("优");
}
else
{
if(grades >= 80 && grades < 90)
{
puts("良");
}
else
{
if(grades >= 60 && grades < 80)
{
puts("中");
}
else
{
puts("差");
}
}
}
return 0;
}
- 格式四:对格式三if语句嵌套的精简。
if(表达式1)
{
语句块1//只有表达式1为真时,语句块1执行
}
else if(表达式2)
{
语句块2//表达式1为假,且表达式2为真时,语句块2执行
}
else
{
语句块3//表达式1和表达式2为假时,语句块3执行
}
练习:elseif语句,判断输入的成绩的等级。
#include <stdio.h>
int main()
{
int grades;
printf("请输入一个成绩:");
scanf("%d",&grades);
if(grades >= 90 && grades <= 100)
{
puts("优");
}
else if(grades >= 80 && grades < 90)
{
puts("良");
}
else if(grades >= 60 && grades < 80)
{
puts("中");
}
else
{
puts("差");
}
return 0;
}
- 多分支结构——switch()语句:
- 格式:
switch(表达式)//表达式的结果只能是常量
{
case 常量表达式1://常量表达式,表达式中不能有变量
语句块1;
break;//语句块1执行后,退出switch case结构。
case 常量表达式2:
语句块2;
break;//若case确实break,则继续执行后面的case
...
case 常量表达式n:
语句块n;
break;
default://表达式的值,不是前面所有的常量表达式时执行
语句块n+1;
break;
}
练习:使用switch语句,判断输入的成绩的等级。
#include <stdio.h>
int main()
{
int grades;
printf("请输入一个成绩:");
scanf("%d",&grades);
switch(grades / 10)
{
case 10:
case 9:
puts("优");
break;
case 8:
puts("良");
break;
case 7:
case 6:
puts("中");
break;
default:
puts("差");
break;
}
return 0;
}
(二)循环结构
- 循环:指在程序实现过程中,有动作是重复的,则可以使用循环结构,复用这部分代码,有条件的循环或退出循环。
- while循环语句:
- 格式:
//先判定表达式的真假,若真执行一次语句块,执行完毕后回到表达式,判定步骤重复执行;若假,跳过语句块的执行,往后继续执行。
while(表达式)
{
语句块
}
练习:使用while循环求输入数的阶乘。
#include <stdio.h>
int main()
{
int n,ret = 1;
printf("请输入一个数:");
scanf("%d",&n);
while(n)
{
ret *= n;
n--;
}
printf("ret = %d\n",ret);
return 0;
}
- do-while循环语句:
- 格式:
//先执行一次语句块,再判定表达式,若表达式为真,则再一次执行语句块;若表达式为假,则跳过语句块,继续往后执行。
do
{
语句块
}while(表达式);
- 应用:输入时,输入错误,重新输入。
#include <stdio,h>
int main()
{
int a,flag = 0;
printf("请输入一个学号:\n");
do
{
flag = scanf("%d",&a);
}while(flag == 1);
printf("%d\n",a);
return 0;
}
- for循环:
- 格式:
//执行表达式1,
for(表达式1:表达式2:表达式3)
{
语句块
}
练习:打印图形。
#include <stdio.h>
int main()
{
int n;
printf("请输入打印的层数:");
scanf("%d",&n);
int row,column;
for(row = 0; row < n; row++)
{
for(column = 0; column < 2*n-1; column++)
{
if(column == n-row-1 || column == n+row-1)
{
printf("*");
}
else if(row == n-1)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
return 0;
}
程序运行结果: