Part 1 思维导图整理
一.c中的三大结构
1.顺序结构
2.分支结构
3.循环结构
二.if分支结构
1.if单分支结构
a.格式
if(表达式)
{
//表达式为真执行的语句块
}
b.逻辑:当表达式成立的时候,执行{}内的语句块
c.例子:判断是否为偶数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int num = 4;
if(num%2==0)//用于判断偶数
{
printf("%d是一个偶数\n",num);
}
return 0;
}
2.if双分支语句
a.格式
if(条件1)
{
//满足条件1执行的语句块;
}
else
{
//不满足条件1执行的语句块;
}
b.逻辑:当if条件成立时执行{}内的语句块,否则执行else{}里面的语句块
c.例子:判断奇数偶数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int num = 3;
if(num%2==0)//用于判断偶数
{
printf("%d是一个偶数\n",num);
}
else
{
printf("%d是一个奇数\n",num);
}
return 0;
}
3.if的注意事项
a.if的格式要写对,不能在if的后面加;不然后面的内容与if语句无关
b.if后面加多条语句,语句块必须要用{}
c.else前面必须得有一个if
4.if多分支结构
a.格式:
if(条件1)
{
//满足条件1执行的语句块;
}
else if(条件2)
{
//不满足条件1,但是满足条件2,执行的语句块
}
else
{
//不满足条件1也不满足条件2,执行的语句块
}
b.逻辑:if条件满足时,运行{}内的语句块,否则查看条件二,若满足则运行else if{}内的语句块,若条件二也不满足,则执行else{}内的语句块(可以添加多个else if)。
c.例子:通过输入g(绿灯)r(红灯)y(黄灯),并产生对于输出
#include <stdio.h>
int main(int argc, const char *argv[])
{
char light;
scanf(" %c",&light);
if(light=='r')
{
printf("红灯,不能走\n");
}
else if(light=='g')
{
printf("绿灯,可以走\n");
}
else
{
printf("黄灯,等一等\n");
}
return 0;
}
5.嵌套if
a.格式
if(条件1)
{
if(条件2)
{
//既满足条件1也满足条件2执行的语句块
}
else
{
//满足条件1但是不满足条件2执行的语句块
}
}
else
{
//不满足条件1执行的语句块
}
b.逻辑:先判断条件一,符合则判断条件二,符合则输出条件二{}内的语句块,否则输出条件二下的else{}内的语句块,若不符合条件一,则输出else{}内的语句块。
三.switch ... case分支
1.格式
switch(变量名)
{
case 常量表达式1:
//当常量表达式1的值和变量值相同时执行的语句块
break;
case 常量表达式2:
//当常量表达式2的值和变量值相同时执行的语句块
break;
·······
case 常量表达式n:
//当常量表达式n的值和变量值相同时执行的语句块
break;
default:
//当上述常量表达式的值和变量值都不想同时,执行default后面的语句
//switch···case中的最后一条分支,break可以加也可以不加
}
2.逻辑:当变量名的值等于常量表达式的值时,则执行该case下的语句块。
3.例子:
include <stdio.h>
int main(int argc, const char *argv[])
{
int a = 90;
switch(a)
{
case 12:
printf("a==12\n");
break;
case 1:
printf("a==1\n");
break;
case 90:
printf("a==90\n");
break;
default:
printf("没有情况满足\n");
break;
}
return 0;
}
4.注意事项
a.是对()中的值进行判断,与哪个case后面的值相等,就运行该case的语句块
b.default是执行所有case值和变量值都没对上的时候,所执行的语句块。
c.switch()中不能填变量
d.case后面的值不能重复
e.break作用是退出switch...case语句
f.只能判断,整形和字符型的量
5.case击穿
指case语句块写完没有加上break;,会直接进入下一个case的语句块进行执行。
Part 2.终端输入一个三位数,判断是否为水仙花数。水仙花数:个位三次方+十位三次方+百位三次方 == 本身
#include<myhead.h>
int main(int argc, const char *argv[])
{
int a,g,s,b;
printf("请输入一个三位数\n");
scanf(" %d",&a);
g = a % 10;//得到个位
s = a / 10 % 10;//得到十位
b = a / 100;//得到百位
if (b*b*b + s*s*s + g*g*g == a)
{
printf("是水仙花数\n");
}
else
{
printf("不是水仙花数\n");
}
return 0;
}
Part 3.输入年月日,判断是这年的哪一天,考虑闰平年(可以switch内嵌套if,参考part4)
#include<myhead.h>
int main(int argc, const char *argv[])
{
printf("请输入年月日\n");
int y,m,d,day=0;
scanf("%d年%d月%d日",&y,&m,&d);
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)//闰年
{
switch(m-1)
{
case 12:
day += 31;
case 11:
day += 30;
case 10:
day += 31;
case 9:
day += 30;
case 8:
day += 31;
case 7:
day += 31;
case 6:
day += 30;
case 5:
day += 31;
case 4:
day += 30;
case 3:
day += 31;
case 2:
day += 29;
case 1:
day += 31;
}
}
else
{
switch(m-1)
{
case 12:
day += 31;
case 11:
day += 30;
case 10:
day += 31;
case 9:
day += 30;
case 8:
day += 31;
case 7:
day += 31;
case 6:
day += 30;
case 5:
day += 31;
case 4:
day += 30;
case 3:
day += 31;
case 2:
day += 28;
case 1:
day += 31;
}
}
printf("%d年%d月%d日是该年第%d天\n",y,m,d,day+d);
return 0;
}
Part 4.输入年月,判断这个月有几天,考虑闰平年
#include<myhead.h>
int main(int argc, const char *argv[])
{
printf("请输入年月\n");
int y,m,day;
scanf("%d年%d月",&y,&m);
switch(m)
{
case 12:
day = 31;
break;
case 11:
day = 30;
break;
case 10:
day = 31;
break;
case 9:
day = 30;
break;
case 8:
day = 31;
break;
case 7:
day = 31;
break;
case 6:
day = 30;
break;
case 5:
day = 31;
break;
case 4:
day = 30;
break;
case 3:
day = 31;
break;
case 2:
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)//闰年
{
day = 29;
}
else
{
day = 28;
}
break;
case 1:
day = 31;
break;
}
printf("%d年%d月该月有%d天\n",y,m,day);
return 0;
}