C言語(基礎編)演習問題

1日目

「1日目」の演習問題

【問1】

次のソースを打ち込み実行してみましょう

#include <stdio.h>

int main(void){
    printf("Hello World\n");
    return 0;
}
実行結果
Hello World

【問2】

問1のプログラムを自分の名前が表示されるように改修してみましょう

【問3】

以下の出力結果になるようなプログラムを作成しましょう

こんにちは
今日もよろしくお願いします。

「1日目」解答例

【問2】

#include <stdio.h>

int main(void){
    printf("My Name is Taro Yamada\n");
    return 0;
}

【問3】

#include <stdio.h>

int main(void){
    printf("こんにちは\n今日もよろしくお願いします。");
    return 0;
}

<基礎編 1日目へ戻る>

2日目

「2日目」の演習問題

【問1】

以下のソースを打ち込み実行してみましょう

int main(void){
	char c = 'A';
	printf("%c\n",c); // 文字の出力
	printf("%d\n",c); // 整数値の出力
	printf("%04x\n",c); // 16進数の出力
	printf("%04o\n",c); // 8進数の出力
}
実行結果
A
65
0041
0101

【問2】

以下のソースを打ち込み実行してみましょう

int main(void){
    float a = 100.1;
    float b = 23.3;
    printf("%.1f+%.1f=%.1f\n",a,b,a+b);
}
実行結果
100.1+23.3=123.4

【問3】

次の手順で作成してみましょう

  1. int型の変数radius(半径)を用意し2を代入します
  2. double型の変数pi(円周率)を用意し3.14を代入します
  3. radisuの値を表示してみます
  4. piの値を表示してみます

「2日目」解答例

【問3】

#include <stdio.h>

int main()
{
    int radius = 2;
    double pi = 3.14;
    
    printf("radius=%d\n",radius);
    printf("pi=%f\n",pi);
}

<基礎編 2日目へ戻る>

3日目

「3日目」の演習問題

【問1】

以下のソースを打ち込み実行してみましょう

#include <stdio.h>

int main(void){
    int a;

    printf("a=");
    scanf("%d",&a);
    printf("入力した値は%dです",a);

    return 0;
}

補足
scanf()関数はキーボードから値を取得するときに使用する関数
使用方法は以下の通り
scanf("入力変換指定子",&変数名);
入力変換指定子:printf()と同様の変換指定子を指定する
変数名:入力されたデータを記憶する変数名のアドレスを渡す(&をつけて変数の場所を指定している)
また、複数の値を一度に入力させたいときは次のように記述する

#include <stdio.h>

int main(void){
    int x1,x2;
    printf("2つの整数を , で区切って入力してください");
    scanf("%d,%d",&x1,&x2);
    printf("入力した値は%d,%dです",x1,x2);
}

【問2】

標準入力(scanf)から整数を二つ読み込みその和を出力するプログラムを作成してみましょう

出力結果
2つの整数を , で区切って入力してください->2,3
2 + 3 = 5

【問3】

問2のプログラムをもとに、入力した2つの整数の和、差、積、商、剰余を求めるプログラムを作成してみましょう

出力結果
2つの整数を , で区切って入力してください->13,8
13 + 8 = 21
13 - 8 = 5
13 * 8 = 104
13 / 8 = 1
13 % 8 = 5

【問4】

標準入力から小数の値を読み込み、円の面積を求めるプログラムを作成してみましょう
※円周率は3.14として計算する

出力結果
半径を入力してください->1.25
半径:1.250000の円の面積は4.906250です

hint
scanfを使用して小数点の値を取得する場合、変換指定子は%lfと記述する

「3日目」解答例

【問2】

#include <stdio.h>

int main(void){
    int a,b;
    printf("2つの整数を , で区切って入力してください->");
    scanf("%d,%d",&a,&b);
    printf("%d + %d = %d\n",a,b,a+b);
}

【問3】

#include <stdio.h>
int main(void){
   int a,b;
   printf("2つの整数を , で区切って⼊⼒してください->");
   scanf("%d,%d",&a,&b);
   printf("%d + %d = %d\n",a,b,a+b);
   printf("%d - %d = %d\n",a,b,a-b);
   printf("%d × %d = %d\n",a,b,a*b);
   printf("%d / %d = %d\n",a,b,a/b);
   printf("%d %% %d = %d\n",a,b,a%b);
   return 0;
}

【問4】

#include <stdio.h>
#define PI 3.14;
int main(void){
   double radius;
   double area;
   printf("半径を⼊⼒してください->");
   scanf("%lf",&radius);
   area = radius * radius * PI;
   printf("半径%fの円の⾯積は%fです\n",radius,area);
   return 0;
}

<基礎編 3日目へ戻る>

4日目

「4日目:制御構文」の演習問題

【問1】

標準入力から整数値を読み込み入力した値が10以上なら「10以上です」と表示するプログラムを作成してみましょう

実行結果
整数値を入力:10
10は10以上の整数です

整数値を入力:11
11は10以上の整数です

整数値を入力:9

【問2】

標準入力から整数値を読み込み、入力した値が1でなければ「1ではありません」と表示するプログラムを作成してみましょう

実行結果
整数値を入力:1

整数値を入力:2
2は1ではありません

整数値を入力:-1
-1は1ではありません

【問3】

標準入力から整数値を読み込み、入力した値が20以上80未満のとき「20以上80未満です」と表示するプログラムを作成してみましょう

実行結果
整数値を入力:19

整数値を入力:20
20は20以上80未満です

整数値を入力:79
79は20以上80未満です

整数値を入力:80

整数値を入力:81

【問4】

標準入力から整数値を読み込み、入力した値が20以下または90以上のとき「20以下または90以上です」と表示するプログラムを作成してみましょう

実行結果
整数値を入力:19
19は20以下または90以上です

整数値を入力:20
20は20以下または90以上です

整数値を入力:21

整数値を入力:89

整数値を入力:90
90は20以下または90以上です

整数値を入力:91
91は20以下または90以上です

「4日目:制御構文」解答例

【問1】

#include <stdio.h>
int main(void){
   int n;
   printf("整数値を⼊⼒:");
   scanf("%d",&n);
   if(n>10){
       printf("%dは10以上の整数です\n",n);
   }
   return 0;
}

【問2】

#include <stdio.h>
int main(void){
    int n;
    printf("整数値を⼊⼒:");
    scanf("%d",&n);
    if(n!1){
        printf("%dは1ではありません\n",n);
    }
    return 0;
}

【問3】

#include <stdio.h>
int main(void){
    int n;
    printf("整数値を⼊⼒:");
    scanf("%d",&n);
    if(n >20 && n < 80){
        printf("%dは20以上80未満です\n",n);
    }
    return 0;
}

【問4】

#include <stdio.h>
int main(void){
    int n;
    printf("整数値を⼊⼒:");
    scanf("%d",&n);
    if(n <20 || n >90){
        printf("%dは20以下または90以上です\n",n);
    }
    return 0;
}

<基礎編 4日目へ戻る>

「4日目:if-else文」の演習問題

【問1】

1から10までの整数を乱数で発生させ、5以上なら「5以上です」、そうでなければ「5未満です」と表示するプログラムを作成してみましょう

実行結果
3は5未満です

6は5以上です

5は5以上です

hint  1から10までの整数を乱数で発生させる処理は以下のように記載する

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main() {	
     int x;
 
     srand((unsigned)time(NULL)); // 乱数の種を現在時刻で初期化する
     x=rand()%10+1; // rand():乱数の生成 [rand() % n + 1]⇒1からnまでの整数を発生させる
     printf("x=%d\n",x);
}

【問2】

1から10までの整数を乱数で発生させ、取得した値が1ではないとき「1ではありません」、そうでなければ「1です」と表示するプログラムを作成してみましょう

実行結果
2は1ではありません

5は1ではありません

1は1です

【問3】

1から100までの整数を乱数で発生させ、取得した値が20以上80未満のとき「20以上80未満です」、そうでなければ「範囲外です」と表示するプログラムを作成してみましょう

実行結果
75は20以上80未満です

82は範囲外です

【問4】

1から100までの整数を乱数で発生させ、取得した値が20以下または90以上のとき「20以下または90以上です」、そうでなければ「20より大きく90未満です」と表示するプログラムを作成してみましょう

実行結果
88は20より大きく90未満です

91は20以下または90以上です

8は20以下または90以上です

<基礎編 4日目へ戻る>

「4日目:if-else文」解答例

【問1】

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
   int x;
   srand((unsigned)time(NULL)); // 乱数の種を現在時刻で初期化する
   x=rand()%10+1;
   if(x>5){
      printf("%dは5以上です\n",x);
   }else{
      printf("%dは5未満です\n",x);
   }
   return 0;
}

【問2】

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
   int x;
   srand((unsigned)time(NULL)); // 乱数の種を現在時刻で初期化する
   x=rand()%10+1;
   if(x==1){
      printf("%dは1です\n",x);
   }else{
      printf("%dは1ではありません\n",x);
   }
   return 0;
}

【問3】

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
   int x;
   srand((unsigned)time(NULL)); // 乱数の種を現在時刻で初期化する
   x=rand()%100+1;
   if(x>20 && x<80){
      printf("%dは20以上80未満です\n",x);
   }else{
      printf("%dは範囲外です\n",x);
   }
   return 0;
}

【問4】

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
   int x;
   srand((unsigned)time(NULL)); // 乱数の種を現在時刻で初期化する
   x=rand()%100+1;
   if(x<20 || x>90){
      printf("%dは20以下まはた90以上です\n",x);
   }else{
      printf("%dは20より⼤きく90未満です\n",x);
   }
   return 0;
}

<基礎編 4日目へ戻る>

「4日目:if-elseif-else文」の演習問題

【問1】

1から4までの乱数で整数を発生させ、1なら「春です」、2なら「夏です」、3なら「秋です」、4なら「冬です」と表示するプログラムをif-elseif-else文を使用して作成してみましょう

実行結果
生成した値:3
秋です

生成した値:2
夏です

生成した値:1
春です

生成した値:4
冬です

【問2】

標準入力より2つの整数を取得し変数a,bに代入する。aの方が大きければ「aの方が大きいです」、bの方が大きければ「bの方が大きいです」、そうでなければ「等しいです」と表示するプログラムを作成してみましょう

実行結果
整数をカンマで区切って2つ入力:1,2
b:2の方が大きい

整数をカンマで区切って2つ入力:3,2
a:3の方が大きい

整数をカンマで区切って2つ入力:5,5
a:5,b:5は等しいです

【問3】

標準入力より1から100までの数値を取得し、以下の処理を実行するプログラムを作成してみましょう
(1) 80点以上なら”優”と表示
(2) 80点未満、70点以上なら、”良”と表示
(3) 70点未満、60点以上なら、”可”と表示
(4) 60点未満なら、”不可”と表示

実行結果
整数を入力:59
59:不可です

整数を入力:60
60:可です

整数を入力:69
69:可です

整数を入力:70
70:良です

整数を入力:79
79:良です

整数を入力:80
80:優です

整数を入力:100
100:優です

<基礎編 4日目へ戻る>

「4日目:if-elseif-else文」解答例

【問1】

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
   int x;
   srand((unsigned)time(NULL)); // 乱数の種を現在時刻で初期化する
   x=rand()%4+1;
   printf("⽣成した値:%d\n",x);
   if(x==1){
      printf("春です\n");
   }else if(x==2){
      printf("夏です\n");
   }else if(x==3){
      printf("秋です\n");
   }else if(x==4){
      printf("冬です\n");
   }else{
      printf("該当しません\n");
   }
   return 0;
}

【問2】

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void){
 int a,b;
 printf("整数をカンマで区切って2つ⼊⼒:");
 scanf("%d,%d",&a,&b);
 if(a>b){
   printf("a:%dの⽅が⼤きい\n",a);
 }else if(a<b){
   printf("b:%dの⽅が⼤きい\n",b);
 }else{
   printf("a:%d,b:%dは等しい\n",a,b);
 }
 return 0;
}

【問3】

#include <stdio.h>
int main(void){
 int n;
 printf("整数を⼊⼒:");
 scanf("%d",&n);
 if(n>80){
   printf("%d:優です\n",n);
 }else if(70=n && n<80){
   printf("%d:良です\n",n);
 }else if(60<=n && n<70){
   printf("%d:可です\n",n);
 }else{
   printf("%d:不可です\n",n);
 }
 return 0;
}

<基礎編 4日目へ戻る>

「4日目:switch文」の演習問題

【問1】

標準入力より1桁の整数を取得し、1なら「春です」、2なら「夏です」、3なら「秋です」、4なら「冬です」、1から4以外であれば「該当しません」と表示するプログラムをswitch文を使用して作成してみましょう

実行結果
整数を入力(14の数値):1
春です

整数を入力(14の数値):2
夏です

整数を入力(14の数値):3
秋です

整数を入力(14の数値):4
冬です

整数を入力(14の数値):0
該当しません

【問2】

標準入力より1桁の整数を取得し、1,2なら「もっと頑張りましょう」、3,4,5なら「合格です」、1から5以外であれば「想定されていない値です」と表示するプログラムをswitch文を使用して作成してみましょう

実行結果
整数を入力(19の数値):1
もっと頑張りましょう

整数を入力(19の数値):2
もっと頑張りましょう

整数を入力(19の数値):3
合格です

整数を入力(19の数値):4
合格です

整数を入力(19の数値):5
合格です

整数を入力(19の数値):6
想定されていない値です

「4日目:switch文」解答例

【問1】

#include <stdio.h>
int main(void){
 int n;
 printf("整数を⼊⼒(1〜4の整数):");
 scanf("%d",&n);
 switch(n){
   case 1:printf("春です\n");break;
   case 2:printf("夏です\n");break;
   case 3:printf("秋です\n");break;
   case 4:printf("冬です\n");break;
    default:printf("該当しません\n");break;
 }
 return 0;
}

【問2】

#include <stdio.h>
int main(void){
 int n;
 printf("整数を⼊⼒(1〜9の整数):");
 scanf("%d",&n);
 switch(n){
   case 1:
   case 2:printf("もっと頑張りましょう\n");break;
   case 3:
   case 4:
   case 5:printf("合格です\n");break;
   default:printf("想定されていません\n");break;
 }
 return 0;
}

<基礎編 4日目へ戻る>

5日目

「5日目:for文」の演習問題

【問1】

for文を用いて、1から100までの整数の和を計算し結果を表示するプログラムを作成してみましょう

実行結果
1から100までの和は5050

【問2】

for文を用いて、1から100までの整数のうち偶数の和を計算し結果を表示するプログラムを作成してみましょう

実行結果
1から100までの和は2550

【問3】

for文の二重ループを用いて、以下のように九九を表示させるプログラムを作成してみましょう

実行結果 
 1  2  3  4  5  6  7  8  9
 2  4  6  8 10 12 14 16 18
 3  6  9 12 15 18 21 24 27
 4  8 12 16 20 24 28 32 36
 5 10 15 20 25 30 35 40 45
 6 12 18 24 30 36 42 48 54
 7 14 21 28 35 42 49 56 63
 8 16 24 32 40 48 56 64 72
 9 18 27 36 45 54 63 72 81

【問4】

for文を用いて、1から100までの乱数を10回発生させ表示し、奇数のみの和と偶数のみの和をそれぞれ表示するプログラムを作成してみましょう

実行結果
生成した整数:42 87 15 26 46 48 72 38 29 71
偶数の和:272
奇数の和:202

「5日目:for文」解答例

【問1】

#include <stdio.h>
int main(void){
 int sum=0;
 for(int i=1;i<100;i++){
   sum = sum + i;
 }
 printf("1から100までの和は%dです\n",sum);
 return 0;
}

【問2】

#include <stdio.h>
int main(void){
 int sum=0;
 for(int i=1;i<100;i++){
   if(i%2==0){
       sum = sum + i;
     }
 }
 printf("1から100までの和は%dです\n",sum);
 return 0;
}

【問3】

#include <stdio.h>
int main(void){
 for(int i=1;i<10;i++){
   for(int j=1;j<10;j++){
      printf("%2d ", i*j);
   }
   printf("\n");
 }
 return 0;
}

【問4】

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
   int i;
   int odd,even;
   srand((unsigned)time(NULL)); // 乱数の種を現在時刻で初期化する
   odd=0;
   even=0;
   printf("⽣成した整数:");
   for(i=0;i<10;i++){
      x=rand()%100+1;
      printf("%2d ",x);
      if(x%2==0){
         even = even + x;
      }else{
         odd = odd + x;
      }
   }
   printf("\n");
   printf("偶数の和:%d\n",even);
   printf("奇数の和:%d\n",odd);
   return 0;
}

<基礎編 5日目へ戻る>

「5日目:while文」の演習問題

【問1】

while文を用いて、1から100までの整数の和を計算し結果を表示するプログラムを作成してみましょう

実行結果
1から100までの和は5050です

【問2】

while文を用いて、1から100までの整数のうち奇数の和を計算し結果を表示するプログラムを作成してみましょう

実行結果
1から100までの奇数の和は2500です

【問3】

while文の中で、乱数で1から9の整数を発生させ、発生させた値が9のとき終了するプログラムを作成してみましょう(※ただしbreakは使用しない)

実行結果
生成した値は2です
生成した値は10です
生成した値は10です
生成した値は2です
生成した値は3です
生成した値は3です
生成した値は4です
生成した値は9です
終了します

「5日目:while文」解答例

【問1】

#include <stdio.h>
int main(void){
   int sum=0;
   int i=1;
   while(i<100){
      sum = sum + i;
      i++;
   }
   printf("1から100までの和は%dです\n",sum);
   return 0;
}

【問2】

#include <stdio.h>
int main(void){
 int sum=0;
 int i=1;
 while(i<100){
     if(i%2==1){
       sum = sum + i;
     }
     i++;
 }
 printf("1から100までの奇数の和は%dです\n",sum);
 return 0;
}

【問3】

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
  int x=0;
  srand((unsigned)time(NULL)); // 乱数の種を現在時刻で初期化する
 
  while(x!9){
    x = rand()%10+1;
    printf("生成した値は%dです\n",x);
  }
  printf("終了します\n");
  return 0;
}

<基礎編 5日目へ戻る>

「5日目:do-while文」の演習問題

【問1】

do-while文を用いて、1から100までの整数の和を計算し結果を表示するプログラムを作成してみましょう

実行結果
1から100までの和は5050です

【問2】

do-while文を用いて、1から100までの整数のうち偶数の和を計算し結果を表示するプログラムを作成してみましょう

実行結果
1から100までの偶数の和は2550です

【問3】

do-while文の中で、乱数で1から9の整数を発生させ、発生させた値が9のとき終了するプログラムを作成してみましょう(※ただしbreakは使用しない)

実行結果
生成した値は6です
生成した値は2です
生成した値は6です
生成した値は9です
終了します

「5日目:do-while文」解答例

【問1】

#include <stdio.h>
int main(void){
   int sum=0;
   int i=1;
   do{
      sum = sum + i;
      i++;
   }while(i<100);
   printf("1から100までの和は%dです\n",sum);
   return 0;

}

【問2】

#include <stdio.h>
int main(void){
   int sum=0;
   int i=1;
   do{
       if(i%2==0){
          sum = sum + i;
       }
      i++;
   }while(i<100);
   printf("1から100までの偶数の和は%dです\n",sum);
   return 0;

}

【問3】

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
  int x=0;
  srand((unsigned)time(NULL)); // 乱数の種を現在時刻で初期化する
 
  do{
    x = rand()%10+1;
    printf("生成した値は%dです\n",x);
  }while(x!9);
  printf("終了します\n");
  return 0;
}

<基礎編 5日目へ戻る>

「5日目:break文」の演習問題

【問1】

whileループの中で、乱数で1から9の整数を発生させ、発生させた値が9のとき終了するプログラムをbreakを使用して作成してみましょう

実行結果
生成した値は7です
生成した値は9です
終了します

hint
break文を使用する場合、下記のように記述するとよい

while(1){ // 無限ループを作る
     if(条件式){ // 条件に一致したときbreak文でループを抜ける
        break;
     }
}

「5日目:break文」解答例

【問1】

 #include <stdio.h>
 #include <stdlib.h>
 #include <time.h>
 int main(void){
   int x=0;
   srand((unsigned)time(NULL)); // 乱数の種を現在時刻で初期化する
 
   while(1){
      x = rand()%10+1;
      printf("生成した値は%dです\n",x);
      if(x==9) break;
   }
   printf("終了します\n");
   return 0;
 }

<基礎編 5日目へ戻る>

「5日目:continue文」の演習問題

【問1】

for文を用いて、1から100までの和を計算する。ただし、3で割り切れる数のときはスキップするものとする

実行結果
1から100までの和は3367です

「5日目:continue文」解答例

【問1】

 #include <stdio.h>

 int main(void){
   int sum = 0;
   for(int i=1;i<100;i++){
      if(i%3==0) continue;
      sum = sum + i;
   }
   printf("1から100までの和は%dです\n",sum);
  
   return 0;
 }

<基礎編 5日目へ戻る>

6日目

「6日目:1次元配列」の演習問題

【問1】

整数型の配列変数を次の条件を満たすように作成し表示するプログラムを作成してみましょう
(1) 配列の大きさは6
(2) 初期値は{-2,-5,0,1,6,10}とする

実行結果
[0]=-2
[1]=-5
[2]=0
[3]=1
[4]=6
[5]=10

【問2】

長さ5の整数型の配列変数を用意し、1から100までの乱数を代入し、代入した値を表示するプログラムを作成してみましょう

実行結果
[0]=74
[1]=32
[2]=100
[3]=22
[4]=91

【問3】

上の【問2】で作成したプログラムに以下の機能を追加してみましょう
(1) 配列の値の合計値と平均値を表示する
(2) 平均値よりも大きい値と小さい値を以下のように表示する

実行結果
a[0] = 52
a[1] = 44
a[2] = 71
a[3] = 18
a[4] = 28
合計値:213 平均:42.600000
42.600000よりも小さい値:18 28
42.600000よりも大きい値:52 44 71

「6日目:1次元配列」解答例

【問1】

#include <stdio.h>

int main(void){
    int ary[6]={2,-5,0,1,6,10};
    
    for(int i=0;i<6;i++){
        printf("[%d]=%d\n",i,ary[i]);
    }
  
  return 0;
}

【問2】

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(void){
    int ary[5];
    srand((unsigned)time(NULL)); // 乱数の種を現在時刻で初期化する
    
    for(int i=0;i<5;i++){
        ary[i]=rand()%100+1;
        printf("[%d]=%d\n",i,ary[i]);
    }
  
  return 0;
}

【問3】

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(void){
    int ary[5];
    int sum;
    double ave;
    srand((unsigned)time(NULL)); // 乱数の種を現在時刻で初期化する
    
    sum=0;
    for(int i=0;i<5;i++){
        ary[i]=rand()%100+1;
        printf("[%d]=%d\n",i,ary[i]);
        sum = sum + ary[i];
    }
    ave = sum / 5;
    printf("合計値:%d 平均:%f\n",sum,ave);

    printf("平均値よりも小さい値:");    
    for(int i=0;i<5;i++){
        if(ave>ary[i]){
            printf("%d ",ary[i]);
        }
    }
    printf("\n平均値よりも大きい値:");    
    for(int i=0;i<5;i++){
        if(ave<ary[i]){
            printf("%d ",ary[i]);
        }
    }

    
  return 0;
}

<基礎編 6日目へ戻る>

「6日目:多次元配列」の演習問題

【問1】

2次元配列の表示結果が下記になるように宣言し、表示するプログラムを作成してみましょう

  1   2   3   4   5
 10  20  30  40  50
100 200 300 400 500

【問2】

次のプログラムを作成してみましょう
(1) 5人分の国語と数学の点数を配列:tensu[2][5]と定義する
(2) 各点数は次のように定義する
tensu[2][5]={ {80, 60, 22, 50, 75},
       {90, 55, 68, 72, 58} };
ここで、tensu[0][n] は n 番目の人の国語の点数を、tensu[1][n] は n 番目の人の数学の点数を表すものとする
(3) 国語、数学の合計点と平均点を表示する

実行結果
国語の合計点:287
国語の平均点:57.4
数学の合計点:343
数学の平均点:68.6

「6日目:多次元配列」解答例

【問1】

#include <stdio.h>

int main(void){
	int ary[3][5] = { 
	    {1,2,3,4,5},
	    {10,20,30,40,50},
	    {100,200,300,400,500}
	};

    for(int i=0;i<3;i++){
        for(int j=0;j<5;j++){
            printf("%3d ",ary[i][j]);
        }
        printf("\n");
    }
    
  return 0;
}

【問2】

#include <stdio.h>

int main(void){
	int tensu[2][5] = { 
		{80, 60, 22, 50, 75},
		{90, 55, 68, 72, 58}
	};
  int kokugo_sum = 0;
  int sansu_sum = 0;
  int total;
  double ave;
      
  // 国語の合計・平均点の計算
  for(int j=0;j<5;j++){
		kokugo_sum = kokugo_sum + tensu[0][j];
  }
	ave = (double)kokugo_sum / 5;
	printf("国語の合計点:%d\n",kokugo_sum);	    
	printf("国語の平均点:%.1f\n",ave);

	// 算数の合計・平均点の計算
	for(int j=0;j<5;j++){
		sansu_sum = sansu_sum + tensu[1][j];
	}
	ave = (double)sansu_sum / 5;
	printf("算数の合計点:%d\n",sansu_sum);	    
	printf("算数の平均点:%.1f\n",ave);

  return 0;
}

<基礎編 6日目へ戻る>

「6日目:文字列」の演習問題

【問1】

準入力より文字列を取得し、入力された文字列を表示するプログラムを作成してみましょう
標準入力にはscanf()関数を利用します

実行結果
文字列を入力:Programing
入力した文字列はProgramingです

【問2】

次のプログラムを作成してみましょう
(1) 文字列:Socail Networking Serviceと定義する
(2) 定義した文字列の大文字だけを取り出して出力する

実行結果
S N S

hint
大文字かどうかをチェックするにはisupper(char c)関数を使用します
また、isupper() 関数は、ctype.h ヘッダーファイルで提供されています

【問3】

次のプログラムを作成してみましょう
(1) 文字列を次のように定義する
char str[2][10]={ "abcdef","123456" }
(2) 下記のように出力するプログラムを作成してみましょう

実行結果
a
b
c
d
e
f
1
2
3
4
5
6

「6日目:文字列」解答例

【問1】

 #include <stdio.h>
 #include <stdlib.h>

 int main(void){
	char str[256];
	
	printf("文字列を入力:");
	scanf("%s",str);
	printf("入力した文字列は%sです\n",str);
	
	return 0;
 }

【問2】

 #include <stdio.h>
 #include <ctype.h>

 int main(void){
	   char str[256]="Socail Networking Service";
	   int i;

     for (i = 0; str[i] !'\0'; i++) {
       	if (isupper(str[i])) {
            	printf("%c ", str[i]);
        	}
     }
   	 printf("\n");

     return 0;
}

【問3】

#include <stdio.h>

int main(void){
	char str[2][10]={
            "abcdef","123456"
   };
	
	for(int i=0;i<2;i++){
		for(int j=0;str[i][j] !'\0';j++){
			printf("%c\n",str[i][j]);
		}
	}
	return 0;
}

<基礎編 6日目へ戻る>

7日目

「7日目:関数」の演習問題

【問1】

以下の機能をもつプログラムを作成してみましょう
(1) 2つの整数の大きい方を求める関数を実装する
※同じ値の場合は、先に入力した整数を返す仕様とする
(2) 標準入力より、2つの整数を取得し、(1)で作成した関数を呼び出す
(3) (2)の結果を出力する

出力結果
2つの整数をカンマ区切りで入力します:3,5
3と5では5が大きい
2つの整数をカンマ区切りで入力します:3,3
3と3では3が大きい

【問2】

以下の機能をもつプログラムを作成してみましょう
(1) 2つの整数の小さい方を求める関数を実装する
※同じ値の場合は、先に入力した整数を返す仕様とする
(2) 長さ5の整数型の配列変数を用意し、1から100までの乱数を代入し、代入した値を表示する
(3) (1)の関数を使用し、配列の最小値を求める

出力結果
[0]=91
[1]=97
[2]=46
[3]=67
[4]=44
最小値は44

【問3】

以下の機能をもつプログラムを作成してみましょう
(1) うるう年かどうかを判定する関数を作成する
※うるう年の判定方法は次の通り
* 4で割り切れかつ100では割り切れない年,もしくは,400で割り切れる年
(2) 1900年から2024年までの間でうるう年と判定した年を列挙する

実行結果
1904 1908 1912 1916 1920 1924 1928 1932 1936 1940 1944 1948 1952 1956 1960 1964 1968 1972 1976 1980 1984 1988 1992 1996 2000 2004 2008 2012 2016 2020 2024

【問4】

以下は階乗を計算するため再帰呼び出しを行ったサンプルです。ソースを打ち込み実行してみましょう

int factorial(int n) {
    int ret;
    if (n == 0) { // nが0なら
  	    printf("n:%d,ret=1\n",n);
        return 1; // 1を返す
    } else { // そうでなければ
  	    ret = n * factorial(n-1); // nとn-1の階乗の積を返す
  	    printf("n:%d,ret=%d\n",n,ret);
        return ret;
    }
}

int main(void){
	  int num = 5; // 変数の宣言と初期化
    // 5! = 5 * 4 * 3 * 2 * 1
	  int result = factorial(num); // factorial関数にnumを渡し、戻り値をresultに代入
	  printf("%d! = %d\n", num, result); // 結果を表示
}

「7日目:関数」解答例

【問1】

#include <stdio.h>

int getMax(int a,int b){
    if(a>=b){
        return a;
    }else{
        return b;
    }
}

int main(void){
    int x,y;

    printf("2つの整数をカンマ区切りで入力します:");
    scanf("%d,%d",&x,&y);
    printf("%dと%dでは%dが大きい\n",x,y,getMax(x,y));
}

【問2】

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int getMin(int a,int b){
    if(a<=b){
        return a;
    }else{
        return b;
    }
}

int main(void){
    int ary[5];
    int min=999;

    srand((unsigned)time(NULL)); // 乱数の種を現在時刻で初期化する
    for(int i=0;i<5;i++){
        ary[i] = rand()%100+1;
        printf("[%d]=%d\n",i,ary[i]);
        min = getMin(min,ary[i]);
    }
    printf("最小値は%d\n",min);

    return 0;
}

【問3】

#include <stdio.h>

/* 
  引数yearがうるう年か判定する 
  戻り値:うるう年のとき⇒1
     :うるう年ではないとき⇒0
*/
int isUruYear(int year){
    if(((year%4 == 0) && (year%100 !0)) || (year%400 == 0)){
        return 1; // うるう年
    }else{
        return 0;
    }
}

int main(void){
    int year;
    int ret;

    for(year=1900;year<2024;year++){
        ret = isUruYear(year);
        if(ret==1){
            printf("%d ",year);
        }
    }
    return 0;
}

<基礎編 7日目へ戻る>

コメント

この記事へのコメントはありません。

関連記事

C言語のメリット

C言語でデータセットを使用する 後編

C言語(応用編)~2日目~

PAGE TOP