高级语言程序设计(一)--综合测评
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目
一
二
三
四
五
六
七
分数
得分
一、单选题
1.有以下程序
#include “stdio.h”
main()
{FILE *fp; int a[10]={1,2,3,0,0},i;
fp=fopen("d2.dat,"wb");
fwrite(a,sizeof(int),5,fp);
fwrite(a,sizeof(int),5,fp);
fclose(fp);
fp=fopen("d2.dat","rb");
fread(a,sizeof(int),10,fp);
fclose(fp);
for(i=0;i<10;i++) printf("%d",a);
}
程序的运行结果是()
A.1,2,3,0,0,0,0,0,0,0,
B.1,2,3,1,2,3,0,0,0,0,
C.123,0,0,0,0,123,0,0,0,0,
D.1,2,3,0,0,1,2,3,0,0,
2.有以下程序,执行后输出结果是()
A.550 550
B.680 680
C.580 550
D.580 680
3.有如下程序
#include “stdio.h”
main()
{FILE *fp1;
fp1=fopen("f1.txt","w");
fprintf(fp1,"abc");
fclose(fp1);
}
若文本文件f1.txt中原有内容为:good,则运行以上程序后文件f1.txt中的内容为()
A.goodabc
B.abcd
C.abc
D.abcgood
4.设有以下语句
typedef struct TT
{char c; int a[4];}CIN;
则下面叙述中正确的是()
A.可以用TT定义结构体变量
B.TT是struct类型的变量
C.可以用CIN定义结构体变量
D.CIN是struct TT类型的变量
5.下列关于C语言文件的叙述中正确的是()
A.文件由一系列数据一次排列组成,只能构成二进制文件
B.文件由结构序列组成,可以构成二进制文件或文本文件
C.文件由数据序列组成,可以构成二进制文件或文本文件
D.文件由字符序列组成,只能是文本文件
6.设有以下说明语句
typedef struct
{ int n;
char ch[8];
}PER;
则下面叙述中正确的是()
A.PER 是结构体变量名
B.PER是结构体类型名
C.typedef struct 是结构体类型
D.struct 是结构体类型名
7.设有定义:int k=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是()
A.
B.
C.
D.
8.有以下程序段
typedef struct NODE
{ int num; struct NODE *next;
} OLD;
以下叙述中正确的是()
A.以上的说明形式非法
B.NODE是一个结构体类型
C.OLD是一个结构体类型
D.OLD是一个结构体变量
9.有以下程序,程序运行后的输出结果是()
A.2,4,3,9,12,12,11,11,18,9,
B.3,4,2,7,9,8,6,5,11,10,
C.2,3,1,6,8,7,5,4,10,9,
D.1,2,3,6,8,7,5,4,10,9,
10.C语句“x*=y+2;”还可以写作()
A.
B.
C.
D.
11.计算机能直接执行的程序是()
A.源程序
B.目标程序
C.汇编程序
D.可执行程序
12.若以下选项中的变量已正确定义,则正确的赋值语句是()
A.
B.
C.
D.
13.设int a,b,c;执行表达式a=b=1,a++,b+1,c=a+b--后,a,b和c的值分别是()
A.2,1,2
B.2,0,3
C.2,2,3
D.2,1,3
14.在C语言中,错误的常数是()
A.
B.
C.
D.
15.以下4组用户定义标识符中,全部合法的一组是()
A.
B.
C.
D.
16.以下不合法的数值常量是()
A.
B.
C.
D.
17.以下选项中正确的定义语句是()
A.
B.
C.
D.
18.以下不能定义为用户标识符的是()
A.
B.
C.
D.
19.以下能正确定义字符串的语句是()
A.
B.
C.
D.
20.有以下程序,程序运行后的输出结果是()
A.2 2
B.7 6
C.7 2
D.6 2
21.有以下程序,程序运行后的输出结果是()
A.
B.
C.
D.
22.以下程序段的输出结果是()
A.9
B.10
C.11
D.8
23.有以下程序,若要使程序的输出值为2,则应该从键盘给n输入的值是()
A.0
B.-1
C.-3
D.-5
24.若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)
s=a;
for(b=1;b<=c;b++) s=s+1;
则与上述程序段功能等价的赋值语句是()
A.
B.
C.
D.
25.若有定义:float x=1.5; int a=1,b=3,c=2;,则正确的switch语句是()
A.
B.
C.
D.
26.以下不能正确定义二维数组的选项是()
A.
B.
C.
D.
27.有以下程序,程序运行后输出结果是()
A.a+b=10
B.a+b=30
C.30
D.出错
28.以下程序运行后的输出结果是()
A.
B.
C.
D.
29.下列函数定义中,会出现编译错误的是()
A.
B.
C.
D.
30.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是()
A.函数调用可以作为独立的语句存在
B.函数调用可以作为一个函数的实参
C.函数调用可以出现在表达式中
D.函数调用可以作为一个函数的形参
31.有以下程序段
main()
{ int a=5,*b;
b=&a;
……
}
程序在执行了b=&a;语句后,表达式:*b的值是()
A.变量a的地址
B.变量b中的值
C.变量a中的值
D.变量b的地址
32.有以下程序,程序运行后的输出结果是()
A.16
B.10
C.8
D.6
33.已有定义:int i,a[10],*p;,则合法的赋值语句是()
A.
B.
C.
D.
34.有以下程序段
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;
b=p[5];
b中的值是()
A.5
B.6
C.8
D.9
35.若有说明语句:double *p,a;,则能通过scanf语句正确给输入项读入数据的程序段是()
A.
B.
C.
D.
36.有以下程序,执行后的输出结果是()
A.7
B.3
C.2
D.0
37.以下叙述中正确的是()
A.预处理命令行必须位于C源程序的起始位置
B.在C语言中,预处理命令行都以“#”开头
C.每个C程序必须在开头包括预处理命令行:#include < stdio.h >
D.C语言的预处理不能实现宏定义
38.有以下程序,程序运行后的输出结果是()
A.3
B.6
C.9
D.2
39.有以下程序,程序运行后的输出结果是()
A.2,3
B.2,4
C.1,4
D.1,2
40.设有以下语句
typedef struct S
{ int g; char h;} T;
则下面叙述中正确的是()
A.可用S定义结构体变量
B.可以用T定义结构体变量
C.S是struct类型的变量
D.T是struct S类型的变量
试卷
云南省高中会考试卷哪里下载南京英语小升初试卷下载电路下试卷下载上海试卷下载口算试卷下载
答案
一、单选题
1.有以下程序
#include “stdio.h”
main()
{FILE *fp; int a[10]={1,2,3,0,0},i;
fp=fopen("d2.dat,"wb");
fwrite(a,sizeof(int),5,fp);
fwrite(a,sizeof(int),5,fp);
fclose(fp);
fp=fopen("d2.dat","rb");
fread(a,sizeof(int),10,fp);
fclose(fp);
for(i=0;i<10;i++) printf("%d",a);
}
程序的运行结果是()
A.1,2,3,0,0,0,0,0,0,0,
B.1,2,3,1,2,3,0,0,0,0,
C.123,0,0,0,0,123,0,0,0,0,
D.1,2,3,0,0,1,2,3,0,0,
答案: d
答案要点: 语句fwrite(a,sizeof(int),5,fp);的作用是将数组a的前5个整数元素写入fp所指的文件中,程序连续执行了两次该语句后,fp所指文件d2.dat中的内容为1230012300。接着程序关闭了fp所指文件,又重新以只读方式打开使得文件的位置指针指向文件的开头。执行语句fread(a,sizeof(int),10,fp);的作用是将fp所指文件中的10个整数存入到数组a首地址开始的内存中,这样数组a的10个元素为{1,2,3,0,0,1,2,3,0,0}。所以程序的运行结果为1,2,3,0,0,1,2,3,0,0,。故本题选择D。
2.设有定义:int k=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是()
A.
B.
C.
D.
答案: a
答案要点: 本题考查的是自增运算。前缀自增运算时,表达式的值和变量自增之后的值相同;后缀自增运算时,表达式的值为变量自增之前的值。选项A, k++是先取k的值作为表达式的值,然后k的值再加1,所以该表达式的值是0,k的值是1。选项B,k+=1等价于k=k+1,表达式和k的值均为1。选项C, ++k是先将k的值再加1,再取k的值作为表达式的值,所以该表达式和k的值是都1。选项D,k+1,该表达式为1,k的值不变,还是0。综上所述,正确答案为A。
3.C语句“x*=y+2;”还可以写作()
A.
B.
C.
D.
答案: c
答案要点: x*=y+2的含义是x=x*(y+2)
4.计算机能直接执行的程序是()
A.源程序
B.目标程序
C.汇编程序
D.可执行程序
答案: d
答案要点: 源程序经过编译生成目标程序,目标程序经过连接后生成可执行文件;汇编程序经过汇编生成目标程序,目标程序经过连接后生成可执行文件。计算机能直接执行的程序是可执行程序。
5.若以下选项中的变量已正确定义,则正确的赋值语句是()
A.
B.
C.
D.
答案: c
答案要点: 本题考核的知识点是赋值和取余运算。赋值操作是将“=”右侧表达式的值赋给“=”左侧的变量。不能将一个表达式的值赋给一个表达式或一个常量,所以,选项B和D错误。运算符“%”的运算对象必须为整数,而选项A中26.8不是整数,故选项A不正确;选项C是将十六进制数0x12赋给变量x3,是正确的赋值语句。
6.设int a,b,c;执行表达式a=b=1,a++,b+1,c=a+b--后,a,b和c的值分别是()
A.2,1,2
B.2,0,3
C.2,2,3
D.2,1,3
答案: b
答案要点: 表达式a=b=1,a++,b+1,c=a+b--是一个逗号表达式。先计算a=b=1,结果a和b的值分别为1;再计算a++,结果a的值为2,b的值还是1;再计算b+1,a和b的值仍然保持2和1;再计算c=a+b--,结果a的值为2,c的值为3,b的值最后是0。
7.在C语言中,错误的常数是()
A.
B.
C.
D.
答案: a
答案要点: 指数形式的实数,其指数部分必须是十进制短整型常量。
8.以下4组用户定义标识符中,全部合法的一组是()
A.
B.
C.
D.
答案: a
答案要点: 本题考核的知识点是用户标识符的定义。标识符是以字母或下划线开头,由字母、数字或下划线组成的字符序列,并且用户标识符不能与C语言中的关键字相同。选项B中-max出现了非字母、数字和下划线字符,故选项B不正确;选项C中3COM不是由字母或下划线开头,故选项C不正确;选项D中int为C语言中的关键字,故选项D不正确;选项A中全部为合法的标识符,所以,4个选项中选项A符合题意。
9.以下不合法的数值常量是()
A.
B.
C.
D.
答案: c
答案要点: 本题考查的知识点是数值常量的表示形式。数值常量包括整型常量和实型常量,其中,整型常量又分为十进制、八进制和十六进制三种表示形式;实型常量分为小数形式和指数形式两种表示
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
。指数形式
规定
关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定
字母e(或E)之前必须有数字(可以是一个十进制的整数或小数),之后必须是一个整数。选项C的字母E之后是一个小数,故应该选择C。
10.以下选项中正确的定义语句是()
A.
B.
C.
D.
答案: c
答案要点: 选项A中实质是两条C语句,变量b没有定义。选项D中多了一个逗号。选项C是正确的第一语句。C语言不允许象选项B那样定义变量并赋初值。
11.以下不能定义为用户标识符的是()
A.
B.
C.
D.
答案: d
答案要点: 本题考核的知识点是用户标识符的定义。在C语言中,合法的标识符由字母、数字和下划线组成,并且第1个字符必须为字母或下划线。选项D中int为C语言中的保留字,不能作为用户的标识符;选项A中scanf虽然与库函数名相同,但在C语言中是允许的。选项B中Void的首字母是大写的,这和关键字void不同,C语言中大小写字母是有区别的。选项C也是合法的标识符。所以,4个选项中选项D符合题意。
12.以下能正确定义字符串的语句是()
A.
B.
C.
D.
答案: d
答案要点:
13.有以下程序,执行后输出结果是()
A.550 550
B.680 680
C.580 550
D.580 680
答案: c
答案要点: 此题考查利用指针数组实现结构体数组元素的排序。在主函数中,定义了一个长度为5的结构体数组s并赋初值,一个指针数组p和一个指针变量t,接着将数组s中各元素的地址依次赋给指针数组p中的各成员,如图1所示。
然后通过两个for循环将数组p按score的值从小到大的顺序排列。执行结果如图2所示。
因此最后输出的p[1]->Score的值为550,而数组s[1].Score的值为580,所以,4个选项中选项C符合题意。
14.有以下程序,程序运行后的输出结果是()
A.2 2
B.7 6
C.7 2
D.6 2
答案: c
答案要点:
15.有如下程序
#include “stdio.h”
main()
{FILE *fp1;
fp1=fopen("f1.txt","w");
fprintf(fp1,"abc");
fclose(fp1);
}
若文本文件f1.txt中原有内容为:good,则运行以上程序后文件f1.txt中的内容为()
A.goodabc
B.abcd
C.abc
D.abcgood
答案: c
答案要点: 由于文件f1.txt是以"w" 方式打开的,将删除f1.txt中原有内容“good”。执行语句fprintf(fp1,"abc");然后将 “abc”写到文件fp1所指的文件里,故文件“f1.txt”里最后的内容为“abc”,所以,选项C正确。
16.有以下程序,程序运行后的输出结果是()
A.
B.
C.
D.
答案: b
答案要点:
17.设有以下语句
typedef struct TT
{char c; int a[4];}CIN;
则下面叙述中正确的是()
A.可以用TT定义结构体变量
B.TT是struct类型的变量
C.可以用CIN定义结构体变量
D.CIN是struct TT类型的变量
答案: c
答案要点: 此题考查的是结构体的定义与typedef的用法。题中语句的功能是定义了一个结构体类型struct TT的同时用typedef为该类型定义了一个用户自定义类型CIN,经过了这样的定义后,可以用struct TT定义结构体变量,也可以用CIN定义结构体变量。TT只是一个结构体名,不能用TT定义结构体变量。如果定义语句去掉前面的typedef,就是一条定义结构体的同时声明一个结构体变量CIN的语句。如果定义语句去掉前面的typedef和后面的CIN(分号保留),就是一条完整的结构体定义语句。综上,4个选项中C符合题意。
18.以下程序段的输出结果是()
A.9
B.10
C.11
D.8
答案: c
答案要点: 本题考核的知识点是printf()函数的输出格式。整型变量i的值十进制数9,要求以八进制输出i的值,因为9的八进制的表示为11,所以最后输出的值为11。
19.有以下程序,若要使程序的输出值为2,则应该从键盘给n输入的值是()
A.0
B.-1
C.-3
D.-5
答案: c
答案要点: 本题考核的知识点是do—while循环的使用。根据题目要求,最后要使输出的s值为2,在程序中改变s的值语句只有循环体中的s+=1;语句,而初始s的值为0,显然要使s的值变为2,该语句必须执行两次,而do-while的特点是先执行循环体语句,然后再判断while循环条件。所以只需要while后面括号的循环判断表达式的值为真成立一次且只能为真一次,将四个选项中的内容依次代入该程序中不难得到只有n=-3刚好使循环判断条件a!=n为真一次。故4个选项中选项C符合题意。
20.若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)
s=a;
for(b=1;b<=c;b++) s=s+1;
则与上述程序段功能等价的赋值语句是()
A.
B.
C.
D.
答案: b
答案要点: 本题考核的知识点是for循环的使用。本程序中for循环共循环了c次,而每循环一次s的值加1,所以s的值为s+c。而最开始s的值为a,故4个选项中选项B符合题意。
21.若有定义:float x=1.5; int a=1,b=3,c=2;,则正确的switch语句是()
A.
B.
C.
D.
答案: c
答案要点: 本题考查的是switch语句。switch后的括号中只能是整型或字符型表达式,选项A中使用的是实型变量x,故不正确。选项B在switch的括号后面多了一个分号,故也不正确。switch的case标号后只能是常量或常量表达式,而不能是变量,所以选项D也不正确。故应该选择C。
22.以下不能正确定义二维数组的选项是()
A.
B.
C.
D.
答案: d
答案要点: 本题考核的知识点是二维数组的定义和初始化。在定义中如果对所有元素赋初值,其第1维的长度可以省略,故选项B正确;二维数组初始化也可以只对每行或前若干个行的前若干个元素赋初值,故选项A和选项C正确;在二维数组定义时什么情况下都不能省略第二维的长度,故选项D错误。所以,4个选项中选项D符合题意。
23.有以下程序,程序运行后输出结果是()
A.a+b=10
B.a+b=30
C.30
D.出错
答案: a
答案要点: 本题主要考查的是注释的格式。在C程序中,使用/*……*/表示注释,注释只是给人看的,对编译和运行不起作用。在本题程序中,从第3行右边的/*开始到第4行末尾的*/结束都属于注释部分,故b=20;语句不起作用。所以程序运行后的输出结果是a+b=10,应该选择A。
24.以下程序运行后的输出结果是()
A.
B.
C.
D.
答案: b
答案要点: 本题考核的知识点是printf()函数的简单应用。使用printf(格式控制,输出项表)输出数据时,格式说明与输出项必须匹配,若格式说明个数少于输出项,则多余的输出项不输出;若格式说明个数多于输出项,则输出一些毫无意义的乱码。程序中的printf()函数的输出格式部分只说明了一个%d,而输出成员列表却有两个成员a和b, 则只输出第一个成员a值为666,所以,4个选项中选项B符合题意。
25.下列函数定义中,会出现编译错误的是()
A.
B.
C.
D.
答案: b
答案要点: 本题考查的是函数形参的说明问题。函数定义时必须说明形参的类型,形参的说明可以采用形如:int max(int x,int y){……}或int max(x,y){ int x,y;……}。形参放入函数小括号说明时,一定要注意每个形参前面必须都要类型说明符。选项B中在说明形参时,省略了第二个参数的类型,故选项B编译不能通过。所以,4个选项中选项B符合题意。
26.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是()
A.函数调用可以作为独立的语句存在
B.函数调用可以作为一个函数的实参
C.函数调用可以出现在表达式中
D.函数调用可以作为一个函数的形参
答案: d
答案要点: 本题考查的知识点是函数调用的基本概念。在C语言中规定:有返回值的函数调用,可以作为表达式或表达式的一部分,也可以作为一条语句,故选项A和选项C正确。有返回值的函数调用可以作为一个函数的实参(即将其返回值传给相应的形参),而不能作为形参(因为形参是在函数定义时说明的),故选项B正确,选项D不正确。所以,4个选项中选项D符合题意。
27.有以下程序段
main()
{ int a=5,*b;
b=&a;
……
}
程序在执行了b=&a;语句后,表达式:*b的值是()
A.变量a的地址
B.变量b中的值
C.变量a中的值
D.变量b的地址
答案: c
答案要点: 本题考核的知识点是指向指针的指针。主函数中定义了一个整型变量a,一个整型指针变量b让指针b指向整型变量a,所以,*b为变量a的值,所以,4个选项中选项C符合题意。
28.有以下程序,程序运行后的输出结果是()
A.16
B.10
C.8
D.6
答案: b
答案要点: 本题考查的是指针的简单应用。题目中首先定义了一个int型数组a并初始化了,然后定义了两个指针变量p和q,并分别初始化p为指向数组元素a[3]、q指向p后面的第2个元素即指向a[5]。所以最终输出的值为a[3]+a[5]的值10。应该选B。
29.已有定义:int i,a[10],*p;,则合法的赋值语句是()
A.
B.
C.
D.
答案: d
答案要点: 本题考核的知识点是指针变量的赋值。本题中定义了一个整型数组a和一个整型指针变量p。选项A中将一个整型数赋值给一个指针变量,C语言规定,只能将地址赋给指针指针变量,故选项A不正确;选项B中a[5]为一数组元素,同样不是一个地址,故选项B不正确;选项C中a[2]为一数组元素,同样是一个整型数据,不是个地址,故选项C不正确;选项D中数组名a代表数组首地址加2,代表第三个元素的地址,故选项D正确。所以,4个选项中选项D符合题意。
30.有以下程序段
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;
b=p[5];
b中的值是()
A.5
B.6
C.8
D.9
答案: d
答案要点: 本题考核的知识点是通过指针引用数组的元素。本题中,定义了一个数组a[10],指针变量p指向元素a[3],则p+5指向a[8],那么*(p+5)即p[5]的值就是a[8]的值,所以b=9。所以,4个选项中选项D符合题意。
31.若有说明语句:double *p,a;,则能通过scanf语句正确给输入项读入数据的程序段是()
A.
B.
C.
D.
答案: d
答案要点: 本题考查的是指针的运算和scanf()函数。由于&a应该直接赋给指针变量p而不是它所指向的内容,故选项A和B可以排除。而scanf()函数输入项列表应该为对应变量的地址值,指针p中存放的为变量a的地址值,所以scanf(“%lf”,p);是正确的。故应该选择D。
32.有以下程序,执行后的输出结果是()
A.7
B.3
C.2
D.0
答案: c
答案要点: 此题考查的是递归算法的
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
。在一个递归算法中,至少要包含一个初始值和一个递归关系,此题的递归算法可以这样来表示,如下图。
在主函数中输出的结果是fun(7),而fun(7)=7-fun(5)=7-(5-fun(3))=7-(5-(3-fun(1))) =7-(5-(3-3))=7-(5-0)=7-5=2。
33.以下叙述中正确的是()
A.预处理命令行必须位于C源程序的起始位置
B.在C语言中,预处理命令行都以“#”开头
C.每个C程序必须在开头包括预处理命令行:#include < stdio.h >
D.C语言的预处理不能实现宏定义
答案: b
答案要点: 此题考查的是C语言中编译预处理的基本概念。在C语言中,以“#”号开头的命令行是编译预处理命令行,它不属于C语句,末尾没有分号,因此B叙述是正确的。预处理命令行可以根据需要出现在程序的任何一行的开始位置,选项A叙述是错误的。#include < stdio.h > 预处理命令行的意思是将stdio.h头文件插入源程序中该行命令所在的位置,表示我们将在后续行中用到stdio.h头文件中定义的函数或类型,若程序中没有用到这些函数或类型就可以不用包含此头文件,故选项C叙述是错误的。C提供的预处理功能主要有:宏定义、文件包含和条件编译三种功能,故选项D叙述是错误的。
34.有以下程序,程序运行后的输出结果是()
A.3
B.6
C.9
D.2
答案: b
答案要点:
35.有以下程序,程序运行后的输出结果是()
A.2,3
B.2,4
C.1,4
D.1,2
答案: d
答案要点: 此题考查的是结构体变量作为函数参数的综合应用题。结构体变量a作为函数的参数,传递的是该变量的值,相当于把变量a的值赋予形参变量p,形参变量p值的变化不会影响到实参a,所以程序运行后的输出结果是1,2。
36.设有以下语句
typedef struct S
{ int g; char h;} T;
则下面叙述中正确的是()
A.可用S定义结构体变量
B.可以用T定义结构体变量
C.S是struct类型的变量
D.T是struct S类型的变量
答案: b
答案要点: 此题考查结构体定义的方法。题中语句的功能是定义了一个结构体类型struct S的同时用typedef为该类型定义了一个用户自定义类型T,经过了这样的定义后,可以用struct S定义结构体变量,也可以用T定义结构体变量。S只是一个结构体名,不能用S定义结构体变量。所以,4个选项中选项B符合题意。
37.下列关于C语言文件的叙述中正确的是()
A.文件由一系列数据一次排列组成,只能构成二进制文件
B.文件由结构序列组成,可以构成二进制文件或文本文件
C.文件由数据序列组成,可以构成二进制文件或文本文件
D.文件由字符序列组成,只能是文本文件
答案: c
答案要点: 本题考核的是C语言文件概念的理解。C语言文件由数据序列组成,可以构成二进制文件或文本文件。
38.设有以下说明语句
typedef struct
{ int n;
char ch[8];
}PER;
则下面叙述中正确的是()
A.PER 是结构体变量名
B.PER是结构体类型名
C.typedef struct 是结构体类型
D.struct 是结构体类型名
答案: b
答案要点: 题中是结构型的自定义,PER是结构体类型名。
39.有以下程序段
typedef struct NODE
{ int num; struct NODE *next;
} OLD;
以下叙述中正确的是()
A.以上的说明形式非法
B.NODE是一个结构体类型
C.OLD是一个结构体类型
D.OLD是一个结构体变量
答案: c
答案要点: 此题考查的是结构体的定义和题typedef的概念。题中语句的功能是定义了一个结构体类型struct NODE的同时用typedef为该类型定义了一个用户自定义类型OLD,经过了这样的定义后,可以用struct NODE定义结构体变量,也可以用NEW定义结构体变量。NODE只是一个结构体名,不能用NODE定义结构体变量。如果定义语句去掉前面的typedef,就是一条定义结构体的同时声明一个结构体变量NEW的语句。如果定义语句去掉前面的typedef和后面的NEW(分号保留),就是一条完整的结构体定义语句。综上,4个选项中C符合题意。
40.有以下程序,程序运行后的输出结果是()
A.2,4,3,9,12,12,11,11,18,9,
B.3,4,2,7,9,8,6,5,11,10,
C.2,3,1,6,8,7,5,4,10,9,
D.1,2,3,6,8,7,5,4,10,9,
答案: a
答案要点: 此题考查的是结构体变量成员作为函数参数的综合应用题。结构体变量s的成员s.a作为函数的参数传的是数组s.a的首地址,函数f()中的形参变量a将指向实参数组的首地址,这样在函数f()中对形参变量a所指数组的操作实质上就是对实参数的s.a的操作。在函数f()中的for循环进行了9次,变量i由0变化到8的过程中,将数组元素a[0]~a[8]的每个元素中的内容改变为原来的值加上其下标的和,a[9]没有变,这样数组a中的内容变为{2,4,3,9,12,12,11,11,18,9}。程序运行后的输出结果是2,4,3,9,12,12,11,11,18,9,。