设有一组学生的成绩数据已经放在结构体数组stu中
struct student
{ int num;
char name[20];
char sex;
float score;
}stu[5]={{101,"li ping",'m',45},
{102 ,"zhang ping",'m',62.5},
{103 ,"he fang",'m',92.5},
{104 ,"cheng ling",'f',87},
{105 ,"wang ming",'m',58}};
1)子函数实现 :不及格人数统计。要求:使用结构体指针变量作为函数参数编程,主函数中输出结果。
2)子函数实现: 根据学号在结构体数组中查找学生信息,返回该学生所在的数组下标,若没找到则返回-1。主函数中输出该学生信息。要求:使用学号、结构体指针变量作为函数参数编程。
3)子函数实现:根据姓名在结构体数组中查找学生信息,返回该学生所在的数组下标,若没找到则返回-1。主函数中输出该学生信息。要求:使用字符数组或字符指针变量(为了传递姓名)、结构体指针变量作为函数参数编程。
#include <stdio.h>
#include <string.h>
struct student
{ int num;
char name[20];
char sex;
float score;
}stu[5]={{101,"li ping",'m',45},
{102 ,"zhang ping",'m',62.5},
{103 ,"he fang",'m',92.5},
{104 ,"cheng ling",'f',87},
{105 ,"wang ming",'m',58}};
int failed(struct student *s);
int search1(int num, struct student *s);
int search2(char *name, struct student *s);
int main()
{
printf("不及格人数共有%d个\n",failed(stu));
int num;
printf("请输入一个学号:");
scanf("%d",&num);
int a = search1(num,stu);
if(a != -1){
printf("%d,%s,%c,%.2f\n",stu[a].num,stu[a].name,stu[a].sex,stu[a].score);
}else{
printf("没有找到!\n");
}
char name[20];
printf("请输入一个姓名:");
getchar();
gets(name);
int b = search2(name,stu);
if(b != -1){
printf("%d,%s,%c,%.2f\n",stu[b].num,stu[b].name,stu[b].sex,stu[b].score);
}else{
printf("没有找到!");
}
return 0;
}
int failed(struct student *s){
int cnt = 0;
for(int i = 0;i < 5;i++){
if(s[i].score < 60){
cnt ++;
}
}
return cnt;
}
int search1(int num, struct student *s){
for(int i = 0;i < 5;i++){
if(s[i].num == num){
return i;
}
}
return -1;
}
int search2(char *name, struct student *s){
for(int i = 0;i < 5;i++){
if(!strcmp(s[i].name,name)){
return i;
}
}
return -1;
}
#include<cstdio>
#include<cstring>
struct StrStudent
{
int num;
char name[20];
char sex;
float score;
};
int failGradeCount(const struct StrStudent* stu,int studentNum);
int getStudentPos(const struct StrStudent* stu,int studentNum,int findNum);
int getStudentPos2(const struct StrStudent* stu,int studentNum,const char* studentName);
int main(int args,char* argv[])
{
struct StrStudent stu[5] = {{101,"li ping",'m',45},
{102,"zhang ping",'m',62.5},
{103,"he fang",'m',92.5},
{104,"cheng ling",'f',87},
{105,"wang ming",'m',58}};
int failGradeNum = failGradeCount(stu,sizeof(stu)/sizeof(struct StrStudent));
printf("fail grade student num:%d\n",failGradeNum);
printf("please input seek student num:");
int studentNum = 0;
scanf("%d",&studentNum);
int studentPos = getStudentPos(stu,sizeof(stu)/sizeof(struct StrStudent),studentNum);
if(studentPos >= 0)
printf("name:%s num:%d sex:%c score:%f\n",stu[studentPos].name,
stu[studentPos].num,stu[studentPos].sex,stu[studentPos].score);
printf("please input seek student name:");
char studentName[20];
getchar();
gets(studentName);
studentPos = getStudentPos2(stu,sizeof(stu)/sizeof(struct StrStudent),studentName);
if(studentPos >= 0)
printf("name:%s num:%d sex:%c score:%f\n",stu[studentPos].name,
stu[studentPos].num,stu[studentPos].sex,stu[studentPos].score);
return 0;
}
int failGradeCount(const struct StrStudent* stu,int studentNum)
{
if(!stu || studentNum <= 0)
return -1;
int countNum = 0;
for(int i = 0; i < studentNum;++i)
{
if(stu[i].score < 0)
printf("%s score %f abnormal\n",stu[i].name,stu[i].score);
else if(stu[i].score < 60)
countNum++;
}
return countNum;
}
int getStudentPos(const struct StrStudent* stu,int studentNum,int findNum)
{
if(!stu || studentNum <= 0)
return -1;
for(int i = 0; i < studentNum;++i)
{
if(stu[i].num == findNum)
return i;
}
return -1;
}
int getStudentPos2(const struct StrStudent* stu,int studentNum,const char* studentName)
{
if(!stu || studentNum <= 0)
return -1;
for(int i = 0; i < studentNum;++i)
{
if(strcmp(stu[i].name,studentName) == 0)
return i;
}
return -1;
}