分支结构、循环结构
一.判断条件不能多过3个。嵌套不能多过3层。必须带上花括号{}。
二.分支结构中:
if.../if...else...用于条件判断。switch用于无规律的条件、情况匹配、等号判断。if...else if...else...情况匹配、条件判断都有。
if...:条件正确,执行if其后{}里的语句;条件错误,不执行{}里的语句。
if...else...:条件正确,执行if其后{}里的语句;条件错误,执行else其后{}里的语句。
if...else if...else:
switch(整形表达式)
{
case 1:
{
语句;
break;
}
default:
{
语句;
break;
}
}
三.循环结构
(1)while:条件为假时,跳出循环体;条件为真时,执行循环体。
while(条件)
{
循环体;
}
(2)do...while:最少执行一次循环体。条件为假时,跳出循环体;条件为真时,执行循环体。
do
{
循环体;
}
while(条件);
(3)for:执行顺序1234,1只执行1次。条件为假时,跳出循环体;条件为真时,执行循环体。
for(1;2条件;4)
{
3循环体;
}
(4)break:终止循环体,其后的代码都不用执行。continue:终止本次循环进入下次循环。return:返回函数值,跳出函数,结束多线程。
(5)while常用于某值是否存在、多个条件的时候。do...while常用于读取文件。for常用于知道次数。
(6)解题思路:先初始化变量和写出输出目标。列出一些好计的数,寻找规律(规律是写出来的,不是看出来的)或验证结果(类比)。列出数学方程(以一个未知数一个方程的形式),再转化成表达式。最后判断是否需要附件条件。
例1:1加到100
1+2+...+5
for(int i = 1;i <= 5;i++){}
例2:求个十百位的数
153 / 100 = 1 →百→ b = n / 100;
(153 - 100) / 10 = 5 →十→ s = (n - (b * 100)) / 10;
(153 - 100) % 10 = 3 →个→ g = (n - (b * 100)) % 10;
例3:打印菱形
* | ||||
* | * | * | ||
* | * | * | * | * |
* | * | * | ||
* |
分上下两部分打印:由结构可知先打印" ",观察数据,共五列,利用行的自加自减与列的自加自减特性,确定条件。例如:自增与自减的和可能会是同一个数。
i | * | "" | ||
0 | 1 | 2 | ||
1 | 3 | 1 | ||
2 | 5 | 0 | ||
0 | 3 | 1 | ||
1 | 1 | 2 | ||
""=3-i-1 *=(i*2)+1
""=i+1 *=3-(2*i)
for(i=0;i<3;i++){
for(j=0;j<3-i-1;j++){ //j=2;j>i;j--
printf(" "); }
for(k=0;k<i*2+1;k++){
printf("*"); }
printf("\n");}
for(i=0;i<2;i++){
for(j=0;j<i+1;j++) {
printf(" "); }
for(k=0;k<3-(2*i);k++){
printf("*"); }
printf("\n");}
四.
/*分支结构 //if int money = 1000; if(money >=1000) { printf("打八折\n"); } //if...else...老师来且天气好 bool teacher = true; bool sun = true; if (teacher && sun) { printf("class\n"); } else { printf("no class to rest\n"); } //if...else if...else... //老师来或者天气好 if(teacher ) { printf("class\n"); } else if (sun) { printf("class\n"); } else { printf("no class\n"); } //1,3,5上课,2,4上机 int day = 5; if(day <= 7) { if (day % 2 == 1) { printf("上课\n"); } else if (day % 2 == 0) { printf("上机\n"); } else { printf("自由活动\n"); } } else { printf("条件有误\n"); } //1,3,5上课,2,4上机 day = 2; switch (day) { case 1: case 3: case 5: { printf("上课\n"); break; } case 2: case 4: { printf("上机\n"); break; } default: break; } */ // 车位号限行 // 星期一:2、7 // 星期二:3、8 // 星期三:4、9 // 星期四:5、0 // 星期五:1、6 int number,weekday; int flag = 0; printf("请输入车位号和工作日,以逗号隔开\n"); scanf("%d,%d",&number,&weekday); switch(number) { case 2 : case 7 : if(weekday == 1) { flag=1; } break; case 3 : case 8 : if(weekday == 2) { flag=1; } break; case 4 : case 9 : if(weekday == 3) { flag=1; } break; case 5 : case 0 : if(weekday == 4) { flag=1; } break; case 1 : case 6 : if(weekday == 5) { flag=1; } break; default: printf("你输入的尾号有问题\n"); break; } if(flag == 1) { printf("对不起,你的车今天限行,请选择其他交通方式\n"); } else { printf("你的车今天不限行,但建议坐公交\n"); } /*~~循环结构~~
//1+...+10 //while int sum = 0; int i = 1; while (i <= 10) { sum += i; i++; } printf("sum = %d\n",sum); //do...while sum = 0; i = 1; do { sum += i; i++; } while (i <= 10); printf("sum = %d\n",sum); //for //10以内第一个偶数 int var = 0; for (int i = 1; i <= 10; i++) { if (i % 2 == 0) { var = i; break; } printf("-------------\n"); } printf("var = %d\n",var); //10以内的奇数 for (int i = 1; i <= 10; i++) { if (i % 2 == 0) { continue; } else { printf("%d,",i); } } */
(5)
//用分支结构实现输出三个数中的最大值。 int a ,b ,c; printf("请输入三个整数,以逗号隔开"); scanf("%d,%d,%d",&a,&b,&c); if(a < b) { a = b; } if(a < c) { a = c; } printf("max = %d\n",a);
/*第二种方法
int a = 0,b = 0,c = 0,max = 0;
printf("请输入三个整数,以逗号隔开");
scanf("%d,%d,%d",&a,&b,&c);
if(a > b)
{
max = a;
}
else
{
if(b > c)
{
max = b;
}
else
{
max = c;
}
}
printf("max = %d",max);
*/
//计算1-100间所有奇数的和 int i = 1,sum = 0; for (;i <= 100;i++) { if(i % 2 == 0) { continue; } else { sum +=i; } } printf("sum = %d\n",sum); //编程求1到100之间能被3整除的数。 i = 1; for (; i <= 100; i++) { if (i % 3 != 0) { continue; } else { printf("%d,",i); } } //从键盘输入一指定金额(以元为单位,如345.78),然后显示支付该金额的各种面额人民币数量,要求显示100元、50元、10元、5元、2元、1元、5角、1角、5分、1分各多少张。(输出面额最大值:比如345.78=100*3+10*4+5*1+0.5*1+0.1*2+0.01*8) double count = 0.0,lastmoney = 0.0; int yb = 0,ws = 0,sy = 0,wy = 0,ey = 0,yy = 0,wj = 0,yj = 0,wf = 0,yf = 0; scanf("%lf",&count); lastmoney = count; yb= (int)(count / 100); count = count - (100 * yb); ws = (int)(count / 50); count = count - (50 * ws); sy = (int)(count / 10); count = count - (10 * sy); wy = (int)(count / 5); count = count - (5 * wy); ey = (int)(count / 2); count = count - (2 * ey); yy = (int)(count / 1); count = count - (1 * yy); wj = (int)(count / 0.5); count = count - (0.5 * wj); yj = (int)(count / 0.1); count = count - (0.1 * yj); wf = (int)(count / 0.05); count = count - (0.05 * wf); yf = (int)(count / 0.01); count = count - (0.01 * yf); printf("%lf = yb=%d-ws=%d-sy%d-wy%d-ey=%d-yy=%d-wj=%d-yj=%d-wf=%d-yf=%d\n",lastmoney,yb,ws,sy,wy,ey,yy,wj,yj,wf,yf); // printf("%d\n",(int)168.92 / 100); // printf("%d\n",(int)(168.92 -100) / 50); // printf("%d\n",(int)(168.92-100-50)/10); // printf("%d\n",(int)(168.92-100-50-10)/5); //已知abc+cba=1333,其中a,b,c均为一位数,编程求出满足条件的a,b,c所有组合。(a > 0 && c > 0) // int a = 0,b = 0,c = 0; // for (a = 1; a <= 9 ; a++) // { // for (b = 0; b <= 9; b++) // { // for (c = 1; c <= 9; c++) // { // if ((a * 100 + b * 10 + c )+ (c * 100 + b * 10 + a) == 1333 ) // { // printf("%d-%d-%d\n",a,b,c); // } // } // } // }