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]; 展开
题目是这样的
写一个函数input 输入5个学生的学号、姓名、和3门成绩
写一个函数avag 求5个学生的总成绩
并在主函数中调用
我定义了一个结构体
struct student{
int num;
char name;
float s1;
float s2;
floats3;
};
请问这两个函数怎么写 形参和实参是怎样的 怎么调用
char name[20]; 展开
9个回答
展开全部
结构这么定义吧:
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;
}
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 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
展开全部
1、结构体做函数参数仍然是以形参传入。相当于重新拷贝了一个结构体传入函数进行操作。
2、参数的传入分为两种形式:值传递和地址传递。如果把实例本身作为参数传到函数里面去,那么在函数里面实际上是另外产生一个临时的实例,其值和函数外部的那个实例一样,当然在函数内部对其做的一些改动是不会影响到外边的实例的,因为就不是同一个东西。当然如果在函数里不是想去改变什么而只是单纯的计算一些东西还是没问题的,不过在内存中的地址之类的当然是不一样的。传指针也就是把地址传进去,那么在函数里对该地址中的数据进行操作,当然就是在外部实例本身上面进行修改了。
2、参数的传入分为两种形式:值传递和地址传递。如果把实例本身作为参数传到函数里面去,那么在函数里面实际上是另外产生一个临时的实例,其值和函数外部的那个实例一样,当然在函数内部对其做的一些改动是不会影响到外边的实例的,因为就不是同一个东西。当然如果在函数里不是想去改变什么而只是单纯的计算一些东西还是没问题的,不过在内存中的地址之类的当然是不一样的。传指针也就是把地址传进去,那么在函数里对该地址中的数据进行操作,当然就是在外部实例本身上面进行修改了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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) );
...
}
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) );
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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();//调用自定义函数。
}
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();//调用自定义函数。
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当然可以了,首先定义一个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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询