一 C语言的控制语句
<1>单分支判断 if语句
<2>多分支判断 if...else , if ...else if ....
<3>多分支选择 switch ..... case ....
<4>循环语句 for while do--while
<5>控制循环的语句 break continue
<6>跳转语句 goto
1.单分支判断
if(条件){
C语句;
....
}
注意:
条件为真的时候,执行 { }里面的语句
练习:
输入一个字符,如果是大写的字符,则输出它对应的小写字符
如果是小写的字符,则输出它对应的大写字符
点击(此处)折叠或打开
- #include <stdio.h>
- int main()
- {
- char ch;
- printf("Input a character : ");
- scanf("%c",&ch);
- //['A'-'Z']
- if(ch >= 'A' && ch <= 'Z'){
- ch += 32;
- }
- //['a' - 'z']
- if(ch >= 'a' && ch <= 'z'){
- ch -= 32;
- }
- printf("ch = %c\n",ch);
- return 0;
- }
2.多分支判断
if(条件1){
...
}else if(条件2){
...
}else if(条件3){
...
}
条件1是否成立 成立:后面的判断将不会继续 不成立:接下来判断条件2
注意:只要有一个条件成立,后面的判断将不会进行
练习:
输入一个成绩,判断成绩的等级
如果成绩 < 0 或 > 100 则提示用户输入的是非法成绩
如果是:
[0-60) 则输出 A等级
[60-70) 则输出 B等级
[70-80) 则输出 C等级
[80-100]则输出 D等级
3.真和假分别处理
二选一:
if(条件成立){
...
}else{
...
}
-----------------------------------------------------------------------------------------------------
if(条件1成立){
}else if(条件2成立){
}....{
}else{
}
注意:else 一定是和它上面最近的if配套使用
练习:
输入两个数(data1,data2),如果data1 < data2则将data2值自增加后赋值给data1,否则将data1自减后赋值给data2
,最后输出data1和data2的值
点击(此处)折叠或打开
- #include <stdio.h>
- int main()
- {
- int data1,data2;
-
- printf("Input two data : ");
- scanf("%d%d",&data1,&data2);
- if(data1 < data2){
- data1 = ++data2;
- }else{
- data2 = --data1;
- }
-
- printf("data1 = %d,data2 = %d\n",data1,data2);
-
- return 0;
- }
4.if语句可以嵌套使用
if(条件1)
{
if(条件2)
{
a ++;
}
}
===>
if(条件1 && 条件2)
{
a ++;
}
----------------------------------------------------
if(条件1)
{
b --;
if(条件2){
a ++;
}else{
...
}
}
练习:
输入一个整数,如果这个数小于0,则将这个数增加1,然后判断它是否==0,如果等于0,将这个数自减1,
否则将它自增加1 最后,输出这个数的值
点击(此处)折叠或打开
- #include <stdio.h>
- int main()
- {
- int data;
- printf("Input data : ");
- scanf("%d",&data);
- if(data < 0){
- data ++;
- if(data == 0){
- data --;
- }else{
- data ++;
- }
- }
- printf("data = %d\n",data);
- return 0;
- }
5.多分支选择
switch(表达式)
{
case 确定的整型值1:
C语言语句;
...
break;
case 确定的整型值2:
C语言语句;
...
break;
....
default:
C语言语句;
...
break;
}
运行规则:
计算完表达式的值后,决定和哪一个case匹配,匹配上的case,会执行其后面的C语言语句,
直到遇到break语句或return 语句 或 结束的"}",如果所有的case都不匹配,则执行default后面的C语言语句。
注意: case后面可以写的是 -> 数字,字符,宏常量,枚举类型的成员
练习:把成绩等级判断,改写成switch --- case?
点击(此处)折叠或打开
- #include <stdio.h>
- //宏
- #define A 10
- #define B 20
- #define C 30
- int main()
- {
- int ch = 20;
-
- switch(ch)
- {
- case A:
- printf("A\n");
- break;
- case B:
- printf("B\n");
- break;
- case C:
- printf("C\n");
- break;
- }
- return 0;
- }
< 0 或 > 100 非法成绩
[0-60)
[60-70)
[70-80)
[80-100)
switch(score)
{
//错误
case if(score >= 0 && score < 60):
printf("A");
break;
}
61/10 =>6 62 / 10 => 6
81/10 =>8 87 / 10 => 8
switch(score / 10)
{
}
6.循环语句----for
for(表达式1 ; 表达式2 ; 表达式3)
{
C语言语句;
....
}
注意:
<1>只要表达式2的值为真,则循环继续,直到表达式2的值为假,循环结束
<2>三个表达式都可以省略,当表达式2省略的时候,for默认为永真[死循环]
练习:
<1>将1 --- 100中的奇数做累加和,最后输出
for(i = 1;i <= 100;i ++)
{
如果是一个奇数则累加
}
点击(此处)折叠或打开
- #include <stdio.h>
- int main()
- {
- int i;
- int sum = 0;
- for(i = 1;i <= 100;i ++)
- {
- if(i % 2 != 0){
- sum += i;
- }
- }
- printf("sum = %d\n",sum);
- return 0;
- }
<2>找出所有的水鲜花数
满足水鲜花数的条件:
a.是一个三位数
三位数的范围 [100-999]
b.个位的立方 + 十位的立方 + 百位的立方 == 这个数
123
个位:123 % 10 => 3
十位:(123 / 10) % 10 => 2
百位:123 / 100 => 1
点击(此处)折叠或打开
- #include <stdio.h>
- int main()
- {
- int data;
- int a,b,c;
- for(data = 100;data < 1000;data ++)
- {
- a = data % 10;
- b = (data / 10) % 10;
- c = data / 100;
- if((a * a * a + b * b * b + c * c *c) == data)
- {
- printf("%d\n",data);
- }
- }
- return 0;
- }
7.for语句的嵌套
注意:外层for循环执行一次,内层的for循环要循环结束后,接着执行外层循环
任务:
1.输出9 * 9 乘法表
点击(此处)折叠或打开
- #include <stdio.h>
- int main()
- {
- int i,j;
-
- for(i = 1;i <= 9;i ++)
- {
- for(j = 1;j <= i;j ++)
- {
- printf("%d x %d = %d ",j,i,j * i);
- }
- printf("\n");
- }
-
- return 0;
- }
2.输入一个年份,判断是否是润年 [0 - 2015,输出所有是润年的年份
点击(此处)折叠或打开
- #include <stdio.h>
- int main()
- {
- int year;
- //闰年:
- //1.能被4整除,但是不能被100整除
- //2.能被400整除
- for(year = 0;year <= 2015;year ++)
- {
- if(year % 4 == 0 && year % 100 != 0\
- || year % 400 == 0)
- {
- printf("%d\n",year);
- }
- }
- return 0;
- }