C语言成长学习题(十二)

五十一、将从键盘输入的一个数,插入到已按降序排列的数组中,要求按原来的排序规律插入。

 1 #include <stdio.h>
 2 
 3 void main(void)
 4 {
 5     int i, j = 0, k, a[11] = {20, 18, 16, 14, 12, 10, 8, 6, 4, 2};
 6 
 7     for (i = 0; i < 10; i++)
 8         printf("%4d", a[i]);
 9     printf("\n");
10 
11     printf("Input k: ");
12     scanf("%d", &k);
13     while (a[j] >= k && j < 10)
14         j++;
15     for (i = 10; i >= j + 1; i--)
16         a[i] = a[i-1];
17     a[j] = k;
18     for (i = 0; j < 11; j++)
19         printf("%4d", a[i]);
20     printf("\n");
21 }

 结果:

20  18  16  14  12  10  8   6   4   2
Input k: 15

20  18  16  15  14  12  10  8   6   4   2

  while后的表达式a[j] >k && j < 10不能只写出a[j] > k,因为结束while循环的条件有两个:当找出第一个比k小的元素或者找不到比k小的元素。

 

五十二、投掷100次骰子,统计各点数出现的次数。

 1 #include <stdio.h>
 2 #include <time.h>    //调用randomize()时需要此头文件
 3 #include <stdlib.h>    //调用randomize()或random()时需要此头文件
 4 
 5 void main(void)
 6 {
 7     int i, n, a[7] = {0, 0, 0, 0, 0, 0, 0};
 8 
 9     randomize();
10     for (i = 1; i <= 100; i++)
11     {
12         n = random(6) + 1;
13         a[n] = a[n] + 1;
14     }
15     printf("    出现1点    出现2点    出现3点    出现4点    出现5点    出现6点\n");
16     for (i = 1; i <= 6; i++)
17         printf("%8d", a[i]);
18     printf("\n");
19 }

  randomize()能够保证每次运行时产生的随机数不同,random(k)是随机产生大于等于0,且小于k的整数。

 

五十三、编程实现用数组的方法找出2~100以内所有素数。

 1 #include <stdio.h>
 2 
 3 void main(void)
 4 {
 5     int i, j, a[100] = {0};
 6 
 7     for (i = 2; i < 100; i++)
 8         if(a[i] == 1)
 9             continue;
10         else
11             for (j = i + i; i < 100; j = j + i)
12                 if (a[j] != 1)
13                     a[j] = 1;
14     
15     for( i = 2; i < 100; i++)
16         if (a[i] == 0)
17             printf("%3d", i);
18     printf("\n");
19 }

 

结果:

2  3  5  7  11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

 

五十四、编写程序将字符串存放在一维字符组中。

 1 #include <stdio.h>
 2 
 3 void main(void)
 4 {
 5     int i = 0;
 6     char a[] = "K"                    //等价于char a[] = {'K', '\0');
 7     char b[] = {"Sit down"};    //等价于char b[9] = "Sit down";
 8 
 9     while ( a[i] != '\0')
10         putchar(a[i++]);
11     printf("\n");
12     i = 0;
13     while (b[i] != '\0')
14         putchar(b[i++]);
15     printf("\n");
16 }

 

结果:

K

Sit down

 

Mark:

  "K"和'K'不同,“K”是字符串,占两个字节,而‘K'是字符常亮,占一个字节。“”和’ '也不同,“”是空串,占一个字节,存放'\0',’ ‘是字符常亮,也占一个字节,“\0”的ASCII码值为0,空格的ASCII码值为32。

  用gets函数输入字符串时,只有遇到回车符才认为字符串输出结束;而用scanf函数输入时,遇到空格、跳格符或回车符,都认为字符串输入结束。

 

五十五、输入一个字符串,统计其中单词个数,单词之间用空格隔开。

 1 #include <stdio.h>
 2 
 3 void main(void)
 4 {
 5     char a[80];
 6     int i = 0, count = 0;
 7 
 8     gets(a);
 9     while (a[i] ==' ')
10         i++;
11     if (a[i] !='\0')
12         count++;
13     while (a[i] != '\0')
14     {
15         if (a[i] == ' ' && a[i+1] != ' ' && a[i+1] != '\0')
16             count++;
17         i++;
18     }
19     printf("%s : %d words.\n", a, count);
20 }

 

结果:

  I am OK

  I am OK : 3 words.

 

posted @ 2015-12-07 15:25  zer-o  阅读(461)  评论(0编辑  收藏  举报