c语言结构体做函数参数的问题

弄不清楚结构体(不是成员哦)怎么做函数的参数并调用及返回值题目是这样的写一个函数input输入5个学生的学号、姓名、和3门成绩写一个函数avag求5个学生的总成绩并在主函... 弄不清楚 结构体(不是成员哦)怎么做函数的参数 并调用 及返回值
题目是这样的
写一个函数input 输入5个学生的学号、姓名、和3门成绩
写一个函数avag 求5个学生的总成绩
并在主函数中调用
我定义了一个结构体
struct student{
int num;
char name;
float s1;
float s2;
floats3;
};

请问这两个函数怎么写 形参和实参是怎样的 怎么调用
char name[20];
展开
 我来答
无大智有大勇
2008-04-02 · TA获得超过441个赞
知道小有建树答主
回答量:502
采纳率:0%
帮助的人:338万
展开全部
结构这么定义吧:
typedef struct student{
int num;
char name[50];
float s1;
float s2;
floats3;
}student,*pStu;
你原来那么定义只能存一个字符的姓名。

比如在main中,你可以定义一个struct student的数组。
pStu a = (pStu)malloc(5*sizeof(student));
然后传入指针

然后函数可以写为
int input(pStu &ss, int length)//这里length是ss的长度,防止内存溢出。
int avag(pStu &ss, int length)

下面是我写的input和main.你看一下吧。
#include <stdlib.h>

typedef struct student{
int num;
char name[50];
float s1;
float s2;
float s3;
}student,*pStu;

int input(pStu &ss, int length)
{
int i = 0;
while ( i < length )
{
printf("请输入学生%d的学号:",i);
scanf("%d",&(ss->num));
printf("请输入学生%d的姓名:",i);
scanf("%s",&(ss->name));
printf("请输入学生%d的第1门成绩:",i);
scanf("%f",&(ss->s1));
printf("请输入学生%d的第2门成绩:",i);
scanf("%f",&(ss->s2));
printf("请输入学生%d的第3门成绩:",i);
scanf("%f",&(ss->s3));
printf("学生%d的 学号%d 姓名%s 第1门成绩%f 第2门成绩%f 第3门成绩%f\n",
i, ss->num,ss->name,ss->s1,ss->s2,ss->s3);
i++;
}
return 0;
}

int main(int argc,char** argv)
{
int count;
printf("输入学生数:");
scanf("%d",&count);
if ( count<=0 )
{
printf("数量错误!!\n");
return -1;
}
pStu a = (pStu)malloc(count*sizeof(student));
if ( a == NULL )
return -1;
input( a, count );
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
tattackor
2015-10-26 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:895万
展开全部
1、结构体做函数参数仍然是以形参传入。相当于重新拷贝了一个结构体传入函数进行操作。
2、参数的传入分为两种形式:值传递和地址传递。如果把实例本身作为参数传到函数里面去,那么在函数里面实际上是另外产生一个临时的实例,其值和函数外部的那个实例一样,当然在函数内部对其做的一些改动是不会影响到外边的实例的,因为就不是同一个东西。当然如果在函数里不是想去改变什么而只是单纯的计算一些东西还是没问题的,不过在内存中的地址之类的当然是不一样的。传指针也就是把地址传进去,那么在函数里对该地址中的数据进行操作,当然就是在外部实例本身上面进行修改了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ggdmdf
2008-04-02 · TA获得超过1520个赞
知道小有建树答主
回答量:1024
采纳率:0%
帮助的人:1243万
展开全部
void input(struct student *stu_ptr) {
...
}

double avag(struct student *stu_ptr) {
return str_ptr->s1 + ...;
}

...
struct student stu;
input(&stu);
...
// 呃,name居然只是一个char....
printf("%c 的总分为: %lf\n", stu.name, avag(&stu) );
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
StEveLee115
2008-04-02 · TA获得超过6375个赞
知道大有可为答主
回答量:4879
采纳率:0%
帮助的人:4879万
展开全部
struct student stu[5];//定义结构变量
void avag()
{
int i,sum=0;
for(i=0;i<5;i++)
{
sum=stu[i].s1+stu[i].s2+stu[i].s3
}
printf......;//输出5个学生的总成绩。
}
void main()
{
int i
printf.....;//输入学号、姓名、及成绩。
for(i=0;i<5;i++)
{
scanf.....;
}
avag();//调用自定义函数。
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
析知养水风
2020-08-02 · TA获得超过1187个赞
知道小有建树答主
回答量:1953
采纳率:100%
帮助的人:9万
展开全部
当然可以了,首先定义一个RGBColor结构体
typedef
struct
{
char
r;
char
g;
char
b;
}
RGBColor;
然后定义一个结构体变量
RGBColor
color;
然后定义一个函数给color中的三个变量都赋值如:
void
test(int
a,int
b,int
c)
{
color.r=a;
color.g=b;
color.b=c;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式