国家二级C语言机试(结构体、共用体、位运算及文件操作)模拟试卷13
国家二级(C语言)机试模拟试卷123(题后含答案及解析)

国家二级(C语言)机试模拟试卷123(题后含答案及解析)题型有:1. 选择题 2. 程序填空题 3. 程序修改题 4. 程序设计题选择题1.在关系代数运算中,有5种基本运算,它们是( )。
A.并(∪)、差(-)、交(∩)、除(÷)和笛卡儿积(×)B.并(∪)、差(-)、交(∩)、投影(π)和选择(σ)C.并(∪)、交(∩)、投影(π)、选择(σ)和笛卡儿积(×)D.并(∪)、差(-)、投影(π)、选择(σ)和笛卡儿积(×)正确答案:D解析:并、差、笛卡儿积、投影和选择是5种基本的运算,其他运算即交、连接和除,均可以通过5种基本的运算来表达。
2.在数据库系统的组织结构中,下列( )映射把用户数据库与概念数据库联系了起来。
A.外模式/模式B.内模式/外模式C.模式/内模式D.内模式/模式正确答案:A解析:数据库有两层映像,即外模式/模式和模式/内模式映像。
模式/内模式映像定义数据库全局逻辑结构与存储结构之间的对应关系。
3.下列关于线性链表的描述中,正确的是( )。
Ⅰ、只含有一个指针域来存放下一个元素地址Ⅱ、指针域中的指针用于指向该结点的前一个或后一个结点(即前件或后件)Ⅲ、结点由两部分组成:数据域和指针域。
A.仅Ⅰ、ⅡB.仅Ⅰ、ⅢC.仅Ⅱ、ⅢD.全部正确答案:D解析:在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。
在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。
其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。
4.下面关于数据库三级模式结构的叙述中,正确的是( )。
A.内模式可以有多个,外模式和模式只有一个B.外模式可以有多个,内模式和模式只有一个C.内模式只有一个,模式和外模式可以有多个D.模式只有一个,外模式和内模式可以有多个正确答案:B解析:数据库的三级模式结构是指数据库系统的外模式、模式和内模式。
国家二级C语言(C语言程序设计)机试模拟试卷13(题后含答案及解析)

国家二级C语言(C语言程序设计)机试模拟试卷13(题后含答案及解析)题型有:1. 选择题选择题1.关于do 循环体while (条件表达式); 以下叙述中正确的是A.循环体的执行次数总是比条件表达式的执行次数多一次B.条件表达式的执行次数总是比循环体的执行次数多一次C.条件表达式的执行次数与循环体的执行次数无关D.条件表达式的执行次数与循环体的执行次数一样正确答案:D解析:do-while语句先执行语句,后判断表达式的值。
故do-while语句又称“直到型”循环结构。
由于是先执行后判断,因此do-while语句的循环语句至少被执行一次,循环条件至少判断一次。
知识模块:C语言程序设计2.以下不构成无限循环的语句或语句组是A.n=0; do {++n;} while (n<=0);B.n=0; while (1) { n++;}C.n=10; while (n); {n--;}D.for(n=0,i=1; ; i++) n+=i;正确答案:A解析:选项B中while(1)永远为真所以进入死循环,选项C中while(n=10)同理,选项D中for循环没有循环限定条件也将进入无限循环,只有选项A中while(n<=0)循环判定成立,循环将不进入无限循环。
知识模块:C语言程序设计3.有以下程序main( ){ int i=5; do { if (i%3=1) if (i%5==2) { printf(“*%d”, i); break;} i++; } while(i!=0); printf(“\n”);}程序的运行结果是A.*3*5B.*5C.*7D.*2*6正确答案:C解析:由于循环变量i的初值等于5,所以第一、二次进入do….while循环语句时,条件语句if(i%3==1), if(i%5==2){printf(“*%d”,i);break;}不执行,只执行i++语句。
当i=7时,满足条件语句if(i%3==1),if(i%5==2){printf(“*%d”,i);break;},所以输出*7,结束循环。
国家二级C语言机试(操作题)模拟试卷313(题后含答案及解析)

国家二级C语言机试(操作题)模拟试卷313(题后含答案及解析) 全部题型 2. 程序填空题 3. 程序修改题 4. 程序设计题程序填空题1.给定程序中,函数fun的功能是:将不带头结点的单向链表结点数据域中的数据从小到大排序。
即若原链表结点数据域从头至尾的数据为10,4、2、8、6,排序后链表结点数据域从头至尾的数据为2、4、6、8、10。
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<stdlib.h>#define N 6typedef struct node{ int data;struct node*next;}NODE;void fun(NODE*h){ NODE*p,*q;int t ;p=h;while(P){/*********found*********/q=【1】;/*********found*********/while(【2】) {if(P->data>q->data) {t=P->data;P->data=q ->data ;q->data=t;) q=q->next;}/*********found*********/p=【3】;} } NODE*creatlist(int a[]) { NODE*h,*p,*q;int i;h=NULL;for(i=0;i<N;i++) { q=(NODE *)malloc(sizeof (NODE));q->data=a[i];q->next=NULL;if(h==NULL)h=P=q;else{P->next=q;P=q;) } return h;} void outlist(NODE*h) { NODE*P;p=h;if(P==NULL) printf(“The list is NULL!\n”);else { printf(“\nHead”);do {printf(“->%d”,P->data);p=p->next;) while(p!=NULL);printf(“->End\n”);} } main( ){ NODE*head;int a[N]={0,10,4,2,8,6);head=creatlist(a);printf(“\nThe original list:\n”);outlist(head);fun(head);printf(“\nThe list after inverting:\n”);outlist(head);}正确答案:(1)p->next(2)q(3)p->next解析:填空1:从第2个while循环可知,q的初值应该为p的next,故此空应该填写p->next。
国家二级C语言机试(结构体、共同体、位运算及文件操作)模拟试

国家二级C语言机试(结构体、共同体、位运算及文件操作)模拟试卷12(题后含答案及解析)题型有:1. 选择题选择题1.关于typedef的叙述中错误的是( )。
A.用typedef可以为各种类型起别名,但不能为变量起别名B.可以通过typedef增加新的类型C.用typedef定义新的类型名后,原有类型名仍有效D.可以用typedef将已存在的类型用一个新的名字来代表正确答案:B解析:C语言允许用typedef说明一种新类型名或为现有类型起个别名,而不是创建新类型,说明新类型名的语句一般形式为:typedef类型名标识符;在此,“类型名”必须是在此语句之前已有定义的类型标识符。
标识符是一个用户定义标识符,用作新的类型名。
typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。
知识模块:结构体及文件操作2.正确的结构体类型说明和变量定义是( )。
A.typedef struct f{int n;char c;}STR;STR t1,t2;B.struct STR;{int n;char C;};STR t1,t2;C.typedef stmct STR;{int n=0;char c=‘A’;}t1,t2;D.struct{int n;char c;}STR;STR t1,t2;正确答案:A解析:定义结构体类型的一般形式为:struct结构体名{成员列表};struct 结构体名后不能加“:”号。
但定义完之后要在句末加分号,所以选项B、C有误,选项D中定义无名称的结构体类型同时定义结构体变量形式应为“stmct t1,t2;”。
选项A为用户自定义类型,其为正确的定义形式。
知识模块:结构体及文件操作3.若typedef int*T;T a[5];则与a的定义相同的是( )。
A.int*a[5];B.int(*a)[5]C.int,*a;D.int a[5];正确答案:A解析:typedef的主要功能是为存在的类型指定一个新的别名,后面的代码中可以利用该新定义的别名定义变量,题目定义了整型指针类型T,而后利用T 定义了整型指针数组a,含有5个元素,选项A中定义了整型指针数组a,选项B定义了一个指向一维数组的指针a,选项C定义指针变量,而选项D为定义整型数组最常用的形式,数组a中可以存放5个数据元素。
国家二级计算机考试c语言试题及答案

国家二级计算机考试c语言试题及答案一、选择题(每题2分,共20分)1. 下列关于C语言中变量的描述,错误的是:A. 变量名必须以字母开头B. 变量名可以包含数字和下划线C. 变量名区分大小写D. 变量名可以以数字开头答案:D2. C语言中,用于定义一个整型变量的关键字是:A. intB. floatC. doubleD. char答案:A3. 在C语言中,以下哪个运算符用于计算两个数的乘积?A. +B. -C. *D. /答案:C4. 下列哪个选项不是C语言中的控制结构?A. 顺序结构B. 选择结构C. 循环结构D. 函数结构5. 在C语言中,用于定义函数的关键字是:A. intB. voidC. returnD. function答案:B6. C语言中,用于声明一个字符型变量的关键字是:A. intB. charC. floatD. double答案:B7. 在C语言中,以下哪个选项是正确的注释方式?A. //B. /* */C.D. @@答案:B8. C语言中,用于定义一个浮点型变量的关键字是:A. intB. floatC. doubleD. char答案:B9. 在C语言中,以下哪个选项不是合法的整数常量?B. 0x1AC. 0123D. 1.23答案:D10. 在C语言中,以下哪个选项不是合法的标识符?A. _nameB. name2C. 2nameD. name-name答案:C二、填空题(每题2分,共20分)1. 在C语言中,使用________关键字可以定义一个数组。
答案:int2. C语言中,使用________函数可以输出格式化的字符串。
答案:printf3. 如果要定义一个指向整型数据的指针,应该使用________关键字。
答案:int*4. 在C语言中,使用________关键字可以定义一个结构体。
答案:struct5. 使用________函数可以获取当前系统时间。
答案:time6. 在C语言中,使用________关键字可以定义一个枚举类型。
国家二级C语言机试(结构体、共用体、位运算及文件操作)模拟试

国家二级C语言机试(结构体、共用体、位运算及文件操作)模拟试卷1(题后含答案及解析)题型有:1. 选择题选择题1.若定义:int array[9],*p=array;并在以后的语句中未改变p的值,不能表示array[1]地址的是( )。
A.p+1B.array++C.array+1D.++p正确答案:B解析:本题选项C)中array++是先取array的值,后自增,所以是错误的。
知识模块:编译预处理和指针2.在说明语句”int*f( );”中,标识符f代表的是( )。
A.一个用于指向函数的指针变量B.一个返回值为指针类型的函数名C.一个用于指向一维数组的行指针D.一个用于指向整型数据的指针变量正确答案:B解析:本题主要考查指针函数和函数指针,本题申是指针函数,即f指向一个返回值为指针的函数。
知识模块:编译预处理和指针3.不合法的main(、)函数命令行参数表示形式是( )。
A.main(int a,char*c[])B.main(int argv,char*argc[])C.main(int arc,char*arv[][])D.main(int argc,char*argv[])正确答案:C解析:C语言中规定:在main( )函数中使用命令行参数时,第二个参数应该为字符型指针数组或字符型二级指针。
知识模块:编译预处理和指针4.有函数如下:char fun(char*p) { return p;} 该函数的返回值是( )。
A.无确切的值B.形参p自身的地址值C.形参p中存放的地址值D.一个临时存储单元的地址正确答案:C解析:本题中p是一个字符型的指针,p是一个地址,因此返回的是形参p 中地址值。
知识模块:编译预处理和指针5.下列程序的输出结果是( )。
struct U {int x,y,z;};main( ) { struct U s[2]={{1,2,3},{4,5,6));int t;t=s[0].x+s[1].y;printf(“%d\n”,t);}A.5B.6C.7D.8正确答案:B解析:本题中的”struct U”结构含有3个数值域,并定义了一个结构数组S,计算s[0]的x域与s[1]的y域之和,故s[0].x+s[1].y=1+5=6,答案为B)。
计算机二级《C语言》模拟试题及答案3篇

计算机二级《C语言》模拟试题及答案第一篇:C语言基础知识1. C语言的发明人是谁?简要介绍一下他的背景。
2. int型变量的取值范围是多少?unsigned int呢?3. 请问下面这段代码输出的结果是什么?char str1[] = "hello";char str2[] = "world";strcat(str1, str2);printf("%s", str1);4. 以下哪些数据类型可以用来存储浮点数?A. floatB. doubleC. long doubleD. char5. 下列代码的输出结果是什么?int a = 1;long b = 2;float c = 3.0;printf("%ld\n", a + b + c);答案:1. C语言的发明人是丹尼斯·里奇(Dennis Ritchie)。
他于1941年出生在美国,是贝尔实验室研究员和计算机科学家。
在20世纪70年代,他和肯·汤普逊(Ken Thompson)合作,发明了UNIX操作系统和C语言。
C语言是一种高级计算机程序语言,在操作系统、编译器、数据库、游戏等领域被广泛使用。
丹尼斯·里奇因发明了C语言,被誉为“计算机编程之父”。
2. int型变量的取值范围是-2147483648到2147483647,unsigned int的取值范围是0到4294967295。
3. 输出结果为“helloworld”。
strcat是C语言的字符串拼接函数,将两个字符串连接成一个字符串。
在拼接之前,需要保证第一个字符串的数组足够大,以容纳两个字符串的内容。
如果第一个字符串不够大,程序会出现内存溢出等问题。
4. A、B、C三个数据类型可以用来存储浮点数。
5. 输出结果为“6”。
在printf函数中,%ld表示输出长整型数据,而c是一个float型变量。
2023年计算机等级二级考试C语言试题及答案

一、选择题在下列各题旳A)、B)、C)、D)四个选项中,只有一种选项是对旳旳,请将对旳旳选项涂写在答题卡对应位置上,答在试卷上不得分。
(1)程序流程图中带有箭头旳线段体现旳是CA)图元关系B)数据流C)控制流D)调用关系(2)下面不属于软件设计原则旳是 CA)抽象B)模块化C)自底向上D)信息隐蔽(3)下列选项中,不属于模块间耦合旳是 CA)数据耦合B)标识耦合C)异构耦合D)公共耦合(4)下列论述中,不属于软件需求规格阐明书旳作用旳是DA)便于顾客、开发人员进行理解和交流B)反应出顾客问题旳构造,可以作为软件开发工作旳基础和根据C)作为确认测试和验收旳根据D)便于开发人员进行需求分析(5)算法旳时间复杂度是指CA)执行算法程序所需要旳时间B)算法程序旳长度C)算法执行过程中所需要旳基本运算次数D)算法程序中旳指令条数(6)已知数据表A中每个元素距其最终位置不远,为节省时间,应采用旳算法是BA)堆排序B)直接插入排序C)迅速排序D)B)和C) (7)栈底至栈顶依次寄存元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列也许是BA)ABCED B)DCBEA C)DBCEA D)CDABE(8)数据库设计包括两个方面旳设计内容,它们是AA)概念设计和逻辑设计B)模式设计和内模式设计C)内模式设计和物理设计D)构造特性设计和行为特性设计(9)关系表中旳每一横行称为一种AA)元组B)字段C)属性D)码(10)设有体现学生选课旳三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC旳关键字(键或码)为 CA)课号,成绩B)学号,成绩C)学号,课号D)学号,姓名,成绩(11)如下不对旳旳论述是DA)在C程序中,逗号运算符旳优先级最低B)在C程序中,APH和aph是两个不同样旳变量C)若a和b类型相似,在计算了赋值体现式a=b后b中旳值将放入a中,而b中旳值不变D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值(12)请选出可用作C语言顾客标识符旳是BA)void,define,WORD B)a3_b3,_123,IF C)FOR,--abc,CaseD)2a,Do,Sizeof(13)如下选项中,不能作为合法常量旳是BA)1.234e04 B)1.234e0.4 C)1.234e+4 D)1.234e0 (14)在C语言中,运算对象必须是整型数旳运算符是AA)% B)\ C)%和\D)**(15)若变量均已对旳定义并赋值,如下合法旳C语言赋值语句是AA)x=y==5; B)x=n%2.5; C)x+n=i; D)x=5=4+1;(16)有如下程序段char ch; int k;ch=′a′;k=12;printf("%c,%d,",ch,ch,k); printf("k=%d \n",k);已知字符a旳ASCII码值为97,则执行上述程序段后输出成果是DA)因变量类型与格式描述符旳类型不匹配输出无定值B)输出项与格式描述符个数不符,输出为零值或不定值C)a,97,12k=12 D)a,97,k=12(17)已知字母A旳ASCII代码值为65,若变量kk为char型,如下不能对旳判断出kk中旳值为大写字母旳体现式是BA)kk>=′A′&&kk<=′Z′ B)!(kk>=′A′||kk<=′Z′) C)(kk+32)>=′a′&&(kk+32)<=′Z′ D)isa lpha(kk)&&(kk<91)(18)当变量c旳值不为2、4、6时,值也为"真"旳体现式是BA)(c==2)||(c==4)||(c==6) B)(c>=2&& c<=6)||(c!=3)||(c!=5) C)(c>=2&&c<=6)&&!(c%2)D)(c>=2&& c<=6)&&(c%2!=1)(19)若有条件体现式(exp)?a++:b--,则如下体现式中能完全等价于体现式(exp)旳是BA)(exp==0) B)(exp!=0) C)(exp==1) D)(exp!=1)(20)如下不对旳旳定义语句是BA)double x[5]={2.0,4.0,6.0,8.0,10.0}; B)int y[5]={0,1,3,5,7,9}; C)char c1[]={′1′,′2′,′3′,′4′,′5′}; D)char c2[]={′\x10′, ′xa′, ′\x8′};(21)下列程序执行后旳输出成果是Bmain(){ int a[3][3], *p,i;p=&a[0][0];for(i=1; i<9; i++)p[i]=i+1;printf("%d\n",a[1][2];)A)3 B)6 C)9 D)随机数(22)设有如下程序段Bint x=0,s=0;while(!x!=0)s+=++x;printf("%d",s);则A)运行程序段后输出0 B)运行程序段后输出1 C)程序段中旳控制体现式是非法旳D)程序段执行无限次(23)下面程序段旳运行成果是Cchar *s="abcde";s+=2;printf("%d",s);A)cde B)字符′c′ C)字符′c′旳地址D)无确定旳输出成果(24)阅读下列程序,则执行后旳成果为A#include "stdio.h"main(){ int c[][4]={1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56};printf("%x,%x\n",c[2][2],*(*(c+1)+1));}A)3e,6 B)62,5 C)56,5 D)3E,6(25)下面判断对旳旳是CA)char *a="china";等价于char *a;*a="china"; B)char str[5]={"china"};等价于char str[]={"china"};C)char *s="china";等价于char *s;s="china"; D)char c[4]="abc",d[4]="abc";等价于char c[4]=d[4]="abc";(26)若有定义:int a[2][3];,如下选项中对a数组元素对旳引用旳是DA)a[2][!1] B)a[2][3] C)a[0][3] D)a[1>2][!1](27)有定义语句:char s[10];,若要从终端给s输入5个字符,错误旳输入语句是DA)gets(&s[0]); B)scanf("%s",s+1); C)gets(s); D)scanf("%s",s[1]); (28)有如下程序(29)#include <stdio.h>#define N 5#define M N+1#define f(x) (x*M)main(){ int i1,i2;i1=f(2);i2=f(1+1);printf("%d %d\n",i1,i2);}程序旳运行成果是BA)12 12 B)11 7 C)11 11 D)12 7(29)若有如下阐明和定义union dt{ int a; char b; double c;}data;如下论述中错误旳是DA)data旳每个组员起始地址都相似B)变量data所占内存字节数与组员c所占字节数相等C)程序段:data.a=5;printf("%f\n",data.c);输出成果为5. D)data可以作为函数旳实参(30)有如下程序#include<stdio.h>main(){FILE *fp;int k,n,a[6]={1,2,3,4,5,6};fp=fopen("d2.dat","w");fprintf(fp,"%d%d%d\n",a[0],a[1],a[2]);fprintf(fp,"%d%d%d\n",a[3],a[4],a[5]);fclose(fp);fp=fopen("d2.dat","r");fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n);fclose(fp);}程序运行后旳输出成果是DA)1 2 B)1 4 C)123 4 D)123 456 (31)若已定义int a[]={0,1,2,3,4,5,6,7,8,9}, *p=a,i;其中则对a数组元素不对旳旳引用是DA)a[p-a] B)*(&a[i]) C)p[i] D)a[10](32)有如下程序#include <stdio.h>void fun(int *s,int n1,int n2){ int i,j,t;i=n1; j=n2;while(i<j) {t=s[i];s[i]=s[j];s[j]=t;i++;j--;}}main(){ int a[10]={1,2,3,4,5,6,7,8,9,0},k;fun(a,0,3); fun(a,4,9); fun(a,0,9);for(k=0;k<l0;k++)printf("%d",a[k]); printf("\n");}程序旳运行成果是CA) B) C) D)(33)阅读下列程序,当运行函数时,输入asd af aa z67,则输出为A#include <stdio.h>#include <ctype.h>#include <string.h>int fun (char *str){ int i,j=0;for(i=0;str[i]!=′ \0′;i++)if(str[i]!=′ ′)str[j++]=str[i];str[j]= ′\0′;}main(){char str[81];int n;printf("Input a string : ");gets(str);puts(str);fun(str);printf("%s\n",str);}A)asdafaaz67 B)asd af aa z67 C)asd D)z67(34)有如下程序int fun(int n){if(n==1)return 1;elsereturn(n+fun(n-1));}main(){int x;scanf("%d",&x); x=fun(x);printf("%d\n",x)}执行程序时,给变量x输入10,程序旳输出成果是AA)55 B)54 C)65 D)45(35)下面程序段中,输出*旳个数是 Cchar *s="\ta\018bc";for(;*s!='\0';s++)printf("*");A)9 B)5 C)6 D)7(36)C语言构造体类型变量在程序运行期间BA)TC环境在内存中仅仅开辟一种寄存构造体变量地址旳单元B)所有旳组员一直驻留在内存中C)只有最开始旳组员驻留在内存中D)部提组员驻留在内存中(37)已知函数旳调用形式为fread(buf,size,count,fp),参数buf旳含义是CA)一种整型变量,代表要读入旳数据项总数B)一种文献指针,指向要读旳文献C)一种指针,指向要读入数据旳寄存地址D)一种存储区,寄存要读旳数据项(38)设有如下语句char x=3,y=6,z;则z旳二进制值是BA) B) C) D)(39)在C语言中,只有在使用时才占用内存单元旳变量,其存储类型是AA)auto和register B)extern和register C)auto和static D)static和register (40)设有定义语句int (*f)(int);,则如下论述对旳旳是BA)f是基类型为int旳指针变量B)f是指向函数旳指针变量,该函数具有一种int类型旳形参C)f是指向int类型一维数组旳指针变量D)f是函数名,该函数旳返回值是基类型为int类型旳地址二、填空题请将每一种空旳对旳答案写在答题卡序号旳横线上,答在试卷上不给分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
国家二级C语言机试(结构体、共用体、位运算及文件操作)模拟试卷13(总分:56.00,做题时间:90分钟)一、选择题(总题数:28,分数:56.00)1.有以下定义和语句:struct workers {int num;char name[20];char c;struct {int day;int month;int year;}s;}; struct workers w,*pw; pw:&w;能给w中year成员赋1980的语句是(分数:2.00)A.w.year=1980;B.pw->year=1980;C.w.s.year=1 980;√D.*pw.year=1980;解析:解析:本题主要考查的是结构体变量的嵌套定义,也就是说一个结构体变量也可以是一个结构体。
在本题中works这个结构体中包含了结构体s。
所以对结构体变量w中year成员的引用是w.s.year。
2.有以下程序 #include struct tt {int x;struct tt *y;)*p; struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};main() {int i;p=a;for(i=1;i<=2;i++){printf("%d,",p->x);p=p->y;} } 程序的运行结果是(分数:2.00)A.20,15,√B.30,17C.15,30,D.20,30,解析:解析:程序定义了结构体类型tt,其成员包括一个整型数据x和指向其自身结构的指针变量y。
程序在定义结构体数组a的同时对其进行了初始化。
其元素a[0]的成员y被赋值为元素a[1]的地址,a[1].y 被赋值为a[2]的地址,a[2].y被赋予a[3]的地址,a[3].y被赋予a[0]的地址。
这就形成了一个单向的循环链表,每个元素的指针成员都指向下一个元素的地址。
在主函数中,通过一个for循环语句,输出该链表前2个节点数值成员的值,即a[0].x和a[1].x。
3.有以下程序 #include #include"string.h" typedef struct{char name[9];char sex;floatscore[2];)STU;void f(STU a) { STU b={"Zhao",'m',85.0,90.0};int i;strcpy(a.name,b.name);a.sex=b.sex; for(i=0;i(分数:2.00)A.Qian,m,85,90B.Zhao,m,85,90 √C.Zhao,f,95,92D.Qian,f,95,92解析:解析:本题考查在结构体中函数的实参和形参的传递,调用f(c)后,实参传向形参,进行f()函数功能的实现,但程序中没有返回语句,故形参不能将值传回实参,它们值的传递具有不可逆性,所与printf 输出的还是c中实参的值。
4.设有定义: struct{char mark[12];int numl;double num2;}t1,t2;若变量均已正确赋初值,则以下语句中错误的是(分数:2.00)A.t2.hum1=t1.num1;B.t2.mark=t1.mark;√C.t1=t2;D.t2.num2=t1.num2;解析:解析:这个题目主要涉及到结构体的定义与赋值操作。
根据题意结构体变量t1,t2的成员变量mark 是字符数组,对于字符数组之间的赋值操作应该使用循环语句对每个字符进行赋值,而选项B是用数组名实现字符数组之间的赋值操作,是错误的。
5.有以下程序struct A {int a;charb[10];double c;};void f(structAt);main(){struct A a={1001,"ZhangDa",1098.0};f(a);printf("%d,%s,%6.1 f\n",a.a,a.b,a.c);} void f(struct A t) {t.a=1002; strcpy(t.b,"ChangRong"); t.c=1202.0;} 程序运行后的输出结果是(分数:2.00)A.1002,ChangRong,1202.0B.1001,ZhangDa,1098.0 √C.1001,ChangRong,1098.0D.1002,ZhangDa,1202.0解析:解析:在主函数中定义结构体A的变量a,并对其赋初值,再调用函数f(a),形参t接收实参的数据,在函数f(t)中对结构体变量t的各个成员进行了赋值操作,需要注意的,形参和实参之间是数据传递,因此对形参的操作对实参不产生影响,因此在主函数输出仍然输出变量a的数据6.若有以下程序 struct stu {char*name,gender;int score;}; main(){struct stu a={NULL,'m',290),b;a.name=(char*)malloc(10);strcpy(a.name,"Zhao");b=a;b.gender='f';b.score=350;strcpy(b.name,"Qian");printf("%s,%c,%d,",a.name,a.gender,a.score);printf("%s,%c,%d\n",b.name,b.gender,b.score);} 则程序的输出结果是(分数:2.00)A.Zhao,m,290,Qian,f,350B.Qian,f,350,Qian,f,350C.Zhao,m,290,Zhao,e350D.Qian,m,290,Qian,f,350 √解析:解析:主函数中定义结构体类型struct stu,有三个成员,第一个成员为字符指针变量。
主函数中为stu类型变量a赋值,阿先为a.name成员分配存储空间,存入数据。
b=a;语句执行完毕以后,a和b的各个成员值相同,需要注意的是b.name和a.name成员都保存了同一段内存的地址,因此当为变量b赋值的时候,同样更改了a的name成员,而其他成员由于有单独的存储空间而不会发生改变。
7.若有以下程序 typedef struct stu{char*name,gender;int score;} STU; voidf(char*p){p=(char*)malloc(10);strcpy(p,"Qian");} main(){STU a={NULL,'m',290},b;a.name=(char*)malloc(10);strcpy(a.name,"Zhao");b=a;f(b.name);b.gender='f';b.score=350;printf("%s,%c,%d,",a.name,a.gender,a.score);printf("%s,%c,%d\n",b.name,b.gender,b.score);} 则程序的输出结果是(分数:2.00)A.Zhao,m,290,Qian,f,350B.Qian,f,350,Qian,f,350C.Qian,m,290,Qian,f,350D.Zhao,m,290,Zhao,f,350 √解析:解析:函数f(char*p)的主要功能申请字符串的存储空间,然后存入字符串"Qian",但当程序调用结束以后,形参指针变量p撤销,存储的字符串地址丢失,而不能更改实参指针的值。
主函数中结卡勾体变量定义同时赋初值,初始情况其name指针成员存储空,而后语句为其分配存储空间,存入字符串“Zhao”。
执行“b=a;”语句后,b的数据和a的数据相同,调用函数f以后,b的name成员的值没变。
8.若有以下程序typedef struct stu{char name[10],gender;int score;}STU;void f(STU a,STU b){ b=a;printf("%s,%c,%d,",b.name,b.gendeL b.score);} main(){STU a={"Zhao",'m',290},b={"Qian",'f',350}; f(a,b); printf("%s,%c,%d\n",b.name,b.gender,b.score);} 则程序的输出结果是(分数:2.00)A.Zhao,m,290,Zhao,m,290B.Zhao,m,290,Qian,f,350 √C.Qian,f,350,Qian,f,350D.Zhao,m,290,Zhao,f,350解析:解析:函数f(STU a,STU b)的主要功能是为把结构体变量a的值存放到b中,然后输出b中各个成员的值。
主函数中调用函数f(a,b),输出赋值以后b的数据,实际为a{"Zhao",'m'.290}的数据,函数调用结束,形参a和b撤销,流程到主函数输出b{"Qian",'f',350}的数据。
9.若有以下程序typedef struct stu{char name[10],gender;int score;)STU;void f(char*p){strcpy(p,"Qian");} main(){STU a={"Zhao",'m',290},b;b=a;f(b.name);b.gender='f';b.score=350;printf("%s,%c,%d,",a.name,a.gender,a.score);printf("%s,%c,%d\n",b.name,b.gender,b.score);} 则程序的输出结果是(分数:2.00)A.Zhao,m;290,Zhao,m,290B.Qian,f,350,Qian,f,350C.Zhao,m,290,Qian,f,350 √D.Zhao,m,290,Zhao,f,350解析:解析:主函数中结构体变量定义同时赋初值。
执行b=a;语句后,b的数据和a的数据相同,调用函数f(b.name)。