8. 已知 a=10,b=15,c=1,d=2,e=10,则表达式a++&&e++&&c++的值为_____. 1
9. 执行下列语句后, b的十进制值是_____. 1
int x=240,y=15,b; char z='A'; b=(( x && y ) && ( z < 'a' ));
10.设a,b,c,t为整型变量,初值为a=3,b=4,c=5,执行完语句t=!(a+b)+c-1&&b+c/2 后,t的值是_____. 1
x=2,y=3,z=4; 则表达式x+y>z&&y==z的值为_____.0
x=2,y=3,z=4; 则表达式x+y&&(x=y)的值为_____.1
13.当a=1,b=2,c=3时,执行以下程序段后b=_____.2 if (a>c) b=a; a=c; c=b;
14.已知 i=5, 写出语句 a=(i>5)?0:1; 执行后整型变量 a 的值是_____.1
第6章 循环结构
一、单选题
1. 选择结构中的条件与循环结构中循环成立的条件, 在写法上可以是任一表达式,但其值只能被判断为"真"或"假"。 哪个数作为逻辑"假"值(A)。
A、0
B、-1
C、非零的数
D、1
2. 以下for循环的执行次数是 for(x=0,y=0;(y=123)&&(x<4);x++);(C)。
A、3次
B、循环次数不定
C、4次
D、是无限循环
3. 以下程序的执行结果是(B)。
main()
{ int num = 0;
while( num <= 2 ) { num++; printf( "%d,",num ); } }
A、0,1,2
B、1,2,3,
C、1,2,3,4,
D、1,2,
4. 执行语句 for(i=1;i++<4;); 后变量 i 的值是(B)。
A、3
B、5
C、4
D、不定
5.以下描述中正确的是(C)。
A、由于 do-while 循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B、do-while 循环中,根据情况可以省略 while
C、在 do-while 循环体中,必须有能使循环退出的操作。
D、do-while 循环由do开始,用while结束,在 while(表达式)后面不能写分号
6. t为int类型,进人下面的循环之前,t的值为0
while( t=1 )
{ „„}
则以下叙述中正确的是(C)。
A、循环控制表达式的值为0
B、循环控制表达式不合法
C、循环控制表达式的值为1
D、以上说法都不对
7. 针对for循环语句,for(表达式1;表达式2;表达式3),下列说法正确的是(B).
A、break语句可以一次性跳出多层嵌套循环
B、break语句只能跳出最内层循环
C、continue语句可以一次性跳出多层嵌套循环
D、continue语句可以跳出最内层循环
8. 在以下给出的表达式中,与 do--while(E)语句中的(E)不等价的
表达式是(B)。
A、(E>0||E<0)
B、(E==0)
C、(!E==0)
D、(E!=0)
9. 下面有关 for 循环的正确描述是(C)。
A、for 循环是先执行循环体语句,后判断表达式
B、在 for 循环中,不能用 break 语句跳出循环体
C、for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
D、for 循环只能用于循环次数已经确定的情况
10. 设j和k都是int类型,则下面的for循环语句(D)。
for(j=0,k=0;j<=9&&k!=876;j++) scanf("%d",&k);
A、最多执行9次
B、是无限循环
C、循环体一次也不执行
D、最多执行10次
11. 以下正确的描述是(A).
A、只能在循环体内和switch语句内使用break语句
B、continue语句的作用是终止整个循环的执行
C、从多层嵌套的外层循环中退出时,只能使用goto语句
D、在循环体内使用break和continue语句的作用相同
12.从键盘输入的整数中找出最小值min,输入0时结束.请在A处填写正确语句( D )。
#include "stdio.h"
main()
{ int min=0,a;
do{
scanf("%d",&a);
if(min>a) min=a;
}while(___A___);
printf("%d",min);
}
A、a=0
B、a==0
C、a>0&&a<0
D、a!=0
13.设有如下程序段:
int k=10;
while(k==0)
k--;
则下述说明中正确的是( A).
A、循环体一次也不执行
B、循环体执行一次
C、死循环
D、循环体执行10次
14.以下不是无限循环的语句为(D)。
A、while(1){x++;}
B、for(;;x++=i);
C、for(i=10;;i--) sum+=i;
D、for(y=0,x=1;x>++y;x=i++) i=x;
15.下面程序段运行的结果是(A).
x=-1;
do{
x=x*x;
}while (!x);
A、循环执行一次
B、有语法错误
C、死循环
D、循环执行两次
16.以下正确的描述是(A).?1193
A、只能用continue语句来终止本次循环
B、switch语句中不能出现continue语句
C、在循环中break语句不能独立出现
D、goto语句只能用于退出多层循环
17.从循环体内某一层跳出,继续执行循环外的语句是(C)。
A、continue语句
B、空语句
C、break语句
D、return语句
18.语句while(!E);中的表达式!E等价于(D)。
A、E==1
B、E!=0
C、E!=1
D、E==0
二、判断题
1. 在do-while循环中,任何情况下都不能省略while.T
2. 在do-while循环中,根据情况可以省略while.F
3. do-while循环由do开始,while结束,循环体可能一次也不做。F
4. for语句的循环体至少执行一次.F
5. for循环的三个表达式都可以省略.T
6. for循环语句不能用于循环次数未知的情况下.F
7. for循环语句只能用于循环次数确定的情况下.F
8. break语句能够终止当前进行的多层循环.F
9. break语句不能终止正在进行的多层循环.T
ue语句用于终止循环体的本次执行.T
11.循环结构中的continue语句是使整个循环终止执行. F
ue语句对于while和do-while循环来说,意味着转去计算while表达式.T
13.对于for(表达式1;表达式2;表达式3)语句来说,continue语句意味着转去执行表达式2.F
14. 若有说明int c;则while(c=getchar());没有语法错误。T
三、填空题
1. 程序段int k=10; while(k=0) k=k-1;循环体语句执行_____次. 0
2. 以下程序段要求从键盘输入字符,当输入字母为'Y' 时,执行循环体,则下划线处应填写_____. ==
ch=getchar();
while(ch ____ 'Y')
ch=getchar();
3. abcde<回车>,则以下while循环体将执行 _____ 次. 0
while((ch=getchar())=='e') printf("*");
4. 若所用变量都已正确定义,请填写以下程序段的输出结果_____. OK
for(i=1;i<=5;i++);
printf("OK");
5. 设x和y均为int型变量,则以下for循环中的scanf语句最多可执行的次数是_____.3
for (x=0,y=0;y!=123&&x<3;x++)
scanf ("%d",&y);
第7章 数组
一、单选题
1. 以下不能正确进行字符串赋初值的语句是(A)。
A、char str[5]="good!";
B、char str[5]={'g','o','o','d'};
C、char *str="good!";
D、char str[]="good!";
2. 函数调用:strcat(strcpy(str1,str2),str3)的功能是(D)。
A、将串str1复制到串str2中后再连接到串str3之后
B、将串str2连接到串str1之后再将串str1复制到串str3中
C、将串str1连接到串str2之后再复制到串str3之后
D、将串str2复制到串str1中后再将串str3连接到串str1之后
3. char a1[]="abc",a2[80]="1234";将a1串连接到a2串后面的语句是(A)。
A、strcat(a2,a1);
B、strcat(a1,a2);
C、strcpy(a1,a2);
D、strcpy(a2,a1);
4. int a[10];合法的数组元素的最小下标值为(D)。
A、10
B、9
C、1
D、0
5. 以下不正确的定义语句是(C)。
A、double x[5]={2.0,4.0,6.0,8.0,10.0};
B、char c1[]={'1','2','3','4','5'};
C、int y[5]={0,1,3,5,7,9};
D、char c2[]={'x10','xa','x8'};
6. 在C语言中,一维数组的定义方式为:类型说明符 数组名(B)。
A、[整型常量]或[整型表达式]
B、[正整型常量表达式]
C、[整型表达式]
D、[常量表达式]
7. 以下能对一维数组a进行正确初始化的语句是(B)。
A、int a[10]={};
B、int a[]={0};
C、int a[10]={10*1};
D、int a[10]=(0,0,0,0,0)
8. static char str[10]="China";数组元素个数为(D)。
A、6
B、9
C、5
D、10
9. 若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是(A)。
A、3
B、无确定值
C、4
D、2
10.若定义int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};char c='a',d,g;
则数值为4的表达式是 (D).
A、a[4]
B、a[g-c]
C、a['d'-'c']
D、a['d'-c]
11.下面合法的语句定义是(A).
A、char a[ ]={'0','1','2','3','4','5'};
B、int a[ ]="string";
C、int a[5]={0,1,2,3,4,5};
D、char a="string";
a[10];不能将字符串"abc"存储在数组中的是(B)。
A、int i;for(i=0;i<3;i++)a[i]=i+97;a[i]=0;
B、a="abc";
C、strcpy(a,"abc");
D、a[0]=0;strcat(a,"abc");
13.选择正确的输入语句(D)。:(其中:char string[20];)使得string的内容为"I am
student".
A、scanf("%s", string);
B、scanf("%c", &string);
C、scanf("%s", &string);
D、gets(string);
14.对以下说明语句 int a[10]={6,7,8,9,10}; 的正确理解是(B)。
A、将5个初值依次赋给a[6]至a[10]
B、将5个初值依次赋给a[0]至a[4]
C、因为数组长度与初值的个数不相同,所以此语句不正确
D、将5个初值依次赋给a[1]至a[5]
15.以下对一维整型数组a的正确说明是(D)。
A、int a(10);
B、int n; scanf("%d",&n); int a[n];
C、int n=10,a[n];
D、#define SIZE 10 (换行) int a[SIZE];
16.以下定义语句中,错误的是(A)。
A、int n=5,a[n];
B、int a[]={1,2};
C、char s[10]="test";
D、char *a[3];
17.下面叙述中不正确的是(C).
A、可以对字符型数组进行整体输入和输出.
B、不可以对浮点型数组进行整体输入和输出.
C、可以对整型数组进行整体输入和输出.
D、字符型数组可以存放字符串.
18.下面各语句中,能正确进行赋字符串操作的语句是(B).
A、char s1[5][ ]={"ABCDE"};
B、char s2[6]={'A','B','C','D','E'};
C、char st[ ][ ]={"ABCDE"};
D、char s[5]={'A','B','C','D','E'};
19.若有说明: int a[3][4]={0};则下面正确的叙述是(A)。
A、数组a中每个元素均可得到初值0
B、只有元素a[0][0]可得到初值0
C、数组a中各元素都可得到初值,但其值不一定为0
D、此说明语句不正确
20.若有说明 int a[3][4];则a数组元素的非法引用是(B)。
A、a[1][3]
B、a[0][4]
C、a[0][2*1]
D、a[4-2][0]
二、判断题
1. C语言中引用数组元素的方括号可以用花括号代替.F
2. 数组的首地址一定是第一个数组元素的地址.T
3. 数组整体不参加数据处理(即不参加各种运算),参加数据处理的只能是数组的元素.T
4. 定义 int x[5],n;则x=x+n;或x++;都是正确的.F
5. 定义一维数组的形式为:类型说明 数组名[表达式],其中表达式必须是整型常量. F
6. 引用数组元素时,下标可以是整型表达式或整型常量.T
7. 引用数组元素时,数组元素下标必须是整型常量.F
8.下列程序段是否正确: F
int a[10];
....
a++;
9. 若有定义 int a[10];则 for (i=0;i<=10;i++) a[i]=i;编译时无语法错误.T
10.二维数组在内存中存贮时,是按列的顺序连续存贮各元素的值.F
11.二维数组在内存中存贮时,是按行的顺序进行存储的。T
12.若有定义和语句:
int a[3][3]={{3,5},{8,9},{12,35}},i,sum=0;
for(i=0;i<3;i++) sum+=a[i][2-i];则sum=21.T
a[3][4]={{1},{5},{9}}; 它的作用是将数组各行第一列的元素赋初值,其余元素值为0。T
14.对于字符数为n个的字符串,其占用的内存为n+1个字节空间.T
15.如果有一个字符串,其中第十个字符为'n',则此字符串的有效字符为9个。F
16.设有数组定义:char array[]="hello";则数组 array所占的内存空间为5字节.F
17.字符串"Da lian"在内存中的存储长度是7. F
18.语句 char ch[12]={"C Program"};与语句 char ch[ ]="C Program";具有不同的赋初值功能.T
函数用来输出一个字符.F
函数是用来输入一个字符的函数.F
21、定义char s[9];gets(s);若输入的字符串是Turbo c↙(↙代表按回车键操作) 则输入给数组s中的字符个数是7.T
22.字符处理函数strcpy(str1,str2)的功能是把字符串1接到字符串2的后面.F
23.两个字符串中的字符个数相同时才能进行字符串大小的比较.F
三、填空题
1. C语言中,数组元素的下标下限为_____. 0
2. C语言中,数组名是一个不可变的_____常量,不能对它进行加减和赋值运算. 地址
3、按内存排列顺序, 数组char a[2]中的所有元素是a[0]和_____. a[1]
4. 若有以下数组a,数组元素:a[0]~a[9],其值为 9 4 12 8 2 10 7 5 1 3 该数组的元素中,数值最小的元素的下标值是_____. 8
5. C语言中,二维数组在内存中的存放方式为按_____优先存放.行
6. static int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};其中a[1][2]的值为_____. 6
7. 字符串的结束标志是_____. '0' 0
8. 连接字符串的函数是_____,只写函数名即可.strcat
9. 字符串比较的库函数是_____,只写函数名即可. Strcmp
10.字符处理函数strcpy(str1,str2)的功能是把字符串1接到字符串2的后面.F
第8章 函数
一、单选题
1. 以下函数的类型是(C)。
fff(float x)
{
return 5;
}
A、void 类型
B、与参数x的类型相同
C、int类型
D、无法确定
2. 设有如下函数
fac(int x)
{
float y=1.0;
return(x*y);
}
则函数的类型为(A).
A、int型
B、float型
C、无法确定
D、void型
3. 设有宏定义#define PI 3.14 和#define S(r) PI*r*r,则S(2)的值为(B).
A、6.28
B、12.56
C、3.14
D、9.42
4. 以下正确的函数定义是(C).
A、double fun(int x, int y) { z=x+y; return z;}
B、fun(x, y) { int x, y; double z; z=x/y; return z;}
C、float f(int x, int y) {float z; z=x/y; return z;}
D、fun(int x, y) { int z; return z; }
5. 已知有宏定义#define SQR(a) 2*a*a,则SQR(3+4)的值为(A).
A、22
B、32
C、98
D、18
6. 以下正确的说法是(A).
A、函数的类型决定返回值的类型
B、定义函数时,形参的类型说明可以放在函数体内
C、return后面不能为表达式
D、如果形参与实参的类型不一致,以实参类型为准
7. C语言规定,函数返回值的类型是由(A)。
A、在定义该函数时所指定的函数类型所决定
B、return语句中的表达式类型所决定
C、调用该函数时系统临时决定
D、调用该函数时的主调函数类型所决定
8. 若调用一个函数,且此函数中没有return语句,则正确的说法是:
该函数(B)。
A、没有返回值
B、返回一个不确定的值
C、返回若干个系统默认值
D、能返回一个用户所希望的值
9.设函数的调用形式如下: f((x1, x2),(y1,y2,y3)),则函数有 (A)个形参.
A、2
B、4
C、3
D、5
10.在"文件包含"的预处理中,被包含的文件应是(A).
A、源文件
B、可执行文件
C、目标文件
D、批处理文件
11.以下程序的输出结果为(C)。
main()
{int a=1,b=2,c=3,d=4,e=5;
printf("%dn",func((a+b,b+c,c+a),(d+e)));
}
int func(int x,int y)
{ return(x+y); }
A、9
B、15
C、13
D、函数调用出错
12.以下正确的说法是(D)。
A、用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动去调
B、用户若需调用标准库函数,调用前必须重新定义
C、系统根本不允许用户重新定义标准库函数
D、用户可以重新定义标准库函数,若如此,该函数将失去原有含义
13.在#include命令中,文件名可用双引号或尖括号括起来,对于二者的下列说法中正确的是(A).
A、用尖括号时,直接按系统标准方式检索文件目录.
B、用双引号时,直接按系统标准方式检索文件目录.
C、用双括号和尖括号时,都不检查源文件所在的文件目录.
D、以上说法都不对.
14. C语言程序中必须有的函数是(B)。
A、#include "stdio.h"
B、main
C、printf
D、scanf
15. 程序运行结束后,屏幕上输出值为( B).
static int x=10;
main( )
{ int x=3;
f( );
x- -;
printf("%d",x);
}
f( )
{ x++;
}
A、10
B、2
C、11
D、3
16. file1.c中有命令,#include ,若file2.c中有全局静态变量a,则( B).
A、a在file1.c中应用extern说明.
B、a在file1.c中有效,不必用extern说明.
C、a在file1.c中不生效
D、a在file1.c和file2.c中均不生效.
17.以下叙述中正确的是(C)。
A、可以在一个函数中定义另一个函数
B、main()函数必须放在其它函数之前
C、构成C程序的基本单位是函数
D、所有被调用的函数一定要在调用之前进行定义
18.在执行"文件包含"命令时,下列说法正确的是(A).
A、作为一个源程序编译,得到一个目标文件.
B、一个 include 命令可指定多个被包含文件.
C、在编译时作为两个文件联结.
D、被包含的文件可以是源文件或目标文件.
19.在定义全局变量和局部静态变量的同时赋值,变量的初始化在(C)时确定的.
A、运行
B、编辑
C、编译
D、调试
20.关于建立函数的目的,以下正确的说法是(A)。
A、提高程序的可读性
B、减少程序文件所占内存
C、减少程序的篇幅
D、提高程序的执行效率
21.以下函数调用语句中实参的个数是(D)。
func((e1,e2),(e3,e4,e5));
A、3
B、5
C、语法错误
D、2
22.设有宏定义#define SUB(x,y) (x)*y,且a=3,b=4,则 SUB(a++,b++) 的值为(D).
A、13
B、16
C、20
D、12
23.在宏定义#define PI 3.14159中, 用宏名替换一个(A).
A、字符序列
B、函数名
C、单精度数
D、双精度数
24.以下标识符中可以作为用户函数名的是(D).
A、struct
B、int
C、union
D、go_to
25.以下叙述错误的是(B).
A、函数调用可以出现在一个表达式中
B、函数调用可以作为一个函数的形参
C、函数调用可以作为一个函数的实参
D、函数允许递归调用
26.若用数组名作为函数的实参,传递给形参的是(B)。
A、数组第一个元素的值
B、数组的首地址
C、数组元素的个数
D、数组中全部元素的值
27.在C语言程序中(B)。
A、函数的定义可以嵌套,但函数的调用不可以嵌套
B、函数的定义不可以嵌套,但函数的调用可以嵌套
C、函数的定义和函数调用不可以嵌套
D、函数的定义和函数调用均可以嵌套
28.下列说法中正确的是(B).
A、函数调用不占运行时间,只占编译时间.
B、宏替换不占运行时间,只占编译时间.
C、有参数的宏定义,就是函数.
D、在定义宏时,宏名与带参数的括弧之间可以加空格.
29.函数定义时的参数为形参,调用函数时所用的参数为实参,则下列描述正确的是(C).
A、实参与形参是双向传递
B、形参可以是表达式
C、形参和实参可以同名
D、实参类型一定要在调用时指定
30.以下错误的描述是:函数调用可以(D)。
A、出现在执行语句中
B、做为一个函数的实参
C、出现在一个表达式中
D、做为一个函数的形参
31.以下不正确的说法是:C语言规定(C)。
A、实参可以是常量,变量或表达式
B、实参可以为任何类型
C、形参可以是常量,变量或表达式
D、形参应与其对应的实参类型一致
32.下列形式,不属于编译预处理命令的是(D).
A、#ifdef M
B、#undef M
C、#if (M>1)
D、while (M>1)
33.执行下面程序后,输出结果是(D)。
main()
{ int a,b,c;
a=45,b=27,c=0;
c=max(a,b);
printf("%dn",c);
}
int max(int x,int y)
{ int z;
if(x>y) z=x;
else z=y;
return(z);
}
A、72
B、18
C、27
D、45
34.在C语言的函数中,下列正确的说法是(B)。
A、形参可以是常量和变量
B、可以有也可以没有形参
C、数组名不能作形参
D、必须有形参
二、判断题
1. 在C程序中, 函数既可以嵌套定义, 也可以嵌套调用。F
2. 在主函数中,必须要对被调用函数进行类型说明,否则在编译时会出现错误.F
3. 在程序中的第二个函数之后定义了某全局变量,则该程序的所有函数均可使用它.F
4. 函数调用语句:func(rec1,rec2+rec3,(rec4,rec5));中,含有的实参个数是5.F
5. 函数的返回值可以通过函数中的return语句获得。T
6. 通过return语句,函数可以带回一个或一个以上的返回值。F
7. C语言中,通过函数调用只能获得一个返回值.F ?1801
8. 变量根据其作用域的范围可以分作局部变量和全局变量.T
9. 当全局变量与局部变量同名时,在局部变量的作用域范围之内,局部变量起作用.T
10.对静态变量的初始化不是在编译阶段完成的.F
11.当变量的存储类型定义缺省时,系统默认为变量的存储类型为auto类型,分配在静态区.F
12.静态局部变量是在编译时被初始化的,故它只被赋初值一次.T
13.没有初始化的数值型静态局部变量的初值是不确定的值. F
14.对静态变量的初始化不是在编译阶段完成的.F
15.对静态数组的初始化是在编译阶段完成的. T
16.每次调用函数时,都要对静态局部变量重新进行初始化.F
17.函数调用结束后,静态局部变量所占用的空间被释放.F
18.在一个函数中定义的静态局部变量可以被另一个函数调用.F
19.在一个函数中定义的静态局部变量不能被另外一个函数所调用.T
20.当全局变量与局部变量同名时,在局部变量的作用域范围之内,全局变量起作用.F
21.计算机编译系统对宏定义在编译时进行语法检查.F
22.若有宏定义:#define S(a,b) t=a;a=b;b=t由于变量t没定义,
所以此宏定义是错误的。F
23.如果字符串与宏名相同,则不管其是否在双撇号内,都要进行宏替换.F
24.在定义宏时,在宏名与带参数的括弧之间不应加空格.T
25.一个include 命令只能指定1个被包含的文件。T
26.被包含文件是在编译时先单独生成目标文件,然后连接到可执行文件中去.F
27.被包含文件与其所在的文件(即用#include命令的源文件),在预编译后,成为同一个文件.T
28.如果被包含文件中有全局静态变量,它们在用#include命令的源文件中有效.T
29.#define 和printf 都不是C语句。T
30.数组名可以作为函数的实参和形参.T ?1556
31.数组名作为函数调用时的实参,实际上传递给形参的是数组第一个元素的值.F
32.数组名作为函数调用时的实参,实际上传递给形参的是数组全部元素的值.F
三、填空题
1. C语言中一个函数由函数首部和_____两部分组成. 函数体
2. 函数不可以进行嵌套定义,但可以进行嵌套_____. 调用
3. 如果函数不要求返回值,可用_____来定义函数为空类型. void
4. 从函数的形式上看,函数分为无参函数和_____两种类型. 有参函数【8】
5. 函数调用语句func((e1,e2),(e3,e4,e5))中含有_____个实参. 2
6. 函数的_____调用是一个函数直接或间接地调用它自身. 递归
7. 函数调用时的实参和形参之间的数据是单向的_____传递.值
8. 静态变量和外部变量的初始化是在_____阶段完成的,而自动变量的赋初值是 在_____时进行的. (编译),(运行/函数调用/调用) ?1752
第9章 指针
一、单选题
1. 下列关于指针定义的描述,错误的是(A)。
A、指针是一种变量,该变量用来存放某个变量的值
B、指针是一种变量,该变量用来存放某个变量的地址值
C、指针变量的类型与它所指向的变量类型一致
D、指针变量的命名规则与标识符相同
2. 以下程序的输出结果是(A).
main()
{char str[ ]="ABCD",*p=str;printf("%dn",*(p+3));}
A、68
B、不确定的值
C、字符D的地址
D、0
3. 若有 char s1[]="abc",s2[20],*t=s2;gets(t); 则下列语句中能够实现当字符串s1大于字符串s2时,输出s2的语句是(C)。
A、if(strcmp(s2,s1)>0)puts(s2);
B、if(strcmp(s2,t)>0)puts(s2);
C、if(strcmp(s1,t)>0)puts(s2);
D、if(strcmp(s1,s1)>0)puts(s2);
4. 若有说明:int *p,m=5,n;以下正确的程序段是(D)。
A、scanf("%d",&n);*p=n;
B、p=&n;scanf("%d",*p)
C、p=&n;scanf("%d",&p);
D、p=&n;scanf("%d",p);
5. char h,*s=&h;可将字符H通过指针存入变量h中的语句是(A)。
A、*s='H';
B、s='H'
C、*s=H;
D、s=H;
6. 函数fun用于将一字符串按相反次序显示,则横线上的表达式为(D).
void fun(char *s)
{ if(! *s)
return;
_____;
printf("%c",*s);
}
A、printf("%s",s+1);
B、fun(*(s+1));
C、printf("%s",s+strlen(s)-1);
D、fun(s+1);
7. 若有说明:int *p1,*p2,m=5,n; 以下均是正确赋值语句的选项是(A)。
A、p1=&m;p2=p1;
B、p1=&m;p2=&p1
C、p1=&m;*p2=*p1;
D、p1=&m;p2=&n;*p1=*p2;
8. 下列程序的运行结果是:(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",a, b);
}
A、6 3
B、3 6
C、0 0
D、编译出错
9. 字符串指针变量中存入的是(A)。
A、字符串的首地址
B、字符串变量
C、第一个字符
D、字符串
10. 以下程序的输出结果是 (D).
main( )
{char str[ ]="ABCD",*p=str; printf("%dn",*(p+4));}
A、68
B、字符D的地址
C、不确定的值
D、0
11.以下程序段给数组所有的元素输入数据,请选择正确答案填入(C)。
#include
main()
{ int a[10],i=0;
while(i<10) scanf("%d",(_______));
.
.
.
}
A、&a[i+1]
B、a+i
C、a+(i++)
D、&a[++i]
12. 若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是(C)。
A、*p=*q;
B、n=*q;
C、p=n;
D、p=q;
13.下述函数的功能是(C).
int fun(char *x)
{ char *y=x;
while(*y++);
return y-x-1;
}
A、比较两个字符串的大小
B、求字符串存放位置
C、求字符串的长度
D、将字符串x连接到字符串y后面
14.在说明语句:int *f();中,标识符f代表的是(A)。
A、一个返回值为指针型的函数名
B、一个用于指向函数的指针变量
C、一个用于指向一维数组的行指针
D、一个用于指向整型数据的指针变量
15.下面程序的输出结果应该是(B ).
char s[ ]="ABCD";
main()
{char *p;
for ( p=s;p
printf("%s",p);
}
A、DCBA
B、ABCDBCDCDD
C、ABCDABCABA
D、ABCD
16.变量p为指针变量,若p=&a,下列写法不正确的是(A)。
A、*(p++)==a++
B、&*p==&a
C、(*p)++==a++
D、*&a==a
17.以下程序段 char *alp[]={"ABC","DEF","GHI"};
int j; puts(alp[1]);的输出结果是(D)。
A、D
B、A
C、B
D、DEF
18.下面判断正确的是(D)。
A、char c[4]="abc",d[4]="abc";等价于 char c[4]=d[4]="abc";
B、char str[10]={"china"};等价于char str[10];str[]={"china"};
C、char *a="china";等价于 char *a;*a="china";
D、char *s="china";等价于 char *s;s="china";
a[10]={1,2,3,4,5,6,7,8};int *p;p=&a[5];p[-3]的值是(D)。
A、4
B、2
C、不一定
D、3
二、判断题
1. 如果需要向函数内传递多个值,用数组和用指针效果是一样的.T
2. 将函数func的入口地址赋给指针变量p的语句是_____.p=func;
3. 定义 int a[ ]={1,2,3,4},y,*p=&a[1];,则执行y=(*--p)++后,y的值是2. F
4. 有如下说明:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为9的表达式是
*(p+8).T
5. 假设有int a[10], *p;则p=&a[0]与p=a等价。T
6. 设有如下定义:int *p; *p=100;则 printf("%d",p); 的输出结果是100.N
7. char *p="girl";的含义是定义字符型指针变量p,p的值是字符串"girl"。F
8. 数组名与指针变量是相互等价的.F
9. 在C语言中,函数名代表函数的入口地址.T
10.若 p 为指针变量,a 为数组名,则 a-p是合法的表达式.T
11.指向某一变量的指针,就是该变量的内存地址.T
23.若定义 int array[5], *p; 则赋值语句 p=array;是正确的.T
三、填空题
1. 定义int *p,a[5];将数组a的首地址赋给指针变量p的语句是_____.p=a;p=&a[0];【9】
定义int *p,a[5];将数组a的首地址赋给指针变量p的语句是_____. p=a; p=&a[0];
执行下列语句后,*(p+1)的值是_____. b
char s[3]="ab",*p; p=s;
2、将数组a的首地址赋给指针变量p的语句是_____. p=a; 或 p=&a[0];
3、将函数funl 的入口地址赋给指针变量p的语句是_____. p=funl;
一
4、在c程序中,只能给指针变量赋NULL值和_____值. 地址
小写的L,不是数字
第10章 结构体与共用体
一、单选题
1. 对结构体类型的变量的成员的访问,无论数据类型如何都可使用的运算符是(B)。
A、&
B、.
C、*
D、->
2. 定义结构体的关键字是(A)。
A、struct
B、typedef
C、enum
D、union
3. C语言结构体类型变量在程序执行期间(B)。
A、没有成员驻留在内存中
B、所有成员一直驻留在内存中
C、只有一个成员驻留在内存中
D、部分成员驻留在内存中
4. C语言中,定义结构体的保留字是(C)。
A、typedef
B、union
C、struct
D、enum
5. 当说明一个结构体变量时系统分配给它的内存是(D)。
A、成员中占内存量最大者所需的容量
B、结构中第一个成员所需内存量
C、结构中最后一个成员所需内存量
D、各成员所需内存量的总和
6. 在定义构造数据类型时,不能(A)。
A、末尾不写分号
B、说明存储类型
C、初始化
D、说明变量
7. 使用共用体变量,不可以(A)。
A、同时访问所有成员
B、进行动态管理
C、节省存储空间
D、简化程序设计
8. 设有如下定义: struct sk {int a; float b;} data,*p;
若要使p指向data中的a域,正确的赋值语句是(C)。
A、p=(struct sk*) data.a;
B、*p=data.a;
C、p=&data.a;
D、p=&data,a;
9. 下列程序正确的运行结果为(C).
#include
main()
{
union u
{char *name;
int age;
int income;
} s;
="WANGLING";
=28;
=1000;
printf("%dn", );
}
A、8
B、28
C、1000
D、不确定
10.对于下述定义,不正确的叙述是(B).?65
union data
{int i;
char c;
float f;
}a,b;
A、变量a的地址和它的各成员地址都是相同的
B、可以在定义时对a初始化
C、变量a所占内存的长度等于成员f的长度
D、不能对变量a赋值,故a=b非法
11.若有以下结构体定义:
struct example
{ int x;
int y;
} vl;
则(D)是正确的引用或定义.
A、example.x=10;
B、struct v2;v2.x=10;
C、example v2;v2.x=10;
D、struct example v2={10,3};
12.若有以下程序段,则使用错误的选项是( ).
struct student
{
int num;
int age;
};
struct student stu[3] ={{1001,20},{1002,19},{1004,20}};
main()
{
struct student *p;
p=stu;
„
}
A、(*p).num
B、(p++)->num
C、p=&
D、p++
二、判断题
1. 两个类型相同的结构体变量,可以互相赋值.T【10】
2. 共用体变量中起作用的成员是最后一次存放的成员.T
3. 一个共用体变量中可以同时存放其所有成员.F
4. typedef可以定义生成新的数据类型.F
5. 使几个不同的变量共占同一段内存的结构,称为"结构体"类型.N
6. 对于不同类型的数据,若想合成一个有机的整体,可以引用结构体进行定义。T
7. 在程序中定义了一个结构体类型后,可以多次用它来定义具有该类型的变量。T
8. 共同体变量所占的内存长度等于最长的成员的长度。T
三、填空题
1. 设有以下结构类型说明和变量定义,则变量a在内存所占字节数是 _____。34 struct
stud { char name[10]; float s[4]; double ave; } a,*p; 【10】
2. 设有以下结构类型说明和变量定义,则变量b在内存所占字节数是 _____。 21
struct stud { short int age; char num[3]; float s[2]; double ave; } b,*p;
3. 结构体是不同数据类型的数据集合,作为数据类型, 必须先说明结构体_____,再说明结构体变量. 类型
4. 设有以下共用体类型说明和变量定义,则变量c在内存所占字节数是 _____。 20
union stud { short int num; char name[10]; float score[5]; double ave; } c;
5. 在内存所占字节数是 _____。 struct stud { char num[6]; float s[4]; double
ave; } a,*p; 30
6、设有以下共用体类型说明和变量定义,则变量d在内存所占字节数是 _____。 union stud
{ short int num; char name[8];float score[3]; double ave; } d,stu[3]; 12
7. 设有以下共用体类型说明和变量定义,则变量a在内存所占字节数是 _____。 union stud
{ char num[6]; float s[4]; double ave; } a,*p; 16
8. 结构体是不同数据类型的数据集合,作为数据类型, 必须先说明结构体_____,再说明结构体变量.类型
第11 章 文件
一、单选题
1. 定义my_file 为文件型指针变量,使用fopen只读方式打开一个已存在的二进制文件,以下正
确的调用形式为(C).
A、my_file=fopen("", "r");
B、my_file=fopen("", "rb+");
C、my_file=fopen("", "rb");
D、my_file=fopen("", "r+");
2.有两个整型变量dog和cat,若要从磁盘文件把数据读到其中,
正确的形式是(B).
A、fscanf(dog ,2,1,fp);
B、fscanf(fp,"%d%d",&dog ,&cat);
C、fscanf(dog ,cat,2,1,fp);
D、fscanf(fp,"%d",&dog ,&cat);
3.若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数
feof(fp)的值为(D)。
A、-1
B、1
C、一个非0值
D、0
4.若以"a+"方式打开一个已存在的文件,则以下叙述正确的是(A)。
A、文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作
B、以上各种说法皆不正确
C、文件打开时,原有文件内容不被删除,位置指针移到文件开头,可作重写和读操作
D、文件打开时,原有文件内容被删除,只可作写操作
二、判断题
1. C语言中,在打开文件时,必须说明文件的使用方式,"wb+"只能用于文件的写.F
2. 下面的定义和语句是合法的:file *fp;fp=fopen("","r");F
3. 用fopen("file","r+");打开的文件"file"可以进行修改。T
4. 在打开文件时,必须说明文件的使用方式,"wb+"表示以读/写方式打开一个二进制文件.T
5. C语言中,在打开文件时,必须说明文件的使用方式,"r+"用于打开一个不存在的文件.F
6. C语言中,关闭一个文件就删除了这个文件.F
7. C语言中,打开一个文件就意味着产生了一个文件.F
8.在打开文件时,必须说明文件的使用方式,"r"表示以只读方式打开一个文件.
三、填空题
1. 调用 fopen 函数打开一文本文件,在"使用方式"这一项中, 为输入而打开需填入_____.r
2. 在C语言中,关闭文件即是文件指针不再指向该_____. 文件
3. 在C语言中,根据要处理的文件存储的编码形式,可以把文件分为ASCII文件和_____文件. 二进制
4. 若有fp=fopen("","r+")打开文件语句,这个文件的数据是以_____的形式存放在内存中,该文件的使用方式为读/_____。文本(ASCII码) 写
发表评论