Ex04Ans

From Prog0

Jump to: navigation, search

演習第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;
}
Personal tools