C语言明解(四)程序的循环控制

/*

练习4-1

对代码清单4-2中的程序进行修改,像右面这样在显示结果的同时显示出输入的整数值

请输入一个非负整数:1963

1963逆向显示的结果是3691.

*/

 

 1  #include <stdio.h>
 2  
 3  int main(int argc, const char * argv[])
 4  {
 5  
 6      int num;
 7      
 8      do {
 9          printf("请输入一个非负整数:");
10          scanf("%d",&num);
11          if (num<0) {
12              puts("请不要输入负整数");
13          }
14          
15      } while (num < 0);
16      
17      printf("%d的逆向显示结果是:",num);
18      do {
19          printf("%d",num % 10);    //显示最后一位数
20          num = num / 10;           //右移一位
21      } while (num>0);
22      puts("");
23  
24  }

 

 

/*

练习4-2

对代码清单4-3中的程序进行修改,像右面这样在显示结果的同时显示出输入的整数值

请输入一个非负整数:1963

1963的位数是4.

*/

 1 #include <stdio.h>
 2 
 3 int main(int argc, const char * argv[])
 4 {
 5     int dig;
 6     int num;
 7     
 8     do {
 9         printf("请输入一个非负整数:");
10         scanf("%d",&num);
11         if (num<0) {
12             puts("请不要输入负整数");
13         }
14         
15     } while (num < 0);
16     
17     dig = 0;
18     printf("%d",num);
19     do {
20         num = num / 10;
21         dig = dig + 1;
22     } while (num>0);
23     printf("的位数是%d.\n",dig);
24     
25     return 0;
26 }

 

 

/*

练习4-3

编写一段程序,想右面这样读取俩个整数的值,然后计算出他们之间所有整数的和。

请输入俩个整数。

整数1:37

整数2:28

大于等于28小于等于37的所有整数的和是325.

*/

 

 1 #include <stdio.h>
 2 int main(void)
 3 {
 4     int a,b,sum;
 5     sum=0;
 6     printf("整数1:");
 7     scanf("%d",&a);
 8     printf("整数2:");
 9     scanf("%d",&b);
10     if(a>b)
11     {
12         printf("大于等于%d小于等于%d的所有整数和是",b,a);
13         while(a>=b)
14         {
15             sum+=b;
16             b++;
17         }
18         printf("%d\n",sum);
19     }
20     else
21     {
22         printf("大于等于%d小于等于%d的所有整数和是",a,b);
23         while(b>=a)
24         {
25             sum+=a;
26             a++;
27         }
28         printf("%d\n",sum);
29     }
30     return 0;
31 }

 

 /*

练习4-4

使用复合赋值运算符 /=,对代码清单4-2中的程序进行修改。

*/

 1 #include <stdio.h>
 2 
 3   int main(int argc, const char * argv[])
 4   {
 5 
 6       int num;
 7 
 8       do {
 9           printf("请输入一个非负整数:");
10           scanf("%d",&num);
11           if (num<0) {
12               puts("请不要输入负整数");
13           }
14 
15       } while (num < 0);
16 
17       printf("%d的逆向显示结果是:",num);
18       do {
19           printf("%d",num % 10);    //显示最后一位数
20           num /= 10;                //右移一位
21       } while (num>0);
22       puts("");
23   
24   }

 

/*

练习4-5

使用复合赋值运算符 /=和后置递增运算符++,对代码清单4-3中的程序进行修改。

*/

 1  #include <stdio.h>
 2 
 3  int main(int argc, const char * argv[])
 4  {
 5         int dig;
 6         int num;
 7     
 8          do {
 9                 printf("请输入一个非负整数:");
10                 scanf("%d",&num);
11              
12                  if (num<0) {
13                          puts("请不要输入负整数");
14                      }
15         
16              } while (num < 0);
17     
18          dig = 0;
19          printf("%d",num);
20      
21         do {
22                 num /= 10;
23                 dig++;
24             
25             } while (num>0);
26      
27          printf("的位数是%d.\n",dig);
28      
29          return 0;
30 }

 

/*

练习4-6

对代码清单4-7中的程序进行修改,当输入值为负数的时候不执行换行操作。

*/

 1 #include <stdio.h>
 2 
 3   int main(int argc, const char * argv[])
 4   {
 5 
 6       int num;
 7       
 8       printf("请输入一个整数:");
 9       scanf("%d",&num);
10       
11       while (num >= 0) {
12           printf("%d",num);
13           num--;
14           putchar('\n');
15       }
16       return 0;
17   }

 

/*

练习4-7

对代码清单4-7中的程序进行修改,使其不是递减到0而是递减到1为止。

*/

 1 #include <stdio.h>
 2 
 3   int main(int argc, const char * argv[])
 4   {
 5 
 6       int num;
 7       
 8       printf("请输入一个整数:");
 9       scanf("%d",&num);
10       
11       while (num >= 1)
12           printf("%d",num--);
13       putchar('\n');
14       
15       return 0;
16   }

 

 /*

练习4-8

对代码清单4-9的程序进行如下修改。.从1开始递增。

.输入值小于0的时候不换行。

 */

 

 1 #include <stdio.h>
 2 
 3   int main(int argc, const char * argv[])
 4   {
 5 
 6       int i,num;
 7       
 8       printf("请输入一个整数:");
 9       scanf("%d",&num);
10       
11       i = 1;
12       while (i<num) {
13           printf("%d",i++);
14           putchar('\n');
15 
16       }
17       
18       return 0;
19   }

 

/*

练习4-9
 编写一段程序,像右面这样按照升序显示出小于输入值的所有正偶数。
 请输入一个整数:19
 2 4 6 8 10 13 14 16 18
 */

 1 #include <stdio.h>
 2 
 3   int main(int argc, const char * argv[])
 4   {
 5 
 6       int i,num;
 7       
 8       printf("请输入一个整数:");
 9       scanf("%d",&num);
10       
11       i = 2;
12       
13       while (i<=num) {
14           
15               printf("%d",i);
16               i+=2;
17           }
18       
19       putchar('\n');
20 
21       return 0;
22   }

 

/*

练习4-10
 编写一段程序,像右面这样显示出小于输入整数的所有2的乘方。
 请输入一个整数:19
 2 4 6 8 16
 */

 

 1 #include <stdio.h>
 2 
 3   int main(int argc, const char * argv[])
 4   {
 5 
 6       int i,num;
 7       
 8       printf("请输入一个整数:");
 9       scanf("%d",&num);
10       
11       i = 2;
12 
13       while (i<num) {
14           printf("%d ",i);
15           i *= 2;
16       }
17       putchar('\n');
18       
19       return 0;
20   }

 

 

/*

练习4-11
 编写一段程序,像右面这样读取一个整数,并纵向显示出读取到的整数个*。如果输入的是0以下的整数,则不显示任何内容
 请输入一个整数:3

*

*

*


 */

 

 1 #include <stdio.h>
 2 
 3   int main()
 4   {
 5 
 6       int num;
 7       
 8       printf("请输入一个整数:");
 9       scanf("%d",&num);
10       
11       while (num-- > 0) {
12           putchar('*');
13           putchar('\n');
14           
15       }
16       
17       return 0;
18   }

 

/*

练习4-12

使用for语句对代码清单4-6中的程序进行修改,计算1到5的和。

*/

 1 #include <stdio.h>
 2 
 3   int main()
 4   {
 5       int sum = 0;
 6 
 7       for (int i = 1; i<=5; i++) {
 8           sum += i;
 9       }
10       printf("1到5的合计值是%d:\n",sum);
11 
12       return 0;
13   }

 

/*

练习4-13
 编写一段程序,像右面这样 输出整数后,循环显示1234567890,显示的位数和输入的整数值相同。
 
 请输入一个整数:25
 1234567890123456789012345
 */

 

 1 #include <stdio.h>
 2 
 3   int main()
 4   {
 5       int num, i, j;
 6       puts("请输入一个整数:");
 7       scanf("%d", &num);
 8       i = num / 10;
 9       j = num - 10 * i;
10       while (i--)
11           printf("1234567890");
12       for (i = 1; i <= j; i++)
13       {
14           printf("%d", i);
15       }
16       putchar('\n');
17   }

 

/*
 练习4-14
 编写一段程序,像右面这样显示出身高和标准体重的对照表。显示的身高范围和间隔由输入的数值进行控制,标准体重精确到小数点后2位。
 开始数值(cm);150
 结束数值(cm);190
 间隔数值(cm);5
 150cm 45.00kg
 155cm 49.50kg
 ............
 
 */

 1 #include <stdio.h>
 2 int main()
 3 {
 4     
 5     int start,end,gap;
 6     printf("开始数值:"); scanf("%d", &start);
 7     printf("结束数值:"); scanf("%d", &end);
 8     printf("间隔数值:"); scanf("%d", &gap);
 9     
10     for(int i=0;i<=(end-start)/gap;i++){
11         
12           printf("%d %0.2f\n",start+i*gap,45.00+i*0.5);
13     }
14     
15     return 0;
16 }

 

/*
  练习4-15
 编写一段程序,想右面这样为九九乘法表增加横纵标题
 */

 1 #include "stdio.h"
 2 
 3     int main(int argc, char const *argv[])
 4     {
 5         
 6         printf(" | ");
 7         
 8         for (int i = 1; i < 10; ++i)
 9         {
10             printf("%3d", i);
11         }
12         putchar('\n');
13         
14         printf("-----------------------------------\n");
15         
16         for (int i = 1; i < 10 ; ++i)
17         {
18             printf(" %d | ", i);
19             for (int j = 1; j < 10; ++j)
20             {
21                 printf("%3d", i*j);
22             }
23             putchar('\n');
24         }
25         return 0;
26     }

 


/*
 练习4-16
 对代码清单4-17中的程序进行修改,显示出一个横向较长的长方形。
 让我们来画一个长方形。
 一边:3
 另一边:7
 *******
 *******
 *******
 */

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int a,b;
 5     
 6     puts("让我们来画一个长方形。");
 7     printf("一边:"); scanf("%d",&a);
 8     printf("另一边:"); scanf("%d",&b);
 9     
10     
11     for (int i = 1; i<=a; i++) {
12         for (int j = 1; j <= b; j++) {
13             putchar('*');
14         }
15         putchar('\n');
16 
17     }
18     return 0;
19 
20 }

 




/*
 练习4-17
 对代码清单4-18和代码清单4-19中的程序进行修改,分别显示出直角在左上方和右上方的直角三角形
 */
直角左上方:

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int ln;
 5     
 6     printf("三角形有几层:");
 7     scanf("%d",&ln);
 8     
 9     for (int i = 1; i<=ln; i++) {
10         for (int j = 1; j <=ln-i+1; j++) {
11             putchar('*');
12         }
13         putchar('\n');
14 
15     }
16     return 0;
17 
18 }

 

直角右上方:

 1 int main()
 2 {
 3     int ln;
 4     
 5     printf("三角形有几层:");
 6     scanf("%d",&ln);
 7     
 8     for (int i = 1; i<=ln; i++) {
 9     
10         for (int j = 1; j <=i; j++) {
11             putchar(' ');
12         }
13         
14         for (int j=1; j<=ln-i+1; j++) {
15             putchar('*');
16         }
17         
18         putchar('\n');
19     }
20     return 0;
21 
22 }

 



/*
 练习4-18
 编写一段程序,输入一个整数,像右面这样显示出输入整数层的金字塔形状。
 让我们来描绘一个金字塔。
 金字塔有几层:3
     *
   ***
  *****
 */

 1 #include "stdio.h"
 2 
 3     int main(int argc, char const *argv[])
 4     {
 5         int n;
 6         puts("让我们来描绘一个金字塔。");
 7         printf("金字塔有几层:"); scanf("%d",&n);
 8     
 9         for (int i = 1;i<=n; i++) {
10             for (int j = 1; j<=n-i; j++) {
11                 putchar(' ');
12             }
13             for (int j=1;j<=i ; j++) {
14                 putchar('*');
15             }
16             for (int j=1; j<i; j++) {
17                 putchar('*');
18             }
19             putchar('\n');
20 
21         }
22             return 0;
23     }

 


 

你可能感兴趣的:(C语言明解(四)程序的循环控制)