ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

C语言:分支与循环(上)

C语言:分支与循环(上) 目录1.if语句2.关系操作符3.条件操作符4.逻辑操作符,||,!5.switch语句6.while循环7.for循环8.do while循环9.break和continue语句10.循环嵌套11.goto语句1.if语句1.1 if表达式为真执行语句表达式为假不执行语句C语言中0为假非0为真 if可以管控一个语句但是有大括号就可以管控更多直到遇到结束语句return或者“}”举例判断一个数是否为偶数#define _CRT_SECURE_NO_WARNINGS#include stdio.hint main(){int num;scanf(%d, num);if (num % 2 0)printf(%d是偶数\n,num);return 0;}1.2 else如果不是偶数那就是奇数了这时候引入if...else...语句举例判断奇数还是偶数int main(){int num;scanf(%d, num);if (num % 2 0)printf(%d是偶数\n, num);elseprintf(%d是奇数\n, num);return 0;}1.3 嵌套ifelse if举例判断一个数是正数还是负数还是0int main(){int num 0;scanf(%d, num);if (num 0)printf(%d是正数\n,num);else if (num 0)printf(%d是负数\n,num);elseprintf(%d是0\n,num);return 0;}举例输入一个数如果大于0判断奇数还是偶数否则打印负数int main(){int num 0;scanf(%d, num);if (num 0){if (num % 2 0)printf(%d是偶数\n,num);elseprintf(%d是奇数\n,num);}else{printf(非负数\n);}return 0;}1.4 悬空else问题如果程序中有多个if...else...语句else总是和最近的if匹配eg:int main(){int a 0;int b 2;if (a 1)if (b 2)printf(hehe\n);elseprintf(haha\n);return 0;}这个代码看上去打印 haha ,因为a不满足a1所以走else这里的语句但实际上else是和if(b2)匹配的所以什么都不打印可以修改为eg:int main(){int a 0;int b 2;if (a 1){if (b 2)printf(hehe\n);}else{printf(haha\n);}return 0;}2.关系操作符C语言中用于比较的表达式称为关系表达式,所应用的符号就是关系运算符eg:ababababab(相等运算符a!b(不相等运算符)关系表达式通常返回0(假)或者1(真),C语言中0表示假非零值表示真。比如2012返回11220返回0。注:是赋值操作,a10把10的值赋给a我们通常判断一个数是否为几的时候不小心写成:if(num3),这是错误写法因为把3赋值给了num表达式恒为3(非零值)为真无效判断因写成:if(num3)。所以聪明的你发现可以写成if(3num),如果错写成if(3num)编译器就会报错(因为等号左边是可复制的内存空间另外如果3个数比较大小xyz该表达式是合法的但是编译器会从左到右计算会先比较xy是否成立成立返回1不成立返回0即会变成1z或者0z进行判断,应写成:if(xyyz)举例输入一个年龄在18到36岁之间打印青年int main(){int age 0;scanf(%d, age);if (age 18 age 36)printf(青年\n);return 0;}若写成连续比较则:因为1812不成立返回00永远363.条件操作符条件操作符也叫三目操作符需要接受3个操作符eg:exp1?exp2:exp3意思是如果exp1为真取exp2结果的值如果为假取exp3结果的值。举例int main(){int a 0;int b 0;scanf(%d, a);if (a 5){b 3;}else{b -3;}printf(%d\n, b);return 0;}改造后:int main(){int a 0;int b 0;scanf(%d, a);b (a 5 ? 3 : -3);printf(%d\n, b);return 0;}4.逻辑操作符:,||,!1)! :逻辑取反改变单个表达式的真假2):逻辑与表达式就是并且的意思两侧表达式为真则真一假则假3)|| :逻辑或表达式就是或者的意思两侧为假才假一真则真4.1 逻辑取反 !a!a非000非04.2 逻辑与 abab非0非01非0000非000004 .3 逻辑或 ||aba||b非0非01非0010非010004.4 练习:闰年判断1)能被4整除并且不能被100整除2)能被400整除eg:int main(){int year 0;scanf(%d, year);if (year % 4 0 year % 100 ! 0){printf(闰年\n);}else if (year % 400 0){printf(闰年\n);}else{printf(平年\n);}return 0;}还可以写成int main(){int year 0;scanf(%d, year);if ((year % 4 0 year % 100 ! 0)||(year%4000)){printf(闰年\n);}else{printf(平年\n);}return 0;}4.5 短路C语言运算逻辑符有个特点,它总是先对左侧的表达式求值在对右侧的表达式求值这个顺序是保证的。如果左边表达式成立就不会对右侧表达式求值。这种情况称作短路。eg:if(month3month5)如果左侧表达式为假那么整个表达式都为假右侧不用看了。同理:if(month10||month1||month2),如果month10成立那么整个表达式成立右侧不用看了。练习1)2)5. switch语句switch语句也可以实现分支结构,相当于多个if...else结构中有多个else if根据expression的不同值执行相应的case分支如果找不到就执行default分支注意:1)switch后面的expression必须是常量表达式2)case后面的值必须是整型常量表达式(其实字符也可以 eg:case a:...)3)switch(0)是成立的可以执行4)default不一定要放在最后练习输入一个整数计算除以3之后的余数(if语句和switch比较)1)if...elseint main(){int num 0;scanf(%d, num);int n num % 3;if (n 0)printf(余数为0);else if (n 1)printf(余数是1\n);elseprintf(余数是2\n);return 0;}2)switchint main(){int num 0;scanf(%d, num);int n num % 3;switch (n){case 0:printf(余数是0\n);break;case 1:printf(余数是1\n);break;case 2:printf(余数是2\n);break;default:break;}return 0;}上述代码中我们注意到几个点1case和后面的数字之间必须有空格2)每一个case语句执行完后后面都应该有break,才能跳出switch语句6.while循环C语言提供了3种循环while就是其中一种语法结构和if相近。6.1 if和while的对比#include stdio.hint main(){if (1)printf(hehe\n); //满足if条件打印1次hehereturn 0;}#include stdio.hint main(){while (1)printf(hehe\n); //满足while条件死循环打印hehereturn 0;}注意while循环的条件表达式比内部循环多执行一次这样才能跳出循环6.3 while循环的实践练习打印0到9此循环中循环体内i打印到9结束但是出了while循环后i变成10.6.2 练习eg输入1234 输出4 3 2 1#include stdio.hint main(){int num 0;scanf(%d, num);while (num){printf(%d , num % 10);num / 10;}return 0;}7.for循环7.1 语法形式for循环是循环使用最多的语法如下:for(表达式1;表达式2;表达式3)语句; //如果循环体内部包含更多语句加上大括号7.3 for循环的实践练习:在屏幕上打印1到10#include stdio.hint main(){int i 0;for (i 0; i 10; i){printf(%d , i1);}return 0;}8.do-while循环8.1 语法形式while和for循环都是先进行判断能否进入循环体而do-while循环是先进入循环体执行语句后再进行判断8.3 do while循环的实例屏幕上打印1到10#include stdio.hint main(){int i 1;do{printf(%d , i);i;} while (i 10);return 0;}练习:输入一个整数判断有几位输入:1234 输出:4eg:#include stdio.hint main(){int i 0;scanf(%d, i);int count0;do{count;i / 10;} while (i);printf(%d, count);return 0;}注这里不是偶然用do-while循环因为数字是0的话也要进行一次判断.9. break和continue语句在循环执行过程中如果突发某些情况需要提前中止循环C语言提供了break和continue两个关键字1)break的作用是永久中止循环只要break被执行直接就跳出循环继续往后进行。2)continue的作用是跳过本次循环中的continue后面的代码在for循环和continue中有所差异9.1 while循环中break和continue9.1.1 breakint main(){int i 1;while (i 10){if (5 i)break;printf(%d , i); //输出1 2 3 4 因为到5的时候遇到break跳出循环i;}return 0;}9.1.2 continueint main(){int i 1;while (i 10){if (5 i)continue;printf(%d , i); //也是输出1 2 3 4 但是5i并且i10恒成立循环一直不结束i;}return 0;}9.2 for循环中的break和continue9.2.1 break和while中一样遇到break直接跳出循环9.2.2 continue#include stdio.hint main(){int i 0;for (i 1; i 10; i){if (5 i)continue;printf(%d , i); //输出1 2 3 4 6 7 8 9 10}return 0;}while遇到continue跑到条件判断处而for遇到continue跑到条件改变处即i处10. 循环的嵌套有些问题循环嵌套在一起才好解决练习:找出100到200之间的素数#include stdio.hint main(){int i 0;for (i 100; i 200; i){//i能否被2到i-1的数字整除int j 0;int flag 1; //假设i为素数for (j 2; j i - 1; j){if (i % j 0){flag 0;break;}}if (1 flag)printf(%d , i);}return 0;}11. goto语句C语言提供goto语句可以在同一个函数实现跳转eg#include stdio.hint main(){printf(haha\n);goto next;printf(hehe\n);next:printf(跳过了hehe\n);return 0;}输出: haha跳过了hehe
返回列表