1.顺序结构
顺序结构顾名思义,就是程序自上而下依次执行,例如下面求两个数的和。
#includeint main() { int a = 0; int b = 0; scanf("%d %d", &a, &b);//输入两个数,中间用空格隔开 int sum = a + b; printf("%dn", sum); return 0; }
2.分支结构
也叫选择结构,它不像顺序结构不管怎么样都是从上往下依次执行,它要先判断是否满足所需的条件才会执行该代码块里面的代码。
①if(条件)
{
分支体
}
#includeint main() { int a = 0; scanf("%d", &a);//输入一个数赋值给a if (a > 0)//判断这个数是否大于0 { printf("%dn", a); } printf("你输入的数小于或等于0"); return 0; }
分析:
若if{ }里面的分支体只有一条语句,这个“{ }”符号可写可不写;但是有两条语句或两条以上必须得写上“{ }”。
②if(条件)
{
分支体
}
else
{
分支体
}san
#includeint main() { int a = 0; scanf("%d", &a); if (a % 2 == 0)//“ % ”求余字符 printf("偶数n"); else printf("奇数n"); return 0; }
③嵌套型的
if(t条件)
{
分支体
}
else if(条件)
{
分支体
}
else if(条件)
{
分支体
}
.........
else
{
分支体
}
#includeint main() { int age = 0; scanf("%d", &age); if (age < 18) printf("少年n"); else if (age >= 18 && age < 40) printf("青年n"); else if (age >= 40 && age < 60) printf("壮年n"); else if (age >= 18 && age < 40) printf("老年n"); else printf("老寿星n"); return 0; } // 逻辑上是不满足要求的 //if (18 <= age < 40)//会报错
注意:最后一个else不能写上条件,否则编译器会报错。
④多重选择switch()语句
switch (表达式)
{
case 常量表达式1: 语句1
case 常量表达式2: 语句2
┇
case 常量表达式n: 语句n
default: 语句n+1
}
#includeint main() { int day = 0; scanf("%d", &day); switch (day) //必须是整型表达式 { case 1://必须是整型常量表达式 printf("星期一n"); break; case 2: printf("星期二n"); break; case 3: printf("星期三n"); break; case 4: printf("星期四n"); break; case 5: printf("星期五n"); break; case 6: printf("星期六n"); break; case 7: printf("星期日n"); break; default: printf("输入错误,请输入1-7的数字n"); break; } return 0; }
注意:case 1语句执行完它后面的语句后,若不想执行下面的代码,需要在最后加上break语句,不然会继续往下执行,直到遇到break或遇到最后的default,执行完它里面的代码也会结束该switch。
switch语句也是允许嵌套的。
3.循环结构
可以重复的执行多个语句,循环次数有条件语句限制。常见的循环语句有三种:while(),do{ }while()和for()循环。
①while()循环
while(条件)
{
循环体
}
在屏幕上打印一到十。
#includeint main() { int i = 1; while (i<=10) { printf("%dn", i); i++; } return 0; }
运行结果:
注意:如果条件为真,执行循环体一次,然后再次判断条件。在条件为假之前,循环的判断和执行一直重复进行。每次循环都被称为一次迭代。
②do
{
循环体
} while(条件);
#includeint main() { int i = 1; do { printf("%dn", i); i++; } while (i <= 10); return 0; }
运行结果:
注意:不管条件是否成立,循环体里面的语句至少都会执行一次。因为代码是从上往下依次执行的,先进do里面执行循环体的语句再来判断条件是否满足。
while(条件); 括号后面的分号一定要写上。
③for()循环
for(初始化;判断;更新)
{
循环体
}
打印0到9:
#includeint main() { int i = 0; for (i = 0; i < 10; i++) //建议使用前闭后开区间 { printf("%dn",i); } return 0; }
运行结果:
注意:for语句使用3个表达式控制循环过程,分别由分号隔开。初始化表达式在执行for语句之前只执行一次;然后对判断表达式求值,如果表达式为真,执行循环一次;接着对更新表达式求值,再次检查测试表达式。
for的初始化、判断和更新都可以省略。for(;;)
中间的判断部分如果省略,就意味着判断恒为真,就构成死循环。
如果条件允许,个人不建议省略for循环的3个表达式。
最后
用选择和循环模块来模拟修改密码系统:
#includeint main() { char input[20] = { 0 }; printf("请输入密码:>"); scanf("%s", input); //读取字符串的时候,遇到空格就结束了 //getchar();//拿走n //清理缓冲区 int tmp = 0; while ((tmp = getchar()) != 'n') { ;//空语句 } printf("请确认密码(Y/N):>"); int ch = getchar(); if (ch == 'Y') { printf("确认成功!n"); } else { printf("确认失败!n"); } return 0; }
运行结果:
getchar() - 获取(输入)一个字符
getchar读取失败的时候返回EOF



