今までのプログラムパラダイス

 今までのプログラムパラダイスで紹介していたプログラムです。

内容ソース
switch文を利用してaが1,2,3とそれ以外の場合の場合分けをするプログラムを作る。
#include < stdio.h >

main(){

  int a;

  /* Input a */
  printf("a = ");
  scanf("%d",&a);

  /* Print a */
  printf("Input DATA:  a= %d  \n",a);

  switch(a){
  case 1:case 2:case 3:
    printf("a は %d \n",a);
    break;
  default:
    printf("a は 1, 2, 3 以外\n");
  }
}
for文を用いて1->10まで数え、表示するプログラムを作る。
#include <stdio.h>

main(){
  int i;
  for(i=1;i<=10;i++)
    printf("i = %d\n",i);
}
while文を用いて1->10まで数え、表示するプログラムを作る。
#include <stdio.h>

main(){

  int i;
  i=1;

  while(i<=10){
    printf("i = %d\n",i);
    i++;
  }

}
aを一の位、bを十の位の値とし99〜0までカウントダウンし、表示するプログラムを作る。
#include<stdio.h>

main(){

  int a,b;

  for(b=9;b>=0;b--)
    for(a=9;a>=0;a--)
      printf("%d%d\n",b,a);

}
10[m]の高さから物体を自由落下させたとき,t秒後の高さ h[m]を求めるプログラムを作成する。
#include<stdio.h>

main(){

  double t,h;

  printf("何秒後の位置? ");
  scanf("%lf",&t);
  h=10-(0.5)*(9.8)*t*t;

  if(h<0)
    {
      printf("%f 秒後の位置は、0m です。\n",t);
    }
  else{
    printf("%f 秒後の位置は、fm です。\n",t,h);
  }

}
3×3行列A、Bの差 A-B を求めるプログラムを以下の条件で作る。
    |  1  3  2 |
A = | -5  0  2 |
    |  3  4 -1 |

    |  0  1  2 |
B = | -1  1  3 |
    |  3 -2  5 |
#include<stdio.h>

main(){

  int i,j;
  float A[3][3]={{1,3,2},{-5,0,2},{3,4,-1}};
  float B[3][3]={{0,1,2},{-1,1,3},{3,-2,5}};
  float C[3][3];

  for(i=0;i<3;i++)
    for(j=0;j<3;j++)
      C[i][j]=A[i][j]-B[i][j];

  for(i=0;i<3;i++){
    if(i==1){
      printf("C = | ");
    }else{
       printf("    | ");
    }

    for(j=0;j<3;j++){
      if(C[i][j]>=0){
        printf(" %.f ",C[i][j]);
      }else{
        printf("%.f ",C[i][j]);
      }
    }

    printf("|\n");

  }

}
以下の条件で、3×3行列A、Bの掛け算 A・B を求めるプログラムを作る。
    |  1  3  2 |
A = | -5  0  2 |
    |  3  4 -1 |

    |  0  1  2 |
B = | -1  1  3 |
    |  3 -2  5 |
#include<stdio.h>

main(){

  int i,j,k;
  float A[3][3]={{1,3,2},{-5,0,2},{3,4,-1}};
  float B[3][3]={{0,1,2},{-1,1,3},{3,-2,5}};
  float C[3][3]={{0,0,0},{0,0,0},{0,0,0}};

  for(i=0;i<3;i++)
    for(j=0;j<3;j++)
      for(k=0;k<3;k++)
        C[i][j]+=A[i][k]*B[k][j];

  for(i=0;i<3;i++){
    if(i==1){
      printf("C = | ");
    }else{
       printf("    | ");
    }
    for(j=0;j<3;j++){
      if(C[i][j]>=0 && C[i][j]<=10){
        printf(" %.f ",C[i][j]);
      }else{
        printf("%.f ",C[i][j]);
      }
    }
    printf("|\n");
  }

}
地上から初速 v0[m/s], 角度th[rad](任意)で、物体を打上げたときの軌道(位置p)を計算するプログラムを作る。
#include<stdio.h>
#include<math.h>

main(){

  /* v0:初速 , th:角度 , t:経過時間 , p[0]:高さ , p[1]:距離 */
  float v0,th,t,p[2];

  printf("初速? ");
  scanf("%f",&v0);

  printf("角度? ");
  scanf("%f",&th);

  do{

    printf("時間? ");
    scanf("%f",&t);

    p[0]=v0*t*sin(th)-0.5*9.8*t*t;
    p[1]=v0*t*cos(th);

    if(p[0]<0)
      p[0]=0;

    if(t>=0){
      printf("初速 %lf [m/s] 打ち上げ角 %lf [rad] のときの %lf 秒後の位置は\n",v0,th,t);
      printf("高さ : %lf [m] , 距離 : %lf [m] \n",p[0],p[1]);
    }else{
      printf("終了します\n");
    }

  }while(t>=0);

}
double型の二つの数字 a,b が与えられたとき、大きい方の数字を返す関数[double maxd(double a, double b)]、小さい方の数字を返す関数[double mind(double a, double b)]を作る。
#include<stdio.h>

double maxd(double a, double b);
double mind(double a, double b);


main(){

  double x,y;

  printf("x = ");
  scanf("%lf", &x);
  printf("y = ");
  scanf("%lf", &y);

  printf("maxd(%f,%f) の結果 %f です。\n", x, y, maxd(x,y));
  printf("mind(%f,%f) の結果 %f です。\n", x, y, mind(x,y));

}


double maxd(double a, double b){

  if(a<b){
    return(b);
  }else{
    return(a);
  }

}


double mind(double a, double b){

  if(a>b){
    return(b);
  }else{
    return(a);
  }

}
キーボードより入力された2つの文字列に対し、それぞれの長さを表示・文字列が等しいかどうかの比較・2つの文字列を連結を行うプログラムを作る。
#include<stdio.h>
#include<string.h>

main(){

  char a[20],b[20],c[40];

  /* input a */
  printf("a = ");
  scanf("%19s", a);

  /* input b */
  printf("b = ");
  scanf("%19s", b);

  puts("*Input Data*");
  printf("a : %s\n", a);
  printf("b : %s\n", b);

  puts("*文字列の長さ*");
  printf("a : %d\n", strlen(a));
  printf("b : %d\n", strlen(b)); 

  puts("*文字列の比較*");
  if(strcmp( a, b)==0){
    puts("等しい");
  }else{
    puts("等しくない");
  }

  puts("*文字列の連結*");  
  strcpy(c,a);
  strcat(c,b);
  printf("%s\n",c);

}
実数x,正の整数nを引数とし、xのn乗を計算する関数を再帰を用いて作成する。
#include<stdio.h>

double fact(int x);

main(){

  double a;

  printf("階乗する数? ");
  scanf("%lf",&a);
  printf("%lf\n",fact(a));

}

double fact(int x){

  double ret;

  if(x==0){
    ret=1.0;
  }else{
    ret=x*fact(x-1);
  }

  return(ret);
  
}
○×ゲームを作る。
#include<stdio.h>

/*
print:表示
hantei:勝ち負け判定
*/
void print();
void hantei();

/*
l:○×の情報(1:○、2:×)、
End:終了判定(0:引き分け、1:○の勝ち、2:×の勝ち)
s:○×のどちらの番か、OX:○×の定義
*/
int l[3][3]={{0,0,0},{0,0,0},{0,0,0}},End,s=1;
char *OX[]={"  ","○","×"};

main(){

  /*
     x,y:○×の位置(縦y、横x)、kaisu:何回行なったか(9で終了)、
     ok:入力が完了したか(0:完了せず、1:完了)
  */
  int x,y,ok,kaisu=0;

  printf("3並べをします\n");
  printf("(縦,横)の様に入力して下さい(例:1,2)\n");

  do{
    do{
      ok=0;
      printf("%s:",OX[s]);
      scanf("%d,%d",&y,&x);
      if(x>0 && x<4 && y>0 && y<4 && l[y-1][x-1]==0){
        if(s==1){
          l[y-1][x-1]=1;
          ok=1;
        }else{
          l[y-1][x-1]=2;
          ok=1;
        }
      }
    }while(ok==0);
    print();
    hantei();
    if(s==1){
      s=2;
    }else if(s==2){
      s=1;
    }
  kaisu++;
  }while(s!=0 && End==0 && kaisu<9);

  if(kaisu==9){
    printf("引き分けです。\n");
  }else{
    printf("%sの勝ちです。\n",OX[End]);
  }

}


void print(){
  /* x,y:○×の位置(縦y、横x) */
  int x,y;
  for(y=0;y<3;y++){
    printf("+--+--+--+\n");
    printf("|");
    for(x=0;x<3;x++)
      printf("%s|",OX[l[y][x]]);
    printf("\n");
  }
  printf("+--+--+--+\n");
}

void hantei(){
  /* i:変数(深い意味なし) */
  int i;
  for(i=0;i<3;i++){
    if(l[0][i]==s && l[1][i]==s && l[2][i]==s)
      End=s;
    if(l[i][0]==s && l[i][1]==s && l[i][2]==s)
      End=s;
  }
  if(l[0][0]==s && l[1][1]==s && l[2][2]==s)
    End=s;
  if(l[0][2]==s && l[1][1]==s && l[2][0]==s)
  End=s;
}
整数nを入力すると曜日名を表示するプログラムを作る。
#include<stdio.h>

main(){
  
  int n;
  char *wname[]={"Sunday","Monday","tuesday","Wednesday",
                 "Thursday","Friday","saturday"};

  printf("数字を入力して下さい(0-6)?");
  scanf("%d",&n);

  if(<0 || n>6){
    printf("0-6の範囲にありません。\n");
  }else{
    printf("%d番目の曜日は %s です。\n",n,wname[n]);
  }

}
int型の配列変数 A[10]={4,9,11,25,12,31,22,33,67,97}の内容をポインタを使って表示するプログラムを作る。
#include<stdio.h>

main(){

  int A[]={4,9,11,25,12,31,22,33,67,97};
  int *ptr=A;
  int i;

  printf("Aの内容\n");
  for(i=0;i<10;i++)
    printf("%d ",*(ptr+i));
  printf("\n");

}
各曲の演奏時間からトータルの演奏時間を計算するプログラムを作る。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

main(int argc,char *argv[]){

  int i,t,m=0,s=0;
  char min[5]="",sec[5]="",*str;

  for(t=1;t<argc;t++){
    str=strchr(argv[t],':')+1;
    i=strlen(argv[t])-strlen(str);
    strncpy(min,argv[t],i);
    strcpy(sec,str);
    s+=atof(sec);
    m+=atof(min);
    strcpy(min,"");
    strcpy(sec,"");
  }
  
  m+=(s/60);
  s-=(s/60)*60;

  printf("合計時間は、");
  if(s<10){
    printf("%d:0%d",m,s);
  }else{
    printf("%d:%d",m,s);
  }
  printf("です。");

}
バブルソートを行う。
#include<stdio.h>

main(){

  int i,j,k,tmp,N=10,item[]={5,2,4,6,1,8,4,3,9,6};

  for(k=0;k<N;k++)
    printf("%d",item[k]);
  printf("(ソートする数)\n");

  printf("**ソート開始**\n");

  for(i=0;i<N;i++){
    for(j=N-1;j>=i;j--)
      if(item[j]<item[j-1]){
        tmp=item[j-1];
        item[j-1]=item[j];
        item[j]=tmp;
    for(k=0;k<N;k++)
      printf("%d",item[k]);
    printf("\n");
      }
  }

  printf("**ソート終了**\n");

}


プログラムパラダイスのメニューに戻る


Copyright (C) 1998-2000 木野田和正