【高悬赏】写两道C语言程序: 1.输入10个学生的信息,输出最高分学生的信息和全部学生的平均成绩。

要求: (a)学生信息包括:学号、姓名、成绩;
(b)学生信息必须采用结构体类型;
2.

输入正整数n,将1~n中的所有完数一个占一行保存到文本文件”d:\\result.txt”中。 要求:完数的判断必须采用函数形式。说明:完数是指一个正整数,它除本身之外的所有因子和等于自身。例如:正整数6除自身之外的因子为1,2,3, 6 = 1+2+3 所以6是完数。

第一题标准做法

#include<stdio.h>
#include<stdlib.h>
typedef struct _tagStudent
{
int id;
char name[9];
float score;
}Student;
Student* getinfo(int count)
{
int i;
Student *student=NULL;
student=(Student*)malloc(count*sizeof(Student));
if(NULL==student)
{
printf("获取学生信息失败!\n");
exit(0);
}
printf("请输入%d个学生的学号,姓名,成绩,用空格分割!\n",count);
for(i=0;i<count;i++)
scanf("%d %s %f",&student[i].id,student[i].name,&student[i].score);
return student;
};
void clearinfo(Student *student)
{
if(NULL==student)
return ;
free(student);
student=NULL;
}
Student maxscore(Student *student,int count)
{
int i;
Student maxstu=student[0];
Student temp={0,"",0.0};
if(NULL==student)
{
return temp;
}
for(i=0;i<count;i++)
if(maxstu.score<student[i].score)
maxstu=student[i];
return maxstu;
};
float avrgscore(Student *student,int count)
{
int i;
float avrg=0.0;
if(NULL==student)
return 0.0;
for(i=0;i<count;i++)
avrg+=student[i].score;
return avrg/(float)count;
};
int main()
{
Student *stu=NULL,maxstu;
int count=10;
stu=getinfo(count);
maxstu=maxscore(stu,count);
printf("%d个学生中,最高分学生的学号是:%d,姓名是:%s,成绩是:%3.1f\n",
count,maxstu.id,maxstu.name,maxstu.score);
printf("%d个学生的平均成绩是%.1f\n",count,avrgscore(stu,count));
clearinfo(stu);
return 0;
}

偷懒做法

#include<stdio.h>
typedef struct _tagStudent
{
int id;
char name[9];
float score;
}Student;
int main()
{
Student student[10],maxstu;
float avrg=0.0;
int i;
printf("请输入10个学生的学号,姓名,成绩,用空格分割!\n");
for(i=0;i<10;i++)
scanf("%d %s %f",&student[i].id,student[i].name,&student[i].score);
maxstu=student[0];
for(i=0;i<10;i++)
if(maxstu.score<student[i].score)
maxstu=student[i];
for(i=0;i<10;i++)
avrg+=student[i].score;
avrg/=10.0;
printf("10个学生中,最高分学生的学号是:%d,姓名是:%s,成绩是:%3.1f\n",
maxstu.id,maxstu.name,maxstu.score);
printf("10个学生的平均成绩是%.1f\n",avrg);
return 0;
}

第二题

#include<stdio.h>
#include<stdlib.h>
int isPerfectnumber(int num)
{
int i,sum;
sum=0;
for(i=1;i<num;i++)
{
if(num%i==0)
sum+=i;
}
if(sum==num)
return 1;
else
return 0;
}
int main()
{
int n,i;
FILE *fp;
printf("请输入正整数n: ");
scanf("%d",&n);
if(n<6)
printf("输入非法!\n");
else
{
fp=fopen("d:\\result.txt","w");
for(i=1;i<=n;i++)
if(isPerfectnumber(i))
fprintf(fp,"%d\n",i);
fclose(fp);
}
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-07
一点都不实诚,号称高悬赏,一分悬赏都没有。

第一题:
定义结构体
struct StuInfo{
char no[20];
char name[20];
double score;
};
循环十次,分别输入十个学生的学号、姓名和成绩,用一个结构体数组保存起来(假设定义为StuInfo stu_info[10];)
最高分:采用循环,用一个int变量max记录分数最高的那个学生成绩记录的下标,最后输出stu_info[max].no, stu_info[max].name, stu_info[max].score;
平均分:把十个同学的成绩加起来,最后除以10就是了

2.又是循环,一个数N除以从1到N/2的所有数,如果能够整除,就用一个sum累加,最后再加上它本身,如果sum == N,则这个数就是完数。
文件操作:
打开文件:FILE *fp;
fp = fopen("d:\\result.txt", "w");
然后可以将结果puts到文件中(也可以用fprintf)
最后关闭fp, fclose(fp);
大致思路就是上面那样啦