C言語:ファイルから学生の基本データを読み取り、計算して並べ替えてから、別のファイルに書き込みます

このプログラムのアイデア:
1。読み取りDAT関数を呼び出して学生情報を入力します
。2。sortDAT関数とcalDAT関数を呼び出して情報を配置します。
3.印刷DAT関数を使用してソートされたデータを印刷し、それが正確であるかどうか、および関数が有効かどうかを確認します
。4。ソートされたデータをwriteDAT関数に再度保存します。

後続のプログラムの一般的な文法は比較的単純で、構造と組み合わされています。
#include <conio.h>このヘッダーファイルを含みます。

コード表示:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

#define N 10

struct STU
{
    
    
	int num;
	char name[12];
	double score[4];
	double sum;
	double ave;
};

void readDAT(struct STU p[], int n);
void writeDAT(struct STU p[], int n);
void sortDAT(struct STU p[], int n);
void calDAT(struct STU p[], int n);
void printDAT(struct STU p[], int n);

int main(void)
{
    
    
	struct STU st[N] = {
    
    0};

	readDAT(st, N);
	printDAT(st, N);
	calDAT(st, N);
	sortDAT(st, N);
	printf("\nAfter Sort:\n");
	printDAT(st, N);
	writeDAT(st, N);
	return 0;
}

void readDAT(struct STU p[], int n)
{
    
    
	int i, j;
	double temp;
	FILE *fp;
	
	if ((fp = fopen("stu.dat", "r")) == NULL)
	{
    
    
		printf("cannot open file stu.dat!\n");
		exit(0);
	}
	for (i = 0; i < n; i++)
	{
    
    
		fscanf(fp,"%d%s", &p[i].num, p[i].name);
		for (j = 0; j < 4; j++)
		{
    
    
			fscanf(fp, "%lf", &temp);
			p[i].score[j] = temp;
		}
	}
	fclose(fp);
}

void writeDAT(struct STU p[], int n)
{
    
    
	int i, j;
	FILE *fp;
	
	if ((fp = fopen("out.dat", "w")) == NULL)
	{
    
    
		printf("cannot open file out.dat!\n");
		exit(0);
	}
	for (i = 0; i < n; i++)
	{
    
    
		fprintf(fp,"%5d %-7s", p[i].num, &p[i].name);
		for (j = 0; j < 4; j++)
		{
    
    
			fprintf(fp, "%5.1f", p[i].score[j]);
		}
		fprintf(fp, "%6.1f%5.1f\n", p[i].sum, p[i].ave);
	}
	fclose(fp);
}

void sortDAT(struct STU p[], int n)
{
    
    
	int i,j;
	struct STU temp;
	for(i=0;i<n;i++)
	{
    
    
		for(j=0;j<n-i-1;j++)
		{
    
    
			if(p[j].num>p[j+1].num)
			{
    
    
				temp=p[j];
				p[j]=p[j+1];
				p[j+1]=temp;
			}
		}
	}
}

void calDAT(struct STU p[], int n)
{
    
    
	int i,j;
	double s=0;
	for(i=0;i<n;i++)
	{
    
    
		for(j=0;j<4;j++)
		{
    
    
			s=p[i].score[j]+s;
		}
        p[i].sum=s;
		p[i].ave=p[i].sum/4;
		s=0;
	}
}

void printDAT(struct STU p[], int n)
{
    
    
	int i, j;
	for (i = 0; i < n; i++)
	{
    
    
		printf("%5d %-7s", p[i].num, p[i].name);
		for (j = 0; j < 4; j++)
		{
    
    
			printf("%5.1f", p[i].score[j]);
		}
		printf("%6.1f%5.1f\n", p[i].sum, p[i].ave);
	}
}

おすすめ

転載: blog.csdn.net/yooppa/article/details/114670971