你的位置:首页 > 操作系统

[操作系统]IOS阶段学习第四天笔记(循环)


                                        IOS学习(C语言)知识点整理笔记

 一、分支结构

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   else23     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       else27        {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       else10        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 }

 11、 输入一个日期年月日, 计算这一天是一年中的第几天(考虑闰年)     

 实现代码:

 1 int main(){ 2     int year,month,day,total=0; 3     scanf("%d%d%d",&year,&month,&day); 4   if (year<=0) 5     printf("请输入正确年份。"); 6   for (int i=1; i<month; i++) { 7   switch (month) { 8       case 1: 9       case 3:10       case 5:11       case 7:12       case 8:13       case 10:14       case 12:15        total+=31;16       break;17     case 4:18     case 6:19     case 9:20     case 11:21       total+=30;22     case 2:23        if((year%4==0 && year%100!=0)||year%400==0)24          total+=28;25       else26         total+=29;27       break;29     }31    }33   total+=day;34   printf("%d年的第%d天",year,total);35   return 0;37  }