c语言,结构体 50

 我来答
鲁东孙漂流记
2018-12-23 · TA获得超过513个赞
知道小有建树答主
回答量:892
采纳率:85%
帮助的人:135万
展开全部
结构体和其他类型基础数据类型一样,例如int类型,char类型 只不过结构体可以做成你想要的数据类型。以方便日后的使用。[1]
在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算。[1]
结构体在函数中的作用不是简便,其最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。[1]
结构体的大小与内存对齐
结构体的大小不是结构体元素单纯相加就行的,因为我们主流的计算机使用的都是32bit字长的CPU,对这类型的CPU取4个字节的数要比取一个字节要高效,也更方便。所以在结构体中每个成员的首地址都是4的整数倍的话,取数据元素时就会相对更高效,这就是内存对齐的由来。每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。[1]
规则:
1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。[1]
2、结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。[1]
3、结合1、2可推断:当#pragma pack的n值等于或超过所有数据成员长度的时候,这个n值的大小将不产生任何效果。[1]
C++中的结构体
在C语言中,可以定义结构体类型,将多个相关的变量包装成为一个整体使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。在C语言中,结构体不能包含函数。在面向对象的程序设计中,对象具有状态(属性)和行为,状态保存在成员变量中,行为通过成员方法(函数)来实现。C语言中的结构体只能描述一个对象的状态,不能描述一个对象的行为。在C++中,考虑到C语言到C++语言过渡的连续性,对结构体进行了扩展,C++的结构体可以包含函数,这样,C++的结构体也具有类的功能,与class不同的是,结构体包含的函数默认为public,而不是private。
百度网友56bdb35
2018-12-24
知道答主
回答量:19
采纳率:0%
帮助的人:1.9万
展开全部
结构体的含义你可以理解为定义一个你喜欢的新的变量,可像int char这种常规变量一样操作。同时,结构体也有编程中一种思想就是封装,将一个具有相关信息的属性结合起来。
抱着这种感觉去学结构体会好一点!加油吧!编程乐在其中。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-12-22
展开全部
#include<stdio.h>

struct student
{
char number[16], name[16];
float chinese, math, english;
};

struct student stu[10];
struct student avg;

int input()
{
int i;
for (i = 0; i < 10; i++) {
scanf("%s%s%f%f%f", stu[i].number, stu[i].name, &stu[i].chinese, &stu[i].math, &stu[i].english);
}
return 0;

}

int average()
{
int i;
avg.chinese = 0;
avg.math = 0;
avg.english = 0;
for (i = 0; i < 10; i++) {
avg.chinese += stu[i].chinese;
avg.math += stu[i].math;
avg.english += stu[i].english;
}
avg.chinese /= 10;
avg.math /= 10;
avg.english /= 10;
return 0;
}
int max()
{
int i, j = 0;
float x = 0, sum = 0;
for (i = 0; i < 10; i++) {
x = stu[i].chinese + stu[i].math + stu[i].english;
if (x > sum){
sum = x;
j = i;
}
}
return j;
}

int main()
{
int index;
input();
average();
index = max();

printf("All average:\n");
printf("Chinese:%f, Math:%f, English:%f\n", avg.chinese, avg.math, avg.english);
printf("The winner:\n");
printf("Number:%s, Name:%s, Chinese:%f, Math:%f, English:%f\n", stu[index].number, stu[index].name, stu[index].chinese, stu[index].math, stu[index].english);

system("PAUSE");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
笑叹丶笔尖微凉
2018-12-22
知道答主
回答量:38
采纳率:0%
帮助的人:2.9万
展开全部
抱歉。。。大学的知识还没有学到,高中的我倒是会,跟遗憾没能帮到你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2986d97397
2018-12-22 · 贡献了超过239个回答
知道答主
回答量:239
采纳率:0%
帮助的人:18.1万
展开全部
很遗憾
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式