数据结构(struct)算法笔记11.7

题目描述

编写两个函数input和print,分别用来输入5个学生的数据记录和打印这5个学生的记录。对于每一个学生,其记录包含了学号、名字、3门课程的成绩共5项。用主函数分别调用input和print函数进行输入和输出。
要求使用结构体数组实现,结构体中包括了每个学生的5项记录。

输入

共有5行,每行包含了一个学生的学号(整数)、名字(长度不超过19的无空格字符串)和3门课程的成绩(0至100之间的整数),用空格隔开。

输出

与输入格式相同,每行输出一个学生的所有记录。
请注意行尾输出换行。

样例输入

101 AAA 80 81 82
102 BBB 83 84 85
103 CCC 86 87 88
104 DDD 89 90 91
105 EEE 92 93 94

样例输出

101 AAA 80 81 82
102 BBB 83 84 85
103 CCC 86 87 88
104 DDD 89 90 91
105 EEE 92 93 94

 

法一:for循环在main函数里进行

#include <iostream>
#include <stdio.h>

using namespace std;

struct student{
    int id;
    char name[10];
    int math;
    int eng;
    int chin;
}stu[5];

int input(struct Student stu[]);
int print(struct Student stu[]);

int intput(struct student stu[]){
    cin >> stu->id >> stu->name >> stu->math >> stu->eng >> stu->chin;
}

int  print(struct student stu[]){
    printf("%d %s %d %d %d\n",stu->id,stu->name,stu->math,stu->eng,stu->chin);
}

int main(){
 for(int i = 0; i < 5; i ++){
    intput(stu+i);
 }
 for(int j = 0; j < 5; j ++){
    print(stu+j);
 }
 return 0;
}

 

法二:与一比较类似,定义结构体变量略有不同之处

#include <iostream>
#include <stdio.h>

using namespace std;

struct student{
    int id;
    char name[10];
    int math;
    int eng;
    int chin;
};

struct student a[5];
int input(struct Student stu[]);
int print(struct Student stu[]);

//输入
int intput(struct student a[]){
    cin >> a->id >> a->name >> a->math >> a->eng >> a->chin;
}

//输出
int  print(struct student a[]){
    printf("%d %s %d %d %d\n",a->id,a->name,a->math,a->eng,a->chin);
}
    
 int main(){
    for(int i = 0; i < 5; i ++){
       intput(a+i);
    }
    for(int j = 0; j < 5; j ++){
       print(a+j);
    }
    return 0;
 }

法三:使其在input()函数和print()函数中就可以解决多行输入输出的问题

#include <iostream>
#include <stdio.h>

using namespace std;

struct student{
    int id;
    char name[10];
    int math;
    int eng;
    int chin;
}stu[5];

int input(struct Student stu[]);
int print(struct Student stu[]);

int intput(struct student stu[]){
    for(int i = 0; i < 5; i ++){
        cin >> (stu+i)->id >> (stu+i)->name >> (stu+i)->math >> (stu+i)->eng >> (stu+i)->chin;
    }
}

int  print(struct student stu[]){
    for(int i = 0; i < 5; i ++){
        printf("%d %s %d %d %d\n",(stu+i)->id,(stu+i)->name,(stu+i)->math,(stu+i)->eng,(stu+i)->chin);
    }
}

int main(){
    intput(stu);
    print(stu);
 return 0;
}


总结

      在做这道题的时候对于结构体、数组和指针的理解还不够,导致出了很多错,在根据编译器给出的提示下,将stu.id改成了stu->id,之后才正确输出了。

       访问结构体内的元素有两种方法:“.”操作和”->“操作。在结构体变量中可以定义普通变量和指针变量。

       若定义普通变量a和指针变量*b,要访问结构体中的变量,则有如下写法:

(1)访问a中变量

       a.id

(2)访问指针变量p中元素

       (*b).id

         b->id

       只有为指针变量时,才能用->来访问结构体中变量。

       在做题时会出现逻辑错误,这时就需要用断点测试的方法,在每一行输出一个什么东西:eg:printf(“AAAAA”);看是否可以正常输出,如果不能,那么错误就发生在上一句语句中。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值