C语言程序联合和结构体的问题

C语言程序联合和结构体的问题,第1张

我回答的通俗易懂些,

vc设置了8字节对齐,输出字节数肯定是8的倍数。

你本来想得到18的,8的2倍多一点,直接输出8的三倍。

还可以说是,

输出字节数中8个字节已经是最小单位了。

把结果对8求余,

得到0的话直接输出原数除以8得到的结果。

若不是0,输出原数除以8的结果加1

够明白么?

C语言源程序是由:数据类型、常量与变量、数组指针、字符串、文件输入/输出构成。

具体介绍:

1、数据类型

C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。

2、常量与变量

常量其值不可改变,符号常量名通常用大写。变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时为其分配相应存储单元。

3、数组

如果一个变量名后面跟着一个有数字的中括号,这个声明就是数组声明。字符串也是一种数组。它们以ASCII的NULL作为数组的结束。要特别注意的是,方括内的索引值是从0算起的。

4、指针

指针不仅可以是变量的地址,还可以是数组、数组元素、函数的地址。通过指针作为形式参数可以在函数的调用过程得到一个以上的返回值,不同于return(z)这样的仅能得到一个返回值。

指针是一把双刃剑,许多 *** 作可以通过指针自然的表达,但是不正确的或者过分的使用指针又会给程序带来大量潜在的错误。

5、字符串

C语言的字符串其实就是以'\0'字符结尾的char型数组,使用字符型并不需要引用库,但是使用字符串就需要C标准库里面的一些用于对字符串进行 *** 作的函数。它们不同于字符数组。

6、文件输入/输出

在C语言中,输入和输出是经由标准库中的一组函数来实现的。在ANSI C中,这些函数被定义在头文件<stdioh>;中。

扩展资料:

语言特点

1、高级语言:它是把高级语言的基本结构和语句与低级语言的实用性结合起来的工作单元。

2、结构式语言:结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。

3、代码级别的跨平台:由于标准的存在,使得几乎同样的C代码可用于多种 *** 作系统,如Windows、DOS、UNIX等等;也适用于多种机型。C语言对编写需要进行硬件 *** 作的场合,优于其它高级语言。

4、使用指针:可以直接进行靠近硬件的 *** 作,但是C的指针 *** 作不做保护,也给它带来了很多不安全的因素。C++在这方面做了改进,在保留了指针 *** 作的同时又增强了安全性,受到了一些用户的支持。

#include<stdioh>

#include<stdlibh>

#define N 10

struct student

{

int num;

char name[20];

float one;

float two;

float three;

}stu[N];

void input(struct student stu)

{

int i;

for(i=1;i<=N;i++){

printf("Input the number of the No%d student:\n",i);

scanf("%d",&stu[i]num);

printf("Input the name of the No%d student:\n",i);

scanf("%s",&stu[i]name);

printf("Input the score of one:\n");

scanf("%f",&stu[i]one);

printf("Input the score of two:\n");

scanf("%f",&stu[i]two);

printf("Input the score of three:\n");

scanf("%f",&stu[i]three);

}

}

void averageOfAll(struct student stu)

{

int i;

float sum1,sum2,sum3;

float ave1,ave2,ave3;

for(i=1;i<=N;i++){

sum1+=stu[i]one;

sum2+=stu[i]two;

sum3+=stu[i]three;

}

ave1=sum1/N;

ave2=sum2/N;

ave3=sum3/N;

printf("The average score of the 3 courses:\n");

printf("One:%1f\n",ave1);

printf("Two:%1f\n",ave2);

printf("Three:%1f\n",ave3);

}

void highest(struct student stu)

{

int i,m;

float sum[N];

float max;

for(i=1;i<=N;i++){

sum[i]+=stu[i]one+stu[i]two+stu[i]three;

}

max=sum[1];

for(i=2;i<=N;i++){

if(sum[i]>sum[1]){

max=sum[i];

m=i;

}

}

printf("The message of the student who has the highest total score:\n");

printf("Number: %d\n",stu[m]num);

printf("Name: %s\n",stu[m]name);

printf("One: %1f\n",stu[m]one);

printf("Two: %1f\n",stu[m]two);

printf("Three: %1f\n",stu[m]three);

printf("Total: %1f\n",sum[m]);

printf("Average: %1f\n",sum[m]/3);

}

void total(struct student stu)

{

int i;

float sum[N+1];

printf("Output everyone score:\n");

for(i=1;i<=N;i++){

sum[i]=stu[i]one+stu[i]two+stu[i]three;

printf("No%d: %1f\n",i,sum[i]);

}

}

int main(void)

{

int i;

while(1){

printf("\n\n");

printf("0 Input the message of students:\n");

printf("1 Output the average score of the 3 courses\n");

printf("2 Output the message who has the highest scores\n");

printf("3 Output total scores of all students\n");

printf("4 Quit\n");

printf("What do you want\n");

printf("\n");

scanf("%d",&i);

switch(i){

case 0:

input(stu);

break;

case 1:

averageOfAll(stu);

break;

case 2:

highest(stu);

break;

case 3:

total(stu);

break;

default:

printf("Bye!\n");

exit(0);

}

}

return 0;

}

union是用来定义联合体的关键字,union维护足够的空间来置放多个资料成员中的最大的“一种”,而不是为每一个资料成员配置空间,在union中所有的资料成员共用一个空间,同时间只能储存其中一个成员的资料。

可以得出该共用体在内存中占用4个字节。

ka[0]=10000; ka[1]=15000; 为k的int a[2]成员赋值,即该内存的内容是[00111010] [10011000] [00100111] [00010000]将这4个字节换算成符点数就是0001161

scanf ("%s",kd); //kd[]="abcd"

因为scanf把4个输入压栈后再出栈对4个字符变量赋制值,则内存结构为:

[01100100] [01100011] [01100010] [01100001]

d[3] d[2] d[1] d[0]

c(4个字节)

b(前两个字节)

a[1](前两个字节) a[0](后两个字节)

将这4个字节换算成符点数c就是:16777999408082104400000000000

至于上面的数字是怎么得来的,那要考虑浮点数在计算机中的储存结构问题了在存储1个浮点数的32位内存中,

第一位是符号位,下来的8位是指数位,后面的23位是尾数位

[01100100] [01100011] [01100010] [01100001]

换算成浮点数的算法是:

第一位为0:正数

下来的8位是:[11001000],减去[01111111]为[1001001]所以指数为73

再下来的23位是1100011[01100010] [01100001]所以尾数为

(111000110110001001100001)B = 2^0+2^(-1)+2^(-1)+2^(-6)+2^(-7)+2^(-9)+2^(-10)+2^(-14)+2^(-17)+2^(-18)+2^(-23)

最后结果=底数^指数

可能你还会问为什么位数一样,结果还是有差距,那是因为浮点数的计算精度问题浮点数的精度是有限的

对于标准的c语言程序,就是数据和加工两个元素。

数据类型

数据类型决定了数据存储。c语言包含3种,基本数据类型(整数等),指针数据类型(指针和引用),复合数据类型(结构体和类)

函数

c是面向过程的语言,整个程序的编写时函数调用函数。

As

a

manner

of

fact

,we

say

c,

we

mean

c

&

c++

以上就是关于C语言程序联合和结构体的问题全部的内容,包括:C语言程序联合和结构体的问题、C语言源程序是由什么构成的、c语言程序,结果体,第五题,有附加要求等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10120940.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存