C言語講座 制御(選択) 2006年 計算技術研究会
まずは、復習問題。 aという変数に10進数を入力して、その数を8進数と、16進数で出力しなさい。 8進数の入出力を宣言したければ、%oを使用しなさい。 16進数の入出力を表示したければ、%xをしようしなさい。
解答例 #include<stdio.h> Int main(void){ int a; printf(“Input a number:\n”); scanf(“%d”,&a); printf(“入力した数を8進数で表示すると%oで す。\n”,a); printf(“入力した数を16進数で表示すると%xです。 \n”,a); }
できました? 前回とまったく同じ問題を使いましたが、 覚えていましたか? 前回は、入出力や四則演算について、 主に紹介しました。今回は、これらを使って、 「制御(選択)」という次のステップに入ります。
選択(1) 条件 If … else文 構文 if(条件) { 処理A(←条件を満たしたときの処理); } else { 構文 if(条件) { 処理A(←条件を満たしたときの処理); } else { 処理B(←条件を満たさなかったときの処理); } 処理A 処理B
例題 数字を2つ入力して、1番目に入力した数字と2番目に入力した数字の大小関係を表示するプログラムを作ってみよう。 プロジェクト名: comp ファイル名: comp.c %dで入力し、if文で判定しよう
ヒント 1.START 2.整数型変数 a,b 3.”Input 1st number:” 4.aに数値を入力 5.”Input 2nd number:” 6.bに数値を入力 7.a==b? もし、a==bならば・・・ 8.”1st=2nd” そうでなかったら・・・ 9.a>b? もし、a>bなら、 10.”1st>2nd” そうでないなら、 11.”1st<2nd” 12.END
条件に使われる演算子 比較演算子と論理演算子 If (x>= 1 && x<= 10) x x>= 1 x<=10 x>=1 && x<=10 1より小 0 1 0(偽) 1~10 1 1 1(真) 10より大 1 0 0(偽) If(x <= 1 || x >= 10) x x<= 1 x>=10 x<= 1 || x>= 10 1以下 1 0 1(真) 1~10 0 0 0(偽) 10以上 0 1 1(真) 0が偽で、それ以外は真と判定される。
選択(2) switch …case 文 構文 switch(変数) { case 定数1: 処理A; 定数1を満たした場合 条件 switch …case 文 構文 switch(変数) { case 定数1: 処理A; 定数1を満たした場合 case 定数2: 処理B; 定数2を満たした場合 default: 処理C; その他の場合 } 処理A 処理B 処理C こ れ を 忘 ず に !! break; break;
練習問題 アルファベットを1文字入力して、そのアルファベットが1文字目にくるような英語の単語を表示するプログラムを作ろう。 プロジェクト名 :06word ファイル名 :06word.c %cで入力し、switch文で判定しよう アルファベットは最低a,b,cを利用して作ろう
解答例 #include<stdio.h> int main(void) { char c; printf(“Input a character:\n”); scanf(“%c”,&c); switch(c) case ’a’: printf(“apple\n”); break; case ‘b’: printf(“bear\n”); case ‘c’: printf(“car\n”); default: printf(“else\n”); } Return 0
課題 西暦の年号を入力して、閏年かを判定するプログラムを作成しましょう。 入力は正の整数 入力ミスの場合(0か負の整数)は、 「正の整数を入力しましょう。」と表示する 閏年の場合は、「閏年です。」と表示する 閏年でない場合は、「閏年ではないです。」と表示する 閏年は、年号が4で割り切れる年。(2004年) ただし、100で割り切れる年は閏年ではない。(1900年) しかし、400で割り切れる年は閏年となる。(2000年) 条件をうまく考えよう(「かつ」と「または」で言い換えよう)。プログラムは、例題を参考にしよう。 プロジェクト名:06leapファイル名:06leap.c
ヒント
解答例 #include<stdio.h> int main(void){ int a; printf(“Input year:\n”); scanf(“%d”,&a); if(a<=0) { printf(“正の値を入力しましょう\n”); } else if(a%4==0 && (a%100!=0 || a%400==0)) printf(“閏年です。 \n”); else printf(“閏年ではありません。\n”); return 0; }