プログラミング基礎反省会

 あの中野の戦いから、はや一週間――案の定撃沈しました。なんか午後の空き時間にネットカフェでパソコン借りて勉強しようと思ったんだけどさ、駅前で長妻昭さんが街頭演説やっててさ(地元らしい)、面白そうでさ・・・つまりアキラのせい。※なんでも政治家のせいにする民度の低い国民の例。

問1
空欄補充問題。選択肢が語群としてあるので講義を聴いてれば行けなくもない。
ただ、マクロってなんだっけ?って一瞬忘れちゃって狼狽した。



早くもこっからプログラミングコードを紙に手書きで記述させるという恐ろしい展開になります。

ただし温情として、#include <stdio.h> とか int main(void){ とか return 0;} とかの、最初と最後に付ける定型文は割愛してもいいのはありがたかった。

ただし、変数宣言はしなきゃいけないので

文字はchar 変換仕様は%c
整数はint 変換仕様は%d
小数はdouble 変換仕様は%f(入力時は%lf)


は覚えないといけない。

あと、基本的に標準入力した文字や数字を操作するコードが多いので、スキャン・F・不二雄先生の構文を押さえておいたほうがいい。

scanf("%c",&ch1);
&を入れるのに注意!!

問2
2つの整数を入力させ、最初に入力された数が次に入力された数で割って、割り切れたら「割り切れる」、割り切れなかったら「割り切れない」と表示させるコードを記述しなさい。

int num1,num2;

printf("整数1を入力してください。\n");
scanf("%d",&num1);

printf("整数2を入力してください。\n");
scanf("%d",&num2);

if((num1 % num2) == 0)
printf("割り切れる。\n");

else
printf("割り切れない。\n");

問3
入力された実数rを2で割ることを5回繰り返し、それらの答えを表示させるコードを記述しなさい。しかし繰り返し構文にはwhileを用いなさい。
例r=4.0なら2.000 1.000 0.500 0.250 0.125と小数第3位まで表示する。

出たオレの天敵while。forでも作れるのに指定してきやがった。

int i;
double r;

printf("実数を入力してください。\n");
scanf("%lf",&r);

while(i <= 5)
{
r = r/2;
printf("%.3f \n",r);
i++;
}

※最後のi++がないと永遠に繰り返すので注意!

もちろんforでも作れる。
どっちかに統一してくれ。

int i;
double r;

printf("実数を入力してください。\n");
scanf("%lf",&r);

for(i=1;i<=5;i++)
{
r = r/2;
printf("%.3f \n",r);
}

問4
2つの整数を入力させ、その数だけ縦と横にアスタリスク*を表示させ長方形を作るコードを記述せよ。

先生が好きなお絵かき問題。

int tate,yoko,i,j;
printf("整数1を入力してください。\n");
scanf("%d",&tate);

printf("整数2を入力してください。\n");
scanf("%d",&yoko);

for(i=1; i<=tate; i++){
for(j=1; j<=yoko; j++){
printf("*");
}
printf("\n");
}


※for文の中にfor文を入れるのに注意。

問5
5つの数字を配列に保存し、それぞれから5つの中で最も小さな数字を引いた数を表示するコードを記述しなさい。
例えば、2、3、4、5、6だった場合は最も小さな2を引いて0、1、2、3、4、と表示される。

最も難しい。忘れちまったよ、そんな昔のことはよ。(C)どんこば!のボルタ。

int num[5], min, i;

printf("整数を入力してください。\n");
for(i = 0; i < 5; ++ i)
{
scanf("%d", &num[i]);
}

min = num[0];
※この代入式がないと最小値が計算されない!

for(i = 1; i < 5; ++ i)
{
if(num[i] < min)
min = num[i];
}

printf("%d\n",num[0] - min);
printf("%d\n",num[1] - min);
printf("%d\n",num[2] - min);
printf("%d\n",num[3] - min);
printf("%d\n",num[4] - min);

問6
Person 構造体の宣言しなさい。構造体のメンバーは以下のとおり。
char name [10];
int age;
double height,weight;

なぜか最後が最も簡単だという。

struct Person
{
char name[11]; ※NULL文字の分を増やす!
int age;
double height,weight;
};

ただし、最後のセミコロンをつけ忘れた気が・・・死亡。

ちなみに・・・
共用体
union Vehicle{
Car car;
Bus bus;
}
最初が構造体などの名前。次は識別子。

列挙
enum Week{SUN,MON,TUE,WED,THU,FRI,SAT};

typedef構文
typedef struct Car{
int num;
double gus;
}Car;
これで構造体ストラクト・カーの名前がカーに短縮された。



次回も同じ問題が出るとは限らないので、その他の過去問をまとめました。

誕生月を入力するコード
ありえない月が入力されたらエラーを表示させる。

int main(void)
{
int num;

printf("誕生月を入力してください。\n");
scanf("%d", &num);

switch(num)
{

case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
printf(OKです。\n");
break;

default:
printf("エラーです。\n");
break;

}

階乗を表示するコード
例えば5が入力されたら、5×4×3×2×1=120を返してやる。
ただしfor文を用いるという条件付き。

int i;
int num;
int f = 1;

printf("自然数を入力してください。\n");
scanf("%d", &num);

for(i=1; i<=num; ++i) 0をかけないようにi=1からスタートする。
{f = f * i;};

printf("%d!=%d \n", num, f);

点数を比較するコード
キーボードから国語と数学の点数を整数として入力し、高い方の点数を表示しなさい。同じ点数の時はどちらの点数が表示されても良い物とする。

int j= 0;
int m= 0;

printf( "国語の点数を入力してください。\n");
scanf( "%d", &j );

printf( "数学の点数を入力してください。\n");
scanf( "%d", &m );

if( j>m ){
printf( "国語の点数は%dです。\n", j );
}
else{
printf( "数学の点数は%dです。\n", m );
}

ある区間の整数をすべて表示するコード
キーボードから2つの整数を入力し、1つめの整数から2つめの整数までの全ての整数を表示させなさい。
2つ目の数字は必ず1つ目の数字以上の数字が入力されるものとする。これをwhileを用いてプ ログラムしなさい。
例:入力が5と9の場合「5 6 7 8 9」と表示させる。

{
int num1;
int num2;
printf("一つ目の数を入力してください。\n");
scanf("%d", &num1);
printf("二つ目の数を入力してください。\n");
scanf("%d", &num2);

while (num1 <= num2)
{
printf("%d", num1);
num1++;
}
Calendar
<< April 2024 >>
SunMonTueWedThuFriSat
 123456
78910111213
14151617181920
21222324252627
282930
search this site.
tags
archives
recent comment
recent trackback
others
にほんブログ村 科学ブログへ にほんブログ村 科学ブログ 恐竜へ カウンター
admin
  • 管理者ページ
  • 記事を書く
  • ログアウト