配套代码笔记仓库。目录流程控制关键字详解选择if-elseswitch-case详解循环whiledo-whileforgoto死循环辅助控制练习专题123456789101112流程控制顺序,选择,循环NS图,流程图(工具:Visio,Dia)简单结构与复杂结构:自然流程顺序:语句逐句执行选择:出现了一种以上的情况循环:在某个条件成立的情况下,重复执行某个动作关键字选择:if-else,switch-case循环:while,do-while,for,if-goto辅助控制:continue,break详解选择if-else// 格式 if(exp) cmd; // 或者: if(exp) cmd1; else cmd2;else只与离它最近的if匹配#include <stdio.h> #include <stdlib.h> /** * score [90-100] A * score [80-90) B * score [70-80) C * score [60-70) D * score [0-60) E */ // 闰年的判断:能被4整除但不能被100整除,或者能被400整除 int main() { int year; scanf("%d", &year); if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) printf("%d is leap year.\n", year); else printf("%d is not leap year\n.", year); #if 0 int score; printf("Enter a score:[0,100]:\n"); scanf("%d", &score); if (score < 0 || score > 100) { fprintf(stderr, "Input error!\n"); exit(1); } if (score > 90) puts("A"); else if (score > 80) puts("B"); else if (score > 70) puts("C"); else if (score > 60) puts("D"); else puts("E"); #endif #if 0 if (score <= 100 && score >= 90) puts("A"); if (score <= 90 && score >= 80) puts("B"); if (score <= 80 && score >= 70) puts("C"); if (score <= 70 && score >= 60) puts("D"); if (score <= 60 && score >= 0) puts("E"); #endif #if 0 int a = 1, b = 1,c=2; if (a == b) if(b==c) printf("a==b\n"); else printf("a!=b\n") 注意:else看的是最近的if!!! #endif #if 0 int a = 9, b = 10; if (b++ < a) printf("1\n"); else printf("0\n"); printf("a=%d,b=%d\n", a, b); printf("%d\n", (++b < a, ++a, b++)); #endif exit(0); }switch-case// 格式 switch(exp) { case 常量或常量表达式: break; case 常量或常量表达式: break; ...... default: }最好的是考虑到所有的情况写出来,在default进行报错,而不是省略一个情况放到default里。case后面要的是常量或常量表达式,例如放score/10 >= 9就是不行的。#include <stdio.h> #include <stdlib.h> int main() { int ch; ch = getchar(); switch (ch) { case 'a': case 'A': printf("Ant\n"); break; case 'b': case 'B': printf("Butterfly\n"); break; case 'c': case 'C': printf("Cobra\n"); break; default: printf("Input error"); // break; // default可以不用 } #if 0 int score; printf("Please enter:\n"); scanf("%d", &score); if (score < 0 || score > 100) { fprintf(stderr, "EINVAL\n"); exit(1); } switch (score / 10) { case 10: case 9: puts("A"); break; case 8: puts("B"); break; case 7: puts("C"); break; case 6: puts("D"); break; default: puts("E"); break; } #endif exit(0); }详解循环while// 最少执行0次 while(exp) loop;do-while// 最少执行1次 do { loop; }while(exp); for// 最少执行0次 for(exp1;exp2;exp3) loop;goto慎重使用if-gotogoto实现的是 无条件的跳转,且不能跨函数跳转死循环while(1); for(;;);ctrl + c杀掉死循环。辅助控制break,continue练习专题1A以每年10%的单利息投资了100美元,B以每年5%的复合利息投资了100美元。求需要多少年,B的投资总额超过A,并且输出当时各自的资产总额2从终端读入数据,直到输入0为止,计算出其中的偶数的个数和平均值,奇数的个数和平均值3从终端输入若干字符,统计元音字母4写出fibonacci数列的前40项,不能用数组1, 1, 2, 3, 4, 5, 8, ...5输出九九乘法表6百钱买百鸡,公鸡5元,母鸡3元,鸡仔1元,算出来买的各自多少只7输出1000内的水仙花数:153: 1+125+27 =1538求出1000以内的所有的质数2, 3, 5, 7, 11, 13, 179在终端实现如下输出ABCDEFBCDEFCDEFDEFEFF10包括钻石型 * * * * * * * * *11从终端输入N个数,以字母Q/q作为终止,求和。12从半径为1开始,输出圆的面积,直到面积大于100为止