C语言流程结构:顺序结构,分支结构,循环结构
1.顺序结构:程序从上往下依次执行就叫顺序结构
2.分支结构:程序有选择的执行某段代码或者不执行某段代码
3.循环结构:程序重复的执行某段代码
分支结构之if分支
if语句
if单分支:
语法:if(表达式){
语句块;
}
语义:如果表达式的结果为真,则执行语句块,否则不执行语句块
用户输入一个数,判断是否是偶数
int main(int argc, const char * argv[]) {
int number;
printf("请输入一个自然数");
scanf("%d",&number);
if (!(number%2)){
printf("number %d 是偶数\n",number);
printf("真的是偶数\n");
}
if (number%2){
printf("number %d 是奇数\n",number);
}
return 0;
}
if双分支:
语法:
if(表达式){
语句块1;
}else{
语句块2;
}
语义:如果表达式的结果为真,则执行语句块1,否则执行语句块2
语句块1或者语句块2,至少会有一个被执行
int main(){
int number;
printf("请输入一个自然数");
scanf("%d",&number);
if ((number%2)==0){
printf("number %d 是偶数\n",number);
printf("真的是偶数\n");
}
else {
printf("number %d 是奇数\n",number);
}
return 0;
}
if语句的嵌套
简单来说:就是if语句里面还可以有任意的if语句
性格测试 male,female->sex
男生女生对不同口味的巧克力(chocolate)选择(choice), 判断其恋爱性格(personality)
(1)酒心巧克力(alcohol) (2)扇贝巧克力(shell) (3)果仁巧克力(nut)
男生: 1) 您是一个恋爱高手, 很会讨女孩子喜欢
2)您是一个胆小的人, 总是担心自己不够好
3)您对女孩子一心一意, 但是她总是感觉不到
4)您输入了一个错误选项
女生: 1)在恋爱中, 您往往处于劣势
2)您是一个浪漫的人, 恋爱中能够很好的调节气氛
3)您是一个女强人, 恋爱中总是忽略对方的感受
4)您输入了一个错误选项
int main(){
int sex;
int choice;
printf("请输入您的性别 1:女性,2:男性\n");//5
scanf("%d",&sex);
printf("请输入您喜欢的巧克力口味 1:酒心巧克力 2:扇贝巧克力 3:果仁巧克力\n");
scanf("%d",&choice);
//排错
if(sex<0||sex>2||choice<0||choice>3){
printf("输入有误");
return 0;
}
//判断系统
//男士
if(sex == 2){
if(choice == 1){
printf("您是一个恋爱高手, 很会讨女孩子喜欢");
}else if(choice == 2){
printf("您是一个胆小的人, 总是担心自己不够好");
}
else{
printf("您对女孩子一心一意, 但是她总是感觉不到");
}
}
else{
if(choice == 1){
printf("在恋爱中, 您往往处于劣势");
}else if(choice == 2){
printf("您是一个浪漫的人, 恋爱中能够很好的调节气氛");
}
else{
printf("您是一个女强人, 恋爱中总是忽略对方的感受");
}
}
return 0;
}
if多分支:
语法:
if(表达式1){
语句块1
}else if(表达式2){
语句块2
}else if(表达式3){
语句块3
}
……………………
else if(表达式n){
语句块n
}else{
语句块n+1;
}
语义:先判断表达式1,如果成立则执行语句块1,后面的都不执行了,否则继续判断表达式2,如果成立,则执行语句块2,后面的都不执行了,如果不成立则判断语句块3,如果成立则执行语句块3,否则继续往下判断,直到else上面的条件都不满足,就执行语句块n+1;
int main(){
int score;
printf("请输入您的成绩");
scanf("%d",&score);
//错误输入提前退出
if(score<0 || score>100)
{
printf("输入有误");
return 0;//退出
}
if (score<60) {
printf("不及格");
} else if (score<80){
printf("及格");
}else {
printf("优秀");
}
return 0;
}
注意:在if多分支中我们的这种语法格式是一个整体,上面判断过的内容如果不成立,那么下面判断时已经做了过滤!!!在编程过程中可避免重复
if语句需要注意的地方:
1.if语句后面千万不要加分号,如果你非要手贱加一个分号,那么就加在大括号后面
2.if语句的大括号,其实是可以省略的!
当你省略大括号的时候,那么if语句只能管到离它最近的一句语句,但是这句语句不能是声明变量的语句
3.if语句里面可以写任意条语句(必须要有大括号)
4.非0的数就是真,0就是假,避免让你的表达式是永真或永假
5.if语句里面定义的变量只能在它语句块里面访问
6.if语句小括号里面的表达式可以写任意表达式
分支结构之switch分支
switch语句
switch语法:
switch(表达式){
case 常量表达式1:
语句块1
break;
case 常量表达式2:
语句块2
break;
case 常量表达式3:
语句块3
break;
……
default:
语句块n
break;
}
语义: 先得出表达式的结果,根据结果跳转到相应的case语句块里面去执行
表达式结果 == 常量表达式 就叫相应的case语句块
如果case 后面的常量表达式没有一个跟表达式结果对应的
那么就跳转到 default里面执行语句块n
输入一个月份(month),判断是什么季节(season)
2,3,4 春季,5,6,7夏季,8,9,10秋季,11,12,1 冬季
int main(){
int month;
printf("请输入月份\n");
scanf("%d",&month);
switch (month) {
case 2:
case 3:
case 4:
printf("spring");
break;
case 5:
case 6:
case 7:
printf("summer");
break;
case 8:
case 9:
case 10:
printf("autumn");
break;
case 11:
case 12:
case 1:
printf("winter");
break;
default:
printf("输入有误");
break;
}
return 0;
}
switch语句的穿透问题:
当case块里面不加break的时候,会发生穿透
穿透意思:就是从这个case块里面执行完语句后,会继续跳到下一个case块里面继续执行
所以,我们必须加break,防止穿透
break可以跳出当前的switch语句
default可写可不写,写的话无论写在哪个位置,效果都是一样的,但是如果写在上面时,要防止发生穿透问题,若放在最下面,break可以不写,但建议写上,养成良好的编程习惯
switch语句需要注意的地方:
1.switch语句后面的小括号只能写整数类型的表达式,否则会报
2.case后面只能接常量表达式
3.case后面的常量表达式不能有重复的值
4.switch小括号后面不要加分号,手贱要加分号加在大括号后面
5.case后面不能立即声明变量,除非在声明前面加一条或者N条语句
6.非要在 case后面立即声明变量时那么就在case块里面加一个大括号
7.如果不加大括号声明的变量,其他case块也可以访问
8.default可以写在任意位置,不影响结果
if和switch的比较
有时间两者可以互换,if更为灵活,而switch只能是单值,散点