从键盘输入某班学生某门课的成绩(已知每班人数最多不超过40人,具体人数键盘输入),试编程计算其平均分
#include <stdio.h>
#define N 40
int Average(int score[],int n);
void ReadScore(int score[],int n);
int main()
{
int score[N],aver,n;
printf("Input n:")/*已知n,让人输入*/
scanf("%d",&n);
ReadScore(score,n);
aver=Average(score,n);
printf("Average score is %d\n",aver);
return 0;
}
int Average(int score[],int n)
{
int i,sum=0;
for(i=0;i<=n-1;i++)
{
sum+=a[i];
}
return sum/n;
}
void ReadScore(int score[],int n)
{
int i;
printf("Input score:");
for(i=0;i<=n-1;i++)
{
scanf("%d",&score[i]);
}
}
从键盘输入某班学生某门课的成绩(已知每班人数最多不超过40人),当输入成绩为负值时,表示输入结束,试编程计算其平均分,并输出实际输入的人数。
#include <stdio.h>
#define N 40
int Average(int score[],int n);
int ReadScore(int score[]);
int main()
{
int score[N],aver,n;
n=ReadScore(score);
printf("Total studentd is %d\n",n);
aver=Average(score,n);
printf("Average score is %d\n",aver);
return 0;
}
int Average(int score[],int n)
{
int i,sum=0;
for(i=0;i<=n-1;i++)
{
sum+=score[i];
}
return n>0?sum/n:-1;/*讨论n小于零的情况*/
}
int ReadScore(int score[])
{
int i=-1;
do{
i++;
printf("Input score:");
scanf("%d",&score[i]);
}while(score[i]>=0);
return i;
}
从键盘输入某班学生某门课的成绩(已知每班人数最多不超过40人),当输入成绩为负值时,表示输入结束,试编程计算并打印最高分。
#include <stdio.h>
#define N 40
int FindMax(int score[],int n);
int ReadScore(int score[]);
int main()
{
int score[N],max,n;
n=ReadScore(score);
printf("Total studentd is %d\n",n);
max=FindMax(score,n);
printf("The highest score is %d\n",max);
return 0;
}
int ReadScore(int score[])
{
int i=-1;
do{
i++;
printf("Input score:");
scanf("%d",&score[i]);
}while(score[i]>=0);
return i;
}
int FindMax(int score[],int n)
{
int i,max=score[0];
for(i=1;i<n;i++)
{
if(max<score[i])
max=score[i];
}
return max;
}
从键盘中输入某班学生某门课的成绩(每班人数最多不超过40人),当输入为负值时表示输入结束,试编程将分数从高到低顺序进行排序输出。用函数实现排序功能。
- 交换排序法——降序排序
#include <stdio.h>
#define N 40
int ReadScore(int score[]);
void DataSort(int score[],int n);
void PrintScore(int score[],int n);
int main()
{
int score[N],aver,n;
n=ReadScore(score);
printf("Total studentd is %d\n",n);
DataSort(score,n);
printf("Sorted scores:");
PrintScore(score,n);
return 0;
}
void DataSort(int score[],int n)
{
int i,j,temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(score[i]<score[j])
{
temp=score[i];
score[i]=score[j];
score[j]=temp;
}
}
}
}
int ReadScore(int score[])
{
int i=-1;
do{
i++;
printf("Input score:");
scanf("%d",&score[i]);
}while(score[i]>=0);
return i;
}
void PrintScore(int score[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%4d\n",score[i]);
}
}
- 选择排序法——降序排序
#include <stdio.h>
#define N 40
int ReadScore(int score[]);
void DataSort(int score[],int n);
void PrintScore(int score[],int n);
int main()
{
int score[N],aver,n;
n=ReadScore(score);
printf("Total studentd is %d\n",n);
DataSort(score,n);
printf("Sorted scores:");
PrintScore(score,n);
return 0;
}
void DataSort(int score[],int n)
{
int i,j,k,temp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(score[k]<score[j])
{
k=j;
}
}
if(k!=i)
{
temp=score[k];
score[k]=score[i];
score[i]=temp;
}
}
}
int ReadScore(int score[])
{
int i=-1;
do{
i++;
printf("Input score:");
scanf("%d",&score[i]);
}while(score[i]>=0);
return i;
}
void PrintScore(int score[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%4d\n",score[i]);
}
}
从键盘中输入某班学生某门课的成绩和学号(每班人数最多不超过40人),当输入为负值时表示输入结束,试编程将分数从高到低顺序进行排序,输出排序后学生分数与对应学号。用函数实现排序功能。
#include <stdio.h>
#define N 40
int ReadScore(int score[],long num[]);
void DataSort(int score[],long num[],int n);
void PrintScore(int score[],long num[],int n);
int main()
{
int score[N],aver,n;
long num[N];
n=ReadScore(score,num);
printf("Total studentd is %d\n",n);
DataSort(score,num,n);
printf("Sorted scores:");
PrintScore(score,num,n);
return 0;
}
void DataSort(int score[],long num[],int n)
{
int i,j,k,temp1;
long temp2;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(score[k]<score[j])
{
k=j;
}
}
if(k!=i)
{
temp1=score[k];
score[k]=score[i];
score[i]=temp1;
temp2=num[k];
num[k]=num[i];
num[i]=temp2;
}
}
}
int ReadScore(int score[],long num[])
{
int i=-1;
do{
i++;
printf("Input student's ID and score:");
scanf("%ld %d",&num[i],&score[i]);
}while(num[i]>0&&score[i]>=0);/*也要控制学号的输入正确*/
return i;
}
void PrintScore(int score[],long num[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%101d %4d\n",num[i],score[i]);
}
}
从键盘中输入某班学生某门课的成绩和学号(每班人数最多不超过40人),当输入为负值时,表示输入结束,试编程从键盘任意输入一个学号,查找该学号学生的成绩
- 线性查找法
#include <stdio.h>
#define N 40
int LineSearch(long x,long num[],int n);
int ReadScore(int score[],long num[]);
int main()
{
int score[N],n,pos;
long num[N],x;
n=ReadScore(score,num);
printf("Total students are %d\n" ,n);
printf("Input the searching ID:");
scanf("%ld",&x);
pos=LineSearch(x,num,n);
if(pos!=-1) printf("score=%d\n",score[pos]);
else printf("Not found!\n");
return 0;
}
int ReadScore(int score[],long num[])
{
int i=-1;
do{
i++;
printf("Input student's ID and score:");
scanf("%ld%d",&num[i],&score[i]);
}while(num[i]>0&&score[i]>=0);
return i;
}
int LineSearch(long x,long num[],int n)
{
int i;
for(i=0;i<n;i++)
{
if(x==num[i])
return i;
}
return -1;
}
- 折半查找法(假设按学生的学号从小到大的顺序输入学生的成绩)
#include <stdio.h>
#define N 40
int BinSearch(long x,long num[],int n);
int ReadScore(int score[],long num[]);
int main()
{
int score[N],n,pos;
long num[N],x;
n=ReadScore(score,num);
printf("Total students are %d\n" ,n);
printf("Input the searching ID:");
scanf("%ld",&x);
pos=BinSearch(x,num,n);
if(pos!=-1) printf("score=%d\n",score[pos]);
else printf("Not found!\n");
return 0;
}
int ReadScore(int score[],long num[])
{
int i=-1;
do{
i++;
printf("Input student's ID and score:");
scanf("%ld%d",&num[i],&score[i]);
}while(num[i]>0&&score[i]>=0);
return i;
}
int BinSearch(long x,long num[],int n)
{
int i,low=0,mid,high=n-1;
do{
mid=(low+high)/2;
if(x==num[mid])
return mid;
else if(x>num[mid])
low=mid+1;
else if(x<num[mid])
high=mid-1;
}while(low<=high);
return -1;
}
向函数传递二维数组
某班期末考试科目为数学(MT)、英语(EN)、和物理(PH),有最多不超过40人参加考试。请编程计算:
(1)每个学生的总分和平均分
(2)每门课程的总分和平均分
代码有误,我真的改不来
#include <stdio.h>
#define STUD_N 40
#define COURSE_N 3
void ReadScore(int score[][COURSE_N],long num[],int n);
void AverforStud(int score[][COURSE_N],int sum[],float aver[],int n);/*定义数组被函数接收,再去写入值,函数不直接返回数组*/
void AverforCourse(int score[][COURSE_N],int sum[],float aver,int n);
void Print(int score[][COURSE_N],long num[],int sumS[],float averS[],int sumC[],float averC[],int n);
int main()
{
int score[STUD_N][COURSE_N],sumS[STUD_N],sumC[COURSE_N],n;
long num[STUD_N];
float averS[STUD_N],averC[COURSE_N];
printf("Input the total number of the students (n<=40):");
scanf("%d",&n);
ReadScore(score,num,n);
AverforStud(score,sumS,averS,n);
AverforCourse(score,sumC,averC,n);
Print(score,num,sumS,averS,sumC,averC,n);
return 0;
}
void ReadScore(int score[][COURSE_N],long num[],int n)
{
int i,j;
printf("Input student's ID and score as:MT EN PH:\n");
for(i=0;i<n;i++)
{
scanf("%ld",&num[i]);
for(j=0;j<COURSE_N;j++)
{
scanf("%d",&score[i][j]);
}
}
}
AverforStud(int score[][COURSE_N],int sum[],float aver[],int n)
{
int i,j;
for(i=0;i<n;i++)
{
sum[i]=0;
for(j=0;j<COURSE_N;j++)
{
sum[i]+=score[i][j];
}
aver[i]=(float)sum[i]/COURSE_N;
}
}
AverforCourse(int score[][COURSE_N],int sum[],float aver[],int n)
{
int i,j;
for(j=0;j<COURSE_N;j++)
{
sum[j]=0;
for(i=0;i<n;i++)
{
sum[j]+=score[i][j];
}
aver[j]=(float)sum[j]/n;
}
}
void Print(int score[][COURSE_N],long num[],int sumS[],float averS[],int sumC[],float averC[],int n)
{
int i,j;
printf("Student's ID\t MT\t EN\t PH\t SUM\t AVER\n");
for(i=0;i<n;i++)
{
printf("%12ld\t",num[i]);
for(j=0;j<COURSE_N;j++)
{
printf("%4d\t",score[i][j]");
}
printf("%4d\t%5.1f\n",sumS[i],averS[i]);
}
printf("\nSumofCourse\t");
for(j=0;j<COURSE_N;j++)
{
printf("%4d\t",sumC[j]);
}
printf("\nAverofCourse\t");
{
for(j=0;j<COURSE_N;j++)
{
printf("%4.1f\t",averC[j]);
}
}
printf("\n");
}