C言語プログラミング小練習6(配列編)

26541 ワード

C言語プログラミング小練習6(配列編)
6.1 10個の点数を入力して、最高点と最低点を除いた後に平均点を求めて、1位の小数を保留します.
  1 #include
  2 int main(void)
  3 {
  4     int i;
  5     double max, min, score[10], aver, sum;
  6     sum = 0;
  7     for(i = 0; i < 10; i++) {
  8         scanf("%lf", &score[i]);
  9         max = min = score[0];
 10         sum += score[i];
 11         if (max < score[i])
 12             max = score[i];
 13         if (min > score[i])
 14             min = score[i];
 15     }
 16
 17     aver = 1.0*( sum - max - min) / 8;
 18     printf("average = %.1lf
"
, aver); 19 return 0; 20 }

6.2 10個の数を入力し、この10個の数を昇順に並べ替え、並べ替え結果を出力する.
  1 #include
  2
  3 int main(void)
  4 {
  5     int i, j;
  6     double a[10], tmp;
  7     printf("Input 10 numbers: ");
  8     for (i = 0; i < 10; i++)
  9         scanf("%lf",&a[i]);
 10     for (i = 1; i < 10; i++)
 11         for (j = 0; j <10 - i; j++)
 12             if (a[j] > a[j+1]) {
 13                 tmp = a[j];
 14                 a[j] = a[j+1];
 15                 a[j+1] = tmp;
 16             }
 17     for (i = 0; i < 10; i++)
 18         printf("%6.1f", a[i]);
 19     printf("
"
); 20 return 0; 21 }

6.3 10個の数を入力し、改良されたバブルソート法を用いて、この10個の数を昇順にソートして出力する.(改善とは、ソート中にソート中にデータが交換されなかった場合(データが秩序化されていることを示す)、ソートを早期に終了することである.
  1 #include
  2
  3 int main(void)
  4 {
  5     int i, j, f;
  6     double a[10], tmp;
  7     printf("Input 10 numbers: ");
  8     for (i = 0; i < 10; i++)
  9         scanf("%lf",&a[i]);
 10     for (i = 1; i < 10; i++) {
 11         f = 0;  //   i        。 f   0
 12         for (j = 0; j <10 - i; j++)
 13             if (a[j] > a[j+1]) {
 14                 tmp = a[j];
 15                 a[j] = a[j+1];
 16                 a[j+1] = tmp;
 17                 f = 1; //         , f   1
 18             }
 19         if ( 0 == f)  // f 0,  i        
 20             break;   //      
 21     }
 22     for (i = 0; i < 10; i++)
 23         printf("%6.1f", a[i]);
 24     printf("
"
); 25 return 0; 26 }

6.4既知配列は「int a[6]={10,20,30,40,50}として宣言されている.最初の5つの配列要素は昇順に配列され、整数を入力して配列aに挿入され、6つの配列要素が昇順に配列され、配列を出力することが要求される.
  1 #include
  2
  3 int main(void)
  4 {
  5     int i, n, cur;
  6     int a[6] = {10, 20, 30, 40, 50};
  7     printf("Input an integer: ");
  8     scanf("%d", &n);
  9     for (i = 0; i < 6 - 1; i++)
 10     //   a[]        n        cur
 11         if (a[i] > n)
 12             break;
 13     cur = i;
 14     // a[4]~a[cur]    
 15     for (i = 6 - 2; i >= cur; i--)
 16         a[i + 1] = a[i];
 17     // n    a[cur]
 18     a[cur] = n;
 19     for (i = 0; i < 6; i++)
 20         printf("%5d", a[i]);
 21     printf("
"
); 22 23 return 0; 24 }

6.5配列tに10個の数を入力し、最小値と最小値の配列tの下付きを求める.
  1 #include
  2
  3 int main(void)
  4 {
  5     int i, j;
  6     j = 0;
  7     double min, t[10];
  8     printf("Input 10 numbers: ");
  9     for ( i = 0; i < 10; i++) {
 10         scanf("%lf", &t[i]);
 11         if (t[i] < t[j])
 12             j = i;
 13     }
 14     min = 1.0 *t[j];
 15     printf("%lf,%d
"
, min, j); 16 return 0; 17 }

6.6配列tに10個の数を入力し、xを入力し、xに等しい配列要素があれば、その配列要素の下付き文字を出力する.そうでなければ、-1を出力します.
  1 #include
  2
  3 int main(void)
  4 {
  5     int i, eq ;
  6     double  x, t[10];
  7     printf("Input 10 numbers: ");
  8     for ( i = 0; i < 10; i++)
  9         scanf("%lf", &t[i]);
 10     printf("Input x: ");
 11     scanf("%lf", &x);
 12     for (i = 0; i < 10; i++)
 13          if(t[i] == x) {
 14             eq = i;
 15             printf("%d
"
, eq); 16 } 17 if (i > 9) 18 printf("-1
"
); 19 20 return 0; 21 }

6.7配列tに10個の数を入力し、降順に並べ替え、並べ替え結果を出力する.
1)通常泡立ち順
  1 #include
  2
  3 int main(void)
  4 {
  5     int i, j;
  6     double a[10], tmp;
  7     printf("Input 10 numbers: ");
  8     for (i = 0; i < 10; i++)
  9         scanf("%lf",&a[i]);
 10     for (i = 1; i < 10; i++)
 11         for (j = 0; j <10 ; j++)
 12             if (a[j] < a[j+1]) {
 13                 tmp = a[j+1];
 14                 a[j+1] = a[j];
 15                 a[j] = tmp;
 16             }
 17     for (i = 0; i < 10; i++)
 18         printf("%6.1f", a[i]);
 19     printf("
"
); 20 return 0; 21 }

2)後泡の順序付けを改善する.
  1 #include
  2
  3 int main(void)
  4 {
  5     int i, j, f;
  6     double a[10], tmp;
  7     printf("Input 10 numbers: ");
  8     for (i = 0; i < 10; i++)
  9         scanf("%lf",&a[i]);
 10     for (i = 1; i < 10; i++) {
 11         f = 0;
 12         for (j = 0; j <10 ; j++)
 13             if (a[j] < a[j+1]) {
 14                 tmp = a[j+1];
 15                 a[j+1] = a[j];
 16                 a[j] = tmp;
 17                 f = 1;
 18             }
 19         if (0 == f)
 20             break;
 21     }
 22     for (i = 0; i < 10; i++)
 23         printf("%6.1f", a[i]);
 24     printf("
"
); 25 return 0; 26 }

6.8配列tに10個の整数を入力し(配列長は偶数)、配列tの配列要素を逆転し、逆転後の配列tを出力する.例:
配列tにおける10個の配列要素は、1、3、5、7、9、8、6、4、2、0の順であり、逆転後の10個の配列要素は、0、2、4、6、8、9、7、5、3、1の順である.変数宣言および配列宣言が「int i,tmp,t[10];」であることが知られている.他の変数または配列を宣言しないことが要求されます.
  1 #include
  2
  3 int main(void)
  4 {
  5     int i, tmp, t[10];
  6     printf("Please input 10 ingergers:
"
); 7 for (i = 0; i < 10; i++) 8 scanf("%d", &t[i]); 9 for (tmp = 9; tmp >= 0; tmp--) 10 printf("%2d", t[tmp]); 11 printf("
"
); 12 return 0; 13 }

6.9配列tに9個の整数を入力し(配列長は奇数)、配列tの配列要素を逆転し、逆転後の配列tを出力する.例:
配列tにおける9つの配列要素は、2、4、6、8、9、7、5、3、1の順であり、逆転後の9つの配列要素は、1、3、5、7、9、8、6、4、2の順である.変数宣言および配列宣言が「int i,tmp,t[9];」であることが知られている.他の変数または配列を宣言しないことが要求されます.
  1 #include
  2
  3 int main(void)
  4 {
  5     int i, tmp, t[9];
  6     printf("Please input 10 ingergers:
"
); 7 for (i = 0; i < 9; i++) 8 scanf("%d", &t[i]); 9 for (tmp = 8; tmp >= 0; tmp--) 10 printf("%2d", t[tmp]); 11 printf("
"
); 12 return 0; 13 }

6.10既知の配列は「int a[10]={0,10,20,30,40,50,60,70,80,90};」と宣言されている.10個の配列要素は昇順に配列されています.nに等しい配列要素がない場合、整数nを入力します.出力-1.そうでなければ、nに等しい配列要素を削除し、残りの9つの配列要素が昇順に配列され、配列が出力されることが要求される.
  1 #include
  2
  3 int main(void)
  4 {
  5     int i, j, f, n;
  6     int a[10] = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90};
  7     printf("Input an integer:");
  8     scanf("%d", &n);
  9     for (i = 0; i < 10; i++) {
 10         if (a[i] == n) {
 11             f = 1;
 12             j = i;
 13             break;
 14         }
 15     }
 16     if (f == 1) {
 17         for (i = j; i < 10; i++)
 18             a[i] = a[i+1];
 19         for (i = 0; i < 9; i++)
 20             printf("%4d", a[i]);
 21     }
 22     else
 23         printf("-1");
 24
 25     printf("
"
); 26 return 0; 27 }