分支结构、循环结构

时间:2022-10-19 20:28:29

一.判断条件不能多过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); // } // } // } // }