C语言实例015

大家好,我是一童,今天继续分享比较完整的指针实例,花了5个多小时(ps:我是小白,hhh),不断写bug,改bug,一直到比较满意的状态,好累,要去写作业了,欢迎下方留言讨论!!!

  1. 指向数组的指针作函数参数
    输入n名学生,m门课程及成绩,计算总平均成绩,查询第n位学生各科成绩,查询第n位学生平均成绩,输出不及格学生所有成绩,用switch语句写选择结构;重点注意还是(*p)[COLS];
#include <stdio.h>//输入n名学生,m门课程及成绩
#include <stdlib.h>
#define ROWS 100
#define COLS 100
void Re();
void AllAverage(float(*p)[COLS],int n,int m);//总平均成绩
void Search1(float (*p)[COLS],int n,int m);//查询第n位学生各科成绩
void Average(float (*p)[COLS],int n,int m);//查询第n位学生平均成绩
void Search2(float (*p)[COLS],int n,int m); //输出不及格学生所有成绩
void main()
{

	int n,m,i,j,ni;
	float a[ROWS][COLS],(*p)[COLS];
	char ch1,ch2;
	p=a;
	puts("\n\n");
	puts("\t\t\t\t===============欢迎使用本系统==============");
	puts("\n");
	printf("\t\t\t输入学生数:n= ");
	scanf("%d",&n);
	while(n<=0||n>ROWS)
	{
		printf("\t\t输入的学生数范围应为1-10000,请重新输入!\n");
		printf("\t\t\t输入学生数:n= ");
		scanf("%d",&n);
	}
	printf("\n");
	printf("\t\t\t输入课程数:m= ");
	scanf("%d",&m);
	while(m<=0||m>COLS)
	{
		printf("\t\t输入的课程数数范围应为1-10000,请重新输入!\n");
		printf("\t\t\t输入课程数数:m= ");
		scanf("%d",&m);
	}
	printf("\n");
		for(i=0;i<n;i++)
	{
		printf("\t\t\t输入第%d位学生的每门课成绩:",i+1);
		for(j=0;j<m;j++)
			scanf("%f",*(p+i)+j);
		printf("\n");
	}
	printf("\n\t\t\t输出学生成绩二维表:\n");
	printf("\n");
	printf("\t\t\t\t\t\t      ");
	for(j=0;j<m;j++)
		printf("科目%d    ",j+1);
	printf("\n");
		for(i=0;i<n;i++)
	{
			printf("\t\t\t\t\tStudent NO.%d ",i+1);
		for(j=0;j<m;j++)
			printf("%f ",*(*(p+i)+j));
			if(j%m==0)
			printf("\n");
	}
		printf("\n\t\t\t总平均成绩: ");
		AllAverage(a,n,m);
		puts("\t\t\t不及格学生: ");
		Search2(a,n,m);
		printf("\n");
		while(1)
		{
			printf("\t\t\t是否要继续进行查询操作(输入Y代表是,N表退出)\n");
			do{	
				ch1=getchar();
			}while(ch1!='Y'&&ch1!='y'&&ch1!='N'&&ch1!='n');
		switch(ch1)
		{
		case'Y':
		case'y':printf("\t\t\t输入你要查询第ni位学生! ni= ");
					scanf("%d",&ni);
					printf("\n");
		   	        puts("\t\t\t1 表示查询第ni位学生各科成绩!\n");
			        puts("\t\t\t2 表示第ni位学生平均成绩!\n");
					puts("\t\t\t3 表示退出!\n");
					puts("\t\t\t输入你要查询内容:");
					do{
					ch2=getchar();
			}while(ch2!='1'&&ch2!='2'&&ch2!='3');
				switch(ch2)
				{
				case'1':Search1(a,ni,m);break;
				case'2':Average(a,ni,m);break;
				case'3':Re();exit(0);break;
				default:printf("\t\t\t输入错误!重新输入!!\n");
				}break;
		case'N':
		case'n':Re();exit(0);break;
		default:printf("\t\t\t输入错误!重新输入!!\n");
		}
		}
}
void Re()
{
	printf("\t\t\t退出本程序!\n");
}
void AllAverage(float (*p)[COLS],int n,int m)
{
	float sum=0,aver;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
			sum=sum+(*(*(p+i)+j));
	}
	aver=sum/(m*n);
	printf("Allaver = %f\n",aver);
	printf("\n");
}
void Search1(float (*p)[COLS],int n,int m)
{
	printf("\t\t\tStudent NO.%d: ",n);
	for(int i=0;i<m;i++)
		printf("%f ",*(*(p+n-1)+i));
	printf("\n");

}
void Average(float (*p)[COLS],int n,int m)
{
	float sum=0.0,aver;
	for(int i=0;i<m;i++)
		sum=sum+(*(*(p+n-1)+i));
	aver=sum/n;
	printf("\n\t\t\tStudent NO.%d 平均成绩为:Aver= %f\n",n,aver);
	printf("\n");
}
void Search2(float (*p)[COLS],int n,int m)
{
	int flag;
	for(int i=0;i<n;i++)
	{
		flag=0;
		for(int j=0;j<m;j++)
			if((*(*(p+i)+j))<60)flag=1;
			if(flag==1)
			{
				printf("\t\t\t\t  Student NO.%d不及格,其所有成绩为:",i+1);
				for(j=0;j<m;j++)
					printf("%f ",*(*(p+i)+j));
				printf("\n");
			}
	}
}

部分截图

指针太 j b 灵活,确实很难掌握,注释写的比较少,有写错或者看不懂的地方,欢迎大家留言!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值