C语言结构体题

定义一个学生学籍结构,包括学号、姓名、性别、高数、英语、C语言,构造一个输入函数负责数据输入,一个统计函数负责统计个人平均分和科目平均分

#include <stdio.h>

#define N 5

void input_stu(struct Stu *stu);
void output_avg(struct Stu *stu);

struct Stu
{
int id;
char name[10];
int sex;
float math;
float eng;
float c;
};

int main()
{
struct Stu stu[N];
input_stu(stu);
output_avg(stu);
return 0;
}

void input_stu(struct Stu *stu)
{
int i = 1;
do
{
printf("请输入第%d个学生的姓名 学号 性别 数学成绩 英语成绩 C语言成绩:", i);
struct Stu *s = stu + i - 1;
scanf("%s %d %d %f %f %f", s->name, &s->id, &s->sex, &s->math, &s->eng, &s->c);
i++;
} while (i <= N);
}

void output_avg(struct Stu *stu)
{
int i = 1;
printf("%-8s%-8s%-8s%-8s%-8s%-8s%-8s","学 号", "姓 名", "性 别", "高 数", "英 语", "C", "平均分");
struct Stu *s = stu + i - 1;
float math_avg = stu->math, eng_avg = stu->eng, c_avg = stu->c;
putchar(10);
do
{
struct Stu *s = stu + i - 1;
math_avg = ((i - 1)*math_avg + s->math) / i;
eng_avg = ((i - 1) * eng_avg + s->eng) / i;
c_avg = ((i - 1)*c_avg + s->c) / i;
printf("%-8d%-8s%-8s%-8.1f%-8.1f%-8.1f%-8.1f",
s->id, s->name, s->sex == 1 ? "男" : "女", s->math, s->eng, s->c, (s->math + s->eng + s->c) / 3);
putchar(10);
i++;
} while (i <= N);

printf("%-12s%-12s%-12s%", "数学平均分", "英语平均分", "C平均分");
putchar(10);
printf("%-12.1f%-12.1f%-12.1f", math_avg, eng_avg, c_avg);
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-12-13
第9章 结构体 1.定义以下结构体类型 struct s { int a; char b; float f; }; 则语句printf("%d",sizeof(struct s))的输出结果为【 】。 A) 3 B) 7 C) 6 D) 4 2.当定义一个结构体变量时,系统为它分配的内存空间是【 】 A)结构中一个成员所需的内存容量 B)结构中第一个成员所需的内存容量 C)结构体中占内存容量最大者所需的容量 D)结构中各成员所需内存容量之和 3.定义以下结构体类型 struct s { int x; float f; }a[3]; 语句printf("%d",sizeof(a))的输出结果为 【 】 A) 4 B) 12 C) 18 D) 6 4.定义以下结构体数组 struct c { int x; int y; }s[2]={1,3,2,7}; 语句printf("%d",s[0].x*s[1].x)的输出结果为 【 】 A) 14 B) 6 C) 2 D) 21 5.运行下列程序段,输出结果是 【 】 struct country { int num; char name[10]; }x[5]={1,"China",2,"USA",3,"France",4, "England",5, "Spanish"}; struct country *p; p=x+2; printf("%d,%c",p->num,(*p).name[2]); A) 3,a B) 4,g C) 2,U D) 5,S 6.下面程序的运行结果是【 】。 struct KeyWord { char Key[20]; int ID; }kw[]={"void",1,"char",2,"int",3,"float",4,"double",5}; main() { printf("%c,%d\n",kw[3].Key[0], kw[3].ID); } A) i,3 B) n,3 C) f,4 D) l,4 7.定义以下结构体类型 struct student { char name[10]; int score[50]; float average; }stud1; 则stud1占用内存的字节数是【 】。 A) 64 B) 114 C) 228 D) 7 8.如果有下面的定义和赋值,则使用【 】不可以输出n中data的值。 struct SNode { unsigned id; int data; }n,*p; p=&n; A) p.data B) n.data C) p->data D) (*p).data 9.根据下面的定义,能输出Mary的语句是【】。 struct person { char name[9]; int age; }; struct person class[5]={"John",17,"Paul",19,"Mary",18,"Adam",16}; A) printf("%s\n",class[1].name); B) printf("%s\n",class[2].name); C) printf("%s\n",class[3].name); D) printf("%s\n",class[0].name); 10.定义以下结构体数组 struct date { int year; int month; int day; }; struct s { struct date birthday; char name[20]; } x[4]={{2008, 10, 1, "guangzhou"}, {2009, 12, 25, "Tianjin"}}; 语句 printf("%s,%d,%d,%d",x[0].name,x[1].birthday.year); 的输出结果为 【 】。 A) guangzhou,2009 B) guangzhou,2008 C) Tianjin,2008 D) Tianjin,2009 11.运行下列程序段,输出结果是【】。 struct country { int num; char name[20]; }x[5]={1, "China", 2, "USA", 3, "France", 4, "England", 5, "Spanish"}; struct country *p; p=x+2; printf("%d,%s",p->num,x[0].name); A) 2,France B) 3,France C) 4,England D) 3, China 12. 定义以下结构体数组 struct { int num; char name[10]; }x[3]={1,"china",2,"USA",3,"England"}; 语句printf("\n%d,%s",x[1].num,x[2].name)的输出结果为【 】 A)2,USA B)3,England C)1,china D)2,England 13. 定义以下结构体数组 struct date { int year; int month;
第2个回答  推荐于2018-05-11
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 100

typedef struct node {
unsigned id;//学号
char name[21];
char sex[3];
double grade[5];//[0]:高数,[1]:英语,[2]:C语言,[3]:总分,[4]:平均分
}STUDENT;

void Input(STUDENT a[],int n) {
int i,j;
double sum;
printf("请输入%d个学生的信息:\n",n);
printf("顺序是:\n学号 姓名 性别 高数 英语 C语言\n");
for(i = 0;i < n && i < MAXSIZE;++i) {
sum = 0;
scanf("%d%s%s",&a[i].id,a[i].name,a[i].sex);
for(j = 0; j < 3;++j) {
scanf("%lf",&a[i].grade[j]);
sum += a[i].grade[j];
}
a[i].grade[3] = sum;
a[i].grade[4] = sum/3.0;
}
}

double Average(STUDENT a[],int n,char mode) {//mode:0返回高数平均分,mode:1返回英语平均分,Mode:2返回C语言平均分
double sum = 0.0;
int i;
if(mode < 0 || mode > 2) return 0.0;
for(i = 0; i < n; ++i)
sum += a[i].grade[mode];
return sum / n;
}

int main() {
STUDENT a[MAXSIZE];
int mode,n = 10;
char score[][10] = {"高数","英语","C语言"};
Input(a,n);
for(mode = 0; mode < 3; ++mode) printf("%s平均成绩:%.2lf\n",Average(a,n,mode));
return 0;
}

本回答被网友采纳
相似回答