C语言错题集

指针

1.char *s=“C Language”;表示s是一个指向字符串的指针变量,把字符串的首地址赋予s。 (1分)

T

2.C 语言是一种具有某些低级语言特征的高级语言。 (1分)

T

3.文件指针用于指向文件,文件只有被打开后才有对应的文件指针。 (1分)

T

4.在C语言中,逗号既可以作为运算符,也可以作为分隔符。 (1分)

T

5.变量被定义后 , 它的作用域和寿命就被确定了 , 并且不可改变。 (1分)

T

6.字符串在内存中的起始地址称为字符串的指针,可以定义一个字符指针变量指向一个字符串。 (1分)

T

7.设变量定义为 int a[2]={1,3}, p=&a[0]+1;,则p的值是( )。(2分)

A.2
B.3
C.4
D.&a[0]+1

B
&a[0]+1是地址的增加

8.以下结构类型可用来构造链表的是()。 (2分)

A.struct aa{ int a;int * b;};
B.struct bb{ int a;bb * b;};
C.struct cc{ int * a;cc b;};
D.struct dd{ int * a;aa b;};

B

9.若有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方式是( )。 (2分)

p=max;
*p=max;
p=max(a,b);
*p=max(a,b);

A
在本题中,将函数的入口地址赋给指针后就可以用该指针调用函数了。

10.若有定义char str[]={“Python”, “SQL”, “JAVA”, “PHP”, “C++”}; 则表达式str[1] > *str[3]比较的是:(2分)

字符P和字符J
字符串SQL和字符串PHP
字符串Python和字符串JAVA
字符S和字符P

D

11.若用数组名作为函数调用时的实参,则实际上传递给形参的是( )。 (1分)

数组首地址
数组的第一个元素值
数组中全部元素的值
数组元素的个数

A

12.以下程序的输出结果是( )。 (2分)

int main(void)
{  int x[]={1,3,5,7,2,4,6,0}, i, j, k;
   for(i=0; i<3; i++)
       for (j=2; j>=i; j--)
           if(x[j+1]>x[j]) {  	
               k=x[j]; x[j]=x[j+1]; x[j+1]=k;
	   }
   for(i=0; i<3; i++)
	for(j=4; j<7-i; j++)
	   if(x[j+1]>x[j]){ 	
               k=x[j]; x[j]=x[j+1]; x[j+1]=k;	
	   }
   for (i=0; i<3; i++)
        for(j=4; j<7-i; j++)
	   if(x[j]>x[j+1]){ 	
               k=x[j];x[j]=x[j+1];x[j+1]=k;	
	   }
   for (i=0; i<8; i++)  
        printf("%d",x[i]);
   printf("\n");	
   return 0;		
}

75310246
01234567
76310462
13570246

A

13.设变量已正确定义,以下()是合法的C语句。 (1分)

A.if ( n <= 10 );

B.   switch ( k ) {
	  case 1: printf("one"); break;
	  case 2: printf("two"); break;
	  case 1: printf("one"); break;
	  default: printf("zero"); break;
	 }

C. switch ( k%2 ) {
   default: printf("zero"); break;
   case 1: printf("one");
   case 1+1: printf("two"); 
}

D.n = 10;
   switch ( k ) {
   case n%3: printf("one");
   case n%4: printf("two"); 
   default: printf("zero"); 
}

A

14.关于C语言中的函数,下列说法正确的是 (2分)

A.函数应该以它们调用的顺序来定义。
B.return 语句可以出现在函数的任何地方。
C.函数定义可以在主函数前面也可以在主函数后面。
D.函数总是返回一个整型数据。

BC
A.不需要,只要在调用前声明过就好。
D.返回的数据与定义的类型有关

15.如果变量定义如下,则正确的语句是( )。 (1分)

int  k, a[10];

A.a[-1] = -1;

B.a[0] = 23;

C.k = 3; a[k - 2] = a[9] + 1;

D.for(k = 1; k <= 10; k++){
   printf(%d ”, a[k]);
}

E.for(k = 0; k < 10; k++){
   scanf(%d ”, &a[k]);
}

BCE

16.下面函数用于求出两个整数之和,并通过形参传回两整数相加之和值。请填空。

void add(int x, int y, ______(4分) z) {
___________=x+y;

}

int*|int *
z| z

17.以下程序的输出结果是______
(2分)。

void swap(int *a, int *b)
{  
  int *t;
  t=a; a=b; b=t;
}
Int main()
{  
  int i=2,j=5,*p=&i,*q=&j;
  swap(p,q); 
  printf("%d %d\n",*p,*q)
}

2 5

文件流习题

1.随机操作只适用于文本文件。 (1分)
F
评测结果:答案错误(0 分)

解析:随机操作文本指的是用seek函数重新定位文件指针进行读写操作,访问数组中的元素也是随机的,知道下标就可以,所以说随机操作不只是针对于文件来讲。

2.文件的读函数是从输入文件中读取信息,并存放在内存中。(1分)
T
评测结果:答案错误(0 分)

3.c语言源程序是文本文件,目标文件和可执行文件是二进制文件。 (1分)
T
评测结果:答案错误(0 分)

4.文件指针指向文件缓冲区中文件数据的存取位置。 (1分)
F
评测结果:答案错误(0 分)

5.如果二进制文件a.dat已经存在,现在要求写入全新数据,应以()方式打开。 (2分)

“w”
“wb”
“w+”
“wb+”
评测结果:答案错误(0 分)

B
首先是dat(二进制)文件,必须带b。全新文件,不能有+号,故选B

6.定义FILE *fp; 则文件指针fp 指向的是()。(2分)

A.文件在磁盘上的读写位置
B.文件在缓冲区上的读写位置
C.整个磁盘文件
D.文件类型结构体
评测结果:答案错误(0 分)

C

7.按存储介质划分,文件可以分为: (2分)

A.记录文件和流式文件
B.普通文件和设备文件
C.文本文件和二进制文件
D.程序文件和数据文件
评测结果:答案错误(0 分)

B

8.已知函数的调用形式fread(buffer, size, count, fp);其中buffer代表的是( )。 (1分)

A.一个整数变量,代表要读入的数据项总数
B.一个文件指针,指向要读的文件
C.一个指针,指向要读入数据的存放地址
D.一个存储区,存放要读的数据项
评测结果:答案错误(0 分)

C
[解析] 数据块输入/输出函数的调用形式为:fread(buffer,size,count,fp)。
fread函数参数说明:“buffer”是一个指引,对fread来说,它是读入数据的存放地址;“size”是要读写的字节数;“count”是要进行读写多少个size字节的数据项;“fp”是指文件型指针。

9.有一文本文件test.txt,其内容为"cprogram"(不包含引号),以下程序段的运行结果是()。 (2分)

FILE *fp;

char str[20];

if((fp=fopen(“test.txt”,“r”))!=NULL)

str=fgets(str,5,fp); printf("%s",str);

A.cpro
B.cprog
C.prog
D.cprogram
评测结果:答案错误(0 分)

A
调用fgets函数时,最多只能读入n-1个字符

10.只能向指定文件写入一个字符的函数是

:fputc

11.fgets(s,n,fp);语句用来从fp所指示的文本文件中读取字符串s,该语句最多读取 __________
(1分) 个字符。

:n-1
调用fgets函数时,最多只能读入n-1个字符

编程题

波那契数列

已知斐波那契数列定义:f(0) = 0; f(1) = 1; f(n) = f(n-1) + f(n-2); 那么你的任务是根据已知的n(n<30),求出f(n);

输入格式:

输出格式:

输入样例:

在这里给出一组输入。例如:

1
2
3
4
5

输出样例:

在这里给出相应的输出。例如:

1
1
2
3
5

代码

#include 

int f( int n );

int main()
{
    int n;

    scanf("%d", &n);
    printf("%d\n", f(n));

    return 0;
}
int f( int n )
{
	int fn;
	if(n==0)fn=0;
	else if(n==1)fn=1;
	else if(n>=2)fn=(f(n-2)+f(n-1));
	return fn;
}

你可能感兴趣的:(C语言错题集)