当前位置:文档之家› C语言程序设计 结构体与共用体

C语言程序设计 结构体与共用体

C语言程序设计 结构体与共用体
C语言程序设计 结构体与共用体

页眉内容

一、选择题

1、定义结构类型时,下列叙述正确的是()

A、系统会按成员大小分配每个空间

B、系统会按最大成员大小分配空间

C、系统不会分配空间

D、以上说法均不正确

2、已知结构类型变量x的初始化值为{“20”,30,40,35.5},请问合适的结构定义是()

A、Struct s{int no;int x,y,z};

B、Struct s{char no[2];int x,y,z};

C、Struct s{int no;float x,y,z};

D、Struct s{char no[2];float x,y,z};

3、若程序中有定义struct abc{int x;char y;};abc s1,s2;则会发生的情况是()

A、编译时会有错误

B、链接时会有错误

C、运行时会有错误

D、程序没有错误

4、已知学生记录描述为

struct student

{int no;

char name[20];

char set;

struct

{int year;

int month;

int day;

}birth;};

struct student s;

设变量s中的“生日”应是“1984年11月11日”,下列对生日的正确赋值方式是( ).

A)year=1984; B)birth.year=1984;

month=11; birth.month=11;

day=11; birth.day=11;

C)s.year=1984; D)s.birth.year=1984;

s.month=11; s.birth.month=11;

s.day=11; s.birth.day=11;

5、当说明一个结构体变量时系统分配给它的内存是( ).

A)各成员所需内存量的总和 B)结构中第一个成员所需内存量

C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量

6、以下对结构体类型变量的定义中不正确的是( ).

A)#define STUDENT struct student B)struct student

STUDENT {int num;

{int num; float age;

float age; }std1;

}std1;

C)struct D)struct

{int num; int num;

float age; float age;

}std1; }student;

struct student std1; 7、设有以下说明语句

struct stu

{int a;

float b;

}stutype;

则下面的叙述不正确的是( ).

A)struct是结构体类型的关键字

B)struct stu是用户定义的结构体类型

C)stutype是用户定义的结构体类型名

D)a和b都是结构体成员名

8、C语言结构体类型变量在程序执行期间( )..

A)所有成员一直驻留在内存中

B)只有一个成员驻留在内存中

C)部分成员驻留在内存中

D)没有成员驻留在内存中

9、在16位IBM-PC机上使用C语言,若有如下定义:

struct data

{int i;

char ch;

double f;

}b;

则结构变量b占用内存的字节数是( ).

A)1 B)2 C)3 D)4

10、以下程序的运行结果是( ).

#include “stdio.h”

main()

{struct data

{int year,month,day;

}today;

printf(“%d\n”,sizeof(struct data));}

A)6 B)8 C)10 D)12

11、若有以下定义和语句;

struct student

{int age;

int num ;};

struct student stu [3]={{1001,20 },{1002,19},{1003,21}};

main()

{struct student *p;

p=stu;

…..}

则以下不正确的引用是( )。

A)(P++)—》

num B)p++ C)(*p).num D)p=&stu.age

12、以下scanf函数调用语句中对结构体变量成员的不正确引用是( )。

stuct pupil

{char name[20 ];

int age ;

int sex;

}pup[5,]*p;

p=pup;

A) scanf(“%s”,pup[0].name); B) scanf(“”%d),&pup[0].age;

C) scanf(“%d”“%d”,P->age);

13、有以下定义和语句,则以下引用形式不合法的是( )。

Struct s

{int i1;

struct s*i2,i0;

};

static struct s a[3 ]={2,&a[1],’\0’,4,%a[2],&a[0],6,’\0’,&a[1]},

*ptr;

ptr=a;

A) ptr->i1++ B)*ptr->i2 C)++ptr->i0 D) ptr->i1

14、设有如下定义:

struct sk

{int n;

float x;

}data,*p;

若要使P指向data中的n域,正确的负值语句的是( )。

A、p=&data.n;B) *p=data.n;C)p=(struct sk*)&data.n;D)p=(struct sk*)data.n;

15、若哟于以下说明和语句:

struct student

{int age;

int num;

}std,*p;

p=&std;

则以下对结构体变量std中成员age的引用方式不正确的是( )。

A)std.age B)p->age C)(*p).age D) *p.age

16、若有以下说明和语句,则下面表达式中值为1002的是( )。

Struct student

{int age;

int num;};

struct student stu[3]={{1001,20},{1002,19},{1003,21};

struct student *p;

p=stu;

A)(p++)—>num B)(p++)—>age C)(*p).num D)(*++p).age

17、以下对结构体变量stul 中成员age 的非法引用是()。

struct student

{int age;

int num;

}stul,*p;

p=&stul;

A)stul.age B)student.age C)p—>age D)(*p).age

18、若要利用下面的程序片段使指针变量p指向一个存储整型变量的存储单元,则[ ]中

应填入的内容是()。

int *p;

P=[ ]malloc(sizeof(int));

A)int B)int* C)(*int) D)(int*)

19、当说明一个共用体变量时系统分配给它的内存是()。

A)各成员所需内存量的总和 B)结构中第一个成员所需内存量

C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量

20、以下对C语言中共用体类型数据的叙述正确的是()。

A)可以对共用体变量名直接赋值 B)一个共用体变量中可以同时存放其所有成员

C)一个共用体变量中不可能同时存放其所有成员

D)共用体类型定义中不能出现结构体类型的成员

21、若有以下定义和语句:

union data

{int i;

char c;

float f;

}a;

int n;

则以下语句正确的是()。

A)a=5; B)a={2,’a’,1.2}; C)printf(“%d\n”,a); D)n=a;

22、设有以下说明,则下面不正确的叙述是()。

union data

{ int i;

char c;

float f;

}un;

A)un所占的内存长度等于成员f的长度 B)un的地址和它的各成员地址都是同一地址

C)un可以作为函数参数 D)不能对un赋值,但可以在定义un时对它初始化

23、C语言共用体型变量在程序运行期间( ) 。

A)所有成员一直驻留在内存中 B)只有一个成员驻留在内存中

C)部分成员驻留在内存中 D)没有成员驻留在内存中

24、以下程序的运行结果是( ) 。

#include “stdio.h”

main()

{ union {long a;

int b;

char c;

}m;

printf(“%d\n”,sizeof(m));}

A) 2 B)4 C)6 D)8

25、以下程序的运行结果是( ) .

#include “stdio.h”

union pw

{int i;

char ch[2];

}a;

main()

{ch[0]=13;

ch[1]=0;

printf(“%d\n”,a,i); }

A)13 B)14 C)208 D)209

二、填空题

1、以下程序的运行结果是【】. .

struct n{

int x;

char c;

};

main()

{struct n a={10,‘x’};

func(a);

printf(“%d,%c”,a.x,a.c);}

func(struct n b)

{b.x=20;

b.c=’y’;}

2、以下程序的运行结果是【】.

main()

{struct EXAMPLE{struct{

int x;

int y;

}in;

int a;

int b;

}e;

e.a=1;e.b=2;

e.in.x=e.a*e.b;

e.in.y=e.a+e.b;

printf(“%d,%d”,e.in.x,e.in.y);}

3、以下程序用以输出结构体变量bt所占内存单元的字节数,请在【】内填上适当内容.

struct ps

{ double i;

char arr[20];};

main()

{ struct ps bt;

printf(“bt size : %d\n”,【】;}

4、若已定义:

struct num

{int a;

int b;

float f;

} n={1,3,5.0};

struct num * pn = &n;

则表达式 pn ->b/n.a*++pn->b的值是【】,表达式 (*pn).a+pn->f的值是【】5、以下程序的运行结果是【】。

struct ks

{int a;

int *b;

} s[4],*p;

main()

{int n=1 , i;

printf(“\n”);

for(i=0;i<4;i++)

{ s[i].a=n;

s[i].b=&s[i].a;

n=n+2;}

p=&s[0];

p++;

printf(“%d,%d\n”,(++p)->a,(p++)->a);}

6、以下程序运行结果为【】.

struct s{

int a;

float b;

char *c; }

main()

{static struct s x={19,83.5,”zhang”};

struct s *px=&x;

printf(“%d%.1f%s\n”,x.a,x.b,x.c);

printf(“%d%.1f%s\n”,px―>a,(*px ).b, px―>c);

printf(“%c%s\n”,*px―>c―1,&px―>c[1]); }

7、设有以下定义和语句,请在printf语句的【】中填上能够正确输出的变量及相应的

格式说明。

union

{ int n;

double x;

} num;

num . n=10;

num . x=10.5;

printf(“【】”,【】);

8、以下程序的运行结果是【】.

main()

{ struct EXAMPLE

{ union {

int x;

int y;

} in;

int a;

int b;

} e;

e.a=1; e.b=2;

e.in.x=e.a*e.b;

e.in.y=e.a+e.b;

printf(“%d,%d”,e.in.x,e.in.y);} 9、以下程序的运行结果是【】.

union ks

{int a;

int b;};

union ks s[4];

union ks *p;

main()

{int n=1,i;

printf(“\n”);

for(i=0;i<4;i++)

{ s[i].a=n;

s[i].b=s[i].a+1;

n=n+2; }

p=&s[0];

printf(“%d,”,p->a);

printf(“%d,”,++p->a);}

10、以下程序的运行结果是【】.

main()

union EXAMPLE

{sturuct

{int x;

int y;

}in;

int a;

int b;

}e;

e.a=1;

e.b=2;

e.in.x=e.a*e.b;

e.in.y=e.a+e.b;

printf(“%d %d”,e.in.x,e.in.y);} 11、以下程序的运行结果为【】.

#include “stdio.h”

struct w

{char low;

char high;};

union u

{sturct w bute;

int word;

}uu;

main()

{uu.word=0x1234;

printf(“Word value: %04x\n”,uu.word);

printf(“High value: %02x\n”,uu.byte.high);

printf(“Low value: %02x\n”,uu.byte.low);

uu.byte.low=0xff;

printf(“Word value: %04x\n”,uu.word);}

12、写出下列程序的输出结果【】.

enum coin { penny,nickel,dime,quarter,half_dollar,dollar};

char *name[]={“penny”,”nickel”,”dime”,”quarter”,”hal_fdollar”,”

dollar”};

main()

{ enum coin money1,money2;

money1=dime;

money2=dollar;

printf(“%d %d\n”,money1,money2);

printf(“%s %s\n”,name[(int)money1],name[(int)money2]);}

13、以下程序的输出结果是【】.

typedef int INT;

main()

{INT a,b;

a=5;

b=6;

printf(“a=%d\tb=%d\n”,a,b);

{ float INT;

INT=3.0;

printf(“2*INT=%.2f\n”,2*INT); }}

参考答案

1、10,x

2、2,3

3、sizeof(struct ps )

4、12 6.0

5、7,3

6、19 83.5 zhang l9 83.5zhang y hang

7、 %lf ,um.f

8、3,3

9、2,3

10、4 8 11、 Wprd va1ue: 1234 High value: 12 low value: 34 Word

value: 12ff 12、2 5 13、a=5 b=6 2*INT=6.00

智慧树知道网课《C语言程序设计(青岛职业技术学院)》满分章节测试答案

第一章测试 提示:选择题选项顺序为随机排列,若要核对答案,请以选项内容为准1 【单选题】 (20分) C语言是一种( ) A. 低级语言 B. 高级语言 C. 汇编语言 D. 机器语言 2 【单选题】 (20分) 下列各项中,不是C语言的特点是()。 A. 数据类型丰富,可移植性好 B. 语言简洁、紧凑,使用方便 C. 有较强的网络操作功能 D. 能实现汇编语言的大部分功能

3 【单选题】 (20分) 下列叙述的是()。 A. C程序中的每条命令都用一个分号作为结束符 B. C程序中的每条语句都用一个分号作为结束符 C. C语言以小写字母作为基本书写形式,并且C语言要区分字母的大小写 D. C程序中的变量必须先定义,后使用 4 【单选题】 (20分) 一个C程序的执行是从()。 A. 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 B. 本程序文件的第一个函数开始,到本程序main函数结束 C. 本程序的main函数开始,到本程序文件的最后一个函数结束 D. 本程序的main函数开始,到main函数结束 5 【单选题】 (20分)

以下叙述不正确的是()。 A. 在C程序中,注释说明只能位于一条语句的后面 B. 一个C源程序必须包含一个main函数 C. C程序的基本组成单位是函数 D. 一个C源程序可由一个或多个函数组成 第二章测试 1 【单选题】 (10分) 已知定义整形变量a,b,c的值分别是2、3、4,运算表达式a*=16+(b++) - (++c)以后,a值为( ) A. 28 B. 30 C. 29 D. 31 2 【单选题】 (10分)

C语言结构体共用体选择题新

1、变量 a 所占的内存字节数是。(假设整型int 为 4 字节) structstu {charname[20]; longintn; intscore[4]; }a; A)28B)30 C)32D)46 C 2、下列程序的输出结果是 A)5B)6 C)7D)8 structabc {inta,b,c;}; main() {structabcs[2]={{1,2,3},{4,5,6}};intt; t=s[0].a+s[1].b; printf("%d\n",t); } B 3、有如下定义 structperson{charname[9];intage;}; structpersoncalss[4]={"Johu",17, "Paul",19, "Mary",18, "Adam",16,}; 根据以上定义,能输出字母M 的语句是________ 。 A)printf("%c\n",class[3].name); B)printf("%c\n",class[3].name[1]); C)printf("%c\n",class[2].name[1]); D)printf("%c\n",class[2].name[0]); D 4、以下程序的输出是________ 。 structst {intx;int*y;}*p; intdt[4]={10,20,30,40}; structstaa[4]={50,&dt[0],60,&dt[0],60,&dt[0],60,dt[0],}; main() {p=aa; printf("%d\n",++(p->x)); } A)10B)11 C)51D)60 C 6、以下程序的输出结果是________ 。 structHAR {intx,y;structHAR*p;}h[2]; main() {inth[0].x=1;h[0].y=2; h[1].x=3;h[1].y=4;

C语言结构体和共用体实验报告

实验九参考程序 实验 9- 1 /**************************************************************** * 实验 9.1 * * ( 1 )为某商店的商品设计合适的结构体 (PRODUCT) 。每一种商品包含编号 (number) 、 * 名称 (name) 、价格 (price) 、折扣 (discount)4 项信息,根据表 9-1 ,为这些信 息选择合适的数据类型。 * (2)建立 2个函数,以实现对商品的操作。 input 函数实现商品的输入; * display 函数显示商品信息。要求这 2个函数都以商品的结构体 (PRODUCT) 指针为 参数。 * (3 )在主函数中为商品键盘定义一个结构体变量 (keyboard) ,利用 input 函数实现键 盘信息的输入; * 定义一个结构体数组 (elec_device[3]) ,利用 input 函数实现冰箱、 空调、电视 信息的输入; * 最后利用 display 函数显示 4 种商品的信息。 * * 表 9-1 #include typedef struct _PRODUCT int iNumber; char strName[32]; float fPrice; float fDiscount; * 编号 名称 价格 折扣 *1010 键盘 89.50 0.85 *1021 冰箱 1024.00 0.95 *1022 空调 2058.50 0.90 *1023 电视 3001.88 0.95 *************************************************************** */

C语言中指针和数组名的用法,结构体与共用体的总结

C语言中指针和数组名的用法,结构体与共用体的总结 2010-01-11 19:38 在C语言中,指针和数组名通常都可以混用。 例如 char *p; 访问时,*p跟p[0]是一样的,*(p+1)跟p[1]是一样的。 对于数组 char b[5]; 访问时,b[0]跟*b是一样的,b[2]跟*(b+2)是一样的。 在一般的通信中(例如串口),通常都使用字节传输。而像float,long int 之类的, 有4字节。我的方法就是取它的地址,强制转换为char型指针,然后当作数组来用。 float x; SBUF=((char*)&x)[0]; SBUF=((char*)&x)[1]; SBUF=((char*)&x)[2]; SBUF=((char*)&x)[3]; 接收时,刚好倒过来。 更有趣的是,对于数组形式,数组名和后面的偏移量可以随便换。 char buff[10]; //或者用 char *buff=&buffer; buff[3]=0xaa; 3[buff]=0xaa; //两者是一样的 因此,我认为编译器是这么做的:对于形如xxx[yyy]这样的表达式,会转化为*(xxx+yyy), 因此写成xxx[yyy]或者写成yyy[xxx]都无所谓了... c语言结构体与共用体学习笔记1 Author:yuexingtian Date:Thursday, June 12, 2008 1结构变量的赋值 测试结果:

{ struct stu { int num; char *name; char sex; float score; }boy1,boy2; boy1.num=15; https://www.doczj.com/doc/7d17813662.html,="yuexingtian"; printf("input sex and score\n"); scanf("%c %f",&boy1.sex,&boy1.score); boy2=boy1; printf("Number=%d\nName=%s\n",boy2.num,https://www.doczj.com/doc/7d17813662.html,); printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score); getch(); } 说明: 本程序中用赋值语句给num和name两个成员赋值,name是一个字符串指针变量。用scanf函数动态地输入sex和score成员值,然后把boy1的所有成员的值整体赋予boy2。最后分别输出boy2的各个成员值。本例表示了结构变量的赋值、输入和输出的方法。 2结构变量的初始化 对结构变量的初始化(还拿上例举例)

石油大学(华东)C语言2018年在线考试

设有两字符串“Beijing”、“China”分别存放在字符数组str1[10],str2[1 0]中,下面语句中能把“China”连接到“Beijing”之后的为() ?A) strcpy(str1,str2); ? ?B) strcpy(str1,“China”); ? ?C) strcat(str1,“China”) ? ?D) strcat(“Beijing”,str2); ? 2(2.0分) 下列变量的定义及赋值正确的是() ?A) int i=0;j; ? ?B) char c=”A”; ? ?C) double x,y,z;x=y=z=100; ? ?D) float a=b=100; ?

3(2.0分) 设有定义语句:char str[][20]={"Hello","Beijing"},*p=str; 则printf ("%d\n",strlen(p+20)); 输出结果是() ?A) ? ?B) 5 ? ?C) 7 ? ?D) 20 ? 4(2.0分) 设有定义:int x=0,y=1,z=1;则运行表达式:x=y >z--后,x,y, z的值分别是() ?A) 1,1,1 ? ?B) 1,2,0 ? ?C) 0,1,1 ?

0,2,0 ? 5(2.0分) 下列程序段的输出结果是()x=9; while(x>7) {printf(“*”);x--;} ?A) **** ? ?B) *** ? ?C) ** ? ?D) * ? 6(2.0分) 设有定义int a[ ]={1,5,7,9,11,13},*p=a 3;则*(p-2),*(a 4)的值是() ?A) 5 11 ? ?B) 1 9 ? ?C) 5 9 ?

2020年智慧树知道网课《C语言程序设计(山东联盟-山东英才学院)》课后章节测试满分答案

第一章测试 1 【单选题】(20分) C语言程序扩展名为.exe,它属于【】 A. 可执行文件 B. 库文件 C. 源程序文件 D. 目标文件 2 【单选题】(20分) 在绘制程序流程图时,表示“输入输出框”的符号是【】 A. B. C. D.

3 【单选题】(20分) 在绘制程序流程图时,下面哪个表示“选择结构”【】 A. B. C. D.

4 【单选题】(20分) 在绘制程序N-S图时,下面哪个表示“直到型循环结构”【】 A. B. C. D. 5 【单选题】(20分) 下列关于C语言特点的描述,不正确的是【】 A. C语言既可用来编写应用软件,又可用来编写系统软件

B. C语言的可移植性差 C. C语言兼有高级语言和低级语言的双重特点,执行效率高 D. C语言是一种结构化程序设计语言 第二章测试 1 【单选题】(20分) 十六进制数0X11对应的十进制数是【】 A. 17 B. 11 C. 其它答案都不正确 D. 2 2 【单选题】(20分) 下列C语言书写形式中属于合法的十进制整型常量的是【】 A.

045L B. 0X7F4 C. 82u D. 0x81p 3 【单选题】(20分) 字符'3'的ASCII码值是【】 A. 其它答案都不正确 B. 3 C. 51 D. 48 4 【单选题】(20分) 下列合法的C语言标识符是【】 A. float

B. a&b C. _xyz D. 2x 5 【单选题】(20分) 下面哪个是合法的C语言字符型变量定义【】 A. char_a1,_a2; B. CHARa1,a2,a3; C. Chara; D. floata1,a2; 第三章测试 1 【单选题】(20分) 若有定义floata;,执行表达式a=1/2后,a的值是【】 A.

C语言题库第8章 结构体和共同体

第八章结构体和共同体 一、单项选择 1. 若有以下定义: struct link { int data; struct link *next; }a,b,c,*p,*q; 且变量a和b之间已有如下图所示的链表结构,若指针p指向a,指针q指向c。 则能把c插入到a和b之间形成新的链表的语句是( C ) 2. 若有以下程序段: int a=1,b=2,c=3; struct dent { int n ; int *m ; } s[3] = {{101,&a},{102,&b},{103,&c}}; struct dent *p=s ; 则以下表达式中值为2的是( D )。 3. 下面程序的运行结果是( D )。 #iunclude int main ( ) { struct complx { int x; int y ;

}cnum[2]={1,3,2,7} ; printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x) ; return 0; } 二、程序设计 1. /*学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s 中,请编写函数fun, 它的功能是:按分数的高低排列学生的记录,高分在前。注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */ #include #define N 16 typedef struct { char num[10]; int s ; }STREC; void fun (STREC a[]) { /*********Begin*********/ /*********End**********/ } int main () { FILE *wf,*in; STREC s[N]={{ "GA005",85},{"GA003",76},{"GA002",69},{"GA004",85}, {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87}, {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91}, {"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}}; int i; fun(s); printf("The data after sorted :\n"); for (i=0; i

C语言中不同的结构体类型的指针间的强制转换详解

C语言中不同类型的结构体的指针间可以强制转换,很自由,也很危险。只要理解了其内部机制,你会发现C是非常灵活的。 一. 结构体声明如何内存的分布, 结构体指针声明结构体的首地址, 结构体成员声明该成员在结构体中的偏移地址。 变量的值是以二进制形式存储在内存中的,每个内存字节对应一个内存地址,而内存存储的值本身是没有整型,指针,字符等的区别的,区别的存在是因为我们对它们有不同的解读,param的值就是一个32位值,并且存储在某个内存单元中,通过这个32位值就能找到param所指向的结构的起始地址,通过这个起始地址和各个结构所包含变量离起始地址的偏移对这些变量进行引用, param->bIsDisable只是这种引用更易读的写法,只要param是指向 PAINT_PARAM的指针,那么param的值就肯定存在,param存在,偏移量已知,那么param->bIsDisable就肯定存在,只是要记住,param->bIsDisable只是代表了对param一定偏移地址的值。 不是说某个地址有那个结构体你才能引用,即使没有,你也能引用,因为你已经告诉了编译器param变量就是指向一个PAINT_PARAM结构体的变量并且指明了param的值,机器码的眼中是没有数据结构一说的,它只是机械的按照 指令的要求从内存地址取值,那刚才的例子来说,peg->x,peg->y的引用无论 0x30000000是否存在一个eg结构体都是合法的,如果0x30000000开始的8 个字节存在eg结构体,那么引用的就是这个结构体的值,如果这个位置是未定义的值,那么引用的结果就是这8个字节中的未定义值,内存位置总是存在的,而对内存中值的引用就是从这些内存位置对应的内存单元取值。 举个例子: typedefstruct_eg { int x; int y; }eg;

C语言_中国石油大学(华东)c语言上机题

Hello world. 让我们用C语言向世界问好。 最早的程序基本是这个样子的: 程序一: #include <> void main() { printf("Hello world.\n"); } 程序二: #include <> int main() { printf("Hello world.\n"); return 0; } 上面的程序你任意模仿一个,看看是否可以通过?如果你能通过这个简单的程序,那就让我们继续完成后面的习题吧。 输入:无 输出:Hello world. #include<> int main() { printf("Hello world.\n"); } Welcome to Beijing. 让我们来练习如何显示多行文字。 输入:无 输出:就是下面的那段文字。 #include<> void main() {printf("Welcome\n"); printf("to\n"); printf("Beijing.\n"); } 练习最简单的printf和scanf printf函数和scanf函数是C语言中最常用的函数之一,下面让我们练习一下吧。 输入:整型变量x的值。 输出:输出整型变量x对应的十进制、八进制和十六进制形式。 认真观察-1的八进制和十六进制输出,请想想是为什么。 #include <> int main() {int x; scanf("%d",&x); printf("x=%d,",x); printf("x=%o,",x); printf("x=%x\n",x); return 0; } 练习两个整数之间的运算 背景:基本练习。 输入:接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123 444 输出:分别输出进行+、-、*、/、*之后的运行结果。#include<> int main() {int x,y; scanf("%d%d",&x,&y); printf("%d+%d=%d\n",x,y,x+y); printf("%d-%d=%d\n",x,y,x-y); printf("%d*%d=%d\n",x,y,x*y); printf("%d/%d=%d\n",x,y,x/y); printf("%d%%%d=%d\n",x,y,x%y); return 0; } 学习打印你的第一个图形 背景:我们已经学习了printf函数,这里给出了一个小程序,它运行的结果是输出一个由星号(*)组成的4*4的正方形。 程序如下: #include <> int main() { printf("****\n"); printf("****\n"); printf("****\n"); printf("****\n"); return 0; } 要求:按照上面的程序范例,编写一个小程序,要求输出的是 4 行由*号组成的等腰三角形。 输入:无。 输出:指定图形。 #include <> int main() { printf(" *\n"); printf(" ***\n"); printf(" *****\n"); printf("*******\n"); return 0; } 整型数的表示范围 编写一个循环程序,输入N 值,输出N 的阶乘。关于循环程序怎么编写,可以参考教材第3章P66页的例题和第5章P82的例题的内容。注意整型数的表示范围,如果当输入的N 比较大时,例如N 等于20 时,输出怎么是负数了?自己想明白吧!#include<> void main() {int N,i; int sum=1;

c语言结构体与共用体之间的区别

https://www.doczj.com/doc/7d17813662.html,/2005/03/25/12365.html 所谓共用体类型是指将不同的数据项组织成一个整体,它们在内存中占用同一段存储单元。其定义形式为: union 共用体名 {成员表列}; 7.5.1 共用体的定义 union data { int a ; float b ; d o u b l e c ; c h a r d ; } obj; 该形式定义了一个共用体数据类型union data ,定义了共用体数据类型变量o b j。共用体 数据类型与结构体在形式上非常相似,但其表示的含义及存储是完全不同的。先让我们看一个小例子。 [例7 - 8 ] union data /*共用体* / { int a; float b; double c; char d; } m m ; struct stud /*结构体* / { int a; float b; double c; char d; } ; m a i n ( ) { struct stud student printf("%d,%d",sizeof(struct stud),sizeof(union data)); } 程序的输出说明结构体类型所占的内存空间为其各成员所占存储空间之和。而形同结构体的

共用体类型实际占用存储空间为其最长的成员所占的存储空间。详细说明如图7 - 6所示。 对共用体的成员的引用与结构体成员的引用相同。但由于共用体各成员共用同一段内存 空间,使用时,根据需要使用其中的某一个成员。从图中特别说明了共用体的特点,方便程序设计人员在同一内存区对不同数据类型的交替使用,增加灵活性,节省内存。 7.5.2 共用体变量的引用 可以引用共用体变量的成员,其用法与结构体完全相同。若定义共用体类型为: union data /*共用体* / { int a; float b; double c; char d; } m m ; 其成员引用为:m m . a , m m . b , m m . c , m m . d 但是要注意的是,不能同时引用四个成员,在某一时刻,只能使用其中之一的成员。 [例7-9] 对共用体变量的使用。 m a i n ( ) { union data { int a; float b; double c; char d; } m m ; m m . a = 6 ; printf("%d\n",mm.a); m m . c = 6 7 . 2 ; p r i n t f ( " % 5 . 1 l f \ n " , m m . c ) ; m m . d = ' W ' ; m m . b = 3 4 . 2 ; p r i n t f ( " % 5 . 1 f , % c \ n " , m m . b , m m . d ) ; }

C语言入门教程-指向结构体的指针

C语言入门教程-指向结构体的指针 2009年07月29日12:04 [导读] 指向结构体的指针 在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型。创建结构体指针是极常见的。下面是一个例子: typedef struct{

关键词:c语言入门 指向结构体的指针 在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型。创建结构体指针是极常见的。下面是一个例子: typedef struct

{char name[21];char city[21];char state[3];} Rec; typedef Rec *RecPointer; RecPointer r; r=(RecPointer)malloc(sizeof(Rec)); r是一个指向结构体的指针。请注意,因为r是一个指针,所以像其他指针一样占用4个字节的内存。而malloc语句会从堆上分配45字节的内存。*r是一个结构体,像任何其他Rec类型的结构体一样。下面的代码显示了这个指针变量的典型用法:

strcpy((*r).city, "Raleigh"); strcpy((*r).state, "NC"); printf("%sn", (*r).city); free(r); 您可以像对待一个普通结构体变量那样对待*r,但在遇到C的操作符优先级问题时要小心。如果去掉*r两边的括号则代码将无法编译,因为“.”操作符的优先级高于“*”操作符。使用结构体指针时不断地输入括号是令人厌烦的,为此C语言引入了一种简记法达到相同的目的:

r->这种写法和(*r).是完全等效的,但是省去了两个字符。 指向数组的指针 还可以创建指向数组的指针,如下所示:

c语言结构体共用体选择题新

c语言结构体共用体选择 题新 The pony was revised in January 2021

1、变量a所占的内存字节数是________。(假设整型i n t为4字节) struct stu { char name[20]; long int n; int score[4]; } a ; A) 28 B) 30 C) 32 D) 46 C 2、下列程序的输出结果是 A)5 B)6 C)7 D)8 struct abc {int a,b,c;}; main() {struct abc s[2]={{1,2,3},{4,5,6}};int t;

t=s[0].a+s[1].b; printf("%d\n",t); } B 3、有如下定义 struct person{ char name[9]; int age;}; struct person calss[4]={ "Johu",17, "Paul",19, "Mary",18, "Adam",16,}; 根据以上定义,能输出字母M的语句是________。 A) printf("%c\n",class[3].name); B) printf("%c\n",class[3].name[1]); C) printf("%c\n",class[2].name[1]); D) printf("%c\n",class[2].name[0]);

D 4、以下程序的输出是________。 struct st {int x;int *y;} *p; int dt[4]={10,20,30,40}; struct st aa[4]={50,&dt[0],60,&dt[0],60,&dt[0],60,dt[0],}; main() { p=aa; printf("%d\n",++(p->x)); } A) 10 B) 11 C) 51 D) 60 C 6、以下程序的输出结果是________。 struct HAR

C语言程序设计试题与答案-4

C语言程序设计试题与答案-4

《C语言程序设计》试题(闭卷) 一、单项选择题:(每题 2 分, 共 30 分) 1. C 语言规定:在一个源程序中, main函数的位置_____________。 A. 必须在最开始 B. 必须在系统调用的库函数的后面 C. 可以任意 D. 必须在最后 2. 下列说法中错误的是 _____________。 A. 主函数可以分为两个部分: 函数头和函数体 B. 主函数可以调用任何非主函 数的其他函数 C. 任何非主函数可以调用其他 任何非主函数 D. 程序可以从任何非主函数开 始执行 3. 用 C 语言编写的源文件经过编

的值是_____________。 A. 1,1 B. 0,1 C. 1,0 D. 0,0 8. sizeof (char)的结果值是 _____________。 A. 4 B. 2 C. 1 D.出错 9. 设 a 为整型变量,不能正确表达 数学关系:1010 && a<15 D. !(a<=10) && !(a>=15) 10. 要为字符型变量 a赋初值,下列 语句中哪一个是正确的 _____________。 A. char a="3"; B. char a=’3’; C. char a=%; D. char a=*; 11. 设有定义:char s[12] = "STRING" ; 则 printf( "%d\n",strlen(s)); 的 输出是_____________。

智慧树知到程序设计基础(C语言)测试第四章单元测试参考答案

智慧树知到程序设计基础(C语言)测试第四章单元测试参考答案 ?总题数: 10 1 【单选题】 (10分) 有下列程序,已知字母A的ASCII码为65,程序运行后的输出结果是()。 #include int main() { char c1,c2; c1=’A’+’8’-’4’; c2=’A’+’8’-’5’; printf("%c,%d\n",c1,c2); return 0; } A.E,68 B.E,D C.D,69 D.输出无定值 正确 本题总得分10分 2 【单选题】 (10分) 有下列程序,程序运行后的输出结果是()。 #include int main() { int a=14,b=12; a=a+b; b=a-b; a=a-b; printf("a=%d,b=%d",a,b); return 0;

} A.a=14,b=12 B.a=12,b=14 C.a=26,b=26 D.a=14,b=14 正确 本题总得分10分 3 【单选题】 (10分) 若变量已正确定义为int型,要给a、b、c输入数据,正确的输入语句是()。 A.scanf("%d%d%d",a,b,c); B.read(a,b,c) C.scanf("%D%D%D",&a,&b,&c); D.scanf("%d%d%d",&a,&b,&c); 正确 本题总得分10分 4 【判断题】 (10分) 编写程序,输入3个整数a、b、c,输出时:a的值是b,b的值是c,c的值是a。下面程序可以正确实现题目要求: #include int main() { int a,b,c,t scanf("%d%d%d",&a,&b,&c); t=a;a=b;b=c;c=t; // 顺序交换a、b、c printf("a=%d,b=%d,c=%d",a,b,c); return 0; }

C语言复习题指针结构体

C语言复习题_指针&结构体 一、选择 1、若有以下定义:char s[20]="programming",*ps=s; 则不能代表字符'o'的表达式是A。 A) ps+2 B) s[2] C) ps[2] D) ps+=2,*ps 2、若有以下定义和语句: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则不能表示a数组元素的表达式是B。 A) *p B) a[10] C) *a D) a[p-a] 3、已知int *p,a; p=&a; 这里的运算符& 的含义D。 A) 位与运算B) 逻辑与运算C) 取指针内容D) 取变量地址 4、定义结构体如下: struct student { int num; char name[4]; int age; }; 则printf(“%d”,sizeof(struct student))的结果为: 12。 5、若有定义如下:int i=3,*p=&i; 显示i的值的正确语句是B。 A) printf(“%d”,p); B) printf(“%d”,*p); C) printf(“%p”,*p); D) printf(“%p”,p); 6、在定义结构体时,下列叙述正确的是A。 A) 系统不会分配空间 B) 系统会按成员大小分配空间 C) 系统会按最大成员大小分配空间 D) 以上说法均不正确 7、指针是一种D。 A) 标识符B) 变量C) 运算符D) 内存地址 8、定义struct s {int x; char y[6];} s1;,请问正确的赋值是C。 A) s1.y=”abc”; B) s1->y=”abc”; C) strcpy(s1.y,”abc”); D) s1.strcpy(y,”abc”); 9、已知定义“int x =1, *p”,则合法的赋值表达式是A。 A) p =&x B) p = x C) *p =&x D) *p =*x

2019知到C语言程序设计单元测试答案最新完整版

C语言是一种( ?) 下列各项中,不是C语言的特点是()。 下列叙述错误的是( ?)。 一个C程序的执行是从( ?)。 以下叙述不正确的是( ?)。 可在妙状元.com查看完整版 已知定义整形变量a,b,c的值分别是2、3、4,运算表达式a*=16+(b++) - (++c)以后,a值为( ?) 在C语言中,要求参加运算的数必须是整数的运算符是( ?)。 合法的c标识符是( ?)。 可在妙状元.com查看完整版 执行下列程序后,显示的结果是( ) ? ?? 执行下列程序中的输出语句后,x的值是()。 判断:表达式1/4+2.75的值是3。 下列转义字符不正确的是()。 以下选项中不是C语句的是( ?) 以下语句的输出结果是( ? ) ?printf("%d ",strlen(" "65xff ")); 若变量已正确说明为float型,要通过语句scanf("%f%f%f",&a,&b,&c);给a赋予10.0,b赋予22.0,c赋予33.0,下列不正确的输入形式是( ? ) 调用getchar和putchar函数时,必须包含的头文件是( ? )。 使用scanf("a=%d,b=%d",&a,&b)为变量a,b赋值。要使a,b均为50,正确的输入是( ? ) “putchar(70); ”这一C语句输出的结果为() 若要求在if后的圆括号中表示a不等于0的关系,能正确表示这一关系的表达式是()。

以下程序段,运行后的输出结果是() 设a=1,b=2,c=3,d=4,则表达式a

c语言结构体指针初始化===

c语言结构体指针初始化 今天来讨论一下C中的内存管理。 记得上周在饭桌上和同事讨论C语言的崛起时,讲到了内存管理方面 我说所有指针使用前都必须初始化,结构体中的成员指针也是一样 有人反驳说,不是吧,以前做二叉树算法时,他的左右孩子指针使用时难道有初始化吗 那时我不知怎么的想不出理由,虽然我还是坚信要初始化的 过了几天这位同事说他试了一下,结构体中的成员指针不经过初始化是可以用(左子树和右子树指针) 那时在忙着整理文档,没在意 今天抽空调了一下,结论是,还是需要初始化的。 而且,不写代码你是不知道原因的(也许是对着电脑久了IQ和记性严重下跌吧) 测试代码如下 1.#include 2.#include 3.#include 4. 5.struct student{ 6.char *name; 7.int score; 8.struct student* next; 9.}stu,*stu1; 10. 11.int main(){ 12. https://www.doczj.com/doc/7d17813662.html, = (char*)malloc(sizeof(char)); /*1.结构体成员指针需要初始化*/ 13. strcpy(https://www.doczj.com/doc/7d17813662.html,,"Jimy"); 14. stu.score = 99; 15. 16. stu1 = (struct student*)malloc(sizeof(struct student));/*2.结构体指针需要初始化*/ 17. stu1->name = (char*)malloc(sizeof(char));/*3.结构体指针的成员指针同样需要初始化*/ 18. stu.next = stu1; 19. strcpy(stu1->name,"Lucy"); 20. stu1->score = 98; 21. stu1->next = NULL; 22. printf("name %s, score %d \n ",https://www.doczj.com/doc/7d17813662.html,, stu.score); 23. printf("name %s, score %d \n ",stu1->name, stu1->score); 24. free(stu1); 25.return 0; 26.} #include #include #include struct student{ char *name; int score; struct student* next; }stu,*stu1; int main(){ https://www.doczj.com/doc/7d17813662.html, = (char*)malloc(sizeof(char)); /*1.结构体成员指针需要初始化*/ strcpy(https://www.doczj.com/doc/7d17813662.html,,"Jimy"); stu.score = 99; stu1 = (struct student*)malloc(sizeof(struct student));/*2.结构体指针需要初始化*/ stu1->name = (char*)malloc(sizeof(char));/*3.结构体指针的成员指针同样需要初始化*/ stu.next = stu1; strcpy(stu1->name,"Lucy"); stu1->score = 98; stu1->next = NULL; printf("name %s, score %d \n ",https://www.doczj.com/doc/7d17813662.html,, stu.score);

C语言程序设计 结构体与共用体

页眉内容 一、选择题 1、定义结构类型时,下列叙述正确的是() A、系统会按成员大小分配每个空间 B、系统会按最大成员大小分配空间 C、系统不会分配空间 D、以上说法均不正确 2、已知结构类型变量x的初始化值为{“20”,30,40,35.5},请问合适的结构定义是() A、Struct s{int no;int x,y,z}; B、Struct s{char no[2];int x,y,z}; C、Struct s{int no;float x,y,z}; D、Struct s{char no[2];float x,y,z}; 3、若程序中有定义struct abc{int x;char y;};abc s1,s2;则会发生的情况是() A、编译时会有错误 B、链接时会有错误 C、运行时会有错误 D、程序没有错误 4、已知学生记录描述为 struct student {int no; char name[20]; char set; struct {int year; int month; int day; }birth;}; struct student s; 设变量s中的“生日”应是“1984年11月11日”,下列对生日的正确赋值方式是( ). A)year=1984; B)birth.year=1984; month=11; birth.month=11; day=11; birth.day=11; C)s.year=1984; D)s.birth.year=1984; s.month=11; s.birth.month=11; s.day=11; s.birth.day=11; 5、当说明一个结构体变量时系统分配给它的内存是( ). A)各成员所需内存量的总和 B)结构中第一个成员所需内存量 C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量 6、以下对结构体类型变量的定义中不正确的是( ). A)#define STUDENT struct student B)struct student STUDENT {int num; {int num; float age; float age; }std1; }std1; C)struct D)struct {int num; int num;

c语言练习题7(指针与结构体,有答案)

1、下列程序的运行结果是_B______。 void fun(int *a,int *b) { int *k: k=a;a-b;b=k; } main() { int a=3,b=6,*x=&a,*y=&b; fun(x,y); printf[”%d%d.f,a,b); } A)6 3 B)36 C)编译出错 D)0 0 PS:本题中主函数里的x、y,fun函数里的a、b、k,这些都是指针,fun函数中只是将a、b这两个指针交换了位置,而并没有改变主函数中变量a、b的值。 2、若有定义:int*p[3];,则以下叙述中正确的是____B____。 A)定义了一个基类型为int的指针变量p,该变量有三个指针 B)定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针 C)定义了一个名为+p的整型数组,该数组含有三个int类型元素 D)定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素 PS:由于运算符[]优先级比*高,int*p[3];相当于int *(p[3]);表示数组p 的三个元素都是指针变量,且每个元素都是基类型为int的指针。 3、有以下程序:

void swapl(int *a,int *b) {int *c=a; a=b,b=c; } void swap2(int *a,int *b) { int c=*a: *a=*b,*b=c; } main() (int a=lO,b=15; swapl(&a,&b); printf(”%d,%d,”,a,b); a=lO,b=15; swap2(&a,&b); printf(”%d,%dt.,a,b); } 其输出结果为_10,15,15,10___。 A)15,10,10,15 B)15,10,15,10 C)10,15,10,15 D)10,15,15,10 PS:C语言规定,实参变量对形参变量的数据传递是“值传递”,只由实参传给形参,而不能由形参传回来给实参。在内函数调用结束后,形参单元被释放,实参单元仍保留并维持原值。本题中swapl()函数中,虽然改变了形参指针的值,但实参指针的值并没有改变,所以执行第一个printf后应输出10,15,;swap2()函数实现了交换两个变量a和b的值,因此执行第二个printf后输出交换后的值15,10,所以本题答案为D。

相关主题
文本预览
相关文档 最新文档