一、分支结构
1、分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ } 两种
2、单分支 if表达式成立则执行{ }里的语句;双分支 if表达式不成立 则执行else{ }里面的语句
3、字符串的输出系统会从数组地址一直打印到字符 ‘/0’为止,如果没有正确初始化,可能会打印出数组外的信息
4、如果分支结构里面只有一条执行语句可省略外面的大括号{} .
二、开关语句
1、语句结构 :switch (参数) case 常量: 执行语句;break;default: 执行语句;break; case 后面必须是常量且不能重复
2、无特殊情况每个case后面必须加上break 不然会造成 case穿透 执行
3、default 一般建议保留 用于处理所有case不满足的条件
三、循环结构
1、循环:即在满足表达式条件的时候反复执行语句组 ;循环必须有退出条件否则就是死循环。
2、循环类型:for( 初始化语句1; 条件判断语句2; 语句3){ 执行语句} ;while(条件语句){执行语句};do{ 执行语句}while(条件语句);
3、循环体中 continue 表示跳过当前条件内容执行下次循环 break表示结束整个循环
4、do while 第一次循环的时候,先执行语句后做判断,至少执行一次。
5、while 与 do while 在循环之前必须先初始化 ,for 循环自身已经包含初始化语句。
四、goto 跳转语句
1、goto 表示无条件跳转到一个标签,尽量避免使用 ,缺点:使代码目录不清晰,破坏层次感
2、goto 实例:
//goto 实现1~100求和
1 int main(){ 3 int sum = 0; 5 int i = 1; 7 ADD: 9 sum +=i; 11 i++; 13 if(i<=100){ 15 goto ADD;//跳到标签号所在行,往下执行 17 } 19 printf("sum=%d/n",sum); 21 return 0; 23 }
五、循环练习题
1、计算当前输入字符中数字、大/小字母、其他字符 个数
实现代码:
1 int main(){ 3 int sz=0,xz=0,dz=0,qt=0; 5 char ch; 7 while ((ch=getchar())!='/n') { 9 if(ch>='0'&&ch<='9') 11 sz++; 13 else if(ch>='a'&&ch<='z') 15 xz++; 17 else if (ch>='A'&&ch<='Z') 19 dz++; 21 else 23 qt++; 25 } 27 printf("共输入了%d个数字字符/n",sz); 29 printf("共输入了%d个小写字母字符/n",xz); 31 printf("共输入了%d个大写字母字符/n",dz); 33 printf("共输入了%d个其他字符/n",dz); 35 return 0; 37 }
2、输出九九乘法表
1*1=1,
2*1=2,2*2=4
3*1……
实现代码:
1 int main(){ 3 for (int i=1; i<=9; i++) { 5 for (int j=1; j<=i; j++) { 7 printf("%dx%d=%d/t/t",i,j,i*j); } 11 printf("/n"); 13 } 15 return 0; 17 }
3、输出1~100的所有质数 (质数:即除1以外只能被1和它本身整除的数)
实现代码:
1 int main(){ 3 for (int i=1; i<=100; i++) { 5 for (int j=1; j<=i; j++) { 7 if(j==1) 9 continue; 11 if(i%j==0) 13 { 15 if(i!=j) 17 { 19 //printf("%d不是质数/n",i); 21 break; 23 } 25 else 27 { 29 printf("%d是质数/n",i); 31 break; 33 } 35 } 37 } 39 } 41 return 0; 43 }
4、一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10 次落地时,共经过多少米
实现代码:
1 int main(){ 3 float hight=100,num=10,sumh=0; 5 for (int i=1; i<=num; i++) { 7 sumh+=hight; 9 hight/=2; 11 printf("第%d次回落(%.1f)米/n",i,hight); 13 } 15 printf("总共经过(%.1f)米",sumh); 19 return 0; 21 }
5、使用辗转相除求两个数的最大公约数
实现代码:
1 int main(){ 3 //(28,35)=(35,28)=(28,7)=0 5 int m,n,temp,rst; 7 printf("请输入两个数字:/n"); 9 scanf("%d %d",&m,&n); 11 while(m%n!=0){ 13 if(m%n==m) 15 { 17 temp=m; 19 m=n; 21 n=temp; 23 rst=m%n; 25 printf("m=%d,n=%d/n",m,n); 27 }else { 29 rst=m%n; 31 m=n; 33 n=rst; 35 printf("m=%d,n=%d/n",m,n); 37 } 39 } 40 printf("%d",n); 41 return 0; 42 }
6、将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
实现代码:
1 int main(){ 2 int v; 3 scanf("%d",&v); 4 printf("%d=",v); 5 for (int i=2; i<=v; i++) { 6 while (v%i==0) { 7 if(i<v) 8 printf("%d*",i); 9 else 10 printf("%d",i); 11 v/=i; 12 } 13 } 14 return 0; 15 }
7、流程控制(for求阶乘的和 )输入n(int类型),打印1!+2!+3!+4!+5!+....+n!的值
实现代码:
1 int main(){ 2 //例如 5的阶乘和=1*1 +2*2 +3*3*3+ 4*4*4*4 +5*5*5*5*5 3 int n,temp=0,sum=0; 4 scanf(“%d”,&n); 5 for (int i=1; i<=n; i++) { 6 temp=1; 7 for (int j=1; j<=i; j++) { 8 temp*=i; 9 } 10 sum+=temp; 11 } 12 printf("sum=%d",sum); 13 return 0; 14 }
8、整数逆序输出, 例如输入一个整数12345,输出54321
实现代码:
1 int main(){ 2 int a,len=0; 3 int arr[100]; 4 printf("请输入数字:"); 5 scanf("%d",&a); 6 while (a/10>0) { 7 arr[len]=a%10; 8 a/=10; 9 len++; 10 } 11 arr[len++]=a%10; 12 for (int i=0; i<len; i++) { 13 printf("%d",arr[i]); 14 } 15 return 0; 16 }
9、流程控制(for循环)输出字母三角形 输入一个大写字母,如F输出:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
实现代码 :
1 int main(){ 2 char ch='A'; 3 for (int i=0; i<='F'-ch; i++) { 4 for (int n='F'-ch-i; n>0; n--) { 5 printf(" "); 6 } 7 for (int j=0; j<=i; j++) { 8 printf("%c",ch+j); 9 } 10 for (int m=i;m>0 ;m-- ) { 11 printf("%c",ch+m-1); 12 } 13 printf("/n"); 14 } 15 return 0; 16 }
10、流程控制(for循环),输出字母序列比如输入:F
输出:
FEDCBA
EDCBAB
DCBABC
CBABCD
BABCDE
ABCDEF
实现代码:
1 int main(){ 2 char sh,nsh,bsh; 3 printf("请输入一个字符:"); 4 scanf("%c",&sh); 5 bsh=sh; 6 int len=sh-'A'; 7 for (int i=0; i<=len; i++) { 8 sh=bsh-i; 9 //nsh=bsh-len+1; 10 for (int j=1; j<=i; j++) { 11 printf(" "); 12 } 13 for (int n=i; n<=len; n++) { 14 printf("%c", sh--); 15 } 16 nsh=sh+2; 17 for (int m=0; m<i; m++) { 18 printf("%c", nsh++); 19 } 20 printf("/n"); 21 } 22 return 0; 23 }