⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intepoint.c

📁 《C语言精彩编程百例》附书源码
💻 C
字号:
# include <stdio.h>

void avsco(float *psco, float *pave);
void avcour5(char *pcou, float *psco);
void fali2(char *pcou, int *pnum, float *psco, float *pave);
void excellence(char *pcou, int *pnum, float *psco, float *pave);

void main()
{
	/* 数组num用于存放每位学生的学号 */
	int i, j, *pnum, num[4];

    /* 数组aver用于存放每位学生的平均分,二维数组score用于存放学生成绩 */
	float score[4][5], aver[4], *psco, *pave;

	/* 数组course存放5门课程的名称 */
	char course[5][10], *pcou;  

	printf("请按行输入5门功课的名称:\n");
	pcou = course[0];  /* 指针变量pcou用来存放数组course的首地址 */
	                   /* 从首地址开始,每十个字节存放一个课程的名称 */
	for(i=0; i<5; i++)
		scanf("%s", pcou+10*i);  /* 以空格为间隔输入五门课程的名称 */    

	printf("请按下面的格式输入4个学生的学号和各科成绩:\n");
	printf("学号");
	for(i=0; i<5; i++)
		printf(",%s", pcou+10*i);  /* 输出各门课程的名称 */
	printf("\n");
	psco = &score[0][0];  /* 指针psco指向数组score中的第一个元素 */
	                      /* 即指向第一个学生第一门课程的成绩 */
	pnum = &num[0];
	for(i=0; i<4; i++)
	{
		scanf("%d", pnum+i);  /* 输入学号 */
		for(j=0; j<5; j++)
			scanf(",%f", psco+5*i+j);  /* 以逗号为间隔输入学生成绩 */
	}

	pave = &aver[0];  /* 将数组aver的首地址赋给指针pave */
	printf("\n");  /* 空行 */

	avsco(psco, pave);
	avcour5(pcou, psco);
	printf("\n");  /* 空行 */

	fali2(pcou, pnum, psco, pave);
	printf("\n");  /* 空行 */

	excellence(pcou, pnum, psco, pave);
}

void avsco(float *psco, float *pave)  /* 求每个学生的平均成绩 */
{
	int i, j;
	float sum, average;
	for(i=0; i<4; i++)  /* i代表学生的序号,表示第i个学生 */
	{
		sum = 0.0;
		for(j=0; j<5; j++)  /* j代表课程的序号,表示第j门课程 */
			sum = sum + (*(psco+5*i+j));  /* 累计每个学生的各科成绩 */
		average = sum/5;  /* 计算第i个学生平均成绩 */
		*(pave+i) = average;
	}
}

void avcour5(char *pcou, float *psco)  /* 求第五门课程的平均成绩 */
{
	int i;
	float sum, average5;
	sum = 0.0;
	for(i=0; i<4; i++)
		sum = sum + (*(psco+5*i+4));  /* 累计每个学生第五门课的得分 */
	average5 = sum/4;    /* 计算第五门课程的平均成绩 */
	printf("第5门课程%s的平均成绩为%5.2f.\n", pcou, average5);
}

void fali2(char *pcou, int *pnum, float *psco, float *pave)
{
	int i, j, k, label;
	printf("      =====两门以上课程不及格的学生=====     \n");
	printf("  学号  ");
	for(i=0; i<5; i++)
		printf(" %-8s", pcou+10*i);  /* 输出课程名称 */
	printf("  平均分\n");
	for(i=0; i<4; i++)
	{
		label = 0;
		for(j=0; j<5; j++)
			if(*(psco+5*i+j) < 60.0)
				label++;  /* 计算第i个学生不及格课程的门数 */
		if(label >= 2)
		{
			printf("%-8d", *(pnum+i));  /* 输出学号 */
			for(k=0; k<5; k++)
				printf("  %-8.2f", *(psco+5*i+k));  /* 输出符合条件学生的各科成绩 */
			printf("  %-8.2f\n", *(pave+i));  /* 输出符合条件学生的平均分 */
		}
	}
}

/* 程序结构和上一个子函数fali2类似 */
void excellence(char *pcou, int *pnum, float *psco, float *pave)    
{
	int i, j, k, label;
	printf("      =====成绩优秀学生=====\n");
	printf("  学号  ");
	for(i=0; i<5; i++)
		printf("  %-8s", pcou+10*i);
	printf("  平均分\n");
	for(i=0; i<4; i++)
	{
		label = 0;
		for(j=0; j<5; j++)
			if(*(psco+5*i+j) >= 85.0)
				label++;
		if((label>=5)||(*(pnum+i)>=90))
		{
			printf("%-8d", *(pnum+i));
			for(k=0; k<5; k++)
				printf("  %-8.2f", *(psco+5*i+k));
			printf("  %-8.2f\n", *(pave+i));
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -