
C语言是结构化的程序设计语言其中包含顺序结构、选择结构、循环结构。if、switch实现分支结构for、while、do while实现循环结构一、if语句1.1 if1 if ( 表达式 ) 2 语句表达式成立为真则语句执行表达式不成立为假则语句不执行。在C语言中0表示假非0表示真。例子输入一个数为整数判断是否为奇数#includestdio.h int main() { int num 0; scanf_s(%d\n, num); if (num % 2 1) printf(%d是奇数\n, num); return 0; }1.2 else如果一个数不是奇数那就是偶数。判断任意一个数是奇数还是偶数需要if...else...语句1 if表达式 2 语句1 3 else 4 语句2例子输⼊⼀个整数判断是否为奇数如果是奇数打印是奇数否则打印偶数。#includestdio.h int main() { int num 0; scanf_s(%d, num); if (num % 2 1) printf(%d是奇数\n, num); else printf(%d是偶数\n, num); return 0; }1.3分支中包含多条语句默认在if和else语句中只控制一条语句所以需要使用{ }将代码括起来#include stdio.h int main() { int age 0; scanf(%d, age); if(age 18) //if 后使⽤{} 控制多条语句-这个块也叫程序块或者复合语句 { printf(成年了\n); printf(可以谈恋爱了\n); } else //else 后使⽤{}控制多条语句-这个块也叫程序块或者复合语句 { printf(未成年\n); printf(不可以早恋哦\n); } return 0; }1.4嵌套if在if else语句中else可以与另⼀个if语句连⽤构成多重判断。例子要求输⼊⼀个整数判断输⼊的整数是0还是正数或者负数。#include stdio.h int main() { int num 0; scanf(%d, num); if(num 0) printf(输⼊的数字是0\n); else if(num 0) //这⾥的if 相当于嵌套在else语句中形成了嵌套结构 printf(输⼊的数字是正数\n); else printf(输⼊的数字是负数\n); return 0; }有了嵌套if语句就可以完成更多复杂逻辑的判断。如下1 输⼊⼀个⼈的年龄 2 如果年龄18岁打印少年 3 如果年龄在18岁⾄44岁打印⻘年 4 如果年龄在45岁⾄59岁打印中⽼年 5 如果年龄在60岁⾄89岁打印⽼年 6 如果90岁及以上打印⽼寿星#includestdio.h int main() { int age 0; scanf_s(%d, age); if (age 18) printf(少年\n); else if (age 44) printf(青年\n); else if (age 59) printf(中老年\n); else if (age 89) printf(老年\n); else printf(老寿星\n); return 0; }二、关系操作符C语言用于比较的表达式称为“关系表达式”主要包含以下6个大于运算符 小于运算符 大于等于运算符 小于等于运算符 相等运算符 !不相等运算符比如我们输⼊⼀个年龄如果年龄在18岁~36岁之间我们输出⻘年。#include stdio.h int main() { int age 0; scanf(%d, age); if(age18 age36) { printf(⻘年\n); } return 0; }三、条件操作符条件操作符也叫三⽬操作符需要接受三个操作数的形式如下exp1 ? exp2 : exp3条件操作符的计算逻辑是如果exp1为真exp2计算计算的结果是整个表达式的结果如果exp1为假exp3计算计算的结果是整个表达式的结果。例子使用条件表达式实现找两个数中较⼤值。#include stdio.h int main() { int a 0; int b 0; scanf(%d %d, a, b); int m ab ? a : b; printf(%d\n, m); return 0; }四、逻辑操作符 , || , 逻辑运算符提供逻辑判断功能⽤于构建更复杂的表达式主要有下⾯三个运算符。!逻辑取反运算符改变单个表达式的真假。 逻辑与运算符就是并且的意思两侧的表达式都为真则为真否则为假。||逻辑或运算符就是或者的意思两侧⾄少有⼀个表达式为真则为真否则为假。4.1逻辑取反运算符 比如我们有⼀个变量叫flag,如果flag为假要做⼀个什么事情就可以这样写代码#include stdio.h int main() { int flag 0; if(!flag) { printf(do something\n); } return 0; }如果flag为真!flag就是假如果flag为假!flag就是真所以上⾯的代码的意思就是flag为假执⾏if语句中的代码4.2逻辑与运算符是与运算符也是并且的意思是⼀个双⽬操作符使⽤的⽅式是ab,两边的表达式都是真的时候整个表达式才为真只要有⼀个是假则整个表达式为假。比如如果我们说⽉份是3⽉到5⽉是春天那使⽤代码怎么体现呢1 int month 0; 2 scanf(%d, month); 3 if(month 3 month 5) 4 { 5 printf(春季\n); 6 }这⾥表达的意思就是month既要⼤于等于3⼜要⼩于等于5必须同时满⾜。4.3逻辑或运算符 ||||就是或运算符也就是或者的意思||也是⼀个双⽬操作符使⽤的⽅式是a || b||两边的表达式只要有⼀个是真整个表达式就是真两边的表达式都为假的时候才为假。比如我们说⼀年中⽉份是12⽉或者1⽉或者2⽉是冬天那么我们怎么使⽤代码体现呢1 int month 0; 2 scanf(%d, month); 3 if(month 12 || month1 || month 2) 4 { 5 printf(冬季\n); 6 }4.4闰年的判断输⼊⼀个年份year判断year是否是闰年闰年判断的规则 1. 能被4整除并且不能被100整除是闰年 2. 能被400整除是闰年#includestdio.h int main() { int year 0; scanf_s(%d, year); if (((year % 4 0) (year % 100 ! 0)) || (year % 400 0)) { printf(是闰年\n); } else { printf(不是闰年\n); } return 0; }4.5短路C语⾔逻辑运算符还有⼀个特点它总是先对左侧的表达式求值再对右边的表达式求值这个顺序是 保证的。如果左边的表达式满⾜逻辑运算符的条件就不再对右边的表达式求值。这种情况称为“短路”。如前⾯的代码if(month 3 month 5)表达式中 的左操作数是month 3右操作数是month 5,当左操作数month 3的结果是0的时候即使不判断month 5整个表达式的结果也是0不是春季。所以对于操作符来说左边操作数的结果是0的时候右边操作数就不再执⾏。对于||操作符是怎么样呢我们结合前⾯的代码if(month 12 || month1 || month 2)如果month 12则不⽤再判断month是否等于1或者2整个表达式的结果也是1是冬季。所以||操作符的左操作数的结果不为0时就⽆需执⾏右操作数。像这种仅仅根据左操作数的结果就能知道整个表达式的结果不再对右操作数进⾏计算的运算称为短路求值。五、switch语句除了if语句外C语⾔还提供了switch语句来实现分⽀结构。switch语句是⼀种特殊形式的if...else结构⽤于判断条件有多个结果的情况。它把多重的else if改成更易⽤、可读性更好的形式。switch (expression) { case value1: statement case value2: statement ... default: statement }上⾯代码中根据表达式expression不同的值执⾏相应的case分⽀。如果找不到对应的值就执⾏default分⽀。注switch后的expression必须是整型表达式case后的值必须是整形常量表达式练习 输⼊⼀个1~7的数字打印对应的星期⼏ 例如 输⼊1 输出星期⼀ 输⼊2 输出星期⼆ 输⼊3 输出星期三 输⼊4 输出星期四 输⼊5 输出星期五 输⼊6 输出星期六 输⼊7 输出星期天#includestdio.h int main() { int day 0; scanf_s(%d, day); switch (day) { case 1: case 2: case 3: case 4: case 5: printf(工作日\n); break; case 6: case 7: printf(休息日\n); break; default: printf(输入错误\n); break; } return 0; }六、while循环⾸先上来就是执⾏判断表达式表达式的值为0循环直接结束表达式的值不为0则执行循环语句语句执⾏完后再继续判断是否进⾏下⼀次判断。输⼊⼀个正的整数逆序打印这个整数的每⼀位 例如 输⼊1234输出4 3 2 1 输⼊521输出1 2 5题⽬解析1.要想得到n的最低位可以使⽤n%10的运算得到的余数就是最低位如1234%10得到42.要想去掉n的最低位找出倒数第⼆位则使⽤nn/10操作就可以去掉最低位的如n1234/10得到123123相较于1234就去掉了最低位123%10就得到倒数第⼆位3。3.循环1和2两个步骤在n变成0之前就能到所有的位。includestdio.h int main() { int n 0; scanf_s(%d, n); while (n) { printf(%d, n % 10); n / 10; } return 0; }七、for循环for循环是三种循环中使⽤最多的for循环的语法形式如下for(表达式1; 表达式2; 表达式3) 语句//如果循环体想包含更多的语句可以加上⼤括号 表达式1 ⽤于循环变量的初始化 表达式2 ⽤于循环结束条件的判断 表达式3 ⽤于循环变量的调整⾸先执⾏ 表达式1初始化循环变量接下来就是执行表达式2的判断部分表达式2的结果如果0则循环结束表达式2的结果如果!0则执⾏循环语句循环语句执⾏完后再去执⾏表达式3,调整循环变量然后再去 表达式2的地⽅执⾏判断表达式2的结果是否为0决定循环是否继 续。整个循环的过程中表达式1初始化部分只被执⾏1次剩下的就是表达式2、循环语句、表达式3在循环。例子计算1~100之间3的倍数的数字之和#includestdio.h int main() { int i 0; int sum 0; for (i 1; i 100; i) { if (i % 3 0) sum i; } printf(%d\n, sum); return 0; }八、do-while循环在循环语句中do while语句的使⽤最少它的语法如下do 语句 while(表达式)while和for这两种循环都是先判断条件如果满⾜就进⼊循环执⾏循环语句如果不满⾜就跳出循环 而 do while循环则是先直接进⼊循环体执⾏循环语句然后再执⾏while后的判断表达式表达式为真就会进行下⼀次表达式为假则不再继续循环。在do while循环中先执⾏图上的“语句”执⾏完语句在去执⾏“判断表达式”判断表达式的结果是!0则继续循环执⾏循环语句判断表达式的结果0则循环结束。所以在do while语句中循环体是⾄少执⾏⼀次的这是do while循环⽐较特殊的地⽅。输⼊⼀个正整数计算这个整数是⼏位数 例如 输⼊1234 输出4 输⼊12 输出2#includestdio.h int main() { int n 0; scanf_s(%d, n); int cnt 0; do { cnt; n n / 10; } while (n); printf(%d\n, cnt); return 0; }九、break和continue语句在循环执⾏的过程中如果某些状况发⽣的时候需要提前终止循环这是非常常见的现象。C语⾔中提供了 break和continue两个关键字就是应用到循环中的。break的作用是用于永久的终止循环只要break被执行直接就会跳出循环继续往后执行continue的作用是跳过本次循环中continue后边的代码在for循环和while循环中有所差异的。十、循环的嵌套前⾯学习了三种循环whiledo whilefor这三种循环往往会嵌套在⼀起才能更好的解决问题就是我们所说的循环嵌套这⾥我们就看⼀个例子。练习 找出100~200之间的素数并打印在屏幕上。 注素数⼜称质数只能被1和本⾝整除的数字。题⽬解析 1. 要从100~200之间找出素数⾸先得有100~200之间的数这⾥可以使⽤循环解决。 2. 假设要判断i是否为素数需要拿2~i-1之间的数字去试除i需要产⽣2~i-1之间的数字也可以使⽤ 循环解决。 3. 如果2~i-1之间有数字能整除i则i不是素数如果都不能整除则i是素数。#includestdio.h int main() { int i 0; for (i 100; i 200; i) { int j 0; int flag 1; for (j 2; j i; j) { if (i % j 0) { flag 0; break; } } if (flag 1) printf(%d\n, i); } return 0; }完