課題集!






    課題


  1. 自分の名前と学籍番号を表示する。[printf]
  2. 自分の名前をchar型、と学籍番号(下3桁)をint型変数に代入して表示する。
  3. int型変数が表すことのできる数値の範囲を確かめ、表示する。
  4. year=1997(int型)、month[10]=“May”(char型)、day=5.25(double型)として 代入し、year、month、dayを表示する。
  5. キーボードから名前と年齢を入力して、表示するプログラムを作りなさい。 ただし、名前には空白を含まないものとする。[scanf]
  6. int X[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}として、X[i][j]がどのような順番で 初期化されるか調べ、説明しなさい。 int a[5]={1,2,3}のように初期値が足りないとき、a[ ]はどのように初期化されるか調べ、 説明しなさい。
  7. 3人分の学生番号をbango[3]に与え、4科目のテストの点を ten[3][4]={80,60,58,72,36,94,71,44,28,50,81,74}として、 学籍番号とその学生の4科目の合計点を表示する。
  8. 文字配列char a[?]に“Happy!”(半角文字)を代入するには? をいくつにすればよいか。理由を述べよ。また、?を変えて表示させてみなさい。
  9. 文字配列char name[2][10]={“yamamoto”,”suzuki”}として、name[i][j]が どのように初期化されるか説明しなさい。 また、printf(“%s\n”,name[0])とするとどうなるか?
  10. 10進数の0.00009を書式付き出力printf(“%f”)、printf(“%e”)、 printf(“%g”)で表示させ、違いを調べなさい。
  11. cahr name[3][10]={“suzuki”,”komori”,”wakabayashi”}、 int age[3]={21,23,22}、double length[3]={170.5,172.0,171.3}として、 name age length <--------> <--> <--------> 左詰め10文字 3桁 全7桁小数部1桁のように表示させなさい。
  12. &(AND)、|(OR)、^(ex-OR)を用いて、2進数110と011のAND、 OR、ex-OR演算を行い、表示する。
  13. int a=10、b=5として、a+=b;、a-=b;、a*=b;、a/=b;とすると いくつになるか調べ、各演算について説明しなさい。
  14. int i=0、a[10]={0,1,2,3,4,5,6,7,8,9}として、printf(“%d\n”,a[i++]); として繰り返し表示したときと、printf(“%d\n”,a[++i]); としたときでどう違うかを調べ、説明しなさい。
  15. int kamoku=5,a[kamoku]={10,25,31,40,51};として、int型 a[i]を double型に変換するには(double)a[i]とする((double)をキャスト演算子という)。 これを用いて、配列a[ ]のすべての要素の平均値を求めなさい。
  16. X=0〜100(整数)として、50より大きい偶数を表示させるプログラムを &&(_理的AND)を用いて作りなさい。 [if( __________ && __________ ) printf(“%d “,X);  として _____ には適当な式をいれること]
  17. a、b、cに0〜100の適当な数値を与え、平均値を求めaveに代入し、 aveが80点以上ならA、70点以上80点未満ならB、60点以上70点未満ならC、 60点未満ならDとして、平均値と評価を表示しなさい。
  18. 次のプログラムは、a[0]=0、a[1]=2、a[2]=4、a[3]=6、a[4]=8を代入し、 これを表示するプログラムである。空欄を埋め完成しなさい。 main() { int a[5],i; while(i<5){ __________ ; printf("a[%d]=%d\n",i,a[i]); __________ ; } }
  19. 次のプログラムは、文字列a[10]=“Hello!”をb[10]に複写する プログラムである。空欄を埋め完成させなさい。 main() { char a[10]="Hello!"; char b[10]; int i=-1; do{ __________ ; __________ ; }while(b[i]!='\0'); printf("a[ ]=%s\n",a); printf("b[ ]=%s\n",b); }
  20. 次のプログラムは、下図のように数字を三角形に並べて表示するプログラム である。空欄を埋め完成させなさい。 main() 1 { 1 2 int i=0,j; 1 2 3 while(1){ 1 2 3 4 if(i=5) break; 1 2 3 4 5 j=0; while(1){ printf("%2d",j+1); __________ ; j++; } __________ ; } printf(“\n”); }
  21. int型の1次元配列に格納されたデータa[12]={3,5,9,8,6,10,2,6,9,4,8,0}を 初期値として与え、要素中の最大値と最小値を検索し表示するプログラムを作りなさい。 ただし、配列の大きさ、データの値が適当に変えられても動作するようにすること。
  22. 次のx+yを行う関数add( )を完成させなさい。 int add(int,int); main() { int x=3,y=5,z; z=add( __________ ); printf("%d + %d = %d",x,y,z); } int add( __________ ) { __________ ; }
  23. 次のプログラムは再帰関数呼び出しを用いたn!を求めるプログラムである。 空欄を埋めなさい。(再帰呼び出しとは、関数の中で自分自身の関数を呼び出す事である) long int kaijo(int); main() { int n=10; printf("%ld",kaijo(n)); } long int kaijo(int n); { if(n==1) return 1; else return__________ ; }
  24. 再帰関数呼び出しを使って、int型の変数xのn乗を求めるプログラムを作りなさい。 x^n=x*x^(n-1) x^0=1
  25. 次のプログラムを実行し、nのアドレスと中身、pn1のアドレスと中身、 pn2のアドレスと中身を調べ、*pn2、**pn2は何を指すのか図で示しなさい。 main() { int n=100; int *pn1; int **pn2; pn1=&n; pn2=&pn1; /* printfでそれぞれのアドレスと中身を調べる */ }
  26. 次のプログラムはポインタを用いて、配列の中身を表示させるプログラムである。 空欄を埋めなさい。 main() { int a[5]={10,11,12,13,14}; int i,*pa; __________ ; for(i=0;i<5;i++, ___________ ); printf("*pa=%3d",*pa); printf("a[%1d]=%3d\n",i,a[i]); } }
  27. 次のプログラムは、関数にポインタ型の引数を使ったx+yを行う関数である。この場合、 returnで値を返さないのでvoid add( )となる。(call by referenceという) 以下のプログラムの空欄を埋めなさい。 void add(int ,int ,int *) main() { int x=10,y=20,z; add(x,y,&z); /* 引数に&を使うところに注意 */ printf("%d + %d = %d",x,y,z); } void add ( __________ ); { ___________ ; }
  28. (27)のcall by referenceによる関数を用いて、実数x、yの乗算x×yと 除算x÷yを同時に求める関数mul-div(x,y,&mul,&div);を作りなさい。 配列を関数に渡す場合も、call by referenceが使われる。次のプログラムは、 配列の中身を表示する関数である。空欄を埋めなさい。 void print_arry(int a[ ],int n); main() { int a[ ]={10,20,30,40,50}; print_arry( ___________ ); } void print_arry( ___________ ); { int i; for(i=0;icall by referenceを使って、2つの配列の和を求める関数add_arry( ) を作りなさい。ただし、2つの配列(a[N]、b[N])の大きさNは同じとし、 配列の要素は各自で決めるものとし、c[i]=a[i]+b[i]をすべてのIについて行うものとする。
  29. 次のプログラムは、空白を含んで改行を入力するまでの1行分を標準入力から読み取り、 読み取った1文字ずつの16進コードを表示するプログラムである。1行入力の関数は、 char *gets(char *s)で、読み取りが失敗するとNULLを返す。また、改行を最後に入力すると ’\n’の代りに’\0’が付加される。 main() { char a[20],*pa; int i; __________ ; if( __________ ) for(i=0;a[i]!='\0';i++) printf("'%1c'--%2x\n",a[i],a[i]); else printf("can't input\n"); }
  30. 名前(空白を含む)と年齢をキーボードから入力して(名前と年齢の区切りはカンマとする)、 名前と年齢を表示するプログラムを作りなさい。 N人分(人数は各自で決めなさい)の学籍番号と 4科目(kokugo、rika、sansu、syakai)の得点を入力し(例えば、”10 20 30 40”という具合に スペースで区切るとする)、4科目の平均を出し、評価(平均点が80点以上をA、70点以上80点未満を B、60点以上70点未満をC、60点未満をDとする)を判定し、各学籍番号の平均点と評価を表示する プログラムを作りなさい。ただし、平均を算出する関数ave(kokugo,rika,sansu,syakai)と評価を 求める関数hyouka(heikin,hantei)を作って、プログラムを見易くすること。
  31. ファイルへの書き込み (fopen(“ファイル名”,”_______“)、下線部分をrとするとファイルからの読込み、 wとするとファイルへの書き込み、a+とすると既存するファイルへの追加書き込みとなる。 次のプログラムは、名前と年齢をファイルに書き込むプログラムである。各自でファイル名、 名前、年齢をキーボードから読込み、空欄を埋め完成させ、ファイルへの書き込み方をマスターしなさい。 main() define #N 10 <−−−人数の定義 { char name[3][20]; int nenrei[3],i; FILE *fp; <−−−人数分の名前と年齢の入力ルーチン if((fp=fopen("ファイル名"," __________ "))==NULL) printf("can't open\n"); else{ for(i=0;ik=1,2,3,・・・・・,100として、m=sin(k)÷kの値をファイルにk(int型), m(double型)の形で書き込みなさい。 ファイルからの読込み。次のプログラムは、下図のREI.INから、名前と年齢を読み込むプログラムである。 空欄を埋めなさい。読み込みファイルREI.INは、あらかじめ各自で適当に作っておくこと。 main() { char name[20]; int nenrei; FILE *fp; if(( __________ ==NULL); printf("can't open\n"); else{ while(fscan(fp,"%s,%d", __________ )!=EOF) printf("%-20s %3d years old\n",name,nenrei); fclose(fp); } } k=1,2,3,・・・・・,100、m=sin(k)÷kとしてk(int型),m(double型)の形で書き込んである ファイルから値を読み取るプログラムを作りなさい。

戻る


情報通信工学実験 I・II   C言語入門 II
Last Up Date : 25/4/2000
Copyright(C)ShinyaItoh 1999-2000
ito@tb.in.teu.ac.jp