第10回演習:解答例


演習課題

(1)長方形の面積を関数を用いて算出するプログラム


#include <stdio.h>

void input(int *pa,int *pb)
{
	printf("幅=");scanf("%d",pa);
	printf("高さ=");scanf("%d",pb);
}

int area(int a,int b)
{
	return a*b;
}

void main()
{
	int a,b;
	input(&a,&b);
	printf("面積= %d",area(a,b));	
}

(2)自由落下運動時の速度と距離を算出するプログラム


#include <stdio.h>

void input(float *pg,float *pt)
{
	printf("加速度(m/s2)=");scanf("%f",pg);
	printf("時間(s)=");scanf("%f",pt);
}

void velocity_distance(float g,float t,float *velocity,float *distance)
{
	*velocity = g*t;
	*distance = g*t*t/2;
}

void main()
{
	float g,t,velocity,distance;
	input(&g,&t);
	velocity_distance(g,t,&velocity,&distance);
	printf("速度(m/s) = %.2f 移動距離(m) = %.2f",velocity,distance);	
}

(3)文字数のカウントと文字列の並び替えのプログラム


#include <stdio.h>

int moji_nagasa(char *str)
{
	int i=0;
	while(*(str+i)!=NULL){
		i++;
				}
	return i;
}

void moji_sort(char *str,int n)
{
	int i,j,tmp;

	for(i=0;i<n;i++){
		for(j=i;j<n;j++){
			if(*(str+i)>*(str+j)){
				tmp = *(str+i);
				*(str+i) = *(str+j);
				*(str+j) = tmp;
						}
				}
			}
}

void main()
{
	int n;
	char str[128];

	printf("文字列を入力してください:");scanf("%s",str);
	printf("入力された文字列は,%sです.¥n",str);

	n = moji_nagasa(str);
	printf("文字数は,%dです.¥n",n);
	
	moji_sort(str,n);
	printf("並べ替えた文字列は,%sです.",str);
}

(4)ファイルを読み込み,大きい順に並び替えて,ファイルに書き込むプログラム


#include <stdio.h>

void read(int *data)
{
	int i;
	FILE *fp;
	fp=fopen("30data.txt","r");
	if(fp==NULL){
		printf("ファイルを開くことができません");
		return;
			}
	for(i=0;i<30;i++){
		fscanf(fp,"%d",data+i);
			}
	fclose(fp);
}

void sort(int *data)
{
	int i,j,tmp;
	for(i=0;i<30;i++){
		for(j=i;j<30;j++){
			if(*(data+i)<*(data+j)){
				tmp = *(data+i);
				*(data+i) = *(data+j);
				*(data+j) = tmp;
						}
				}
			}
}

void write(int *data)
{
	int i;
	FILE *fp;
	

	fp=fopen("30data_sorted.txt","w");
	if(fp==NULL){
		printf("ファイルを開くことができません");
		return;
			}
	for(i=0;i<30;i++){
		fprintf(fp,"%d¥n",*(data+i));
			}
	fclose(fp);
}

void main()
{
	int data[30];	

	read(data);
	sort(data);
	write(data);
}