switch-while day6
三:switch
1.switch(整型表达式) //必须是整型,不能是浮点型
case 后面是整型常量表达式,不能出现变量
switch()
{
case常量表达式1:语句1break;
case:...
default:语句n+1break;
}
2.switch匹配执行,如果没有遇到break或者右} 则继续执行,直到遇到break或右}
switch(n){case 1:printf("1\n");break;case 1+1:printf("1+1\n");case 3:printf("3\n");break;default:printf("*\n");break;}
3.default:书写位置,可以自由安排,不一定在最后,注意是否配给break
//default写错了,也能正常编译
#include<stdio.h>int main(int argc, const char *argv[])
{char ch;scanf("%c",&ch);switch(ch){case 'A':printf("90~100\n");break;case 'B':printf("80~89\n");break;case 'C':printf("70~79\n");break;case 'D':printf("60~69\n");break;case 'E':printf("0~59\n");break;default:printf("NULL\n");break;}return 0;
}
switch((year%100 != 0 && year%4 == 0)||year % 400 == 0){case 1:printf("yes\n");break;case 0:printf("no\n");break;}
int year,month;//判断各月的天数int days = 0;scanf("%d %d",&year,&month);switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:days = 31;break;case 4:case 6:case 9:case 11:days = 30;break;case 2:switch((year%100 != 0 && year%4 == 0)||year % 400 == 0){case 1:days = 29;break;case 0:days = 28;break;}default:printf("invlid month\n");return -1;}printf("days = %d\n",days);
四:条件运算
表达式1?表达式2:表达式3 //真:执行2 假:执行3
int year;scanf("%d",&year);((year%100 != 0 && year%4 == 0)||year % 400 == 0)?printf("yes\n"):printf("no\n");
(a>b) ? max = a:(max = b);(max >c) ? max = max:(max = c);//max = a > b? a?b > c ? a>b?a:b:c;
五:循环
1.for(表达式1;表达式2;表达式3) //for(循环初始条件;循环结束条件;循环变量增值)
{语句4} //{循环体}
int i = 0;int sum = 0;for(i = 1,sum = 0;i<=100;i++){sum = sum + i;}printf("sum = %d,i = %d\n",sum,i);
int i = 0;//水仙花数for(i = 100;i<1000;i++){int hud = i/100;int ten = (i - hud*100)/10;int sig = (i - hud*100 - ten*10);if(hud*hud*hud + ten*ten*ten + sig*sig*sig == i){printf("%d",i);putchar(' ');}}putchar('\n');
2.while(表达式)
{语句}
int i =0;int sum = 0;while(i<=100){sum = sum + i;i++;}printf("sum = %d\n",sum);
int i = 100;while(i<1000){int hud = i/100;int ten = (i - hud*100)/10;int sig = (i - hud*100 - ten*10);if(hud*hud*hud + ten*ten*ten + sig*sig*sig == i){printf("%d",i);putchar(' ');}i++;}
3.do-while
do
{循环体语句
}while
do-while至少执行一次(先执行,后循环)
do//水仙花数{int hud = i/100;int ten = (i - hud*100)/10;int sig = (i - hud*100 - ten*10);if(hud*hud*hud + ten*ten*ten + sig*sig*sig == i){printf("%d",i);putchar(' ');}i++;}while(i<1000);putchar('\n');
4.continue 结束本次循环,继续下次循环
break 结束本层循环
int i = 0;int j = 0;for(i=0;i<5;i++){printf("i==---%d\n",i);for(j=0;j<5;j++){if(j==2)// continue;break;printf("----j==---%d\n",j);}}
int i = 0;int j = 0;scanf("%d",&i);if(i == 2){printf("yes\n");}else{for(j=2;j<i;j++){if(i%j == 0){printf("no\n");return -1;}}printf("yes\n");}
每日一题
一:打印1000以内的回文数
#include<stdio.h>int main(int argc, const char *argv[])
{for(int i=0;i<1000;i++){int hud = i/100;int ten = (i - hud*100)/10;int sig = (i - hud*100 - ten*10);if(i<10){for(i=0;i<10;i++){printf("%d ",i);}}else if(i>=10&&i<100){if(sig*10 + ten == i ){printf("%d ",i);}}else{if(sig*100 + ten*10 + hud == i ){printf("%d ",i);}}}putchar('\n');return 0;
}
二:求斐波那契数列前n项的和值 1 1 2 3 5 8 13 21 34 55 … 前两项 1 从第三项开始 每一项,都是前两项之和
#include<stdio.h>int main(int argc, const char *argv[])
{int a = 1;int b = 1;int t = 0;int sum = 0;int n;scanf("%d",&n);for(int i=2;i<n;i++){t = a+b;a = b;b = t;sum = sum + t;printf("t = %d\n",t);}sum = sum +2;printf("sum = %d\n",sum);return 0;
}
三:从键盘输入一个字母, 输出该字母的按字典排列顺序的下一个字符, 例如, 输入a,则输出b。 如果输入的字符不在26个英语字母中,则显示输入数据有误, 如果输入的字符是z或Z,则输出a或A
#include<stdio.h>int main(int argc, const char *argv[])
{char i,t;scanf("%c",&i);if((i>='A'&&i<='Z')||(i<='z'&&i>='a')){if(i == 'z'||i=='Z'){t = i - 25;}else{t = i + 1;}printf("%c\n",t);return -1;}else{printf("invlid char\n");}return 0;
}