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;
}
