三、语句
1、分支语句
1.2、switch

switch(变量或表达式)
{
case 常量1:语句块1;break;
case 常量2:语句块2;break;
……
case 常量n:语句块n;break;
default:语句块n+1;
}
执行顺序:
判断switch后面的表达式结果,和case后面的常量匹配,如果匹配成功,就执行对应的语句块,碰到break则switch结束;如果没有匹配成功,则执行default后面的语句块,switch结束。
示例如下:
#include<stdio.h>
int main()
{
int a;
scanf ("%d", &a );
switch ( a )
{
case 1:
printf (" 1\n");
break;
case 2:
printf (" 2\n");
break;
case 3:
printf (" 3\n");
break;
default:
printf ("other\n");
break;
}
return 0;
}
注意:
1、表达式不能是浮点型或字符串,只能整型或者是字符型
练习:从终端输入年月日,判断这是这一年的第几天
#include<stdio.h>
int main()
{
int year, month, day;
int number;
printf ("Please enter the date:");
scanf ("%d/%d/%d", &year, &month, &day );
number = day;
switch ( month)
{
case 1:
break;
case 2:
number+= 31;
break;
case 3:
number+= 31+28;
break;
case 4:
number+= 31+28+31;
break;
case 5:
number+= 31+28+31+30;
break;
case 6:
number+= 31+28+31+30+31;
break;
case 7:
number+= 31+28+31+30+31+30;
break;
case 8:
number+= 31+28+31+30+31+30+31;
break;
case 9:
number+= 31+28+31+30+31+30+31+31;
break;
case 10:
number+= 31+28+31+30+31+30+31+31+30;
break;
case 11:
number+= 31+28+31+30+31+30+31+31+30+31;
break;
case 12:
number+= 31+28+31+30+31+30+31+31+30+31+30;
break;
}
if ( year% 4 == 0)
{
number+=1;
}
printf ("%d/%d/%d is %d", year, month, day, number);
return 0;
}
进阶用法:
case 后面可以不加break,程序会执行下一个case,直到遇到break。这种情况通常在两个或多个case共用一个语句块,即多个case表达同一个意思时使用,可以有效减少代码行数。
示例如下:
#include<stdio.h>
int main()
{
int a;
scanf ("%d", &a );
switch ( a )
{
case 1:
printf (" 1\n");
//break;
case 2:
printf (" 2\n");
//break;
case 3:
printf (" 3\n");
//break;
default:
printf ("other\n");
//break;
}
return 0;
}
运行结果如下:
上述练习题可以简化代码
#include<stdio.h>
int main()
{
int year, month, day;
int number;
printf ("Please enter the date:");
scanf ("%d/%d/%d", &year, &month, &day );
switch (month)
{
case 12: number += 30;
case 11: number += 31;
case 10: number += 30;
case 9: number += 31;
case 8: number += 31;
case 7: number += 30;
case 6: number += 31;
case 5: number += 30;
case 4: number += 31;
case 3: number += 28;
case 2: number += 31;
case 1: number += day;
}
if ( year% 4 == 0)
{
number+=1;
}
printf ("%d/%d/%d is %d", year, month, day, number);
return 0;
}
2、循环语句
2.1、for循环
2.1.1、for循环基本结构

for(表达式1;表达式2;表达式3)
{
语句块1;}
表达式1:初值
表达式2:终止条件
表达式3:增或减
执行顺序:
首先执行表达式1,然后判断表达式2是否成立,如果成立,则执行语句块1,然后执行表达式3,第一次循环结束,第二次循环开始,再次判断表达式2是否成立,成立继续循环,不成立退出循环,执行下面的语句;如果第一次判断表达式2不成立,那么直接结束循环,执行后面的语句。
示例如下
#include <stdio.h>
int main(int argc, char const *argv[])
{
int i;
for (i = 1; i <= 10; i++)
{
if(i == 10)
{
printf("恭喜宿主成功回到主世界\n");
}
else
{
printf("你已经死了%d次,还差%d次就可以回到主世界了\n", i, 10-i);
}
}
return 0;
}
2.1.2、for循环嵌套结构

for循环中的语句块也可以是另一个for循环
for(表达式1;表达式2;表达式3)
{
for(表达式4;表达式5;表达式6){
语句块1;
}
}
执行顺序:
里面的for循环循环一轮,外面的循环循环1次
示例如下:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int i, j;
for (i = 1; i <= 10; i++)
{
for (j = 1; j <=10; j++)
{
printf("%d:%d ", i, j);
}
printf("\n");
}
return 0;
}
运行结果如下:

可以很明显看到,里面的for循环循环一轮,外面的循环循环1次,即外层循环控制行数,内层循环控制列数
2.1.3、for循环的省略
for循环里面的表达式1,2,3都可以省略,但’;‘不能
表达式1
for(;表达式2;)
{
语句块1;
表达式3;
}
表达式1:for循环的初值,所以在for循环前面完成初值的定义和赋值
表达式2:for循环的终止条件,省略的话就是一个死循环,在未来的项目中可能会出现死循环的应用
表达式3:for循环的增值或减值,在for循环当次的循环中最后执行,省略不写的话也是死循环
练习:打印以下图案
*
**
***
****
*****
#include<stdio.h>
int main()
{
for( int i=0;i<5;i++)
{
for(int j=0;j<=i;j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
进阶练习:打印以下图案:
*
**
***
****
**********
*******
**
*
#include <stdio.h>
int main()
{
int i, j, s;
for (i = 1; i <= 5; i++)
{
for (j = 1; j <= i; j++)
{
printf("*");
}
printf("\n");
}
for (i = 1; i <= 5; i++)
{
for (s = 0; s < i-1; s++)
{
printf(" ");
}
for (j = 0; j <= 5-i; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
2.2、while循环

函数结构如下:
while(表达式1)
{
语句块;
增值或减值;
}
//表达式1:判断条件
执行顺序:
首先定义循环变量并赋值,然后判断是否符合条件,如果符合就进入循环执行语句块,以及增值和减值语句,然后继续判断,直到条件不成立,退出循环。
示例:1到10累加
#include <stdio.h>
int main(int argc, char const *argv[])
{
int i = 1, sum = 0;
while (i <= 10)
{
sum += i;
i++;
}
printf("%d\n", sum);
return 0;
}
2.3、do_while循环

函数结构:
do
{
语句块1;
增值或减值;
} while(表达式1);
//表达式1:判断条件
执行顺序:
do_while循环先执行一次语句块和增值减值,执行完之后再判断条件,初值如果不符合条件,do—_while循环还是会执行一次循环,while和for循环中如果初值不符合条件的话,一次都不执行。
示例:1到100累加
#include<stdio.h>
int main()
{
int i=0;
int sum=0;
do
{
sum+=i;
i++;
}while(i<=100);
printf("%d\n",sum);
return 0;
}
2.4、循环控制语句
break;
continue;
break:结束循环,后面的循环不再执行
continue:结束当次循环,开始下一次循环
使用场景:
循环语句中,结束循环
使用时要有判断条件
示例:
#include<stdio.h>
int main()
{
for(int i=0;i<=10;i++)
{
if(i==3)
{
//break;
continue;
}
printf("%d\n",i);
}
return 0;
}
运行结果如下:


练习:终端上输入一个字符,并将其打印到终端上,当输入为q时,程序结束
#include <stdio.h>
int main(int argc, char const *argv[])
{
char ch;
while(1)
{
scanf("%c", &ch);
// getchar();
if(ch == '\n')
continue;
if(ch == 'q')
break;
printf("%c\n", ch);
}
return 0;
}


被折叠的 条评论
为什么被折叠?



