文章目录
20201216-成信大-C语言程序设计-20201学期《C语言程序设计B》平时自主学习-结构体部分程序设计题-补充
P782
修改前的代码:
#include <stdio.h>
/* User Code Begin(考生可在本行后添加代码,例如全局变量的定义、函数原型声明等,行数不限) */
/* User Code End(考生添加代码结束) */
int main(void)
{
int high; /* high记录平均分最高的学生的序号,具体使用参考后面的代码 */
/* User Code Begin(考生可在本行后添加代码,行数不限) */
/* User Code End(考生添加代码结束) */
printf("\nThe Highest is %s(%d)\nscore1=%.2f score2=%.2f score3=%.2f score4=%.2f aver=%.2f\n",
myClass[high].name, myClass[high].num,
myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].score4, myClass[high].aver);
return 0;
}
/* User Code Begin(考生在此后根据设计需要完成程序的其它部分,行数不限) */
修改后提交的代码:
#include <stdio.h>
/* User Code Begin(考生可在本行后添加代码,例如全局变量的定义、函数原型声明等,行数不限) */
// 学号、姓名(最长19字节)、四门课的成绩 平均成绩
// myClass[high].name, myClass[high].num,
// myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].score4, myClass[high].aver
typedef struct student
{
int num;
char name[20];
float score1;
float score2;
float score3;
float score4;
float aver;
} SCORE;
void inputStudent(SCORE *pStu, int n);
int getHighAverStudent(SCORE *pStu, int n);
/* User Code End(考生添加代码结束) */
int main(void)
{
int high; /* high记录平均分最高的学生的序号,具体使用参考后面的代码 */
/* User Code Begin(考生可在本行后添加代码,行数不限) */
SCORE myClass[5];
inputStudent(myClass, 5);
high = getHighAverStudent(myClass, 5);
/* User Code End(考生添加代码结束) */
printf("\nThe Highest is %s(%d)\nscore1=%.2f score2=%.2f score3=%.2f score4=%.2f aver=%.2f\n",
myClass[high].name, myClass[high].num,
myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].score4, myClass[high].aver);
return 0;
}
/* User Code Begin(考生在此后根据设计需要完成程序的其它部分,行数不限) */
void inputStudent(SCORE *pStu, int n)
{
int i;
printf("Please input students info:Num Name score1 score2 score3 score4\n");
for ( i = 0; i < n; i++)
{
printf("%d:", i + 1);
scanf("%d %s %f %f %f %f", &pStu[i].num, pStu[i].name,
&pStu[i].score1, &pStu[i].score2, &pStu[i].score3, &pStu[i].score4);
pStu[i].aver = (pStu[i].score1 + pStu[i].score2 + pStu[i].score3 + pStu[i].score4) / 4.0f;
}
}
int getHighAverStudent(SCORE *pStu, int n)
{
int i, pos = 0;
for ( i = 0; i < n; i++)
{
if (pStu[i].aver>pStu[pos].aver)
{
pos = i;
}
}
return pos;
}
P801
修改前的代码:
#include <stdio.h>
struct student
{
int num;
char name[20];
float score1, score2, score3;
float aver;
};
void Input(struct student *pStu, int n);
int Highest(struct student *pStu, int n);
int main(void)
{
int high; /* high记录平均分最高的学生的序号,具体使用参考后面的代码 */
struct student myClass[5];
/* 本部分代码功能建议:调用相应的函数完成数据输入和统计 */
/* User Code Begin(Limit: lines<=2, lineLen<=50, 考生可在本行后添加代码、最多2行、行长<=50字符) */
/* User Code End(考生添加代码结束。注意:空行和单独为一行的{与}均不计行数、行长不计行首tab缩进) */
printf("\nThe Highest is %s(%d)\nscore1=%.2f score2=%.2f score3=%.2f aver=%.2f\n",
myClass[high].name, myClass[high].num,
myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].aver);
return 0;
}
/* 输入N个学生的信息并计算平均分 */
void Input(struct student *pStu, int n)
{
int i;
struct student tmpStu;
printf("Please input students info:Num Name score1 score2 score3\n");
for (i=0; i<n; i++)
{
printf("%d:", i+1);
scanf("%d%s%f%f%f", &tmpStu.num, tmpStu.name,
&tmpStu.score1, &tmpStu.score2, &tmpStu.score3);
pStu[i] = tmpStu;
pStu[i].aver = (pStu[i].score1 + pStu[i].score2 + pStu[i].score3) / 3.0f;
}
}
/* 找出并通过函数值返回最高平均分学生的序号 */
int Highest(struct student *pStu, int n)
{
int i, pos = 0;
/* User Code Begin(考生可在本行后添加代码,行数不限) */
/* User Code End(考生添加代码结束) */
return pos;
}
修改后提交的代码:
#include <stdio.h>
struct student
{
int num;
char name[20];
float score1, score2, score3;
float aver;
};
void Input(struct student *pStu, int n);
int Highest(struct student *pStu, int n);
int main(void)
{
int high; /* high记录平均分最高的学生的序号,具体使用参考后面的代码 */
struct student myClass[5];
/* 本部分代码功能建议:调用相应的函数完成数据输入和统计 */
/* User Code Begin(Limit: lines<=2, lineLen<=50, 考生可在本行后添加代码、最多2行、行长<=50字符) */
Input(myClass, 5);
high = Highest(myClass, 5);
/* User Code End(考生添加代码结束。注意:空行和单独为一行的{与}均不计行数、行长不计行首tab缩进) */
printf("\nThe Highest is %s(%d)\nscore1=%.2f score2=%.2f score3=%.2f aver=%.2f\n",
myClass[high].name, myClass[high].num,
myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].aver);
return 0;
}
/* 输入N个学生的信息并计算平均分 */
void Input(struct student *pStu, int n)
{
int i;
struct student tmpStu;
printf("Please input students info:Num Name score1 score2 score3\n");
for (i=0; i<n; i++)
{
printf("%d:", i+1);
scanf("%d%s%f%f%f", &tmpStu.num, tmpStu.name,
&tmpStu.score1, &tmpStu.score2, &tmpStu.score3);
pStu[i] = tmpStu;
pStu[i].aver = (pStu[i].score1 + pStu[i].score2 + pStu[i].score3) / 3.0f;
}
}
/* 找出并通过函数值返回最高平均分学生的序号 */
int Highest(struct student *pStu, int n)
{
int i, pos = 0;
/* User Code Begin(考生可在本行后添加代码,行数不限) */
for ( i = 0; i < n; i++)
{
if (pStu[i].aver > pStu[pos].aver)
{
pos = i;
}
}
/* User Code End(考生添加代码结束) */
return pos;
}
P807
修改前的代码:
#include <stdio.h>
/* User Code Begin(考生可在本行后添加代码,定义程序中使用的数据类型SCORE,行数不限) */
/* User Code End(考生添加代码结束) */
void Input(SCORE *pStu, int n);
int Highest(SCORE *pStu, int n);
int main(void)
{
int high; /* high记录平均分最高的学生的序号,具体使用参考后面的代码 */
SCORE myClass[5];
/* 本部分代码功能建议:调用相应的函数完成数据输入和统计 */
/* User Code Begin(Limit: lines<=2, lineLen<=50, 考生可在本行后添加代码、最多2行、行长<=50字符) */
/* User Code End(考生添加代码结束。注意:空行和单独为一行的{与}均不计行数、行长不计行首tab缩进) */
printf("\nThe Highest is %s(%d)\nscore1=%.2f score2=%.2f score3=%.2f aver=%.2f\n",
myClass[high].name, myClass[high].num,
myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].aver);
return 0;
}
/* 输入N个学生的信息并计算平均分 */
void Input(SCORE *pStu, int n)
{
int i;
SCORE tmpStu;
printf("Please input students info:Num Name score1 score2 score3\n");
for (i=0; i<n; i++)
{
printf("%d:", i+1);
scanf("%d%s%f%f%f", &tmpStu.num, tmpStu.name,
&tmpStu.score1, &tmpStu.score2, &tmpStu.score3);
pStu[i] = tmpStu;
pStu[i].aver = (pStu[i].score1 + pStu[i].score2 + pStu[i].score3) / 3.0f;
}
}
/* 找出并通过函数值返回最高平均分学生的序号 */
int Highest(SCORE *pStu, int n)
{
int i, pos = 0;
/* User Code Begin(考生可在本行后添加代码,行数不限) */
/* User Code End(考生添加代码结束) */
return pos;
}
修改后提交的代码:
#include <stdio.h>
/* User Code Begin(考生可在本行后添加代码,定义程序中使用的数据类型SCORE,行数不限) */
typedef struct student
{
// myClass[high].name, myClass[high].num,
// myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].aver
int num;
char name[20];
float score1;
float score2;
float score3;
float aver;
} SCORE;
/* User Code End(考生添加代码结束) */
void Input(SCORE *pStu, int n);
int Highest(SCORE *pStu, int n);
int main(void)
{
int high; /* high记录平均分最高的学生的序号,具体使用参考后面的代码 */
SCORE myClass[5];
/* 本部分代码功能建议:调用相应的函数完成数据输入和统计 */
/* User Code Begin(Limit: lines<=2, lineLen<=50, 考生可在本行后添加代码、最多2行、行长<=50字符) */
Input(myClass, 5);
high = Highest(myClass, 5);
/* User Code End(考生添加代码结束。注意:空行和单独为一行的{与}均不计行数、行长不计行首tab缩进) */
printf("\nThe Highest is %s(%d)\nscore1=%.2f score2=%.2f score3=%.2f aver=%.2f\n",
myClass[high].name, myClass[high].num,
myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].aver);
return 0;
}
/* 输入N个学生的信息并计算平均分 */
void Input(SCORE *pStu, int n)
{
int i;
SCORE tmpStu;
printf("Please input students info:Num Name score1 score2 score3\n");
for (i=0; i<n; i++)
{
printf("%d:", i+1);
scanf("%d%s%f%f%f", &tmpStu.num, tmpStu.name,
&tmpStu.score1, &tmpStu.score2, &tmpStu.score3);
pStu[i] = tmpStu;
pStu[i].aver = (pStu[i].score1 + pStu[i].score2 + pStu[i].score3) / 3.0f;
}
}
/* 找出并通过函数值返回最高平均分学生的序号 */
int Highest(SCORE *pStu, int n)
{
int i, pos = 0;
/* User Code Begin(考生可在本行后添加代码,行数不限) */
for ( i = 0; i < n; i++)
{
if (pStu[i].aver>pStu[pos].aver)
{
pos = i;
}
}
/* User Code End(考生添加代码结束) */
return pos;
}
P832
修改前的代码:
#include <stdio.h>
#include <string.h>
/* User Code Begin(考生可在本行后添加代码,例如结构体类型的定义、函数原型声明等,行数不限) */
/* User Code End(考生添加代码结束) */
int main(void)
{
STUD sTranscript[] = { {1001, "张三丰", 69.5, 61.5, 91.5}, {1002, "李云龙", 92.5, 67.5, 81.5},
{1003, "郭 靖", 79.5, 67.5, 86.5 }, {1004, "苗翠花", 83.0, 75.5, 84.0},
{1005, "张无忌", 65.5, 81.5, 71.0} };
STUD *stu;
char name[16];
printf("请输入你要查找的学生姓名: ");
gets(name);
stu = FindByName(sTranscript, 5, name); //调用函数查找信息
if (stu)
{
printf("\n查找的学生信息为: ");
printf("%d %s %.1f %.1f %.1f\n", stu->iNum, stu->cName, stu->fCh, stu->fMath, stu->fEng);
}
else
{
printf("\n你要查找的学生不存在!\n");
}
return 0;
}
/* User Code Begin:考生在此后完成自定义函数的设计,行数不限 */
修改后提交的代码:
#include <stdio.h>
#include <string.h>
/* User Code Begin(考生可在本行后添加代码,例如结构体类型的定义、函数原型声明等,行数不限) */
typedef struct student // 定义学生结构体,并给出需要的别名
{
//%d %s %.1f %.1f %.1f
//stu->iNum, stu->cName, stu->fCh, stu->fMath, stu->fEng
int iNum;
char cName[16];
float fCh;
float fMath;
float fEng;
} STUD;
// 声明功能函数
STUD* FindByName(STUD sTranscript[], int n, char name[]);
/* User Code End(考生添加代码结束) */
int main(void)
{
STUD sTranscript[] = { {1001, "张三丰", 69.5, 61.5, 91.5}, {1002, "李云龙", 92.5, 67.5, 81.5},
{1003, "郭 靖", 79.5, 67.5, 86.5 }, {1004, "苗翠花", 83.0, 75.5, 84.0},
{1005, "张无忌", 65.5, 81.5, 71.0} };
STUD *stu;
char name[16];
printf("请输入你要查找的学生姓名: ");
gets(name);
stu = FindByName(sTranscript, 5, name); //调用函数查找信息
if (stu)
{
printf("\n查找的学生信息为: ");
printf("%d %s %.1f %.1f %.1f\n", stu->iNum, stu->cName, stu->fCh, stu->fMath, stu->fEng);
}
else
{
printf("\n你要查找的学生不存在!\n");
}
return 0;
}
/* User Code Begin:考生在此后完成自定义函数的设计,行数不限 */
// 实现功能函数
STUD* FindByName(STUD sTranscript[], int n, char name[])
{
STUD *stu = NULL;
int i;
for ( i = 0; i < n; i++)
{
if(strcmp(name,sTranscript[i].cName) == 0) // 字符串比较,即按姓名查找
{
stu = &sTranscript[i]; // 返回该数组元素的地址,即该学生的地址
break;
}
}
return stu;
}