谭浩强4版 8.15题 指针指向数组元素,相对位置计算
2017-03-15 11:16
183 查看
谭浩强4版 8.15题
一个班4个学生5门课程
1.求第一门课程的平均分;
2.找出有两门以上课程不及格的学生,输出学号和群不课程成绩及平均成绩;
3.找出平均成绩在90分以上或全部课程成绩在85分以上学生;
/***********综合考察指向数组元素的指针,要先算出元素地址变化的相对量*****/
#include<stdio.h>
int main()
{
void avsco(float *,float *);//每个学生的平均成绩
void avcour1(char (*)[10],float *);//课程一的平均成绩
void fail2(char course[5][10],int num[],float *pscore,float aver[4]);//不及格
void good(char course[5][10],int num[4],float *pscore,float aver[4]);//优秀
int i,j,num[4],*pnum;//编号码是整型数据;
float score[4][5],*pscore,*paver,aver[4];//分数都为float类型数据;
char (*pcourse)[10],course[5][10];//course用于存放课程名字(字符串),定义指向包含10个元素的一维数组的指针变量pcourse
printf("please input course:\n");
pcourse=course;//指向包含10个元素的一维数组的指针变量pcourse赋初值(数组第一行的其实位置):第一门课程名(字符串)的第一个字母的首地址
for(i=0;i<5;i++)
scanf("%s",&course[i]);//输入5门课程的名字
printf("input NO. and score:\n");
printf("NO.");
for(i=0;i<5;i++)
printf(",%s\t",course[i]);
printf("\n");
pnum=&num[0];
pscore=&score[0][0];//指向数组元素的指针
//pscore=score[0];
for(i=0;i<4;i++)
{
scanf("%d",pnum+i);//这是对每一个人进行编号;只需要给四个值;所以只能放在此处;
for(j=0;j<5;j++)
scanf("%f",pscore+5*i+j);
//指向数组元素的指针在输出某一个制定的数值元素时,
//应该事先计算该元素在数组中的相对位置(即相对于数组起始位置的相对位移量,a[i][j]的相对位置:i*m+j,其中,m为列数值)
}
paver=&aver[0];//四个人平均分存放的地址,首地址赋给paver
printf("\n\n");
avsco(pscore,paver);//将分数的地址,存放平均分的地址传入函数,计算四个人的平均分
avcour1(pcourse,pscore);//将课程名存放的地址,分数存放的地址传入函数,计算第一门课程的平均分
printf("\n\n");
fail2(pcourse,pnum,pscore,paver);//将课程名存放地址,编号存放地址,分数存放地址,平均分存放地址传入函数,找出有两门不及格的学生
printf("\n\n");
good(pcourse,pnum,pscore,paver);//将将课程名存放地址,编号存放地址,分数存放地址,平均分存放地址传入函数,找出优秀学生(每一门85+或者平均分90+)
return 0;
}
void avsco(float *pscore,float *paver){//计算4个学生的平均成绩
int i,j;
float sum,average;
for(i=0;i<4;i++)
{
sum=0;
for(j=0;j<5;j++)
sum=sum+(*(pscore+i*5+j));//累计每个学生的各科
4000
成绩
//sum=sum+*(*(pscore+i)+j);
average=sum/5;
*(paver+i)=average;
}
}
void avcour1(char(*pcourse)[10],float *pscore){//第一门课程的平均分
int i;
float sum,average1;
sum=0.0;
for(i=0;i<4;i++)
sum=(*(pscore+i*5));//第一门课程分数的地址,累计第一门课程每个学生的成绩
//sum=sum+*(*(pscore+i));
average1=sum/4;
printf("course1:%s average score :%7.2f\n",*pcourse,average1);
}
void fail2(char course[5][10],int num[],float *pscore,float aver[4]){//两门以上课程不及格的学生
int i,j,k,label;
printf("==================Student who is fail in two couses===================/n");
printf("NO.");
for(i=0;i<5;i++)
printf("%s\t",course[i]);//因为要用course[i]输出课程名称
printf("average/n");
for(i=0;i<4;i++)
{
label=0;//每个人的不及格的course 计数;
for(j=0;j<5;j++)
if(*(pscore+5*i+j)<60) label++;//累计每个学生小于60的数量
if(label>=2)//只能在label>=2中输出每个人的成绩和平均分;
{
printf("%d",num[i]);
for(k=0;k<5;k++)
printf("%11.2f",*(pscore+5*i+k));//输出这个人的课程成绩;
printf("%11.2f",aver[i]);//平均分
}
}
}
void good(char course[5][10],int num[4],float *pscore,float aver[4])
{
int i,j,k,n;
printf("================Students whose score is good========\n");
printf("NO.");
for(i=0;i<5;i++)
printf("%s\t",course[i]);
printf("average/n");
for(i=0;i<4;i++)
{
n=0;//对每个人的成绩大于85计数;初值给0;
for(j=0;j<5;j++)
if(*(pscore+5*i+j)>85) n++;//累计每个学生成绩》85的个数
if((n==5)||(aver[i]>90))//满足两个条件之一即可
{
printf("%d",num[i]);
for(k=0;k<5;k++)
printf("%11.2f",*(pscore+5*i+k));
printf("%11.2f\n",aver[i]);
}
}
}
一个班4个学生5门课程
1.求第一门课程的平均分;
2.找出有两门以上课程不及格的学生,输出学号和群不课程成绩及平均成绩;
3.找出平均成绩在90分以上或全部课程成绩在85分以上学生;
/***********综合考察指向数组元素的指针,要先算出元素地址变化的相对量*****/
#include<stdio.h>
int main()
{
void avsco(float *,float *);//每个学生的平均成绩
void avcour1(char (*)[10],float *);//课程一的平均成绩
void fail2(char course[5][10],int num[],float *pscore,float aver[4]);//不及格
void good(char course[5][10],int num[4],float *pscore,float aver[4]);//优秀
int i,j,num[4],*pnum;//编号码是整型数据;
float score[4][5],*pscore,*paver,aver[4];//分数都为float类型数据;
char (*pcourse)[10],course[5][10];//course用于存放课程名字(字符串),定义指向包含10个元素的一维数组的指针变量pcourse
printf("please input course:\n");
pcourse=course;//指向包含10个元素的一维数组的指针变量pcourse赋初值(数组第一行的其实位置):第一门课程名(字符串)的第一个字母的首地址
for(i=0;i<5;i++)
scanf("%s",&course[i]);//输入5门课程的名字
printf("input NO. and score:\n");
printf("NO.");
for(i=0;i<5;i++)
printf(",%s\t",course[i]);
printf("\n");
pnum=&num[0];
pscore=&score[0][0];//指向数组元素的指针
//pscore=score[0];
for(i=0;i<4;i++)
{
scanf("%d",pnum+i);//这是对每一个人进行编号;只需要给四个值;所以只能放在此处;
for(j=0;j<5;j++)
scanf("%f",pscore+5*i+j);
//指向数组元素的指针在输出某一个制定的数值元素时,
//应该事先计算该元素在数组中的相对位置(即相对于数组起始位置的相对位移量,a[i][j]的相对位置:i*m+j,其中,m为列数值)
}
paver=&aver[0];//四个人平均分存放的地址,首地址赋给paver
printf("\n\n");
avsco(pscore,paver);//将分数的地址,存放平均分的地址传入函数,计算四个人的平均分
avcour1(pcourse,pscore);//将课程名存放的地址,分数存放的地址传入函数,计算第一门课程的平均分
printf("\n\n");
fail2(pcourse,pnum,pscore,paver);//将课程名存放地址,编号存放地址,分数存放地址,平均分存放地址传入函数,找出有两门不及格的学生
printf("\n\n");
good(pcourse,pnum,pscore,paver);//将将课程名存放地址,编号存放地址,分数存放地址,平均分存放地址传入函数,找出优秀学生(每一门85+或者平均分90+)
return 0;
}
void avsco(float *pscore,float *paver){//计算4个学生的平均成绩
int i,j;
float sum,average;
for(i=0;i<4;i++)
{
sum=0;
for(j=0;j<5;j++)
sum=sum+(*(pscore+i*5+j));//累计每个学生的各科
4000
成绩
//sum=sum+*(*(pscore+i)+j);
average=sum/5;
*(paver+i)=average;
}
}
void avcour1(char(*pcourse)[10],float *pscore){//第一门课程的平均分
int i;
float sum,average1;
sum=0.0;
for(i=0;i<4;i++)
sum=(*(pscore+i*5));//第一门课程分数的地址,累计第一门课程每个学生的成绩
//sum=sum+*(*(pscore+i));
average1=sum/4;
printf("course1:%s average score :%7.2f\n",*pcourse,average1);
}
void fail2(char course[5][10],int num[],float *pscore,float aver[4]){//两门以上课程不及格的学生
int i,j,k,label;
printf("==================Student who is fail in two couses===================/n");
printf("NO.");
for(i=0;i<5;i++)
printf("%s\t",course[i]);//因为要用course[i]输出课程名称
printf("average/n");
for(i=0;i<4;i++)
{
label=0;//每个人的不及格的course 计数;
for(j=0;j<5;j++)
if(*(pscore+5*i+j)<60) label++;//累计每个学生小于60的数量
if(label>=2)//只能在label>=2中输出每个人的成绩和平均分;
{
printf("%d",num[i]);
for(k=0;k<5;k++)
printf("%11.2f",*(pscore+5*i+k));//输出这个人的课程成绩;
printf("%11.2f",aver[i]);//平均分
}
}
}
void good(char course[5][10],int num[4],float *pscore,float aver[4])
{
int i,j,k,n;
printf("================Students whose score is good========\n");
printf("NO.");
for(i=0;i<5;i++)
printf("%s\t",course[i]);
printf("average/n");
for(i=0;i<4;i++)
{
n=0;//对每个人的成绩大于85计数;初值给0;
for(j=0;j<5;j++)
if(*(pscore+5*i+j)>85) n++;//累计每个学生成绩》85的个数
if((n==5)||(aver[i]>90))//满足两个条件之一即可
{
printf("%d",num[i]);
for(k=0;k<5;k++)
printf("%11.2f",*(pscore+5*i+k));
printf("%11.2f\n",aver[i]);
}
}
}
相关文章推荐
- C和指针之函数之在数组中找特定元素并返回指向该位置的指针
- 所谓"在表达式中,数组名总是被转换为指向该数组第一个元素的指针"应该如何理解?
- php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
- 【C语言】12-指向一维数组元素的指针
- C语言-指向一维数组元素的指针
- 指向数组的指针与指向数组首元素的指针
- 访问元素:指向数组的指针与指向指针的指针
- 【C语言】12-指向一维数组元素的指针
- 在数组中寻找某个特定整型值的存储位置,并还回一个指向该位置的指针
- 建立一个数组,内存放5个学生的数据(学号、成绩),用指针指向数组首元素,输出1、3、5学生的数据
- 用指针指向数组首元素,输出第奇数(1,3,5,7)个学生的数据。
- 【php数组函数序列】之key() - 获取数组内部指针当前指向元素的键名
- 【php数组函数序列】之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
- 【C语言】12-指向一维数组元素的指针
- C为什么要把数组类型的函数参数认为是指向数组第一个元素的指针
- 【php数组函数序列】之current() - 获取数组内部指针当前指向元素的值
- php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
- 【php数组函数序列】之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
- 【C语言】12-指向一维数组元素的指针
- 将数组里面零元素置后,其它元素相对位置保持不变