一、switch····case分支
C语言的结构
- 顺序结构
- 循环结构
- 分支结构
【1】格式
switch(变量)
{
case 常量表达式:
语句块1;
break;
case 常量表达式:
语句块2;
break;
····
case 常量表达式:
语句块n;
break;
default:
语句块n+1;
break;
}
switch和后面括号内的内容是,选择的变量,case后面的常量表达式,就是switch后面的变量可能出现的情况。 哪个case后面的常量是变量的结果,就执行哪个case后面的代码块。
switch···case的执行逻辑
进入switch···case判断变量的结果,和case后的常量表达式判断,走满足的case后面的分支,
如果一个case后面没有break,执行完该case后会顺序向后执行下面的case/switch···case语句,
default的作用,如果不关心其他分支,就写一个default,其他分支就走default
使用switch···case的注意事项
1、switch后面的变量只能是char/int
2、如果不加break会顺序向后执行,叫做case击穿
3、case的顺序,不会影响程序的执行
4、default的位置也不会影响程序的执行,只有所有case都不满足时,才会走default分支
5、case击穿可以根据使用场景的不用利用起来。
练习:
1、终端输入学生成绩,输出成绩等级,[100,90]A,(90,80]B,(80,70]C,(70,60]D,(60,0]不及格,使用switch····case完成。
2、使用switch···case完成简易计算器功能(+、-、*、/、%),如3+5输出8,只完成个位数的计算
3、终端输入年月日,输出是这一年的第几天,如2023.3.1输出60,需要考虑闰平年,2月闰年29,平年28。
1 3 5 7 8 10 12 都是31天
#include <stdio.h>
int main(int argc, const char *argv[])
{
int year,month,day;
scanf("%d%d%d",&year,&month,&day);
switch(month)
{
case 12: day = day+30;
case 11: day = day+31;
case 10: day = day+30;
case 9: day = day+31;
case 8: day = day+31;
case 7: day = day+30;
case 6: day = day+31;
case 5: day = day+30;
case 4: day = day+31;
case 3: //day = day+28;
//二月统一+28天,在switchcase外判断闰平年再加1
//在switch```case的里面嵌套if判断
if(year%4==0&&year%100!=0||year%400==0)
{
day = day + 29;
}
else
{
day = day+28;
}
case 2:
day = day+31;
case 1:
break;
}
/*if(year%4==0&&year%100!=0||year%400==0)
{
day+=1;
}*/
printf("%d\n",day);
return 0;
}
二、while循环
【1】格式
【2】练习
1、使用while循环输出5行helloworld。
#include <stdio.h>int main()
{
int i = 2 ;
while(i<=10)
{
printf ("hello world\n" );
i+=2;
//让循环变量每次自增2
}
}
2、1-100中的偶数
include <stdio.h>
int main(int argc, const char *argv[])
{
int i = 1;//循环变量的初始值
while(i<=100)
{
if(i%2==0)
{
printf("%d是偶数\n",i);
}
i++;//改变循环变量的语句/步长:循环变量的改变方式
}
return 0;
}
#include <stdio.h>
int main( int argc, const char *argv[])
{
int i = 2;
while( i<=100)
{
printf( "%d \n" ,i);
i+=2;//i的步长是2
}
return 0;
}
3、求1-100的和,5050。
include <stdio.h>
int main(int argc, const char *argv[])
{
int i = 1, sum =0;//分别给循环变量和su
while(i<=100)
{
sum+=i;
i++;//改变循环变量
}
printf("%d \n" , sum);
return 0;
}
4、输出100-999内的所有水仙花数,(各位的三次方相加等于该数)
使用pow函数,需要加编译选项-lm。
#include <stdio.h>
#include <math.h>
int main( int argc, const char *argv[])
{
int num = 100 , a,b,c;
while( num<=999)//while(i<1000)
{
a = num/ 100;
b = num/10%10;
c = num%10;
if( pow( a , 3 )+pow(b,3 )+pow( c, 3 )==num)// pow的使用方式pow(数,幂次),gcc -lm
{
printf("%d是一个水仙花数\n" , num) ;
}
num++;
}
return 0;}
5、猴子吃桃问题,猴子第一天摘了若干个桃,
当即就吃了一半的桃,没过瘾,又多吃一个
第二天,在剩下的桃里吃了一半的桃,没过瘾,又多吃一个
依次类推,知道第10天,猴子发现只剩一个桃了。
问:猴子第一天摘了几个桃子。
#include <stdio.h>
int main( int argc,const char *argv[]){
int peach = 1, i=9;//i进入循环时是第9天,第9天的桃子数才需要去计算
while(i>=1)//循环进行9次
{
peach=(peach+1)*2;
i--;//改变循环变量
}
printf("%d\n" , peach) ;
return 0;
}
三、for循环
【1】格式
【2】练习
1、求1-100内奇数的和。
#include <stdio.h>
int main( int argc, const char *argv[])
int i, sum=0;
for(i=1;i<=100 ;i++)//i=1,只会执行一次,i++执行的次数和循环次数一致
{
if( i%2!=O)
{
sum+=i;
}
}
//循环结束,说明奇数和求完了
printf("%d\n" , sum) ;
return 0;
}
2、终端输入一个数,求该数的所有因子,如12,输出1 2 3 4 6 12
3、输出下三角的九九乘法表
#include <stdio.h>
int main( int argc, const char *argv[])
{
int i,j;
for(i=1;i<=9 ;i++)//外层循环控制行数{
for(j=1;j<=i;j++)//内层循环控制每行打印的列数
{
printf("%d*%d=%d\t",j,i,i*j);
}
printf( "\n"); //每一行打印完输出换行
}
return 0;
}
4、终端输入行数,打印直角三角形
四、辅助控制关键字
return break continue
【1】break
break只能用在循环和switch···case中
break用在循环中,表示退出本层循环。
【2】continue
退出本层本次循环
continue放在while中时,需要把修改循环变量的语句放在continue的上面
【3】return
退出当前函数
作业:
- 整理思维导图
- while循环的练习用for循环做一遍,桃子数的不需要
- for循环的练习用while写一遍
- 51作业我会在这个文件夹里新建一个笔记,大家记得查看,晚一点更新。
while:
for: