1、二级 C语言分类模拟题 545及答案解析(总分:64.50,做题时间:90 分钟)一、选择题(总题数:40,分数:64.50)1.函数调用 strcat(strcpy(str1, str2), str3)的功能是_。(分数:1.00)A.将字符串 str1复制到字符串 str2中后再连接到字符串 str3之后B.将字符串 str1连接到字符串 str2之后再复制到字符串 str3之后C.将字符串 str2复制到字符串 str1中后再将字符串 str3连接到字符串 str1之后D.将字符串 str2连接到字符串 str1之后再将字符串 str1复制到字符串 str3中2.有下列程序: #incl
2、udestdio.h structst int(x,y)date2=1,10,2,20; main() structst*p=date; printf(“%d,“,p-y);printf(“%d/n“,(+p)-x); 程序的运行结果是 _ 。(分数:1.00)A.10,1B.20,1C.10,2D.20,23.C语言规定,在一个 C程序中,main 函数的位置_。(分数:2.00)A.必须在系统调用的库函数之后B.必须在程序的开始C.必须在程序的最后D.可以在任意位置4.以下程序的输出结果是 _ 。 #includestdio.h int a33=1,2,3,4,5,6,7,8,9,*p;
3、main() p=(int*)malloc(sizeof(int); f(p,a); printf(“% d/n“,*p); free(p); f(int *s,int p3) *s=p11;)(分数:2.00)A.1B.4C.7D.55.有以下程序 #includestdio.h #define SUB(X,Y)(X+1)*Y main() int a=3,b=4; printf(“%d/n“,SUB(a+,b+); 程序运行后的输出结果是_。(分数:2.00)A.16B.20C.12D.256.以下叙述中正确的是(分数:1.00)A.C语言程序将从源程序中第一个函数开始执行B.可以在程序中
4、由用户指定任意一个函数作为主函数,程序将从此开始执行C.C语言规定必须用 main作为主函数名,程序从此开始执行,在此结束D.main作为用户标识符,用以命名任意一个函数作为主函数7.若有定义:float x=1.5;int a=1,b=3,c=2;,则正确的 switch语句是_。(分数:2.50)A.switch(a+b)case 1:printf(“*/n“);case 2+1:printf(“*/n“);B.switch(int)x);case 1:printf(“*/n“);case 2:printf(“*/n“);C.switch(x)case 1.0:printf(“*/n“);
5、case 2.0:printf(“*/n“);D.switch(a+b)case 1:printf(“*/n“);case c:printf(“*/n“);8.以下说法正确的是_。(分数:2.00)A.C语言程序总是从第一个的函数开始执行B.在 C语言程序中,要调用函数必须在 main函数中定义C.C语言程序总是从 main函数开始执行D.C语言程序中的 main函数必须放在程序的开始部分9.有以下程序 #includestdio.h main() int n,*p=NULL; *p= printf(“Input n:“); scanf(“%d“, printf(“output n:“); p
6、rintf(“%d/n“,p); 该程序试图通过指针 p为变量 n读入数据并输出,但程序有多处错误,以下语句正确的是_。(分数:1.00)A.int n,*p=NULL;B.*p=C.scanf(“%d“,10.有以下程序: #include stdio.h void fun(int a, int n) int i,t; for(i=0;in/2;i+ +) t=ai; ai=an-1-i; an-1-i=t; main( ) int k10=1,2,3,4,5,6,7,8,9,10,i; fun(k,5); for(i=2; i8; i+ +) printf(“%d“,ki); printf
7、(“/n“); 程序的运行结果是_。(分数:2.00)A.321678B.876543C.1098765D.34567811.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 # include stdio.h # define N 10 void fun(int xN) int i=0; while(iN) scanf(“%d“,_); 在程序中下划线处应填入的是_。(分数:1.00)A.x+iB.xi+1C.x+(i+)D.x+i12.有以下程序 #includestdio.h void fun(char*c,int d) *c=*c+1; d=d+1; printf(“%c,
8、%c,“*c,d); main() char b=“a“,a=“A“; fun(b,a); printf(“%c,%c/n“,b,a); 程序运行后的输出结果是_。(分数:2.00)A.b,B,b,AB.b,B,B,AC.a,B,B,aD.a,B,a,B13.若有定义和语句: int a,b; scanf(“%d,%d,“,a,b); 以下选项中的输入数据,不能把值 3赋给变量 a、值 5赋给变量 b的是_。(分数:1.00)A.3,5,4B.3,5C.3,5,D.3,514.设有程序段: int k=12; while(k=1) k=k-1; 则下列描述中正确的是 _ 。(分数:2.00)A
9、.while循环执行 10次B.循环是无限循环C.循环体语句一次也不执行D.循环体语句执行一次15.以下选项中,合法的是_。(分数:1.00)A.char str3=“d“,“e“,“b“,“u“,“g“,“/0“;B.char str4; str4=“hello world“;C.char name10; name=“china“;D.char strl5=“pass“,str26; str2=strl;16.常采用的两种存储结构是 _ 。(分数:2.00)A.顺序存储结构和链式存储结构B.散列方法和索引方式C.链表存储结构和数组D.线性存储结构和非线性存储结构17.在软件开发中,需求分析阶
10、段产生的主要文档是_。(分数:2.00)A.可行性分析报告B.软件需求规格说明书C.概要设计说明书D.集成测试计划18.若有以下程序 #includestdio.h typedef struct stu char name10,gender; int score; STU; void f(STU a,STU b) b=a; printf(“%s,%c,%d,“,b.name,b.gender,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.
11、score; 则程序的输出结果是_。(分数:2.00)A.Zhao,m,290,Qian,f,350B.Zhao,m,290,Zhao,m,290C.Qian,f,350,Qian,f,350D.Zhao,m,290,Zhao,f,35019.把实体一联系模型转换为关系模型时,实体之间多对多联系在模型中是通过( )。(分数:1.00)A.建立新的属性来实现B.建立新的关键字来实现C.建立新的关系来实现D.建立新的实体来实现20.有以下程序: #include stdio.h #include string.h struct S char name10 ; ; main() struct S s
12、1, s2; strcpy(s1.name,“XXX“); strcpy(s2.name,“=“); s1 = s2; printf(“%sin“, s1.name); 程序运行后的输出结果是_。(分数:1.00)A.=B.XXXC.=XXDX=21.以下错误的定义语句是_。(分数:1.00)A.int x4=1,2,3,1,2,3,1,2,3,1,2,3;B.int x43=1,2,3,1,2,3,1,2,3,1,2,3;C.int x3=0,1,1,2,3;D.int x3=1,2,3,4;22.以下所列对结构类型变量 tdl的声明中错误的是_。(分数:3.00)A.typedef str
13、uct aaint n;float m;AA;B.#define AA struct aaAAint n;float m;)tdl;AAtdl;C.structint n; float m;)aa;D.structint n;float m;tdl;struct aa tdl;23.有以下程序 #includestdio.h main() FILE*fp;int a10=1,2,3,i,n; fp=fopen(“d1.dat“,“w“); for(i=0;i3;i+) fprintf(fp,“%d“,ai); fprintf(fp,“/n“); fclose(fp); fp=fopen(“d1
14、.dat“,“r“); fscanf(fp,“%d“, fclose(fp); printf(“%d/n“,n); 程序的运行结果是_。(分数:2.00)A.12300B.123C.1D.32124.请阅读以下程序: #includestdio.h #includestring.h void fun(int b) static inti=0; do bi+=bi+1;while(+i2); main() int k,a5=1,3,5,4,9); fun(a); for(k=0;k5;k+)printf(“%d“,ak); 上面程序的输出是_。(分数:2.50)A.13579B.48579C.4
15、8549D.4899925.有以下计算公式: (分数:2.00)A.y=sqrt(x);if(x0)y=sqrt(-x);B.if(x=0)y=sqrt(x);else y=sqrt(-x);C.if(x=0) y=sqrt(x);if(x0)y=sqrt(-x);D.y=sqrt(x=0?x:-x);26.下列程序的运行结果是_。 #includestdio.h #define ADD(x) x+x main() int m=1, n=2, k=3; int s=ADD(m+n)*k; printf(“s=%d“, s); (分数:2.50)A.sum=18B.sum=10C.sum=9D.
16、sum=2527.设有以下程序段: struct person char name10; char sex; float weight; zhangsan,*ptr; ptr= 若要从键盘读入姓名给结构体变量 zhangsan的 name成员,输入项错误的是_。(分数:1.00)A.scanf(“%s“,zhangsan-name);B.scanf(“%s“,zhangsan.name);C.scanf(“%s“,ptr-name);D.scanf(“%s“,(*ptr).name);28.有以下程序 #includestdio.h #define S(x)4*(x)*x+1 main() i
17、nt k=5,j=2; printf(“%d/n“,S(k+j); 程序运行后的输出结果是_。(分数:2.00)A.143B.197C.33D.2829.下列说法不正确的是 _ 。(分数:2.00)A.C语言程序是以函数为基本单位的,整个程序由函数组成B.C语言程序的一条语句可以写在不同的行上C.C语言程序的注释行对程序的运行功能不起任何作用,所以注释应该尽可能少写D.C语言程序的每个语句都以分号结束30.有以下结构体说明、变量定义和赋值语句: struct STD char name10; int age; char sex; s5,*ps; ps=s0; 则以下 scanf函数调用语句有错
18、误的是_。(分数:1.00)A.scanf(“%s“,s0.name);B.scallf(“%d“,s0.age);C.scanf(“%c“,(ps-sex);D.scanf(“%d“,ps-age);31.在 C语言中,以下说法不正确的是_。(分数:2.00)A.在 C程序中,整数和实数都能被准确无误地表示出来B.在 C程序中,任何一个变量名都代表存储器中的一个位置C.静态变量的生存期与整个程序的运行期相同D.C语言中,任何变量都必须先声明才能进行引用32.以下不能输出字符 A的语句是(注:字符 A的 ASCII码值为 65,字符 a的 ASCII码值为 97)_。(分数:1.00)A.pr
19、intf(“%c/n“, “a“-32);B.printf(“%d/n“, “A“);C.printf(“%c/n“, 65);D.printf(“%c/n“, “B“-1);33.已知 int a=6;则执行 a+=a-=a*a;语句后,a 的值为_。(分数:2.00)A.36B.0C.-24D.-6034.有以下程序 #include stdio.h main() int i,s=0,t=1,2,3,4,5,6,7,8,9; for(i=0;i9;i+=2) s+=*(t+i); printf(“%d/n“,s); 程序执行后的输出结果是_。(分数:1.00)A.25B.20C.45D.3
20、635.有以下程序: #include stdio.h struct S int a;int b; main( ) struct S a, *p= a.a=99; printf(“%d/n“,_); 程序要求输出结构体中成员 a的数据,以下不能填入横线处的内容是_。(分数:1.00)A.aB.*p.aC.p-aD.(*p).a36.设有定义:int x=2;,以下表达式中,值不为 6的是_。(分数:2.00)A.2*x,x+=2B.x+,2*xC.x*=(1+x)D.x*=x+137.一棵二叉树共有 25个结点,其中 5个是叶子结点,则度为 1的结点数为_。(分数:1.00)A.16B.10C
21、.6D.438.若有定义语句:int x=10;,则表达式 x-=x+x的值为_。(分数:2.00)A.0B.-20C.-10D.1039.以下叙述中正确的是_。(分数:1.00)A.数组下标的下限是 1B.数组下标的下限由数组中第一个非零元素的位置决定C.数组下标的下限由数组中第一个被赋值元素的位置决定D.char c1,c2,*c3,c440;是合法的变量定义语句40.以下叙述中正确的是_。(分数:1.00)A.每个后缀为.C 的 C语言源程序都可以单独进行编译B.每个后缀为.C 的 C语言源程序都应该包含一个 main函数C.在 C语言程序中,main 函数必须放在其他函数的最前面D.在
22、 C语言程序中,只有 main函数才可单独进行编译二级 C语言分类模拟题 545答案解析(总分:64.50,做题时间:90 分钟)一、选择题(总题数:40,分数:64.50)1.函数调用 strcat(strcpy(str1, str2), str3)的功能是_。(分数:1.00)A.将字符串 str1复制到字符串 str2中后再连接到字符串 str3之后B.将字符串 str1连接到字符串 str2之后再复制到字符串 str3之后C.将字符串 str2复制到字符串 str1中后再将字符串 str3连接到字符串 str1之后 D.将字符串 str2连接到字符串 str1之后再将字符串 str1复
23、制到字符串 str3中解析:2.有下列程序: #includestdio.h structst int(x,y)date2=1,10,2,20; main() structst*p=date; printf(“%d,“,p-y);printf(“%d/n“,(+p)-x); 程序的运行结果是 _ 。(分数:1.00)A.10,1B.20,1C.10,2 D.20,2解析:解析 data2是两个结构体组成的数组,p 指向结构体数组的首地址,p-y 访问第一个结构体的第二个元素;(+p)x 访问第二个结构体的第一个元素。所以输出为 10.2。3.C语言规定,在一个 C程序中,main 函数的位置_
24、。(分数:2.00)A.必须在系统调用的库函数之后B.必须在程序的开始C.必须在程序的最后D.可以在任意位置 解析:4.以下程序的输出结果是 _ 。 #includestdio.h int a33=1,2,3,4,5,6,7,8,9,*p; main() p=(int*)malloc(sizeof(int); f(p,a); printf(“% d/n“,*p); free(p); f(int *s,int p3) *s=p11;)(分数:2.00)A.1B.4C.7D.5 解析:解析 本题考查了二维数组元素引用的方法。题中用动态存储分配函数 malloc分配了一个 int型数据长度大小的内存
25、,然后指针 p指向了这段内存,函数 f()中对 p所指向的数据进行了赋值,p11为二维数组第二行第二列的元素,对应于实参 a的元素 5,所以输出结果为 5。5.有以下程序 #includestdio.h #define SUB(X,Y)(X+1)*Y main() int a=3,b=4; printf(“%d/n“,SUB(a+,b+); 程序运行后的输出结果是_。(分数:2.00)A.16 B.20C.12D.25解析:解析 SUB 展开后,(a+1)*b+,a+表达式的值为 3,b+表达式的值为 4,所以(3+1)*4 值为16。6.以下叙述中正确的是(分数:1.00)A.C语言程序将从
26、源程序中第一个函数开始执行B.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C.C语言规定必须用 main作为主函数名,程序从此开始执行,在此结束 D.main作为用户标识符,用以命名任意一个函数作为主函数解析:解析 一个 C语言源程序至少包含一个 main函数。无论 main函数在程序中的位置如何,它都是C语言程序的主函数,是程序执行的入口和出口。7.若有定义:float x=1.5;int a=1,b=3,c=2;,则正确的 switch语句是_。(分数:2.50)A.switch(a+b)case 1:printf(“*/n“);case 2+1:printf(“*/n
27、“); B.switch(int)x);case 1:printf(“*/n“);case 2:printf(“*/n“);C.switch(x)case 1.0:printf(“*/n“);case 2.0:printf(“*/n“);D.switch(a+b)case 1:printf(“*/n“);case c:printf(“*/n“);解析:解析 B 选项中 switch(int)x);语句中不应该有最后的分号。switch(expr1)中的 expr1不能用浮点类型或 long类型,也不能为一个字符串,所以 C选项错误。case 后面必须为常量表达式,所以 D选项错误。8.以下说法
28、正确的是_。(分数:2.00)A.C语言程序总是从第一个的函数开始执行B.在 C语言程序中,要调用函数必须在 main函数中定义C.C语言程序总是从 main函数开始执行 D.C语言程序中的 main函数必须放在程序的开始部分解析:9.有以下程序 #includestdio.h main() int n,*p=NULL; *p= printf(“Input n:“); scanf(“%d“, printf(“output n:“); printf(“%d/n“,p); 该程序试图通过指针 p为变量 n读入数据并输出,但程序有多处错误,以下语句正确的是_。(分数:1.00)A.int n,*p=
29、NULL; B.*p=C.scanf(“%d“,解析:解析 选项 B的正确写法应为 p=,选项 C的正确写法应为 scanf(“%d“,p);,选项 D的正确写法应为 printf(“%d/n“,*p);。故本题答案为 A。10.有以下程序: #include stdio.h void fun(int a, int n) int i,t; for(i=0;in/2;i+ +) t=ai; ai=an-1-i; an-1-i=t; main( ) int k10=1,2,3,4,5,6,7,8,9,10,i; fun(k,5); for(i=2; i8; i+ +) printf(“%d“,ki
30、); printf(“/n“); 程序的运行结果是_。(分数:2.00)A.321678 B.876543C.1098765D.345678解析:解析 本题中的函数 fun()的功能是将数组 k中前 5个元素倒序,因此返回后数组 k中的元素排列是 5,4,3,2,1,6,7,8,9,10。最后打印输出 k2到 k7元素的值,即 321678,故选择 A选项。11.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 # include stdio.h # define N 10 void fun(int xN) int i=0; while(iN) scanf(“%d“,_); 在程序
31、中下划线处应填入的是_。(分数:1.00)A.x+iB.xi+1C.x+(i+) D.x+i解析:解析 选项 A要以实现为 x0赋值,不能为其他的元素赋值,即实现不了循环。选项 B同选项 A-样实现不了循环赋值。选项 D不能为 x0赋值,而且会出界。故答案为 C。12.有以下程序 #includestdio.h void fun(char*c,int d) *c=*c+1; d=d+1; printf(“%c,%c,“*c,d); main() char b=“a“,a=“A“; fun(b,a); printf(“%c,%c/n“,b,a); 程序运行后的输出结果是_。(分数:2.00)A.
32、b,B,b,A B.b,B,B,AC.a,B,B,aD.a,B,a,B解析:解析 调用 fun函数输出为加 1之后的值,fun 函数功能将 main函数中的 b自增 1,a 没有变化,所以输出为 A。13.若有定义和语句: int a,b; scanf(“%d,%d,“,a,b); 以下选项中的输入数据,不能把值 3赋给变量 a、值 5赋给变量 b的是_。(分数:1.00)A.3,5,4B.3,5C.3,5,D.3,5 解析:解析 scanf()的格式控制串可以使用其他非空白字符,如本题中的逗号,但在输入时必须输入这些字符,以保证匹配。所以在 3和 5之间必须输入逗号,不能有其他符号,才能保证
33、 a和 b的正确赋值。所以选择 D选项。14.设有程序段: int k=12; while(k=1) k=k-1; 则下列描述中正确的是 _ 。(分数:2.00)A.while循环执行 10次B.循环是无限循环C.循环体语句一次也不执行 D.循环体语句执行一次解析:解析 本题考查 while循环。while 循环的控制表达式 k=1是个赋值表达式而不是逻辑表达式,所以循环体一次也不执行。15.以下选项中,合法的是_。(分数:1.00)A.char str3=“d“,“e“,“b“,“u“,“g“,“/0“; B.char str4; str4=“hello world“;C.char name
34、10; name=“china“;D.char strl5=“pass“,str26; str2=strl;解析:解析 选项 B不能把一个字符串赋值给一个字符变量,选项 C和 D犯了同样的错误是把字符串赋给了数组名。16.常采用的两种存储结构是 _ 。(分数:2.00)A.顺序存储结构和链式存储结构 B.散列方法和索引方式C.链表存储结构和数组D.线性存储结构和非线性存储结构解析:解析 线性表的存储通常要用两种存储结构:顺序存储结构和链式存储结构。17.在软件开发中,需求分析阶段产生的主要文档是_。(分数:2.00)A.可行性分析报告B.软件需求规格说明书 C.概要设计说明书D.集成测试计划解
35、析:解析 A 错误,可行性分析阶段产生可行性分析报告。C 错误,概要设计说明书是总体设计阶段产生的文档。D 错误,集成测试计划是在概要设计阶段编写的文档。B 正确,需求规格说明书是后续工作如设计、编码等需要的重要参考文档。18.若有以下程序 #includestdio.h typedef struct stu char name10,gender; int score; STU; void f(STU a,STU b) b=a; printf(“%s,%c,%d,“,b.name,b.gender,b.score); main() STU a=“Zhao“,“m“,290,b=“Qian“,“
36、f“,350; f(a,b); printf(“%s,%c,%d/n“,b.name,b.gender,b.score; 则程序的输出结果是_。(分数:2.00)A.Zhao,m,290,Qian,f,350 B.Zhao,m,290,Zhao,m,290C.Qian,f,350,Qian,f,350D.Zhao,m,290,Zhao,f,350解析:解析 f 函数将结构体 a赋值给 b,然后输出,注意这是值传递,不会改变 main中结构体 b值,所以答案选择 A。19.把实体一联系模型转换为关系模型时,实体之间多对多联系在模型中是通过( )。(分数:1.00)A.建立新的属性来实现B.建立新
37、的关键字来实现C.建立新的关系来实现 D.建立新的实体来实现解析:解析 E-R 图向关系模型的转换原则: 一个实体型转换为一个关系模型,实体的属性就是关系的属性,实体的键就是关系的键; 一个联系转换为一个关系模式,与该联系相连的每个实体型的键以及联系的属性都转换为关系的属性。这个关系的键分为以下三种不同的情况: 若联系为 1:1,则相连的每个实体型的键均是该关系模式的候选键。 若联系为 1:n,则联系对应的关系模式的键取 n端实体型的键。 若联系为 m:n,则联系对应的关系模式的键为参加联系的诸实体型的键的组合。20.有以下程序: #include stdio.h #include strin
38、g.h struct S char name10 ; ; main() struct S s1, s2; strcpy(s1.name,“XXX“); strcpy(s2.name,“=“); s1 = s2; printf(“%sin“, s1.name); 程序运行后的输出结果是_。(分数:1.00)A.= B.XXXC.=XXDX=解析:解析 主函数首先为结构体定义两个变量 s1,s2,分别使用字符串拷贝函数 strcpy()为 s1和 s2的成员 name赋值,再将 s2中的成员信息赋值给 s1,因此输出为“=”,答案为 A选项。21.以下错误的定义语句是_。(分数:1.00)A.in
39、t x4=1,2,3,1,2,3,1,2,3,1,2,3; B.int x43=1,2,3,1,2,3,1,2,3,1,2,3;C.int x3=0,1,1,2,3;D.int x3=1,2,3,4;解析:解析 二维数组定义行数可以省略,列数不能省略,所以答案选择 A。22.以下所列对结构类型变量 tdl的声明中错误的是_。(分数:3.00)A.typedef struct aaint n;float m;AA;B.#define AA struct aaAAint n;float m;)tdl;AAtdl;C.structint n; float m;)aa; D.structint n;f
40、loat m;tdl;struct aa tdl;解析:23.有以下程序 #includestdio.h main() FILE*fp;int a10=1,2,3,i,n; fp=fopen(“d1.dat“,“w“); for(i=0;i3;i+) fprintf(fp,“%d“,ai); fprintf(fp,“/n“); fclose(fp); fp=fopen(“d1.dat“,“r“); fscanf(fp,“%d“, fclose(fp); printf(“%d/n“,n); 程序的运行结果是_。(分数:2.00)A.12300B.123 C.1D.321解析:24.请阅读以下程序
41、: #includestdio.h #includestring.h void fun(int b) static inti=0; do bi+=bi+1;while(+i2); main() int k,a5=1,3,5,4,9); fun(a); for(k=0;k5;k+)printf(“%d“,ak); 上面程序的输出是_。(分数:2.50)A.13579B.48579C.48549 D.48999解析:25.有以下计算公式: (分数:2.00)A.y=sqrt(x);if(x0)y=sqrt(-x); B.if(x=0)y=sqrt(x);else y=sqrt(-x);C.if(x
42、=0) y=sqrt(x);if(x0)y=sqrt(-x);D.y=sqrt(x=0?x:-x);解析:解析 应该先判断 x是正数还是负数,然后再调用 sqrt函数,A 选项开始没有判断,所以 A错误。26.下列程序的运行结果是_。 #includestdio.h #define ADD(x) x+x main() int m=1, n=2, k=3; int s=ADD(m+n)*k; printf(“s=%d“, s); (分数:2.50)A.sum=18B.sum=10 C.sum=9D.sum=25解析:解析 本题考查带参数的宏的定义:“#defineADD(x)x+x”中 x代表
43、m+n,故 s写成s=m+n+m+n*k=1+2+1+2*3=10。27.设有以下程序段: struct person char name10; char sex; float weight; zhangsan,*ptr; ptr= 若要从键盘读入姓名给结构体变量 zhangsan的 name成员,输入项错误的是_。(分数:1.00)A.scanf(“%s“,zhangsan-name); B.scanf(“%s“,zhangsan.name);C.scanf(“%s“,ptr-name);D.scanf(“%s“,(*ptr).name);解析:解析 可用以下 3种形式来引用结构体变量中的成
44、员:结构体变量名成员名;指针变量名-成员名;(*指针变量名).成员名。程序定义了一个结构体变量 zhangsan,一个结构体指针 ptr,并且使指针指向变量 zhangsan。A 选项 zhangsan为结构体变量名,不能用-引用其成员,A 选项错误故选择 A选项。zhangsan.name、ptr-name、(*ptr).name 均是正确的引用结构体变量成员的方式,故 B、C、D 选项正确。28.有以下程序 #includestdio.h #define S(x)4*(x)*x+1 main() int k=5,j=2; printf(“%d/n“,S(k+j); 程序运行后的输出结果是_
45、。(分数:2.00)A.143 B.197C.33D.28解析:29.下列说法不正确的是 _ 。(分数:2.00)A.C语言程序是以函数为基本单位的,整个程序由函数组成B.C语言程序的一条语句可以写在不同的行上C.C语言程序的注释行对程序的运行功能不起任何作用,所以注释应该尽可能少写 D.C语言程序的每个语句都以分号结束解析:解析 本题涉及 C语言的 3个基本知识点:C 语言的源程序是由函数构成的,函数是其基本单位,每一个函数完成相对独立的功能,其中只能包括一个主函数;C 语言规定每个语句以分号结束,其书写格式是自由的,一条语句可以写在不同的行上,或者一行也可以写多条语句;注释行虽然对程序的运
46、行不起作用,但是它可以方便程序员阅读,提高程序的可读性和可移植性,所以书写注释行还是很有必要的。30.有以下结构体说明、变量定义和赋值语句: struct STD char name10; int age; char sex; s5,*ps; ps=s0; 则以下 scanf函数调用语句有错误的是_。(分数:1.00)A.scanf(“%s“,s0.name);B.scallf(“%d“,s0.age);C.scanf(“%c“,(ps-sex);D.scanf(“%d“,ps-age); 解析:解析 本题考查结构体的相关知识,题目中需要输入一个变量,scanf 要求参数为指针,而 D选项中 ps-age 为一个变量,不是指针,所以错误。31.在 C语言中,以下说法不正确的是_。(分数:2.00)A.在 C程序中,整数和实数都能被准确无误地表示出来 B.在 C程序中,任何一个变量名都代表存储器中的一个位置C.静态变量的生存期与整个程序的运行期相同D.C语言中,任何变量都必须先声明才能进行引用解析