問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

Similar documents
プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

Prog1_10th

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

Microsoft Word - Cプログラミング演習(11)

Taro-ポインタ変数Ⅰ(公開版).j

プログラミング実習I

Microsoft Word - Cプログラミング演習(3)

memo

Microsoft Word - 3new.doc

Taro-リストⅠ(公開版).jtd

Microsoft PowerPoint - lec10.ppt

Microsoft Word - Cプログラミング演習(12)

演算増幅器

PowerPoint プレゼンテーション

memo

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Microsoft Word - Cプログラミング演習(10)

Microsoft Word - Cプログラミング演習(9)

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

プログラミング基礎

プログラミングI第10回

演算増幅器

PowerPoint プレゼンテーション

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft PowerPoint - 11.pptx

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Prog1_15th

cp-7. 配列

Microsoft Word - no103.docx

Taro-リストⅢ(公開版).jtd

gengo1-11

gengo1-8

講習No.10

Microsoft PowerPoint - C4(反復for).ppt

ポインタ変数

Microsoft Word - no15.docx

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

Microsoft PowerPoint - 13th.ppt [互換モード]

PowerPoint Presentation

Microsoft PowerPoint - 説柔5_間勊+C_guide5ï¼›2015ã•’2015æŒ°æŁŽæš’å¯¾å¿œç¢ºèª“æ¸‹ã†¿ã•‚.pptx

講習No.9

1. 入力した正の整数を降順に並べ換えて出力するプログラムを作成せよ プログラムは個別にコンパイルし make コマンドで実行すること 入力データは 50 以下とし 以下の数が混在しているとする 16 進数 : 先頭 1 文字が x または X( エックスの小文字か大文字 ) 8 進数 : 先頭 1

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

PowerPoint プレゼンテーション

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

スライド 1

< F2D837C E95CF CF68A4A94C5816A2E6A>

Microsoft Word - Training10_プリプロセッサ.docx

kiso2-09.key

Java講座

memo

PowerPoint Presentation

第1回 プログラミング演習3 センサーアプリケーション

gengo1-10

Microsoft Word - no02.doc

Prog1_6th

memo

演習課題No12

gengo1-2

情報処理演習 B8クラス

Microsoft PowerPoint - kougi9.ppt

Microsoft Word - no202.docx

Microsoft Word - Cプログラミング演習(7)

program7app.ppt

ポインタ変数

Microsoft Word - no11.docx

Microsoft PowerPoint - kougi7.ppt

PowerPoint プレゼンテーション

講習No.8

2006年10月5日(木)実施

PowerPoint プレゼンテーション

Microsoft PowerPoint pptx

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

02: 変数と標準入出力

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

Taro-ファイル処理(公開版).jtd

1. 入力した文字列を得る 1.1. 関数 scanf() を使う まずは関数 scanf() を使ったプログラムを作ってみましょう 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: #include<stdio.h> #define SIZE 128 main(

Microsoft PowerPoint - 第3回目.ppt [互換モード]

Microsoft Word - report#8.docx

1. 関数 scanf() 関数 printf() は変数の値を画面に表示しますが それに対し関数 scanf() はキーボードで入力した値を変数に代入します この関数を活用することで対話式 ( ユーザーの操作に応じて処理を行う ) プログラムを作ることができるようになります 整数の和

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

講習No.12

memo

PowerPoint プレゼンテーション

02: 変数と標準入出力

Microsoft Word - Cプログラミング演習(8)

第2回

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

ポインタ変数

slide5.pptx

Microsoft PowerPoint - program.ppt [互換モード]

Microsoft PowerPoint - handout07.ppt [互換モード]

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

Taro-スタック(公開版).jtd

PowerPoint Presentation

<4D F736F F D20438CBE8CEA8D758DC03389F0939A82C282AB2E646F63>

Prog1_12th

Prog1_6th

Transcription:

問 1 配列の宣言整数型配列 data1 にデータが初期設定されている この配列 data1 のデータを下図のように 整数型配列 data2 に代入しなさい また data2 の内容を printf( "data2[0] = %d\n", data2[0] ); printf( "data2[5] = %d\n", data2[5] ); を用いて出力しなさい 実行結果 data2[0] = 76 data2[1] = 11 data2[2] = 46 data2[3] = 18 data2[4] = 25 data2[5] = 3 1

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a = 30000, b = 10000; long c; c = a + b; return 0; 問 3 ( 演算 ) 1 個 3000 円の品物 Aを 12 個と 1 個 5000 円の品物 Bを8 個購入したときの合計金額 および 品物 A を8 個と品物 Bを12 個購入したときの合計金額をもとめなさい また 計算結果は printf( " 結果 = %ld\n", 計算結果が格納されている変数 ); を用いてそれぞれ画面出力しなさい 実行結果 結果 = 76000 結果 = 84000 2

問 4 ( 配列 ) 整数型の配列 data1 に図 1のようにデータが初期設定されている また 浮動小数点型の配列 data2 に図 2のようにデータが初期設定されている これらの配列の中身を printf() 関数を用いて 実行結果のように画面表示せよ 実行結果 data1[0] = 1 data1[1] = 22 data1[2] = 333 data1[3] = 4444 data2[0] = 12.340 data2[1] = 0.002 data2[2] = 5678.120 data2[3] = 912.100 3

次のフローチャートに基づいてプログラムを作成しなさい 問 5 ( ループ処理 (for 文 )) 実行例 総和 =5050 4

問 6 ( ループ処理 (for 文ネスト )) 次のフローチャートに基づいてプログラムを作成しなさい 実行結果 * ** *** **** ***** ****** ******* ******** ********* ********** 5

問 7 ( ループ処理 (while 文 )) while 文を用いてプログラムを作成しなさい 実行結果 総和 = 5050 6

do~while 文を用いてプログラムを作成しなさい 問 8 ( ループ処理 (do~while 文 )) 今 data1 に 1000 という値が初期設定されている scanf 関数を用いて変数 data2 に整数値を入力し data1 から data2 を引きなさい この処理を data1 が 0 以下になるまで結果を確認しながら繰り返しなさい 実行結果 整数値を入力 500 data1 = 500 整数値を入力 300 data1 = 200 整数値を入力 250 data1 = -50 7

switch 文を用いてプログラムを作成しなさい 問 9 scanf 関数を用いて計算方法 ( + - * / ) と2 個の整数を入力し 計算方法によって 2 個の整数の計算を行いなさい ただし 除算を指定した場合には 0 で割り算をしないこと 実行例 計算方法の入力 ( + - * / )+ 整数値 1の入力 12 整数値 2の入力 22 kekka = 34 問 10 scanf 関数で 1~10 までの整数値を1 個入力し 入力した値により 以下の処理を行いなさい 入力した数字が 1 か 2 か 3 なら "1: one 2: two 3: three" と表示する 入力した数字が 4 か 5 か 6 なら "4: four 5: five 6: six" と表示する 入力した数字が 7 か 8 か 9 か 10 なら "7: seven 8: eight 9: nine 10: ten" と表示する それ以外なら "number input err" と表示する 実行例 input number( 1-10 ) 5 4:four 5:five 6:six 8

問 11 ( ループ処理 ( 応用 )) 次の仕様に従って プログラムを作成せよ 2つの整数の除算を行い 小数点以下 50 桁まで求めなさい ただし 計算途中で割り切れた場合は それ以後の小数点は求めません また 割る数に 0 が入力された場合は計算を行いません ( ナツメ社中山敬二著 はじめての C 言語 を参考にオリジナルに作り変えました ) ( 内容 ) 計算結果を格納する整数型配列を大きさ 51 で宣言する 整数値 ( a, b ) を入力する b に 0 が入力されたら そのまま処理を終了する ( コンピュータでは 0 で割るという処理はあってはならないもの ) 計算結果 [0] に a を b で割った結果を格納する 1 から 51 までループする a を b で割った余りが 0 ならループを終了する a に余り 10 を代入する 計算結果 [ ループ番目 ] に a を b で割った結果を格納する 計算結果を表示する 9

実行結果例 1( 小数部で割り切れる ) 整数値を 2 つ入力してください 5 4 5 / 4 = 1.25 実行結果例 2( 割り切れない ) 整数値を 2 つ入力してください 10 3 10 / 3 = 3.33333333333333333333333333333333333333333333333333 ( 小数点以下 50 桁 ) 実行結果例 3( 整数部で割り切れる ) 整数値を 2 つ入力してください 10 2 10 / 2 = 5. 実行結果例 4( b に 0 を入力 ) 整数値を 2 つ入力してください 10 0 処理終了 10

問 12 ( 配列 + 条件文応用 ) 次の仕様に従って 生徒の科目得点から平均点と評価を求め 実行結果のように画面表示するプログラムを作 成しなさい [ 仕様 ] 1. プログラムに組み込むデータについては 配列の初期値として与え 生徒番号は1 次元配列 科目点数は 2 次元配列で 次のとおりとすること 生徒番号国語数学理科社会 1001 85 74 63 90 1002 78 65 70 62 1003 89 92 88 76 1004 32 48 66 25 1005 92 76 81 98 2. 処理手順は 次のとおりとすること (1) 各人の4 科目の平均点を求めること (2) 4 段階の評価基準は 次のとおりとすること 平均点 評価 80 点以上 A 70 点以上 80 点未満 B 60 点以上 70 点未満 C 60 点未満 D 実行結果 番号国語数学理科社会 平均 評価 1001 85 74 63 90 78.00 B 1002 78 65 70 62 68.75 C 1003 89 92 88 76 86.25 A 1004 32 48 66 25 42.75 D 1005 92 76 81 98 86.75 A 11

問 13 ホ インタのホ インタ "Iizumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada" の 7 個の文字列の長さを求めて表示しなさい ただし ポインタのポインタを用いること 実行結果 6 : Iizumi 5 : Kanto 4 : Kudo 4 : Sato 8 : Sugawara 6 : Matuda 4 : Wada 12

問 14 ( 関数 ) 次のプログラムの空欄部を埋めて プログラムを完成させなさい /* 文字列を大文字に変換する関数 */ #include <stdio.h> #include <ctype.h> void oomoji( char *st ); int main( void ) { char str[3][10] = { "computer", "lsi-c", "ms-dos" ; int i; for ( i = 0; i < 3; i++ ) { oomoji( ); return 0; void oomoji( char *st ) { int i = 0; while(!= '\0' ) { = toupper( ); i++; printf( "%s\n", st ); 実行結果 COMPUTER LSI-C MS-DOS 13

問 15 ( コマンドライン引数 ) 次のプログラムの空欄部を埋めて プログラムを完成させなさい #include <stdio.h> #include <stdlib.h> int main( ) { int sum; if (!= 3 ) { /* 引数の個数をチェック */ puts( " 引数の個数が違います " ); return 0; /* エラーなら処理を打ち切り */ sum = atoi( ) + atoi( ); /* 文字列を数値にして合計をとる */ printf( " 合計 = %d\n", sum ); return 0; 実行例 ( 引数 :21 42 のとき ) 合計 = 63 14

問 16 ( 記憶クラスグローバル変数 ) 以下のプログラムはグローバル変数に定義され 初期化された 10 個の int 型データの合計 平均 分散 標準偏差を求めて表示するプログラムである このプログラムを以下のような関数を用いて書き換えよ return 型関数名引数機能 int get_goukei なし合計を求めて返却する double get_bunsan 平均値分散を求めて返却する なお n 件のデータの分散と標準偏差を求める式は以下である 分散 = { ( 要素 0 - 平均値 ) 2 + ( 要素 1 - 平均値 ) 2 + + ( 要素 n-2 - 平均値 ) 2 + ( 要素 n-1 - 平均値 ) 2 / n 標準偏差 = 分散 #include <stdio.h> #include <math.h> #define N 10 int data[n] = { 80, 76, 59, 87, 66, 54, 40, 78, 94, 61 ; int main( void ) { double heikin, bunsan = 0.0, hensa; int goukei = 0; int i; for ( i = 0; i < N; i++ ) { goukei = goukei + data[i]; heikin = ( double ) goukei / N; for ( i = 0; i < N; i++ ) { bunsan = bunsan + ( data[i] - heikin ) * ( data[i] - heikin ); bunsan = bunsan / N; hensa = sqrt( bunsan ); 15

printf( " 合計点 : %d\n", goukei ); printf( " 平均点 : %f\n", heikin ); printf( " 分散 : %f\n", bunsan ); printf( " 標準偏差 : %f\n", hensa ); return 0; 問 17 ( ビット演算 ) 任意の 2 つの unsigned int 型で表すことのできる整数値を入力し 論理積 (AND) 論理和(OR) 排他的論理和 (XOR) を求めて表示せよ ただし 表示はわかりやすいように 16 進数で行うこと 実行結果例 0~65535 の整数を2つ入力 65530 65535 65530(0xfffa) AND 65535(0xffff) = 0xfffa 65530(0xfffa) OR 65535(0xffff) = 0xffff 65530(0xfffa) XOR 65535(0xffff) = 0x5 16

問 18 ( シフト演算 ) 次の手順で Ctrl+Z (UNIX の環境では Ctrl+D ) が入力されるまで 任意の unsigned int 型で表すことのできる整数値を入力し そのビットパターンを表示するプログラムを作成しなさい (1) main() 関数で次の処理を行う CTRL+Z が入力されるまで 任意の unsigned int 型で表すことのできる 10 進整数を入力する 入力した整数を引数にして ビットパターン表示関数 bit_disp( ) を呼ぶ CTRL+Z が入力されたら プログラムを終了する (2) bit_disp() 関数で次の処理を行う ( 関数の仕様 ) 関数 I/F void bit_disp( unsigned int dt ); 入力 dt 任意の符号無し 10 進整数出力なし処理 unsigned int ビットサイズ分ループする 最上位ビットから順にビットパターン (0 or 1) を表示する 実行結果例 0~65535 の整数を入力 ( 終了条件 :Ctrl+Z) 0 0 ---> 0000000000000000 32767 0x7fff ---> 0111111111111111 65535 0xffff ---> 1111111111111111 ^Z 17

問 19 ( 構造体ホ インタ ) 次に示す生徒情報を構造体として作成し それぞれの科目の平均点を構造体のポインタを用いて求めなさい 生徒番号国語数学理科社会 1001 85 74 63 90 1002 78 65 70 62 1003 89 92 88 76 1004 32 48 66 25 1005 92 76 81 98-1 0 0 0 0 実行結果例 国語平均 = 75.20 数学平均 = 71.00 理科平均 = 73.60 社会平均 = 70.20 18

次の手順に従ってプログラムを作成せよ 問 20 ( アドレス渡し ) main() 関数の処理以下の 11 個の点数を配列として持つ 但し 最後の-1はストッパーとする この配列を 成績データ取得関数 にアドレス渡しする 成績データ取得関数 より 次の構造体を返却値にして 最高点 最低点 平均点を得る 最高点 最低点 平均点を表示する 成績データ取得関数の処理引数で渡された点数が -1 になるまでループし 最高点 最低点 合計点 点数総数を求める 合計点と点数総数から平均点を求める 最高点 最低点 平均点を上記 1.3 と同じ型の構造体にセットして返却する 実行結果例 最高点 = 94 最低点 = 37 平均点 = 66.2 19

問 21 ( 構造体 ( リスト処理 )) 下記のプログラム ) を以下のように修正せよ キーと名前の他に 処理コードを入力させ 処理コードに従って次の処理を行うようにする 処理コード :1 キーボードから入力したキーと名前を 新規のデータとしてリストに追加する このとき リストのデータはキーで降順に並ぶように登録すること 処理コード :2 キーボードから入力したキーと同一キーのデータをリストから削除する 処理コード :3 入力処理を終了し リストの中身を表示する 実行結果例 次の処理コードを選択しなさい 1: リストの追加 2: リストの削除 3: 処理終了 1 KEY を入力 1 名前を入力 (MAX:19 文字 ) Ryo 次の処理コードを選択しなさい 1: リストの追加 2: リストの削除 3: 処理終了 1 KEY を入力 3 名前を入力 (MAX:19 文字 ) Yoko 次の処理コードを選択しなさい 1: リストの追加 2: リストの削除 3: 処理終了 1 KEY を入力 5 名前を入力 (MAX:19 文字 ) Taro 次の処理コードを選択しなさい 1: リストの追加 2: リストの削除 3: 処理終了 1 KEY を入力 20

2 名前を入力 (MAX:19 文字 ) Jiro 次の処理コードを選択しなさい 1: リストの追加 2: リストの削除 3: 処理終了 1 KEY を入力 7 名前を入力 (MAX:19 文字 ) Sayaka 次の処理コードを選択しなさい 1: リストの追加 2: リストの削除 3: 処理終了 2 KEY を入力 5 次の処理コードを選択しなさい 1: リストの追加 2: リストの削除 3: 処理終了 3 リストの表示 7 Sayaka 3 Yoko 2 Jiro 1 Ryo /* 自己参照構造体を使ったリスト処理の例 として 用いたプログラム */ #include <stdio.h> #include <string.h> #include <stdlib.h> struct list { int key; /* キー */ char name[20]; /* 名前 */ struct list *next; /* 次のデータへのポインタ */ ; 21

struct list *add_list( int key, char *name, struct list *head ); void show_list( struct list *p ); void free_list( struct list *p ); int main( void ) { struct list *head; /* 先頭ポインタ */ char name[20]; int key = 0; head = NULL; /* 先頭ポインタに NULL を設定 */ printf( " キーと名前 (MAX:19 文字 ) を入力 ( 終了 :Ctrl+Z)\n" ); while ( scanf( "%d %s", &key, name )!= EOF ) { /* リストにデータを登録 */ head = add_list( key, name, head ); /* リストの表示 */ show_list( head ); /* リストの開放 */ free_list( head ); return 0; /*** リストにデータを登録 ***/ struct list *add_list( int key, char *name, struct list *head ) { struct list *p; /* 記憶領域の確保 */ if ( ( p = ( struct list * )malloc( sizeof( struct list ) ) ) == NULL ) { printf( "malloc error\n" ); exit( EXIT_FAILURE ); 22

/* リストにデータを登録 */ p->key = key; strcpy( p->name, name ); /* ポインタのつなぎ換え */ p->next = head; /* 今までの先頭ポインタを次ポインタに */ head = p; /* 新たな領域を先頭ポインタに */ return head; /*** リストの表示 ***/ void show_list( struct list *p ) { while ( p!= NULL ) { /* 次ポインタが NULL まで処理 */ printf( "%3d %s\n", p->key, p->name ); p = p->next; /*** リストの開放 ***/ void free_list( struct list *p ) { struct list *p2; while ( p!= NULL ) { /* 次ポインタが NULL まで処理 */ p2 = p->next; free( p ); p = p2; 23