5.8 KiB
5.8 KiB
目录
流程控制
- 顺序,选择,循环
- NS图,流程图(工具:Visio,Dia)
- 简单结构与复杂结构:自然流程
- 顺序:语句逐句执行
- 选择:出现了一种以上的情况
- 循环:在某个条件成立的情况下,重复执行某个动作
关键字
- 选择:
if-else,switch-case - 循环:
while,do-while,for,if-goto - 辅助控制:
continue,break
详解选择
if-else
// 格式
if(exp)
cmd;
// 或者:
if(exp)
cmd1;
else
cmd2;
else只与离它最近的if匹配
#include <stdio.h>
#include <stdlib.h>
/**
* score [90-100] A
* score [80-90) B
* score [70-80) C
* score [60-70) D
* score [0-60) E
*/
// 闰年的判断:能被4整除但不能被100整除,或者能被400整除
int main()
{
int year;
scanf("%d", &year);
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
printf("%d is leap year.\n", year);
else
printf("%d is not leap year\n.", year);
#if 0
int score;
printf("Enter a score:[0,100]:\n");
scanf("%d", &score);
if (score < 0 || score > 100)
{
fprintf(stderr, "Input error!\n");
exit(1);
}
if (score > 90)
puts("A");
else if (score > 80)
puts("B");
else if (score > 70)
puts("C");
else if (score > 60)
puts("D");
else
puts("E");
#endif
#if 0
if (score <= 100 && score >= 90)
puts("A");
if (score <= 90 && score >= 80)
puts("B");
if (score <= 80 && score >= 70)
puts("C");
if (score <= 70 && score >= 60)
puts("D");
if (score <= 60 && score >= 0)
puts("E");
#endif
#if 0
int a = 1, b = 1,c=2;
if (a == b)
if(b==c)
printf("a==b\n");
else
printf("a!=b\n")
注意:else看的是最近的if!!!
#endif
#if 0
int a = 9, b = 10;
if (b++ < a)
printf("1\n");
else
printf("0\n");
printf("a=%d,b=%d\n", a, b);
printf("%d\n", (++b < a, ++a, b++));
#endif
exit(0);
}
switch-case
// 格式
switch(exp)
{
case 常量或常量表达式:
break;
case 常量或常量表达式:
break;
......
default:
}
- 最好的是考虑到所有的情况写出来,在default进行报错,而不是省略一个情况放到default里。
case后面要的是常量或常量表达式,例如放score/10 >= 9就是不行的。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int ch;
ch = getchar();
switch (ch)
{
case 'a':
case 'A':
printf("Ant\n");
break;
case 'b':
case 'B':
printf("Butterfly\n");
break;
case 'c':
case 'C':
printf("Cobra\n");
break;
default:
printf("Input error");
// break;
// default可以不用
}
#if 0
int score;
printf("Please enter:\n");
scanf("%d", &score);
if (score < 0 || score > 100)
{
fprintf(stderr, "EINVAL\n");
exit(1);
}
switch (score / 10)
{
case 10:
case 9:
puts("A");
break;
case 8:
puts("B");
break;
case 7:
puts("C");
break;
case 6:
puts("D");
break;
default:
puts("E");
break;
}
#endif
exit(0);
}
详解循环
while
// 最少执行0次
while(exp)
loop;
do-while
// 最少执行1次
do
{
loop;
}while(exp);
for
// 最少执行0次
for(exp1;exp2;exp3)
loop;
goto
- 慎重使用
if-goto goto实现的是 无条件的跳转,且不能跨函数跳转
死循环
while(1);
for(;;);
ctrl + c杀掉死循环。
辅助控制
break,continue
练习专题
1
A以每年10%的单利息投资了100美元,B以每年5%的复合利息投资了100美元。
求需要多少年,B的投资总额超过A,并且输出当时各自的资产总额
2
从终端读入数据,直到输入0为止,计算出其中的偶数的个数和平均值,奇数的个数和平均值
3
从终端输入若干字符,统计元音字母
4
写出fibonacci数列的前40项,不能用数组
1, 1, 2, 3, 4, 5, 8, ...
5
输出九九乘法表
6
百钱买百鸡,公鸡5元,母鸡3元,鸡仔1元,算出来买的各自多少只
7
输出1000内的水仙花数:
153: 1+125+27 =153
8
求出1000以内的所有的质数
2, 3, 5, 7, 11, 13, 17
9
在终端实现如下输出
ABCDEF
BCDEF
CDEF
DEF
EF
F
10
包括钻石型
* * * * * * * * *
11
从终端输入N个数,以字母Q/q作为终止,求和。
12
从半径为1开始,输出圆的面积,直到面积大于100为止