解题思路:1.定义结构体变量,并以此变量定义一个二维数组。

              2.先定义并输入二维数组的行数,之后再用正常的input和output输入输出即可。

              3.输入输出的形参为指针类型(也可以认为是输入自己所定义的结构体变量的数组的首位)

              4.每行是每个变量的内容是for循环一次的操作内容,而for要循环几次取决于列数

参考代码:

#include <stdio.h>
struct stu
{
	char num[100];
	char name[100];
	int score[3];
};
void input(struct stu* a,int n);
void output(struct stu* a,int n);
int main(void)
{
	int n;
	scanf("%d",&n);
	struct stu a[n];
	input(a,n);
	output(a,n);
	
	return 0;
}

void input(struct stu * a,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		scanf("%s%s%d%d%d",&(a[i].num),&(a[i].name),&(a[i].score[0]),&(a[i].score[1]),&(a[i].score[2]));
	}
}

void output(struct stu* a,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		printf("%s,%s,%d,%d,%d\n",a[i].num,a[i].name,a[i].score[0],a[i].score[1],a[i].score[2]);
	}
}


点赞(0)
 

0.0分

41 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 20 条评论

uq_46693544353 12月前 回复TA
#include <stdio.h>
#include <malloc.h>
struct message{
    char number[100];
    char name[100];
    int score[3];
};
void input(struct message * a, int n);
void output(struct message * a, int n);
int main(void)
{
    int len;
    scanf("%d",&len);
    struct message * ptrr;
    ptrr = (struct message*)malloc(sizeof(struct message)*len);
    input(ptrr, len);
    output(ptrr, len);
    return 0;
    }
void input(struct message * a, int n){
    int i;
    for(i = 0; i < n; i++){
        scanf("%s %s %d %d %d",a[i].number, a[i].name, &(a[i].score[0]),&(a[i].score[1]),&(a[i].score[2]));
    }
}
v
纯鹿人 1年前 回复TA
@#TIAmo 先输入了n的值再创建的数组,n已经有值了,操作的是变量的值
MOGU 1年前 回复TA
@dotcpp0676864 不好意思,纠正一下我上面回答的最后一句,xs是你定义的结构体名,但只有写成struct xs ,才明白你要传的参数是自己定义的结构体类型的参数
MOGU 1年前 回复TA
@dotcpp0676864 你的函数形参在定义的时候,要写成struct xs,而不是xs。因为你的结构体名定义的是struct xs
dotcpp0676864 1年前 回复TA
#include<stdio.h>
struct xs
{
    char xh[10];
    char xm[10];
    int yw;
    int sx;
    int yy;
};
void sr(xs sj[], int i);
void dy(xs sj[], int i);
int main(void)
{
    int i;
    scanf("%d", &i);
    struct xs sj[100];
    sr(sj, i);
    dy(sj, i);
    return 0;
}
void sr(xs sj[], int i)
{
    int t;
    for (t = 0; t < i; t++)
    {
        scanf("%s %s %d %d %d", sj[t].xh, sj[t].xm, &sj[t].yw, &sj[t].sx, &sj[t].yy);
    }
}
void dy(xs sj[], int i)
{
    int t;
    for (t = 0; t < i; t++)
    {
   printf("%s,%s,%d,%d,%d\n", sj[t].xh, sj[t].xm, sj[t].yw, sj[t].sx, sj[t].yy);}}为什么报错啊?
#TIAmo 1年前 回复TA
创建的数组元素个数不能为变量吧?哥们
jiangxingyuE 2年前 回复TA
#include <stdio.h>
struct stu
{
    char num[100];
    char name[100];
    int score[3];
};
void input(struct stu* a,int n);
void output(struct stu* a,int n);
int main(void)
{
    int n;
    scanf("%d",&n);
    struct stu a[n];
    input(a,n);
    output(a,n);
     
    return 0;
}
 
void input(struct stu * a,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        scanf("%s%s%d%d%d",&(a[i].num),&(a[i].name),&(a[i].score[0]),&(a[i].score[1]),&(a[i].score[2]));
    }
}
 
void output(struct stu* a,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%s,%s,%d,%d,%d\n",a[i].num,a[i].name,a
月下花钱 2年前 回复TA
@sttttt 错了,这里定义的是结构体数组,所以不用取地址符号,糗大了。
月下花钱 2年前 回复TA
@sttttt 调用的时候是input(&a,n),多打了。第二条评论该是 &a 。敲英文偷懒没换输入法,嘿嘿。
月下花钱 2年前 回复TA
@sttttt &获取结构变量的首地址,将其作为参数传递给函数input()