前言:
此刻朋友们对“判断语句和赋值语句”大体比较关注,咱们都想要知道一些“判断语句和赋值语句”的相关文章。那么小编同时在网摘上网罗了一些有关“判断语句和赋值语句””的相关知识,希望你们能喜欢,各位老铁们一起来学习一下吧!分支语句和循环语句
分支语句包括:if语句,switch语句
循环语句包括:for语句,while语句,do-while语句
if语句
int main(){ int age = 127; if (age < 18) printf("未成年\n"); else printf("已成年\n");return 0;}
进阶用法
int main(){ int age=10; if (age < 18) printf("未成年\n"); else if (age < 28) printf("青年\n"); else if (age < 50) printf("壮年\n"); else if (age < 90) printf("老年\n"); else printf("长寿\n"); return 0;}
应用
int main(){ int age=100; if (age < 18) printf("未成年\n"); else if (age >= 18 && age < 28) printf("青年\n"); else if (age >= 28 && age < 50) printf("壮年\n"); else if (age >= 50 && age < 90) printf("老年\n"); else printf("长寿\n"); return 0;}
若要执行多条语句需要使用代码块,{}就是代码块
int main(){ int age=10; if (age < 18) { printf("未成年\n"); printf("不建议谈恋爱\n"); } else { if (age >= 18 && age < 28) printf("青年\n"); else if (age >= 28 && age < 50) printf("壮年\n"); else if (age >= 50 && age < 90) printf("老年\n"); else printf("长寿\n"); } return 0;}else的就近原则
else和最近的if匹配
int main(){ int a=0; int b=2; if(a==1)//和else对齐 if(b==2) printf("hehe\n"); else printf("haha\n"); return 0;//不打印结果}
int main(){ int a=0; int b=2; if(a==1) if(b==2)//和else对齐 printf("hehe\n"); else printf("haha\n"); return 0;//不打印结果}
两个代码都不打印结果,因为无论else和谁对齐else都和最近的if匹配;
所以第一个if条件不成立,下一条if语句无法执行,从而与之匹配的else语句也无法执行,程序直接结束
注意:if(是条件判断语句),判断相等的语句==有时会写成赋值语句=,造成bug
int main(){ int num =4; if(num=5)//此处是赋值语句=,而不是判断语句== { printf("呵呵\n"); } return 0;}
程序运行就出现问题,无论num为多少都会被赋值为5,然后打印呵呵
建议可以写成if(5==num),这样当写成赋值语句时就会报错,提高安全性
练习
1.判断一个数是否为奇数
int main(){ int i = 0; while (i <= 100) { if (i % 2 == 1) printf("%d ", i); i++; } return 0;}switch语句
int main(){ int day = 0; scanf("%d", &day); switch (day) { case 1: printf("星期一\n"); break; case 2: printf("星期二\n"); break; case 3: printf("星期三\n"); break; case 4: printf("星期四\n"); break; case 5: printf("星期五\n"); break; case 6: printf("星期六\n"); break; case 7: printf("星期七\n"); break; default: printf("输入错误\n"); } return 0;}
与case语句配合,case语句后需为整型常量表达式;switch后需为整型表达式;break跳出,若没有break则继续执行下一条语句,default为所有的case标签都不匹配的情况
break是跳出循环
continue是从此语句处跳过循环体的本次循环(continue剩下的语句不再执行)
while语句
打印1-10的数字
int main(){ int i = 1; while (i <= 10) { printf("%d ", i); i++; } return 0;}
在循环中break和continue的区别
//-------break-----int main(){ int i = 1; while (i <= 10) { if (i == 5) break; printf("%d ", i); i++; } return 0;//打印结果为1 2 3 4结束}
//---------continue------int main(){ int i = 1; while (i <= 10) { if (i == 5) continue; printf("%d ", i); i++; } return 0;//打印结果为1 2 3 4死循环}//--------------------int main(){ int i = 1; while (i <= 10) { i++; if (i == 5) continue; printf("%d ", i); } return 0;//打印结果为1 2 3 4 6 7 8 9 10}getchar和putchar
getchar()获取字符,putchar()输出字符
int main(){ int ch = 0; while ((ch = getchar()) != EOF) //getchar()获取字符,putchar()输出字符 //EOF 即end of file // 文件结束标志,本质是-1 { //获取不到EOF一直执行循环,输入ctrl+z可以输入EOF putchar(ch); } return 0;}
应用
int main(){ int ret = 0; int ch = 0; char passward[20] = { 0 }; printf("请输入密码:");//输入密码后,密码和所按的回车即\n也被存储在输入缓冲区 scanf("%s", passward);//此时输入密码,并把密码存放在passward数组中,此时输入缓冲区中还剩下\n //此时若无getchar();语句,则\n被取走 //被取走的\n的ASCLL码值为10 printf("请确认(Y/N):"); //getchar();//清空输入缓冲区,即把\n取走以免\n的ASCLL码值进入判断语句 // //但是当缓冲区字符超过一个就失效了 while ((ch = getchar()) != '\n')//循环取,直至取到\n停止 { ; } ret = getchar();//此时输入缓冲区为空取不到值,等待用户输入 if (ret == 'Y') { printf("确认成功\n"); } else { printf("放弃确认\n");}
一个只输出数字的程序
int main(){ int ch = 0; while ((ch = getchar()) != EOF) { if (ch<'0' || ch>'9')//小于0或者大于9的跳过打印,在0-9内打印 continue;//跳过本次循环体 putchar(ch) } //只输出数字 return 0; }
for语句
优势:优化while语句的结构零散
语法:for(表达式1;表达式2;表达式3)
循环语句;
表达式1为初始化部分,用于初始化变量的,只执行一次。表达式2为条件判断部分,用于判断循环什么时候终止;表达式3为调整部分,用于循环条件调整。
初始化:表达式1
实际循环部分:表达式2→循环语句→表达式3→表达式2
循环路线图
判断部分本质是判别真假即0或者非零(0为假非0为真),谨记!!!!!!!
int main(){ for循环本质是优化while循环 while循环的组成: int i=0; ←初始化 while (i < 10) ←判断部分 { ..... ←循环部分 i++;←调整部分 } -------------用for循环打印1-10------------- int i = 0; // 初始化 判断 调整 //判断部分本质是判别真假即0或者非零,谨记! // ↓ ↓ ↓ for (i = 1; i <= 10; i++) { printf("%d ", i); //←循环 } -----for循环和while循环中的continue对比----- int i = 0; for (i = 1; i <= 10; i++) { if (i == 5) continue;//←执行到此语句时跳过本次循环体,然后执行调整部分i++ printf("%d ", i); }//打印结果为1 2 3 4 6 7 8 9 (结束循环) --------对比while循环------ int i = 1; while (i <= 10) { if (i == 5) continue;//←执行到此语句时跳过本次循环体,i++也在循环体中被跳过,进入死循环 printf("%d ", i); i++; }//打印结果为1 2 3 4(仍然在循环中) ----------不可在for循环体内修改循环变量,防止失控---------- int i = 0; for (i = 1; i < 10; i++) { if (i = 5) //修改了变量i,进入死循环 printf("haha\n"); printf("hehe\n"); } return 0;}
注意:for循环的条件可以省略,但是尽量不要省略,容易出现bug
int main(){ int i = 0; int j = 0; for (; i < 10; i++)// i=0 1 2 3 4 5 6 7 8 9 10 循环结束 { for (; j < 10; j++)//j=0 1 2 3 4 5 6 7 8 9 10 10 10 10 10 10 10 10 10 10 { printf("hehe\n"); } } //只打印10个hehe //第二个for循环缺少初始化,所以j的值保留了 //造成的结果只有i=0的时候打印了10个hehe,其余全部因j=10跳出了循环不打印 return 0;}练习
判断循环多少次
(核心:判断条件为赋值时零为真非零为假
判断条件为判断时符合条件为真,不符合为假)
int main(){ int i = 0;// 此处k赋值为1,1为非零恒为真,所以死循环 int k = 0;// ↓ for (i = 0, k = 0; k = 1; i++, k++)//若改为for(i=0,k=0;k=1;i++,k++)恒为真,死循环 printf("1\n"); //若改为for(i=0,k=0;k==0;i++,k++)则循环一次 return 0;} //-------------------int main(){ int i = 0;// 此处k赋值为0,0恒为假,所以不进入循环 int k = 0;// ↓ for (i = 0, k = 0; k = 0; i++, k++) printf("1\n"); return 0;} //-------------int main(){ int i = 0;// 此处判断k值为0则条件成立,当k的值是0时为真,所以循环一次 int k = 0;// ↓ for (i = 0, k = 0; k ==0; i++, k++) printf("1\n"); return 0;}do while循环
先执行一次循环体,再判断进入循环
int main(){ //打印1-10 int i = 1; do { printf("%d ", i); i++; } while (i <= 10); return 0;}
执行流程
break和continue的区别
int main(){ int i = 1; do { if (i == 5) //break; 打印结果1234结束 //continue; 打印结果1234未结束循环 printf("%d ", i); i++; } while (i <= 10); return 0;}
标签: #判断语句和赋值语句 #跳过本次循环的语句 #跳过本次循环的语句怎么写