プログラミング応用 練習問題(1/5) 2005/01/27 名列番号 氏名
問1. 次の文章の下線部および表の空欄①〜⑦を埋めてC言語とそのデータ型の説明を完成せよ。(7)
C言語は ① 化言語である。 ① とは、ある機能を実現した定義済み処理のことである。
C言語における ② 文をプログラムの先頭に記述することで、標準ライブラリ ① を 利用できるようになる。C言語で利用できる基本的なデータ型には以下の表のようなものがある。
解答
問2. 下線部を埋めて下記の「キーボードから入力した整数の回数(例えば3)だけ、
Hello1 Hello2 Hello3
のように表示する(各“Hello数字” の表示は改行して表示する)」プログラムを完成せよ。(16)
<stdio.h>
void {
int i , n;
(" ", );
for( i=0 ; ; ){
printf(" ", i+1 );
問3. 次の演算子を使った式の中で間違っているものはどれか、番号を解答欄に答えよ。(式にはif 文などで使わ れ
(1) y+1 < x+2 (2) y=y+2 (3) x+3 = 25 (4) a=b=c=d (5) z+3 == x+4
}
}
る条件式も含まれる)(10)
プログラミング応用 練習問題(2/5) 2005/01/27 名列番号 氏名
問4. 引数として整数 a(1<=a<=3)を受け取り、a=1 の時には"グー" 、a=2 の時には"チョキ"、a=3 の時には"
パー"と画面に表示する関数jankenをswitch case文を使って完成せよ。(5) void janken( int a ){
swtich
}
問5. 次のプログラムに適切な条件式を答えよ。(9)
(1) if( ){
変数aとbが両方とも正の数の場合の処理(0は正の数ではない)
}
(2) while( ){
変数xとyのどちらかが負の数になったら繰り返しを終了する
(それまではこの部分を繰り返す)
}
(3) if( ){
変数rが3の倍数の場合の処理 }
問6. 以下のプログラムを実行すると画面にはどのように表示されるか答えよ。(解答は各プログラムの下に)(30) (2)
#include <stdio.h>
int f(int a[] , int n){
int i , x=0;
for(i=0 ; i<n ; i++) x = x + a[i];
return x;
}
void main(){
int x[] = {10 , 20 , 30 };
printf("ans=%d" , f(x , 3) );
} (1)
#include <stdio.h>
int f(int a){
int i , x=1;
for(i=0 ; i<a ; i++) x = x * 3;
return x;
}
void main(){
printf("ans=%d" , f(4) );
}
プログラミング応用 練習問題(3/5) 2005/01/27 名列番号 氏名
問6のつづき
(4)
#include <stdio.h>
void f(int a , int b, int *c, int *d){
a = a + b;
*c = a;
*d = *c / 2;
}
void main(){
int a =10, b=20 , c , d;
f( a , b , &c , &d );
printf("a=%d ", a);
printf("b=%d ", b);
printf("c=%d ", c);
printf("d=%d ", d);
} (3)
#include <stdio.h>
void main(){
int a , b , *c , *d , *e ;
a = 10 ;
b = 10 ;
c = &a ; d = &b ;
e = c ;
*e = *e * 10 ;
e = d ;
*e = *e * -10 ; *c = *c + *d;
printf("a=%d , b=%d ", a , b );
}
(6)
#include <stdio.h>
char f( char x ){
return 0x0f & x;
}
void main(){
printf("%d" , f( 0xAA ) );
}
参考: char 型を%d で表示すると char 型を整数として 表示する
(5)
#include <stdio.h>
int a;
void f1( int x ){
a = x * x;
f2(a);
printf( “f1a=%d\n”, a);
}
void f2( int x ){
int a;
a = 10 + x;
printf( “f2a=%d\n”, a);
}
void main(){
a = 5 ;
f1(a);
a = a+100;
printf( “ma=%d\n”, a);
f2(a);
printf( “ma=%d\n”, a);
}
プログラミング応用 練習問題(4/5) 2005/01/27 名列番号 氏名
問7. 空欄を埋めて以下の関数を完成せよ。(13)
(1) 引数xとnからxnを計算する関数
int f( int x , int n ){
int i , a=1;
for( ; ; ){
a = ; }
; }
(2) 配列とそのサイズを引数として受け取り、配列データの中の最大値を返す関数
int f( , int n ){
int i , max ;
max = ;
for( ; ; ){
if( ){
; }
}
; }
プログラミング応用 練習問題(5/5) 2005/01/27 名列番号 氏名
問8.
以下の関数を作成せよ。 (10)
(1) 配列とそのサイズおよび、配列の最大値と最小値を求めた結果を返すための変数のアドレスを 受け取り、配列に保存されたデータの最大値と最小値を求めて返す関数
(2) 2つの数値の合計と平均を一度に求める関数
プログラミング応用 練習問題 回答例(一部) 2005/01/27 名列番号 氏名
問3. の演算子を使った式の中で間違っているものはどれか、番号を解答欄に答えよ。(式にはif文などで使わ れる条件式も含まれる)(10)
(1) y+1 < x+2 (2) y=y+2 (3) x+3 = 25 (4) a=b=c=d (5) z+3 == x+4 解答 (3)
プログラミング応用 練習問題 回答例(一部) 2005/01/27 名列番号 氏名
問4.引数として整数a(1<=a<=3)を受け取り、a=1の時には"グー" 、a=2の時には"チョキ"、a=3の時には"パ ー"と画面に表示する関数jankenをswitch case文を使って完成せよ。(5)
void janken( int a ){
swtich( a ){
case 1 : printf(“グー”);
break;
case 2 : printf(“チョキ”);
break;
case 3 : printf(“パー”);
break;
}
}
問2. 以下のプログラムを実行すると画面にはどのように表示されるか答えよ。(解答は各プログラムの下に)(30) (2)
#include <stdio.h>
int f(int a[] , int n){
int i , x=0;
for(i=0 ; i<n ; i++) x = x + a[i];
return x;
}
void main(){
int x[] = {10 , 20 , 30 };
printf("ans=%d" , f(x , 3) );
} (1)
#include <stdio.h>
int f(int a){
int i , x=1;
for(i=0 ; i<a ; i++) x = x * 3;
return x;
}
void main(){
printf("ans=%d" , f(4) );
}
ans=81 ans=60
問6のつづき
(4)
#include <stdio.h>
void f(int a , int b, int *c, int *d){
a = a + b;
*c = a;
*d = *c / 2;
}
void main(){
int a =10, b=20 , c , d;
f( a , b , &c , &d );
printf("a=%d ", a);
printf("b=%d ", b);
printf("c=%d ", c);
printf("d=%d ", d);
} (3)
#include <stdio.h>
void main(){
int a , b , *c , *d , *e ;
a = 10 ;
b = 10 ;
c = &a ; d = &b ;
e = c ;
*e = *e * 10 ;
e = d ;
*e = *e * -10 ; *c = *c + *d;
printf("a=%d , b=%d ", a , b );
}
プログラミング応用 練習問題 回答例(一部) 2005/01/27 名列番号 氏名
(3) (4)
a=0 , b=−100 a=10
b=20 c=30 d=15
(6)
#include <stdio.h>
char f( char x ){
return 0x0f & x;
}
void main(){
printf("%d" , f( 0xAA ) );
}
参考: char 型を%d で表示すると char 型を整数として 表示する
10 (5)
#include <stdio.h>
int a;
void f1( int x ){
a = x * x;
f2(a);
printf( “f1a=%d\n”, a);
}
void f2( int x ){
int a;
a = 10 + x;
printf( “f2a=%d\n”, a);
}
void main(){
a = 5 ;
f1(a);
a = a+100;
printf( “ma=%d\n”, a);
f2(a);
printf( “ma=%d\n”, a);
}
プログラミング応用 練習問題 回答例(一部) 2005/01/27 名列番号 氏名
問3. 空欄を埋めて以下の関数を完成せよ。(13)
a. 引数xとnからxnを計算する関数
int f( int x , int n ){
int i , a=1;
for( ; ; ){
a = ; }
; }
ヒント:初期値1の変数aにXをn回掛ける。(この操作はn回の繰り返しで行う)
最後にreturn文で結果を返す
b. 配列とそのサイズを引数として受け取り、配列データの中の最大値を返す関数
int f( , int n ){
int i , max ;
max = ;
for( ; ; ){
if( ){
; }
}
; }
ヒント:配列としてたとえば x を受け取った場合(x[0]〜x[n-1])
変数 max の初期値を x[0]にする。
max の意味は、 「それまでに確認したデータ内での最大値」である。
初期値を x[0]とするのは、まず最初のデータのみを確認したとき、その 1 個のデータ 内での最大値は、その値そのものということである。
次に、max と x[1]を比較する。x[1]が max よりも大きければ、max に x[1]の値を記憶する。
つまり、それまでの最大値よりも x[1]が大きければ、x[1]までの最大値は x[1]ということに
プログラミング応用 練習問題 回答例(一部) 2005/01/27 名列番号 氏名
なる。次に、max と x[2]を比較する。以後、同様の操作を繰り返していけば、最大値を求め
ることができる。最後は return max で最大値を返す。
プログラミング応用 練習問題 回答例(一部) 2005/01/27 名列番号 氏名
問4.