第10回演習の解答例


(1)char s[]="Meiji University"として,この文の中にいくつ"i"が含まれているか数えるプログラムを作成せよ.


#include<stdio.h>

void main()
{
	int n=0,i=0;
	char str[]="meiji university";
	
	printf("%sの中から、iを探します¥n",str);
	
	
	while(str[i]!=NULL){
		if(str[i]=='i'){
			printf("%d文字目で発見しました¥n",i+1);
			n++;
		}
	i++;
	
	}
	printf("全部で%d個見つかりました¥n",n);

}



(2)キーボードから入力した二つの整数n1とn2の商と余りを,それぞれdiv,remが指す変数に格納する関数
void div_rem(int numb1, int numb2, int *div int *rem)を作成し,商と余りの値を表示せよ.


#include <stdio.h>

void div_rem(int numb1, int numb2, int *div, int *rem)
{
	*rem=numb1;
	while((*rem-numb2)>=0){
		*rem-=numb2;
		*div+=1;
	}
}


void main()
{
	int numb1,numb2,rem=0,div=0;
	
	printf("一つ目の整数を入力:");
	scanf("%d",&numb1);

	printf("ニつ目の整数を入力:");
	scanf("%d",&numb2);
	
	div_rem(numb1, numb2, &div, &rem);
	
	printf("計算結果は商と余りの順に%d,%dです。¥n",div,rem);

}

(3)キーボードから二つの自然数を入力し,それらの最大公約数を求め,画面に表示するプログラムを作成せよ.但し最大公約数を求める部分は関数を用いること.


#include <stdio.h>

int gcd(int a, int b)
{
    int tmp,i;

    /*  変数 b に小さな値が入るようにする  */
    if(a<b) {
        tmp = a;
        a = b;
        b = tmp;
    }

    if(b==0){
	return a;
    }

    for(i=b;i>0;i--){
        if((a%i==0)&&(b%i==0)){
            return i;
        }
    }

}

void main()
{
    int a, b;
	
    printf("Input A=");
    scanf("%d", &a);
    printf("Input B=");
    scanf("%d", &b);
	
    printf("%d と %d の最大公約数は、%d です。¥n", a, b, gcd(a,b));
}


(4)30件の数字データ(右クリック-->[対象をファイルに保存] )30data.txtを読み込み,値を大きい順に並び替え,別のファイルに出力せよ.


#include<stdio.h>
#include<stdlib.h>
void main()
{
	int i,j,data[30],tmp=0;
	char filename1[]="30data.txt";
	char filename2[]="sortdata.txt";
	FILE *ofp;
	FILE *wfp;

	if((ofp=fopen(filename1,"r"))==NULL){
		printf("%sを開けませんでした.¥n",filename1);
		exit(0);
	}
	
	for(i=0;i<30;i++){
		fscanf(ofp,"%d",&data[i]);
	}

	fclose(ofp);

	printf("¥n並び替え前:¥n");
	for(i=0;i<30;i++){
		printf("%d, ",data[i]);
	}

	for(i=0;i<30;i++){
		for(j=i+1;j<30;j++){
			if(data[i]<data[j]){
				tmp=data[i];
				data[i]=data[j];
				data[j]=tmp;
			}
		}
	}
	
	if((wfp=fopen(filename2,"w"))==NULL){
		printf("%sを開けませんでした.¥n",filename2);
		exit(0);
	}

	printf("¥n並び替え後:¥n");
	for(i=0;i<30;i++){
		printf("%d, ",data[i]);
		fprintf(wfp,"%d¥n",data[i]);
	}

	fclose(wfp);
}