プログラミング論I

練習問題
1
2009年4月22日
2
練習 0
• 画面に"Hello!"と表示し,改行し,終了
するプログラムを記述せよ.
3
解答 0
#include <stdio.h>
void main(){
printf("Hello!\n");
}
4
練習 1
• int型変数x, y, zの3個を用意して,
xに3を,yに5を,zにx+yを代入して
zを表示するプログラムを記述せよ.
5
解答 1
#include <stdio.h>
void main(){
int x, y, z;
x = 3;
y = 5;
z = x+y;
printf("%d\n", z);
}
6
練習 2
int a=7, b=3;
if( 3 < a ){
printf("A\n");
} else {
if( 2 < b ){
printf("B\n");
}
printf("C\n");
}
左のプログラムを
実行したら,
どの様に表されるか?
7
解答 2
A
8
練習 3
int a=2, b=3;
if( 3 < a ){
printf("A\n");
} else {
if( 2 < b ){
printf("B\n");
}
printf("C\n");
}
左のプログラムを
実行したら,
どの様に表されるか?
9
解答 3
B
C
10
練習 4
int a=2, b=2;
if( 3 < a ){
printf("A\n");
} else {
if( 2 < b ){
printf("B\n");
}
printf("C\n");
}
左のプログラムを
実行したら,
どの様に表されるか?
11
解答 4
C
12
練習 5
• 画面に"Hello!\n"と10回表示するプロ
グラムを記述せよ.
#include <stdio.h>
void main(){
この部分だけ
記述すればOK
(以下,同様)
}
13
解答 5
#include <stdio.h>
void main(){
int i;
for(i=0; i<10; i++){
printf("Hello!\n");
}
}
14
練習 6
• 右図のように100個の整数を表示するプロ
グラムを作成せよ.
0
必ずfor文を用いよ.
1
2
– ヒント:
:
– int型の変数iの値の表示の例
98
printf("%d\n", i);
99
15
解答 6
#include <stdio.h>
void main(){
int i;
for(i=0; i<100; i++){
printf("%d\n",i);
}
}
16
練習 7
• 右図のように100個の整数を表示するプロ
グラムを作成せよ.
100
必ずfor文を用いよ.
101
102
:
198
199
17
解答 7
#include <stdio.h>
void main(){
int i;
for(i=0; i<100; i++){
printf("%d\n",i+100);
}
}
18
練習 8
• 下のプログラムを実行したら画面にはどの
様に表示されるか?
#include <stdio.h>
void main(){
int i;
for(i=7; i<20; i+=3){
printf("%d\n",i);
}
}
19
解答 8
7
10
13
16
19
20
練習 9
• 下のプログラムを実行したら画面にはどの
様に表示されるか?
#include <stdio.h>
void main(){
int i;
for(i=7; i<20; i+=3){
printf("%d\n",i*2);
}
}
21
解答 9
14
20
26
32
38
22
練習 10
• 下のプログラムを実行したら画面にはどの
様に表示されるか?
#include <stdio.h>
void main(){
int i;
for(i=0; i<5; i++){
printf("%d\n",10000+i*10);
}
}
23
解答 10
10000
10010
10020
10030
10040
24
練習 11
• 下のプログラムを実行したら画面にはどの
様に表示されるか?
#include <stdio.h>
void main(){
int i;
for(i=105; 100<=i; i--){
printf("%d\n",i);
}
}
25
解答 11
105
104
103
102
101
100
26
練習 12
• 右図のように100個の整数を表示するプロ
グラムを作成せよ.
1000
必ずfor文を用いよ.
1005
– ヒント↓
1010
1015
:
1495
i
0
1
2
3
4
表示
1000
1005
1010
1015
1020
n
??
98
99
1490
1495
27
解答 12
#include <stdio.h>
void main(){
int i;
for(i=0; i<100; i++){
printf("%d\n",1000+5*i);
}
}
28
2009年05月07日
29
練習 13
下の様に出力されるプログラムは?
1000
1001
1004
1009
1016
1025
1036
1049
1064
1081
30
解答 13
int i, x;
for(i=0; i<10; i++){
x = 1000 + i*i;
printf("%d\n", x);
}
31
練習 14
下のプログラムの出力は?
int i, j;
for(i=0; i<3; i++){
for(j=0; j<2; j++){
printf("i=%d, j=%d\n", i, j);
}
}
32
解答 14
i=0,
i=0,
i=1,
i=1,
i=2,
i=2,
j=0
j=1
j=0
j=1
j=0
j=1
33
練習 15
下のプログラムの出力は?
int x, y;
for(y=2; y<4; y++){
for(x=5; x<7; x++){
printf("x=%d, y=%d\n", x, y);
}
}
34
解答 15
x=5,
x=6,
x=5,
x=6,
y=2
y=2
y=3
y=3
35
練習 16
下のプログラムの出力は?
int x, y, z;
for(x=0; x<2; x++){
for(y=0; y<2; y++){
for(z=0; z<2; z++){
printf("%d, %d, %d\n", x, y, z);
}
}
}
36
解答 16
0,
0,
0,
0,
1,
1,
1,
1,
0,
0,
1,
1,
0,
0,
1,
1,
0
1
0
1
0
1
0
1
37
練習 17
下のプログラムの出力は?
int x, y, z;
for(y=2; y<4; y++){
for(x=5; x<7; x++){
for(z=8; z<10; z++){
printf("%d, %d, %d\n", x, y, z);
}
}
}
38
解答 17
5,
5,
6,
6,
5,
5,
6,
6,
2,
2,
2,
2,
3,
3,
3,
3,
8
9
8
9
8
9
8
9
39
2009年05月14日
40
練習 18
• 1+2+3+…+100を求め,表示するプログラ
ムを作成せよ.
41
解答 18
#include <stdio.h>
void main(){
int i, sum=0;
for(i=1; i<=100; i++){
sum += i;
}
printf("%d\n", sum);
}
42
練習 19
• 1+2+3+…+100を求め,表示するプログラ
ムを作成せよ.
– ヒント:先ほどと全く同じ問題です.
43
解答 19
#include <stdio.h>
void main(){
int i, sum=0;
for(i=1; i<=100; i++){
sum += i;
}
printf("%d\n", sum);
}
44
練習 20
• 1+2+3+…+200を求め,表示するプログラ
ムを作成せよ.
– ヒント:先ほどとほとんど同じ問題です.
45
解答 20
#include <stdio.h>
void main(){
int i, sum=0;
for(i=1; i<=200; i++){
sum += i;
}
printf("%d\n", sum);
}
46
2009年05月21日
47
練習 21
• 100+101+102+…+199を求め,表示する
プログラムを作成せよ.
– ヒント:先ほどとほとんど同じ問題です.
48
解答 21
#include <stdio.h>
void main(){
int i, sum=0;
for(i=100; i<200; i++){
sum += i;
}
printf("%d\n", sum);
}
49
練習 22
• 12+22+32+…+1002を求め,表示するプロ
グラムを作成せよ.
50
解答 22
#include <stdio.h>
void main(){
int i, sum=0;
for(i=1; i<=100; i++){
sum += i*i;
}
printf("%d\n", sum);
}
51
練習 23
• 100.02+100.22+100.42+…+119.82の
100個の実数の和を求め,表示するプログ
ラムを作成せよ.
52
解答 23
#include <stdio.h>
void main(){
int i;
double sum=0, x;
for(i=0; i<100; i++){
x = 100 + 0.2*i;
sum += x*x;
}
printf("%lf\n", sum);
}
53
2009年05月28日
54
練習 24
• aの方が大きかったら,”John”と,
そうでなかったら”Paul”と表示する。
void main(){
int a=○, b=×;
ここの部分を
答える。
}
55
解答 24
if( b < a ){
printf("John");
} else {
printf("Paul");
}
56
練習 25
start
if(y == 0)
No
Yes
No
if(x == 0)
Yes
printf("C");
printf("A");
void main(){
int x,y;
x=○;
y=×;
printf("B");
ここの部分を
答える。
}
57
解答 25
if( x == 0 ){
printf("C\n");
} else {
if( y == 0 ){
printf("B");
} else {
printf("A");
}
}
58
練習 26
• ronとensに論と演習の点数が入っている.60
点以上が合格.
• 点数により分類して,右の表の様に表示するに
は?
void main(){
int ron=○,ens=×;
ここの部分を
答える。
}
論が合格
論が不合格
演習が合格
GREAT!
GOOD!
演習が不合格
COOL!
Oh, my...
59
if( 60<=ron){
解答
if( 60<=ens ){
printf("GREAT!\n");
} else {
printf("COOL!\n");
}
} else {
if( 60<=ens ){
printf("GOOD!\n");
} else {
printf("Oh, my...!\n");
}
}
26
60
練習 27
• aとbの大きい方を,変数maxに代入.
同じ値だったら,その値を代入.
void main(){
int a=○, b=×, max;
ここの部分を
答える。
printf("max=%d",max);
}
61
解答 27
if( b < a ){
max = a;
} else {
max = b;
}
62
練習 28
• aとbとcの中で最大のものを変数maxに代
入.
void main(){
int a=○, b=×, c=○, max;
ここの部分を
答える。
printf("max=%d",max);
}
63
解答 28
int abmax;
if( a<b ){
abmax=b;
} else {
abmax=a;
}
if( abmax<c ){
max=c;
} else {
max=abmax;
}
64
練習 29
• aとbとcとdの中で最大のものを変数max
に代入.
void main(){
int a,b,c,d,max;
ここの部分を
答える。
printf("max=%d",max);
}
65
解答 29
int x,y;
if( a<b ){
x=b;
} else {
x=a;
}
if( x<c ){
y=c;
} else {
y=x;
}
if( y<d ){
max=d;
} else {
max=y;
}
66
2009年06月04日
67
練習 30
• 4の倍数がうるう年である. 判別するプログラムを作成せよ.
#include <stdio.h>
void main(){
int year = 2009;
if( ?? ){
printf("%d 年はうるう年である.\n", year);
} else {
printf("%d 年はうるう年でない.\n", year);
}
}
68
解答 30
• 4の倍数がうるう年である. 判別するプログラムを作成せよ.
#include <stdio.h>
void main(){
int year = 2009;
if( year % 4 == 0 ){
printf("%d 年はうるう年である.\n", year);
} else {
printf("%d 年はうるう年でない.\n", year);
}
}
69
練習
31
• うるう年を判別するプログラムを作成せよ.
– 4の倍数がうるう年である.
– ただし, 4の倍数でも100の倍数は
うるう年でない.
#include <stdio.h>
– ただし, 100の倍数でも
void main(){
400の倍数は
int year = 2008;
うるう年である.
ここだけ記述すれば
OK
}
70
#include <stdio.h>
void main(){
int year = 2008;
if( year % 4 == 0 ){
if( year % 100 == 0 ){
if( year % 400 == 0 ){
printf("%d 年はうるう年である.\n", year);
} else {
printf("%d 年はうるう年でない.\n", year);
}
} else {
printf("%d 年はうるう年である.\n", year);
}
} else {
printf("%d 年はうるう年でない.\n", year);
}
}
解答 31
71
2009年06月18日
72
練習 32
• 戻り値がint型,引数がint型3個(int
x, int y, int z)で,関数名がadd
である関数を作成せよ.中身は,x,y,zの
値を表示して,その合計を戻り値として返
す.
• この関数を引数7,8,9にてmain()から
呼び出して,戻り値を変数xに代入せよ.
73
解答 32
int add(int x, int y, int z){
printf("%d %d %d\n",x,y,z);
return x+y+z;
}
void main(){
int x = add(7,8,9);
printf("x=%d\n", x);
}
74
練習 33
• 戻り値がint型で,引数がint型2個(変
数名は自由)で,関数名がmaxで,中身は
2個の引数を表示してそのうち大きい方の
値を返す関数を作成せよ.
– 例:3,7を引数として呼び出すと,画面
に”3,7”と表示されて,7が戻り値として返さ
れる. x=max(3,7)とするとxに7が代入さ
れる.
75
解答 33
int max(int x, int y, int z){
printf("%d %d\n",x,y);
if(x<y){
return x;
} else {
return y;
}
}
76
2009年06月25日
77
練習 34
• 戻り値がint型で,引数がint型2個(変
数名は自由)で,関数名がaddで,中身は
2個の引数の和を返す関数を作成せよ.
– 例:3,6を引数として呼び出すと, 9が戻り値
として返される. x=add(3,6)とするとxに9
が代入される.
78
解答 34
int add(int x, int y){
return a+b;
}
79
2009年07月02日
80
練習 35
• 3個の小数(double型)を引数にとり,そ
れらの和(double型)を戻り値として返す
関数adddを作成し,main()の中から呼
び出せ.
81
解答 35
double addd(double a, double b, double c){
return a+b+c;
}
void main(){
double x;
x = addd(1.2, 3.4, 5.6);
printf("%lf\n", x);
}
82
練習 36
• 下を実行したらどの様に表示される?
void funcA(){
printf("A\n");
}
void funcB(){
printf("B\n");
funcA();
}
void main(){
funcB();
funcA();
}
83
解答 36
B
A
A
84
2009年07月09日
85
練習 37
• 長さ1000の整数の配列,int x[1000]
とint y[1000]がある.
• x[0]~x[999]にはデータが入っている
として,x[]の1000個をy[]の1000個に
コピーするプログラムは?
– つまり,x[0]をy[0]にコピーして,x[1]を
y[1]にコピーする.
86
解答 37
int i;
for(i=0; i<1000; i++){
y[i]=x[i];
}
87
練習 38
• 長さ1000の整数の配列,int x[1000]
とint y[1000]がある.x[0]~
x[999]にはデータが入っているとする.
• x[500]~x[599]の100個をy[500]~
y[599]の100個にコピーするプログラム
は?
– つまり,x[500]をy[500]にコピーし
て,x[501]をy[501]にコピーする.
88
解答 38
int i;
for(i=500; i<600; i++){
y[i]=x[i];
}
89
練習 39
• 長さ1000の整数の配列,int x[1000]
とint y[1000]がある.x[0]~
x[999]にはデータが入っているとする.
• x[500]~x[599]の100個をy[300]~
y[399]の100個にコピーするプログラム
は?
– つまり,x[500]をy[300]にコピーし
て,x[501]をy[301]にコピーする.
90
解答 39
int i;
for(i=0; i<100; i++){
y[300+i]=x[500+i];
}
91
2009年07月16日
92
練習 40
• 次の関数を記述せよ.
引数はint型2個(int a, int b).
戻り値はint型であり,
値はa以上b未満の整数の合計.
関数名は sumint
93
解答 40
int sumint(int a, int b){
int sum, i;
sum = 0;
for(i=a; i<b; i++){
sum += i;
}
return sum;
}
94