main(){ while(putchar(getchar())!='$'); printf(\"end\"); }
A) abcd$abcde B)abcd$end C)abcdend D) abcd$abcdeend 9. 以下程序段 ( A )
x=-1;
do { x=x*x; } while(x>0);
A. 是死循环 B. 循环执行一次 C. 循环执行二次 D. 有语法错误 10. 下面程序段执行后的结果为: ( B ) int sum=0, n=10; do { sum=sum+n; n++; } while(n<10)
printf(“%d,%d”,sum,n)
A. 0, 10 B. 10, 11 C. 0, 11 D. 以上结果都不对 11.对以下程序段的叙述正确的是___A____.
int x=1; do
, 下面程序的运行结果是 B
{ x= -1*x; } while(!x)
A) 是死循环 B) 循环执行一次 C)循环执行二次 D)有语法错误 12.循环“for(i=0,x=1;i=10&&x>0;i++);”的循环执行( A )。 A.无限次 B.不确定次 C.10次 D.9次 13.执行语句{for(j=0;j<=3;j++) a=1;}后变量j的值是 C .
A)0 B) 3 C)4 D) 1
14. 有如下程序
main()
{ int i,sum=2;
for(i=1;i<=3;i+=2) sum+=i; printf(“%d\\n”,sum); } 该程序的执行结果是 A
A) 6 B) 3 C) 死循环 D) 4 *15、执行语句”for ( i=0; i++<3 ; ) ;”后,变量i的值为( C A、2 B、3 C、4 D、5
16.设x和y均为int型变量,则执行以下的循环后,y的值为( D )。 for(y=1,x=1;y<=50;y++) {
if(x>=0) break;
if(x%2==1) {x+=5;continue;} x-=3; }
A.2 B.4 C.6 D.1 五 数组
1. 以下对一维数组a的正确说明是: D
A) char a(10);
B) int a[];
C)int k=5,a[k]; D)char a[3]={‘a’,’b’,’c’}; 2.以下能对一维数组a进行初始化的语句是: ( C ) A. int a[5]=(0,1,2,3,4,) B. int a(5)={} C. int a[3]={0,1,2} D. int a{5}={10*1} 3.在C语言中对一维整型数组的正确定义为 D 。 A)int a(10); B)int n=10,a[n];
C)int n;a[n]; D)#define N 10
。 ) int a[N];
4、已知:int a[10]; 则对a数组元素的正确引用是( D )。
A、a[10] B、a[3.5] C、a(5) D、a[0]
5. 执行下面的程序段后,变量k中的值为 C
A) 不定值 B) 33 C) 30 D) 10 int k=3, s[2]; s[0]=k; k=s[0]*10; *6. 下列说法中错误的是 C
A 构成数组的所有元素的数据类型必须是相同的 B 用指针法引用数组元素允许数组元素的下标越界 C 一维数组元素的下标依次是1、2、3…… D 定义数组时的长度可以是整型常量表达式
7. 若有以下数组说明,则数值最大的和最小的元素下标分别是( B )。 int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};
A.1,12 B.0,11 C.1,11 D.0,12 8.若有以下数组说明,则i=10;a[a[i]]元素数值是( B )。 int a[12]={1,4,7,10,2,5,8,11,3,6,9,12}; A.10 B.9 C.6 D.5
9. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组
x在内存中所占字节数是 D A) 3
11.若有说明:int a[][3]={{1,2,3},{4,5},{6,7}}; 则数组a的第一维的大小为: ( B )
A. 2 B. 3 C. 4 D.无确定值 12.以下定义语句中,错误的是 ( D )
B) 6 C) 10 D) 20
A) int a[]={1,2}; B) char *a; D) int n=5,a[n];
C) char s[10]=“test”; int i;
13.下面程序段的输出结果是: ( C )
int x[3][3]={1,2,3,4,5,6,7,8,9}; for (i=0;i<3;i++) printf(\"%d \
A) 1 5 9 B) 1 4 7 C) 3 5 7 D) 3 6 9 14.对二维数组的正确定义是( C )
A.int a[ ] [ ]={1,2,3,4,5,6}; B.int a[2] [ ]={1,2,3,4,5,6};
C.int a[ ] [3]={1,2,3,4,5,6}; D.int a[2,3]={1,2,3,4,5,6}; 15.已知int a[3][4];则对数组元素引用正确的是__C___ A)a[2][4] B)a[1,3] C)a[2][0] D)a(2)(1)
六、函数
1.C语言中函数返回值的类型是由 A 决定的.
A)函数定义时指定的类型 B) return语句中的表达式类型 C) 调用该函数时的实参的数据类型 D) 形参的数据类型 2. 在C语言中,函数的数据类型是指( A )
A 函数返回值的数据类型 B. 函数形参的数据类型 C 调用该函数时的实参的数据类型 D.任意指定的数据类型 *3.C程序中函数返回值的类型是由 A 决定的.
A)函数定义时指定的函数类型 B) 函数中使用的最后一个变量的类型 C)调用函数时临时确定 D) 调用该函数的主调函数类型 *4. C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式为
( B )
A. 由系统选择 B. 单向值传递 C. 由用户指定传递方式 D. 地址传递 5. 在函数调用时,以下说法正确的是( B ) A.函数调用后必须带回返回值 B.实际参数和形式参数可以同名
C.函数间的数据传递不可以使用全局变量 D.主调函数和被调函数总是在同一个文件里 *6. 在C语言程序中,有关函数的定义正确的是( B )。
A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义不可以嵌套,但函数的调用可以嵌套 C.函数的定义和函数的调用均不可以嵌套 D.函数的定义和函数的均可以嵌套
A.在C语言程序中,调用函数时,如函数参数是简单变量,则只能把实参的B.C语言函数既可以嵌套定义又可递归调用 C.C语言函数必须有返回值,否则不能使用函数
D.在C语言程序中有调用关系的所有函数必须放在同一个源程序文件中
*7. 以下对C语言函数的有关描述中,正确的是( A )。 值传递给形参,形参的值不能传送给实参
*8.C语言中对函数的描述正确的是 C .
A)可以嵌套调用,不可以递归调用 B) 可以嵌套定义
C)嵌套调用,递归调用均可 D)不可以嵌套调用 9.以下叙述中正确的是 A
A) 构成C程序的基本单位是函数 B) 可以在一个函数中定义另一个函数 C) main()函数必须放在其它函数之前
D) 所有被调用的函数一定要在调用之前进行定义
10.用数组名作为函数调用时的实参时,传递给形参的是 A 。
A)数组首地址 B)数组第一个元素的值 C)数组全部元素的值 D)数组元素的个数
11.有一函数的定义如:void fun(char *s){……},则不正确的函数调用是( D )。 A.main()
{char a[20]=”abcdefgh”; fun(a); …… } B.main()
{ char a[20]=”abcdefgh”; fun(&a[0]); …… } C. main()
{ char a[20]=”abcdefgh”; char *p=a;fun(p); …… } D. main()
{char a[20]=”abcdefgh”; fun(a[]); …… }
13、函数的功能是交换变量x和y中的值,且通过正确调用返回交换的结果。能正确执行此功能的函数是( D )。 A、funa(int *x, int *y) { int *p;
B、funb(int x , int y)
{ int t;
t=x; x=y; y=t; }
*p=*x ; *x=*y; *y=*p; }
C、func(int *x, int *y) { int *p;
p=x;x=y; y=p;
}
14. 有如下程序
int func(int a,int b) { return(a+b);} main()
{ int x=2,y=x,z=8,r;
r=func(func(x,y),func(y,z)); printf(“%d\\n”,r); } 该程序的输出的结果是 C
A) 12 B) 13 C) 14 D) 15 *15. 以下程序的输出结果是 B
int a, b; void fun()
{ a=100; b=200; } main()
{ int a=100, b=100;
fun();
printf(“%d%d \\n”, a,b); }
A) 100200
*16. 下列说法中正确的是:( A )
A. 局部变量在一定范围内有效,且可与该范围外的变量同名。
B. 如果一个源文件中,全局变量与局部变量同名,则在局部变量范围内,
局部变量不起作用。
C. 局部变量缺省情况下都是静态变量。
D. 函数体内的局部静态变量,在函数体外也有效。 17. 在C语言中,表示静态存储类别的关键字是: ( C )
A) auto
B) register
C) static
D) extern
B) 100100
C) 200100
D) 200200
D、fund(int *x, int *y)
{ int t;
t=*x; *x=*y; *y=t; }
18.未指定存储类别的变量,其隐含的存储类别为( A )。 A)auto B)static C)extern D)register
七、结构体
1. 若有以下说明语句: struct student { int num; char name[ ]; float score; }stu;
则下面的叙述不正确的是: ( D )
A. struct是结构体类型的关键字
B. struct student 是用户定义的结构体类型 C. num, score都是结构体成员名 D. stu是用户定义的结构体类型名 2.若有以下说明语句: struct date { int year; int month; int day; }brithday;
则下面的叙述不正确的是__C___.
A) struct是声明结构体类型时用的关键字 B) struct date 是用户定义的结构体类型名 C) brithday是用户定义的结构体类型名 D) year,day 都是结构体成员名
*3. 已知:(设整型2字节,字符型1字节,浮点型4字节) struct { int i; char c; float a; }test;
则sizeof(test)的值是 D 。 A) 4 B) 5 C) 6 D) 7
4. 以下对结构变量stul中成员age的非法引用是 B struct student
{ int age; int num; }stu1,*p; p=&stu1;
A) stu1.age B) student.age C) p->age D) (*p).age
*5. 有如下定义
struct person{char name[9]; int age;};
struct person class[10]={“Tom”,17,“John”,19,
“Susan”,18,“Adam”,16,};
根据上述定义,能输出字母A的语句是( B ) A) printf(“%c\\n”,class[3].name); B) printf(“%c\\n”,class[3].name[0]); C) printf(“%c\\n”,class[3].name[1]); D) printf(“%c\\n”,class[2].name[3]);
6.存放100个学生的数据、包括学号、姓名、成绩。在如下的定义中,不正确的是( B )。
A.struct student
{int sno; char name[20];
float score;} stu[100]; B. struct student stu[100]
{int sno; char name[20]; float score}; C. struct { int sno; char name[20];
float score;} stu[100]; D. struct student
{int sno; char name[20]; float score;}; struct student stu[100];
*7.设有定义语句“struct {int x; int y;} d[2]={{1,3},{2,7}};”则“printf(“%d\\n”,d[0].y/d[0].x*d[1].x);”输出的是( D )。
A.0 B.1 C.3 D.6 8.已知: struct sk { int a;
float b;
}data, *p;
若有p=&data,则对data中的成员a的正确引用是( C )。 A、(*p).data.a B、p->data.a C、(*p).a D、p.data.a 9.设有如下定义:
struck sk
{ int a;
float b; }data; int *p;
若要使P指向data中的a域,正确的赋值语句是 C A) p=&a;
B) p=data.a; C) p=&data.a;
D)*p=data.a;
10.设有以下说明语句:
typedef struct stu { int a; float b; } stutype;
则下面叙述中错误的是( D )。 A、struct是结构类型的关键字
B、struct stu是用户定义的结构类型 C、a和b都是结构成员名
D、stutype是用户定义的结构体变量名
八.指针
1. 语句int *p;说明了 C 。 A)p是指向一维数组的指针
B)p是指向函数的指针,该函数返回一int型数据 C)p是指向int型数据的指针
D)p是函数名,该函数返回一指向int型数据的指针 2. 变量的指针,其含义是指该变量的:( B )
A. 值 B. 地址 C. 名 D.一个标志
3.若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是
( A )
A) pb=&x B) pb=x C) *pb=&x D) *pb=*x 4、已知:int a, *p=&a; 则下列函数调用中错误的是( D )。 A、scanf(“%d”,&a); B、scanf(“%d”,p); C、printf(“%d”,a); D、printf(“%d”,p); 5.对于同类型的指针变量,不可能进行的运算是( C )。
A.- B.= C.+ D.== 6. 对于基类型相同的两个指针变量之间,不能进行的运算是 C
A) < B) = C) + D) - 7.下列不正确的定义是( A )。
A. int *p=&i,i; B.int *p,i; C.int i,*p=&i; D.int i,*p;
8. 若有说明:int n=2,*p=&n,*q=p,则以下非法的赋值语句是: ( D )
A)p=q B)*p=*q C)n=*q D)p=n 9. int *p,a=10,b=1; p=&a; a=*p+b;
执行该程序段后,a的值为 C
A) 编译出错 B) 10 C) 11 D) 12
A)int p=*a; B)int *p=a; C)int p=&a; D)int *p=&a;
11.若有说明语句“int a[5],*p=a;”,则对数组元素的正确引用是( C )。 A.a[p] B.p[a] C.*(p+2) D.p+2 12. 若指针变量p指向整型数组a[10]的首地址, 即p=a ; 则下列数组元素a[i](0A. p+i B.&( a+i) C. *(a+i) D. *(p+i*2) 13. 有如下程序
int a[10]={1,2,3,4,5,6,7,8,9,10},*P=a; 则数值为9的表达式是 B
A) *P+9 B) *(P+8) C) *P+=9 D) P+8 14.若有以下定义,则不能表示a数组元素的表达式是( B )。 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
A.*p B.a[10] C.*a D.a[p-a]
*15.已知int a[5],*p=a;下面的叙述中正确的是 A 。
A) p+1与a+1等价 B) p[1]与*p等价
10.有语句:int a[10],;则 B 是对指针变量p的正确定义和初始化。
C) *(p+1)与a+1等价 D) p[1]与a++等价
16. 若有以下说明:
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为4的表达式是( C )
A) *p+4 B) *(p+4) C) *(p+3) D) p+3 17. 下面程序的输出结果是 C
A) 0
B) 1 C) 2 D) 输出错误
main()
{ int a[ ]={1,2,3,4,5,6,7,8,9,0},*p; p=a;
printf(“%d\\n”,*p+1); }
18. 执行语句 char c[10]={ ”abcd”},*pc=c; 后,*(pc+4)的值是( B )
A) “abcd” B)’\\0’ C) ‘d’ D) 不确定 19.下列函数的功能是 A 。 void fun(int *p1,int *p2)
{ int p;
p=*p1;*p1=*p2;*p2=p; }
A) 交换*p1和*p2的值 B) 语法正确,但无法交换*p1和*p2的值 C) 交换*p1和*p2的地址 D)有语法错误 *20. 有如下程序
main()
{ char s[]=“ABCD”, *P;
for(p=s+1; pA) ABCD B) A C) B D) BCD BCD B C CD CD C D D D D
*21. 请读程序,输出结果为: ( A ) #includeint a[]={2,4,6,8}; main() { int i,b[4]; int *p=a;
for(i=0;i<4;i++) {b[i]=*p;p++;} printf(\"%d\\n\}
A) 6 B) 8 C) 4 D) 2
*22.内存空间被分成不同区域,其中用函数void* malloc(unsigned int size); 申请的内存在 C 分配。
A) 程序区 B)静态存储区 C)动态存储区
九、字符串
1. 在C语言中,以 D 作为字符串结束标志
A)’\\n’ B)’ ’ C) ’0’ D)’\\0’ 2.下列数据中属于“字符串常量”的是( A )。
A.“a” B.{ABC} C.‘abc\\0’ D.‘a’ 3.字符串 “ABCD”在内存占用的字节数是( D )。 A.4 B.6 C.1 D.5 4. 下面不正确的字符串常量是:( A )
A. ‘PROGRAM’ B “12’12” C “0” D “ ”
5.设有数组定义: char array [ ]=\"abcd\"; 则数组array所占的空间为 B
A) 4个字节 B) 5个字节 C) 6个字节 D) 7个字节
*6.下述对C语言中字符数组的描述错误的是 C 。
A)字符数组可以存放字符串
B)字符数组中的字符串可以整体输入和输出
C)可在赋值语句中通过赋值运算符“=”对字符数组整体赋值
D)可在对字符数组定义时通过赋值运算符“=”对字符数组整体初始化
7.已知char x[]=\"hello\则关于两个数组长
度的正确描述是 B .
A)相同 B)x大于y C)x小于y D)以上答案都不对
8.给出以下定义:
char x[ ]=\"abcdefg\";
char y[ ]={'a','b','c','d','e','f','g'};
则正确的叙述为 C
A) 数组x和数组y等价 B) 数组x和数组y的长度相同 C) 数组x的长度大于数组y的长度 D) 数组x的长度小于数组y的长度 9、若有以下语句,则正确的描述是( D )。 static char x[ ]=”12345” ;
static char y[ ]={‘1’,‘2’,‘3’,‘4’, 5’,’\\0’} ; A、x数组长度大于y数组长度 B、x数组和y数组不相同 C、x数组长度小于y数组长度 D、x数组等价于y数组
10、已知:char s[20]= ”programming”, *ps=s; 则不能引用字母o的表达式
是( C )。
A、ps[2] B、s[2] C、ps+2 D、ps+=2, *ps
*11.判断两字符串s1,s2是否相等,应使用( D ). A)if(s1==s2) B)if(s1=s2)
C)if(strcpy(s1,s2)) D)if(strcmp(s1,s2)==0)
*12.以下printf语句的输出结果为: A
printf(“%d\\n”,strlen(“school”)); A) 7 B) 6 C)存在语法错误 D)不定值 13. 对字符数组s赋值,不合法的一个是( C )
A. char s[]=\"Beijing\"; B. char s[20]={\"beijing\; C. char s[20];s=\"Beijing\";
D. char s[20]={'B','e','i','j','i','n','g'};
14. 对字符数组str赋初值,str不能作为字符串使用的一个是( D )
A. char str[]=\"shanghai\"; B. char str[]={\"shanghai\;
C. char str[9]={'s','h','a','n','g','h','a','i',’\\0’}; D. char str[8]={ 's','h','a','n','g','h','a','i'}; 15. 合法的数组定义是 C
A)int a[]={“string”}; B) int a[5]={0,1,2,3,4,5}; C)char a[]= “string”; D) char a[5]={0,1,2,3,4,5};
16. 对字符数组s赋值,不合法的是: ( C )
A) char s[]=\"china\"; B) char s[20]={\" china \;
C) char s[20];s=\" china\"; D) char s[20]={'c','h','i','n','a'};
17. 下面初始化与此初始化charc[ ]=“I am happy”;等价的是( A )
A) char c[ ]={‘I’,’’,’a’,’m’,’’,’h’,’a’,’p’,’p’,’y’,’\\0’}; B) char c[ ]={‘I’,’am’,’happy’};
C) char c[ ]={‘I’, ’’,’a’,’m’,’’,’h’,’a’,’p’,’p’,’y’}; D)char c[ ]={‘I’,’am’,’happy’,’\\0’}; 18.下面各语句中,能正确进行赋字符串操作的语句是( C )。 A. char s[5]={“ABCDE”};
B. char s[5]={‘A’,‘B’,‘C’,‘D’,‘E’,’\\0’}; C. char *s;s=“ABCDE”; D. char *s;scanf(“%s”,&s);
19.下列字符串赋值方式不正确的是( A )
A).char str[20]; B). char *str ; str=”I am a boy!”; str=”I am a boy!”; C). char *str=”I am a boy!”; D). char str[20]=” I am a boy!”; 十、文件
*1.在C语言中,文件由( A )。
A.字符(字节)序列组成 B.记录组成 C.数据行组成 D.数据块组成 2. 下面各函数中能实现打开文件功能的是 A
A) fopen B) fgetc C) fputc
D) fclose
*3.若文件型指针fp指向某文件的末尾,则函数feof(fp)的返回值是( B )。
A.0 B. 1 C.非0值 D.NULL 4. 下列语句中,把变量fp说明为一个文件型指针的是( A ) 。
A) FILE *fp; B) FILE fp; C) file *fp; D) file fp;
5、在进行文件操作时,写文件的一般含义是( B )。 A、将磁盘中的信息存入计算机内存
B、将计算机内存中的信息存入磁盘 C、将计算机CPU中的信息存入磁盘 D、将磁盘中的信息存入计算机CPU
*6.以读写方式打开一个已有的文本文件file1,并且FILE *fp,下面fopen函数正确的调用方式是( B )。
A.fp=fopen(“file1”,“r”) B.fp=fopen(“file1”,“r+”) C.fp=fopen(“file1”,“rb”) D.fp=fopen(“file1”,“w”)
*7.标准库函数fputs(p1,p2)的功能是( C )。
A.从p1指向的文件中读一个字符串存入p2指向的内存 B.从p2指向的文件中读一个字符串存入p1指向的内存 C.从p1指向的内存中读一个字符串写到p2指向的文件中 D.从p2指向的内存中读一个字符串写到p1指向的文件中
十一、编译预处理
*1.在C语言程序中,以#号带头的行是预编译处理( A )。
A.命令 B.语句 C.函数 D.字符串 A. define PI 3.14159
B. #define P(a,b)=strcpy(a,b) C. #define stdio.h D. #define PI 3.14159; A. #define MYNAME=”ABC” B. #include stdio.h C. for(i=0;i<10;i++); D. struct int stu{int name};
A.#define PI 3.14159 B.#include ; B.if(2); D.for(;;) if(1) break; 2.下列正确的预编译命令是( D )。3.下列命令或语句中,正确的是( C )。
*4.下列命令或语句中,错误的是( C )。