一、选择语言
语法:
if() { } else { }
if() {} else if() {} else if() {} else {}
举例
#include <stdio.h> int main() { int input = 0; printf("Workhard or not?(1/0)"); scanf("%d\n", &input); if(input==1) { printf("Make more money."); } else { printf("Make less money."); } return 0; }
注意条件判断多个条件时,需要使用&&
int main() { int score = 80; if(score<60) { printf("不及格"); } else if(60<=score && score <70) { printf("及格“); } }
举例:求1-100之间的奇书
int main() { int i = 0; for(i=1; i<=100;i++) { if(i%2 == 1) { printf("%d ", i); } } return 0; }
二 switch 语句
注意:switch后面的表达式必须是整型常量表达式!
举例:
#include <stdio.h> int main() { int day = 2; switch (day) //括号中是整型表达式 { case 1: //case决定入口在哪里, { printf("Monday\n"); break;//break决定出口在哪里;入口没有break,会从入口开始,一直往下执行; } case 2: { printf("Tuesday\n"); break; } case 3: { printf("Wedsday\n"); break; } default: break; } return 0; }
results: Tuesday
下面把break全去掉
// 要求:输入1-5时打印工作日,输入6-7时打印休息日 int main() { int day = 1; switch (day) { case 1: case 2: case 3: case 4: case 5: { printf(" work day!\n"); break; } case 6: case 7: { printf("Off work!\n"); break; } default: // 输入的条件都不符合上面的case,进入default, { printf("输入日期不正确!\n"); break; } } return 0; }
上面的case先后无顺序,只是习惯将default放在最后。
三、while循环
1.语法
while() { //循环体 }
2.举例
知识点:
int main() { int ch = getchar(); printf("%c\n", ch); putchar(ch); //输出字符 return 0; }
int main() { char ch = 0; while((ch=getchar()) != EOF) // 如果读取的字符不是EOF,就输出该字符 { putchar(ch); } return 0; }
举例2:
// 举例2 int main() { char password[20] = {0}; // password数组可以存放20个字符,默认是全0 printf("请输入密码:"); scanf("%c", password); // 数组的名字就是地址,这里不需要加取地址符号 printf("请确认密码(Y/N):"); //1.这里当输入密码时,比如123456+enter,buffer里面存的是123456\n,scanf会拿走123456,剩下 //\n会被下面的getchar拿走,buffer不为空,就是导致getchar读取的字符不是最新键盘输入的 //2.如果输入的密码是123456 abcdef\n, 那么scanf会拿走123456,剩下的字符,getchar会拿一个字符,所以 //要使用循环将buffer中已经存在的字符清空 int tmp = 0; while((tmp=getchar) != '\n') //清理缓冲区 { ;//空语句,直到ch=\n,说明buffer已经清空了 } char ch = 0; if((ch == getchar()) =='Y') printf("设置密码成功。"); else printf("设置密码失败。"); }
举例3:
getchar获取的字符在字符0-9以内的,就可以输出出来, 字符在0-9以外的字符,直接跳过;
四、for循环
1.for循环的语法
for(初始化;条件判断;调整部分)
2.for循环的执行顺序
for循环的执行顺序是(1表示初始化,2表示条件,3表示调整部分,4表示循环体):
1,2,4,3 ,2,4,3,2,4直到循环结束;
所以由上可看出,初始化部分只会被执行1次
举例:用for循环打印1-10
//for(表达式1;表达式2;表达式3) // 循环体 // 举例, for循环实现1-10的输出打印 int main() { int i = 0; for(i=1;i<=10;i++) { printf("%d ", i); } }
3.for循环中的continue 跟break
break:跳出循环,终止
continue: 跳出本次循环,进行下一个循环
for循环中的continue是跳到 调整部分进行i的调整(比如i++);而while循环,continue可能会跳过调整部分造成死循环
4.for语句的循环控制变量
建议:
int main() { int arr[10] = {0,1,2,3,4,5}; int i = 0; for(i=0;i<10;i++) // i<10 ,右开左闭,而不是使用<=9 { printf("%d ", arr[i]); // result: 0 1 2 3 4 5 0 0 0 0 } }
5.for循环的变种
判断部分的省略,表示判断部分恒为真,就可能导致死循环。不建议使用。
int main() { int i = 0; int j = 0; for(i=0;i<3;i++) for(j=0;j<3;j++) { printf("inner loop.\n"); } }
result:打印9次 inner loop.
下面将j的初始化省略,
int main() { int i = 0; int j = 0; for(i=0;i<3;i++) for(;j<3;j++) { printf("inner loop.\n"); } }
result:打印3次inner loop.
解析:当i=0时,j是0,内部循环3次,此时j=3;
当i=1时,j没有初始化,还是为3,此时内部循环不符合条件,再次跳到外层循环。。。。
面试题:
0次,判断条件是赋值语句,k赋值0,条件恒为假,不会进入循环体内部。
五、do ...while循环
语法:
do
循环语句;
while(表达式);
举例:用do...while 实现打印1-10的数字
#include <stdio.h> int main() { int a = 1; do { printf(" a = %d\n", a); a++; } while (a < 11); return 0; }
结果:
那么在do...while中的continue,break又是如何呢?
举例2:
#include <stdio.h> int main() { int a = 1; do { if(5==a) break; printf(" a = %d\n", a); a++; } while (a < 11); return 0; }
结果:1,2,3,4; 到5的时候被break了,而打印在break之后,所以5就没有被打印
举例3
#include <stdio.h> int main() { int a = 1; do { if(5==a) continue; printf(" a = %d\n", a); a++; } while (a < 11); return 0; }
结果:死循环,a=5时,跳出循环,continue后面的语句不会执行,但是还是会进入while的判断部分,a一直为5,死循环了。
总结: do...while循环的循环体至少执行一次!