求C语题设结构体S定义为:struct S{ int g; char h; float *pf;};,则该sizeof(struct S)的结果是

供稿:hz-xin.com     日期:2025-01-15
C语言结构体题

#include #define N 5void 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 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);}

1.C(sizeof取的是真个数组长度,strlen取的则是字符串长度)
2.B(反斜杠“\”本身有转义符的概念,当需要使用时,需要先转义,所以写成“\\”。而只读方式为“r”,“a”为附加,“wb”为二进制写入)
3.A(字符要用单引号引用,双引号是字符串,区别在于字符串最后有一个空字符作为结束,而字符没有)
4.B(就是字符串长度,算中间的空格,但不算最后那个看不见的结束符)
5.A(a是数组,p是指针,两者概念相似,本身就是地址,星号“*”表示取内容,而和号“&”则表示取地址,但前面已经说了a和p本身就是地址,所以什么都不用取,则a+4很显然是地址)
6.A(没啥好说的,就这么规定的)
7.C(同上)
8.D(format是字符串的格式化输出操作,与文件操作无关)
9.C(字节对齐的问题,印象里应该是最大成员的字节数)
10.B(p为m的首地址,++p后取第二组数据的首地址,*取值后为第二组数据中的第一个数据位置,.j为取j位置上的数据,结果为2)
11.A(上面已经说了,指针本身就是地址,&和*两个符号取地址再取内容,等于抵消,所以还是地址)
12.B(a+i确定行,之后去内容,再+j确定列,再取内容,即可)
13.D(int为返回值类型,*表示返回值为指针,后面的括号表示这是一个函数)
14.B(s1是一个指针,指针结构体的成员用“->”引用,而非指针结构体的成员用“.”引用)
15.A(先自加2,再++运算,最后取内容)
16.C(扳着手指头算都可以)
17.D(*p+i表示数组的第一个元素的值加上i)
18.C(sizeof是数组的大小,与里面的值无关)
19.C(short占用2字节,char占用1字节,double看起来是8字节,但其实double是个指针,指针都是4字节,不看类型。如此相加看起来应该是7个字节,但其中有个字节对齐的问题,所以char后面要空出来一个字节作为对齐,最终结果是8个字节)
20.A(NULL为结束符,EOF应该是结束函数用的,BOF不清楚,/0啥都不是,NULL可以表示为"\0",注意斜杠方向)

整形+字符型+指针,整形:2字节(turbo C2.0) 4字节(visual C++);字符型:1字节;指针:2字节(turbo C2.0) 4字节(visual C++),结构体S一共是2+1+2=5字节,但计算机对内存管理是以“字”为单位,1个字为4个字节,所以用sizeof函数得到的长度必然是4的倍数,故sizeof(struct S)不是5,而是8

int g; char h; float *pf的长度 也就是int+char+float的内存空间

int+char+float * 的内存空间
这个要看 是 单片机 C 还是 计算机 C
计算机:
int =4
char=1
float *= 4
sizeof(struct S)=9
单片机:
int =2
char=1
float *= 2
sizeof(struct S)=5

楼主 注意 sizeof(float *) 和 sizeof(float ) 是两个 概念

32位机上应该是12吧, 都占4个字节

实际运行下,不同系统结结果不同

求C语题设结构体S定义为:struct S{ int g; char h; float *pf;};,则...
整形+字符型+指针,整形:2字节(turbo C2.0) 4字节(visual C++);字符型:1字节;指针:2字节(turbo C2.0) 4字节(visual C++),结构体S一共是2+1+2=5字节,但计算机对内存管理是以“字”为单位,1个字为4个字节,所以用sizeof函数得到的长度必然是4的倍数,故sizeof(struct S)不...

C语言如何返回结构体数组
题设是有问题的 首先你定义了一个结构体_STR_POINT 并且自定义了一个类型STR_POINT 现在你函数的返回值是STR_POINT类型 而你要求返回STR_POINT数组 STR_POINT数组的类型是STR_POINT[]显然预期类型和返回类型不同啊 这是编译器的语法预警

C语言成绩排名次。
此题有最大人数限制,所以可用数组实现。创建一个结构体类型,成员包括学号、题设各科成绩、总分和平均分。在主函数中声明一个30个此结构体元素的数组,然后输入数据,再进制排序、输出和查找。参考代码如下:include <stdio.h>typedef struct stu{\/\/创建结构类型 int MT,EN,PH,TO,ID; double A...

C语言中如何判断一个数是完全平方数
1、首先,打开C语言编译器,新建初始.cpp文件,例如:test.cpp。2、其次,在test.cpp文件中,输入C语言代码:int a = 64;double c = sqrt(a);if (c == int(c))printf("是完全平方数");else printf("不是完全平方数");3、编译器运行test.cpp文件,此时成功快速识别出了是不是完全平方数。

用C语言编写程序,求1到10的阶乘之和:S=1!+2!+3!+4!+5!+6!+7!+8!+9...
mul=1;\/\/每次循环前都需要初始化为1,要不然最后结果会变大 for(j=1;j<=i;j++)\/\/阶乘循环 { mul=mul*j;} sum=sum+mul;} printf("%d",sum);system("pause");return 0;} C11标准:2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)再次发布了C语言的新标准,名叫ISO\/IE...

有以下定义和语句 C语言
也就是说a[0]就是表示1,2中的那个1的位置,a[1]就表示3,4中3的位置,类推a[2]指的是5的位置 p[3]是声明一个整形指针的数组,也就是说是三个p,每个p都是指向整数的 p[0]=a[1]就是相当于p[0]=&a[1][0],也就是让p[0]指向3的位置 ---以上是题设的内容--- p[0]+1,...

C语言编程:键盘输入10个数,用函数实现计算数据中最大值、最小值,并返 ...
在主函数中声明一个具有10个int型元素的数组存放键盘输入的数据,声明变量ml记录最大值位置、ms记录最小值位置。自定义一个函数void Input_Max_Min(int *p,int *pl,int *ps)来完成题设要求,其中p是数组首指针,pl是最大值位置(下标)变量指针,ps是最小值位置(下标)变量指针。在主函数中输出结果...

...直到最后一项的绝对值小于10-4为止。用C语言怎么编程,求答案_百度...
用一个for循环完成计算。由于分母的增量是首项为0,公差为1的等差数列,所以用一从1开始、增量为1的计数变量i兼作分母的增量;分母用一个从1开始、增量为i的变量n承载,另用一个浮点变量t动态记录每项的绝对值,当t>=题设要求1.0E-4时,将t加(i为奇数)或减(i为偶数)于浮点和变量s,直到t<...

c语言:求编法~
基本思想:1)先在A、B数组中各取第一个元素进行比较,将小的元素放入C数组;2)取小的元素所在数组的下一个元素与另一数组中上次比较后较大的元素比较,重复上述比较过程,直到某个数组被先排完;3)将另一个数组剩余元素抄入C数组,合并排序完成。include <stdio.h> void main(){ int a[10]...

C语言指针实现自定义函数求一维数组中的最大值和最小值
define N 10 void fun(float *x,float *a,float *b,int n){ int k;a=*b=x[0];for(k=1;k<n;k++){ if(x[k]>*a) *a=x[k];else if(x[k]<*b)b=x[k];} } void main(void){ float a[N],*p=a,max,min;printf("shuru\\n");for(;p<a+N;p++)scanf("%f",p...