网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

c语言函数结构题 c语言函数小结

C语言结构体题

#include stdio.h

创新互联建站主营柳江网站建设的网络公司,主营网站建设方案,成都APP应用开发,柳江h5重庆小程序开发搭建,柳江网站营销推广欢迎柳江等地区企业咨询

#define N 5

void input_stu(struct Stu *stu);

void output_avg(struct Stu *stu);

struct Stu

{

int id;

char name[10];

int sex;

float math;

float eng;

float c;

};

int main()

{

struct Stu stu[N];

input_stu(stu);

output_avg(stu);

return 0;

}

void input_stu(struct Stu *stu)

{

int i = 1;

do

{

printf("请输入第%d个学生的姓名 学号 性别 数学成绩 英语成绩 C语言成绩:", i);

struct Stu *s = stu + i - 1;

scanf("%s %d %d %f %f %f", s-name, s-id, s-sex, s-math, s-eng, s-c);

i++;

} while (i = N);

}

void output_avg(struct Stu *stu)

{

int i = 1;

printf("%-8s%-8s%-8s%-8s%-8s%-8s%-8s","学 号", "姓 名", "性 别", "高 数", "英 语", "C", "平均分");

struct Stu *s = stu + i - 1;

float math_avg = stu-math, eng_avg = stu-eng, c_avg = stu-c;

putchar(10);

do

{

struct Stu *s = stu + i - 1;

math_avg = ((i - 1)*math_avg + s-math) / i;

eng_avg = ((i - 1) * eng_avg + s-eng) / i;

c_avg = ((i - 1)*c_avg + s-c) / i;

printf("%-8d%-8s%-8s%-8.1f%-8.1f%-8.1f%-8.1f",

s-id, s-name, s-sex == 1 ? "男" : "女", s-math, s-eng, s-c, (s-math + s-eng + s-c) / 3);

putchar(10);

i++;

} while (i = N);

printf("%-12s%-12s%-12s%", "数学平均分", "英语平均分", "C平均分");

putchar(10);

printf("%-12.1f%-12.1f%-12.1f", math_avg, eng_avg, c_avg);

}

C语言结构体函数问题

第一题中的name为什么是sundan

第一题中的num为什么该值:()

注意了,压根没有使用f的返回值,f也没有返回值(void)

第二题(不再画图了),main中的s[0]与f中的p压根是两个内存区域(当然了,传参数时,将s[0]内存区域的内容拷贝到了p内存区域),所以显然,在f中修改内存区域p,自然不会影响main中的内存区域s[0],因此s[0]亦然保持本来的值。(即20041, 703)

C语言结构题

#include stdio.h

#include stdlib.h

struct Student

{

int num;

char name[20];

float score[3];

float aver;

};

void input(struct Student stu[])

{

int i;

printf("请输入各学生学号名字三科分数:\n");

for(i=0;i3;i++)

{

scanf(" %d %s %f %f %f", stu[i].num, stu[i].name,

stu[i].score[0], stu[i].score[1], stu[i].score[2]);

stu[i].aver=float((stu[i].score[0] + stu[i].score[1] + stu[i].score[2])/3.0);

}

}

int max(struct Student stuTmp[])

{

int i, j;

float temp = NULL;

int maxNum = 0;

struct Student stu[3];

stu[0].aver = stuTmp[0].aver;

stu[0].num = stuTmp[0].num;

stu[1].aver = stuTmp[1].aver;

stu[1].num = stuTmp[1].num;

stu[2].aver =stuTmp[2].aver;

stu[2].num = stuTmp[2].num;

for (j = 0; j  3; j++)

for (i = 0; i  3 - j; i++)

{

if(stu[i].aver  stu[i + 1].aver)

{

temp = stu[i].aver;

maxNum = stu[i].num;

stu[i].aver = stu[i + 1].aver;

stu[i].num = stu[i+1].num;

stu[i + 1].aver = temp;

stu[i + 1].num = maxNum;

}

}

return maxNum;

}

void output(struct Student stu[])

{

int i;

for (i = 0; i  3; i++)

{

printf("学号%d 姓名%s 三科成绩%f %f %f平均分%f\n", 

stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].aver);

}

}

int main()

{

Student stumain[3];

int num;

input(stumain);

num = max(stumain);

printf("max is:%d %s %f %f %f\n", stumain[num].num, stumain[num].name, 

stumain[num].score[0],stumain[num].score[1],stumain[num].score[2], stumain[num].aver);

output(stumain);

system("pause");

return 0;

}

我认为你是初学C/C++,因为你在main函数中的函数调用竟然是函数原型声明的方法来调用,如果是初学,语法基础尚未学好怎么就开始结构体等的学习了?

错误:

1:main函数中的函数调用语法错误。

2:结构体没有在main函数或其他地方实例化就试图作为参数使用。

3:output函数没有使用循环输出,将会导致只输出一个学生的信息。

4:排序算法错误(你想使用冒泡吧?)。

5:input函数接收输入错误,应该在for循环中使用大括号,把平均值的计算包括进去,不然全部输入结束后,平均值只计算了一个,其他的两个是随机值。

朋友,建议你再复习一下C语言的基础知识。

另外,排序函数中,我使用了较为繁杂的方式排,你学好了以后可以考虑使用指针排,简洁些。

C语言 结构与函数问题

首先,

在函数

double

ave(double

g.gr1,double

g.gr2,double

g.gr3)

{

ave=(g.gr1+g.gr2+g.gr3)/3.0;

return

ave;

}

中,用到局部变量ave,但是并未定义。(此变量ave与主函数的变量ave不同,不能混淆)。

为了避免混淆,函数名与变量名最好不要用同样的名字,以免自己都不清楚。

另外,结构体中

char

name;难道名字只有一个字符吗?好歹也该设一个字符数组吧。否则,只要你在这一部分输入字符超过一个就会造成越界,影响整个程序的运行。

scanf("%d%s",g.num,g.name);这一句,g.name前遗漏了符号。

在主函数里声明函数

double

ave(g.gr1,g.gr2,g.gr3)时,各个变量要说明类型。并且,不应该在主函数内部声明,该声明应该放在外部。最好的方式时,把主函数中要调用的函数放在主函数之前,这样也省去了声明的麻烦。

#includestdib.h一句有误,其实可以不需要,或者改为#includestdlib.h。

还有一个问题,在英文里,标点符号后面需要有一个空格。

从这里的程序来看,你对结构体基本上都掌握了,但是最基础的部分却不太扎实。不如形参与实参,变量的作用域、定义与声明等。都是前几章的内容。

另外,需要在运行时输入的程序,一定要有足够的提示信息。

修改后的程序如下,经过试验,可以正常运行。

#includestdio.h

//#includestdlib.h

typedef

struct

student

{

int

num;

char

name[20];

double

gr1,

gr2,

gr3;

}

student;

double

average(double

a,

double

b,

double

c)

{

double

t;

t=(a+b+c)/3.0;

return

t;

}

int

main(void)

{

//struct

student

g;

double

ave;

//double

ave(g.gr1,g.gr2,g.gr3);

/*定义的函数表示在这里出错了,书不在靠边,这里确实不能确实啥情况。。。*/

printf("\n

Please

input

the

Student

number

and

the

name:

\n");

scanf("%d

%s",

(g.num),

g.name);

printf("\n

Please

input

the

score

of

3

courses:

\n");

scanf("%lf

%lf

%lf",

(g.gr1),

(g.gr2),

(g.gr3));

printf("\n

The

information

input

is

as

below:");

printf("\n

Student

number:

%d;

",

g.num);

printf("\n

Student

name:

%s;

",

g.name);

printf("\n

The

score

of

3

courses:

%lf,

%lf,

%lf.

",

g.gr1,

g.gr2,

g.gr3);

ave=average(g.gr1,

g.gr2,

g.gr3);

printf("\n

The

average

is

%lf.\n",

ave);

//system("pause");

return

0;

}

运行结果如下:

Please

input

the

Student

number

and

the

name:

123456

Michel

Please

input

the

score

of

3

courses:

21.5

210.6

39.6

The

information

input

is

as

below:

Student

number:

123456;

Student

name:

Michel;

The

score

of

3

courses:

21.500000,

210.600000,

39.600000.

The

average

is

90.566667.


当前标题:c语言函数结构题 c语言函数小结
网站路径:http://bjjierui.cn/article/dohiepd.html

其他资讯