Ex04Ans
From Prog0
演習第4回
Contents |
解答例
A問題
A-1 条件式
ファイル名: ex04a1.txt
条件式1は真 条件式3は真 条件式5は真 条件式9は真
A-2 最大値の判別
ファイル名: ex04a2.c
#include <stdio.h> int main() { int a,b,c,max; printf("3つの整数を入力してください: "); scanf("%d%d%d", &a,&b,&c); if(a>=b && a>=c){ max=a; }else if(b>=a && b>=c){ max=b; }else{ max=c; } printf("最大値は%dです\n",max); return 0; }
A-3 switch caseによる振り分け
ファイル名: ex04a3.c
#include <stdio.h> int main() { int id, han; printf("学籍番号の下三桁を入力してください(例: 001) "); scanf("%d", &id);/*三桁の数値'00x'は'x'として読むことができます*/ han = id % 5; switch( han ){ case 1: printf("この人はA班です\n"); break; case 2: printf("この人はB班です\n"); break; case 3: printf("この人はC班です\n"); break; case 4: printf("この人はD班です\n"); break; case 0: printf("この人はE班です\n"); break; } return 0; }
B問題
B-1 税金の計算
ファイル名: ex04b1.c
#include<stdio.h> int main() { double taxrate,tax; int income; printf("年収を万円単位の整数(例えば,300)で入力してください: "); scanf("%d", &income); if ( income <= 400 ) { taxrate = 0.10; }else if (income <= 800){ taxrate = 0.15; }else { taxrate = 0.18; } tax = income * taxrate; printf("あなたの年収は%d万円で、その税金は%.4f万円です\n", income, tax); return 0; }
B-2 平均値と成績の表示(複合条件問題)
ファイル名: ex04b2.c
#include <stdio.h> int main() { int ms,ps,es; /*score*/ double average; /*average of 3 scores*/ printf("数学と物理と英語の点数を入力してください\n"); scanf("%d%d%d", &ms, &ps, &es); average = (double)(ms+ps+es)/3; printf("3科目の平均値は"); printf("%6.2f 点です。\n", average); if (average >= 80 || ms == 100 || ps == 100 || es == 100) printf("成績は優です。\n"); else if (average < 80 && average >= 60) printf("成績は良です。\n"); else if (average < 60 && average >= 40) printf("成績は可です。\n"); else printf("成績は不可です。\n"); return 0; }
B-3 倍数の判別
ファイル名: ex04b3.c
#include <stdio.h> int main() { int a; printf("整数を入力してください "); scanf("%d", &a); printf("方法1 多岐選択:\n"); /* 多岐選択 */ if( a%2 == 1 && a%3 != 0) printf("%dは奇数で、3の倍数ではない\n", a); else if( a%2 == 0 && a%3 != 0) printf("%dは偶数で、3の倍数ではない\n", a); else if( a%2 == 1 && a%3 == 0) printf("%dは奇数で、3の倍数である\n", a); else if( a%2 == 0 && a%3 == 0) printf("%dは偶数で、3の倍数である\n", a); /* a%2==1 の代わりに、 a%2!=0 とするのでも良いです。(これなら a が負の場合にも判別できます) */ printf("方法2 入れ子の双岐選択:\n"); /* 入れ子の双岐選択 */ if( a%2 ) { if( a%3 ) { printf("%dは奇数で、3の倍数ではない\n", a); } else printf("%dは奇数で、3の倍数である\n", a); } else{ if( a%3 ) { printf("%dは偶数で、3の倍数ではない\n", a); } else printf("%dは偶数で、3の倍数である\n", a); } printf("方法3 双岐選択(printfでの工夫):\n"); /* printf で出力される行数は改行文字でコントロールできるので、 一つの printf が1行に対応するとは限らないことに注意。 */ if( a%2 ) printf("%dは奇数で、", a); else printf("%dは偶数で、", a); if( a%3 ) printf("3の倍数ではない\n"); else printf("3の倍数である\n"); return 0; }
Extra問題
E-1 breakを省略したswitch文
ファイル名: ex04e1.c
#include <stdio.h> int main() { int month; printf("月を入力してください:"); scanf("%d",&month); switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf("%d月は31日間あります\n", month); break; case 4: case 6: case 9: case 11: printf("%d月は30日間あります\n", month); break; case 2: printf("%d月は28日間、または29日間です\n", month); break; default: printf("%d月は存在しません\n", month); break; } return 0; }