第10回,第11回演習の解答例


第10回

(1) a[4]={5,3,6,2}を画面に表示するプログラム


#include<stdio.h>
void main()
{
	int a[4]={5,3,6,2};
	int i;

	for(i=0;i<4;i++){
		printf("%d番目の要素=%d¥n",i+1,a[i]);
	}
}	

(2) a[0]=5,a[2]=6の並び替えプログラム


#include<stdio.h>
void main()
{
	int a[4]={5,3,6,2};
	int i,tmp;

	tmp=a[0];
	a[0]=a[2];
	a[2]=tmp;

	for(i=0;i<4;i++){
		printf("%d番目の要素=%d¥n",i+1,a[i]);
	}
}	

(3) 配列を大きい順に並び替えるプログラム


#include <stdio.h>
void main()
{
	int a[4]={5,3,6,2};
	int i,j,tmp;

	for(i=0;i<4;i++){
		for(j=i+1;j<4;j++){
			if(a[i]<a[j]){
				tmp=a[i];
				a[i]=a[j];
				a[j]=tmp;
			}
		}
	printf("%d",a[i]);
	}
}	

(4) 10個の数字を小さい順に並び替えるプログラム


#include <stdio.h>
void main()
{
	int a[10]={5,2,8,6,4,9,2,2,5,1};
	int i,j,k,tmp;

	for(k=0;k<10;k++){
		printf("%d",a[k]);
	}

	printf("¥n");

	for(i=0;i<10;i++){
		for(j=i+1;j<10;j++){
			if(a[i]>a[j]){
				tmp=a[i];
				a[i]=a[j];
				a[j]=tmp;
			}
		}
	printf("%d",a[i]);
	}
}	

第11回

(1),(2),(3) 成績表から平均値・偏差値を求め,総合得点を高い順に並び替えるプログラム


#include <stdio.h>
#include <math.h>      /*  sqrt 平方根を求める関数を使うために必要  */

void main()
{
    int seiseki[6][5]={ {65,71,74,82,97},
                        {84,83,74,64,65},
                        {74,74,78,80,78},
                        {90,90,90,90,90},
                        {87,78,85,60,88},
                        {93,95,94,92,95} };

    float heikin[6];    /*  各人の平均値用配列,6人分  */

    float sum;       /*  各人の平均点の和  */
    float sum2;      /*  標準偏差を計算するための一時的な変数.自乗の和  */
    float stdev;     /*   各人の合計点の標準偏差  */
    float tmp;		 /*  並び替え一時変数  */

    float hensachi[6];    /* 各人の偏差値用配列,6人分  */

    int i;    	/*  カウンタ変数,科目用  */
    int j;    	/*  カウンタ変数,出席番号用  */
	int k,l,m,n;    /*  並び替え用  */
    /********************************/
    /*  1.まず各人の平均点の計算  */
    /********************************/
    for(j=0; j<6; j++) {

        /* ゼロで初期化 */
        heikin[j] = 0.0;

        /*  出席番号 j の人の全科目の合計点を計算  */
        for(i=0; i<5; i++) {
            heikin[j] += seiseki[j][i];
        }

        /*  平均点=合計点/科目数  */
        heikin[j] /= 5;


    }


    /*  確認のために各人の平均点を画面に表示  */
    for(j=0; j<6; j++) {
        printf("出席番号 %d の平均点 = %f ¥n", j+1, heikin[j]);
    }


    /***********************************************/
    /*  2.平均点の標準偏差(ばらつき)を求める.  */
    /***********************************************/

    /*  平均点の和を計算  */
    sum = 0.0;
    for(j=0; j<6; j++) {
        sum += heikin[j];
    }

    /*  次に,平均点の自乗の和を計算  */
    sum2 = 0.0;
    for(j=0; j<6; j++) {
        sum2 += heikin[j] * heikin[j];
    }
    
    /*  標準偏差の計算   */
    stdev = sqrt( (6 * sum2 - sum * sum) / (6*(6-1)) );
    printf("標準偏差=%f¥n", stdev);


    /**************************************/
    /*  3.各人の合計点の偏差値の計算.  */
    /**************************************/
    for(j=0; j<6; j++) {
        hensachi[j] = 50 + 10 * ( heikin[j]-(sum/6) ) / stdev; 
    }

    /*  画面に表示  */
    for(j=0; j<6; j++) {
        printf("出席番号 %d の偏差値 = %f ¥n", j+1, hensachi[j]);
    }
	for(n=0; n<6; n++) {
        heikin[n] = 0.0;
        /*  出席番号 j の人の全科目の合計点を計算  */
        for(m=0; m<5; m++) {
            heikin[n] += seiseki[n][m];
        	}
        }
    /********************************/
    /*  4.合計点の並び替え     */
    /********************************/
    for(k=0;k<6;k++){
		for(l=k+1;l<6;l++){
			if(heikin[k]<heikin[l]){
				tmp=heikin[k];
				heikin[k]=heikin[l];
				heikin[l]=tmp;
			}
		}
	printf("%d番の合計点=%.0f¥n",k+1,heikin[k]);
	}
	
}

(4),(5)グラフィックス


#include<stdio.h>
void main()
{
	int a[8][8]={{1,0,0,0,0,0,0,1},
		     {0,1,0,0,0,0,1,0},
		     {0,0,1,0,0,1,0,0},
		     {0,0,0,1,1,0,0,0},
		     {0,0,0,1,1,0,0,0},
		     {0,0,1,0,0,1,0,0},
		     {0,1,0,0,0,0,1,0},
		     {1,0,0,0,0,0,0,1}};
	int i,j;

	for(i=0;i<8;i++){
		for(j=0;j<8;j++){
			if(a[i][j]==1){		/*問(5)では,1を0に変えるだけ*/
				printf("x");
			}else{
				printf(" ");
			}
		}
		printf("¥n");
	}
}

(6)三目並べ


#include<stdio.h>
void main()
{
	int a[3][3]={{0,0,0},
		     {0,0,0},
		     {0,0,0},};
	int i,j,k,b,c,d;

	for(i=0;i<3;i++){
		printf("行=¥n"); scanf("%d",&b);
		printf("列=¥n"); scanf("%d",&c);
		printf("人=¥n"); scanf("%d",&d);

		a[b][c]=d;
		for(j=0;j<3;j++){
			for(k=0;k<3;k++){
				printf("%d",a[j][k]);
			}
		printf("¥n");
		}
	}

}