首页 > 试题广场 >

写一个程序,满足下列要求: a.外部定义一个n

[问答题]

写一个程序,满足下列要求:

a.外部定义一个name结构模板,它含有2个成员:  一个字符串用于存放名字,另—个字符串用于存放姓氏。

b.外部定义一个student结构模板,它含有3个成员:一个 name结构,一个存放3个浮点数分数的 grade数组,以及一个存放这3个分数的平均分的变量。

c.使main()函数声明一个具自CSIZE (CSIZE=4)个student结构的数组,并随意初始化这些结构的名字部分。使用函数来执行d、e、f以及g部分所描述的任务。

d.请求用户输入学生姓名和分数,以交互地获取每个学生的成绩。将分数放到相应结构的grade数组成员中。您可以自主选择在main()或一个函数中实现这个循环。

e.为每个结构计算平均分,并把这个值赋给适合的成员。

f.输出每个结构中的信息。

g. 输出结构的每个数值成员的班级平均分。

推荐
#include <stdio.h>
#define CSIZE 4
#define SCORE 3
void get_score(struct student *p);
void calculate_average(struct student *p);
void print_each(struct student *p);
void print_class_average(struct student *p);
struct name {
 char firstname[20];
 char secondname[20];
};
struct student {
 struct name names;
 float score[SCORE];
 float average;
};
int main()
{
 struct student students[CSIZE]={
 { {"Aasdda", "Basdjas"}, 0, 0, 0, 0 },
 { {"Csdfss", "Ddsfsdd"}, 0, 0, 0, 0 },
 { {"Edfdsf", "Fsfdsfd"}, 0, 0, 0, 0 },
 { {"Gfdsse", "Hservvd"}, 0, 0, 0, 0 }
 };
 printf("selcet function: d, e, f, g\n");
 printf("d: acquire scores for each student\n");
 printf("e: Calculate the average score value for each structure and assign it to the proper member\n");
 printf("f: Print the information in each structure\n");
 printf("g: Print the class average for each of the numeric structure members\n");
 while(1)
 {
 switch ( getchar() )
 {
 case 'd' : get_score(students); break;
 case 'e' : calculate_average(students); break;
 case 'f' : print_each(students); break;
 case 'g' : print_class_average(students); break;
 case '\n' : break;
 default  : puts("Bye"); return 0;
 }
 }
}
void get_score(struct student *p)
{
 int i,j;
 for (i = 0; i < CSIZE; i++)
 {
 printf("input the %d scores of %s %s:", SCORE, (p+i)->names.firstname, (p+i)->names.secondname);
 for (j=0; j<SCORE; j++)
 scanf("%f", &( (p+i)->score[j] ) );
 }
 printf("input finished!\n");
}
void calculate_average(struct student *p)
{
 int i,j;
 float total;
 for (i = 0; i < CSIZE; i++)
 {
 for (j=0,total=0; j<SCORE; j++)
 total += (p+i)->score[j] ;
 (p+i)->average = total / SCORE ;
 }
 printf("calculate finished!\n");
}
void print_each(struct student *p)
{
 int i,j;
 float total;
 for (i = 0; i < CSIZE; i++)
 {
 printf("%s %s:\t", (p+i)->names.firstname, (p+i)->names.secondname);
 for (j=0,total=0; j<SCORE; j++)
 printf("score%d: %g\t", j+1, (p+i)->score[j]);
 printf("average: %g\n", (p+i)->average);
 }
}
void print_class_average(struct student *p)
{
 int i;
 float total;
 for (i = 0, total=0; i < CSIZE; i++)
 total += (p+i)->average ;
 printf("class average: %g\n", total / CSIZE);
}

发表于 2018-05-05 22:09:05 回复(0)