控制语句
1.分支语句
1.1 if语句
基本结构:if(表达式)
{
语句块1
}
else{
语句块2
}
如果条件成立执行语句块1否则执行语句块2
例:输入a和b两个整数,用if语句实现两数相减
#include <stdio.h>
int main()
{
int a, b, c;
printf("输入两个数:");
scanf("%d %d", &a, &b);
if (a > b)
{
c = a - b;
printf("%d", c);
}
else
{
c = b - a;
printf("%d", c);
}
return 0;
}
分层结构:if(表达式1)
{
语句块1
}else if(表达式2)
{
语句块2
}else
{
语句块3
}
例:从终端输入一个学生的成绩,判断学生成绩,打印成绩级别
#include <stdio.h>
int main()
{
int a;
printf("请输入您的成绩");
scanf("%d", &a);
if (a < 0 || a > 100)
printf("gun");
else if (a >= 90 && a <= 100)
{
printf("A");
}
else if (a >= 80 && a < 90)
{
printf("B");
}
else if (a >= 70 && a < 80)
{
printf("c");
}
else if (a >= 60 && a < 70)
{
printf("D");
}
else
printf("菜就多练");
return 0;
}
嵌套结构:if(表达式1)
{
if(表达式2)
{
语句块1
}else
{
语句块2
}
} else
{
语句块3
}
例:从终端输入一个学生的成绩,判断学生成绩,打印成绩级别(嵌套版)
#include <stdio.h>
int main()
{
int a;
printf("请输入您的成绩");
scanf("%d", &a);
if (a < 0 || a > 100)
printf("gun");
else
{
if (a >= 90 && a <= 100)
{
printf("A");
}
else if (a >= 80 && a < 90)
{
printf("B");
}
else if (a >= 70 && a < 80)
{
printf("c");
}
else if (a >= 60 && a < 70)
{
printf("D");
}
else
printf("菜就多练");
}
return 0;
}
1.2 Switch case
基本结构:switch (变量或表达式)
{
case 常量1:语句块1;break;
case 常量2:语句块2;break;
........
case 常量n:语句块n;break;
default:语句块n+1;
}
#include <stdio.h>
int main()
{
int a, d;
printf("请输入成绩");
scanf("%d", &a);
d = a / 10;
if (a >= 0 && a <= 100)
{
switch (d)
{
case 10:
printf("A");
break;
case 9:
printf("A");
break;
case 8:
printf("B");
break;
case 7:
printf("C");
break;
case 6:
printf("D");
break;
default:
printf("菜就多练"); break;
}
}
else
printf("你能输一个正常东西吗");
}
总结:
- 执行顺序:先判断switch()中的条件是否满足以下的case,如果满足则执行满足的case中的语句块,如果都不满足则执行default中的默认语句块。
- 如果case的语句块和下面case中的语句块相同,则可以省略。形式如下:
case 常量1:
case 常量2:语句块1;break;
遵守switch语句规则
switch语句非常有用,但在使用时必须谨慎。所写的任何switch语句都必须遵循以下规则:
(1)只能针对基本数据类型中的整型类型使用switch,这些类型包括int、char等。对于其他类型,则必须使用if语句。
(2)case标签必须是常量表达式(constantExpression),如42或者'4'。
(3)case标签必须是唯一性的表达式;也就是说,不允许两个case具有相同的值。
2循环语句
2.1for循环
基本结构:for(表达式1;表达式2;表达式3)
{
语句块1
}
表达式1:赋初值
表达式2:判断的判断条件
表达式3:增值或减值语句
例:
#include <stdio.h>
int main()
{
int y, m, d, ds = 0;
int i, n;
int a[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
scanf("%d %d %d", &y, &m, &d);
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
{
a[2] = 29;
}
for (i = 1; i < m; i++)
{
ds = ds + a[i];
}
n = ds + d;
printf("%d\n", n);
return 0;
}
嵌套结构
for(表达式1;表达式2;表达式3)
{
for(表达式4;表达式5;表达式6)
{
语句块;
}
}
例:打印99乘法表
#include <stdio.h>
int main()
{
int i, j;
for (i = 1; i < 10; i++)//行数
{
for (j = 1; j <= i; j++)//列数
{
printf("%d*%d=%d\t", j, i, i * j);
}
printf("\n");
}
}
输入任意两个数,输出两数之间(包括这两个数)偶数之和。
#include <stdio.h>
int main()
{
int a, b, c, i, sum=0;
printf("请输入两个数");
scanf("%d %d", &a, &b);
if (a > b)
{
c = a;
a = b;
b = c;
}
for (i = a; i <= b; i++)
{
if (i % 2 == 0)
{
sum += i;
}
}
printf("%d", sum);
}
打印以下图案:
要求行数从终端输入。
输入:5
输出以下:
#include <stdio.h>
int main()
{
int n, i, j;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
for (j = 1; j <= i; j++)
{
printf("*");
}
printf("\n");
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= i - 1; j++)
{
printf(" ");
}
for (j = 1; j <= n - i + 1; j++)
{
printf("*");
}
printf("\n");
}
}
变形:
变形一:
int i=0;for(;表达式2;表达式3)
{
语句块;
}
变形二:
int i=0;
for(;表达式2;)
{
语句块;
表达式3;
}
变形三:
int i=0;
for(;;)//死循环
{
if(表达式2)
{
语句块;
表达式3;
}
else
{
break; //结束循环
}
}
2.2 while循环
格式:
定义循环变量并赋值;
while(判断条件)
{
语句块;
增值或减值语句;
}
2.3 do while
格式:
赋初值语句;
do
{
语句块;
增减值语句;
}while(判断条件);
例:
#include <stdio.h>
int main()
{
int a = 1, b, sum = 0;
do
{
sum += a;
a++;
} while (a <= 10);
printf("%d", sum);
}
2.4 死循环
for(;;){}
while(1){};
while(1);
2.5循环控制语句
break:直接结束循环
continue:结束本次循环执行下一次循环
goto:强制跳转到标签位置,可以应用于多重循环嵌套。(尽量不要使用!)