大一C程小题错题归纳

1.

执行下面程序,正确的输出是()。

int x = 5, y = 7;
void swap ( )
{
      int z ;

      z = x ;  x = y ;  y = z ;
}
int main(void)
{
      int x = 3, y = 8;
      swap ( ) ;
      printf ("%d,%d \n", x , y ) ;

      return 0 ;
}


swap函数调用时用的是全局变量,主函数中定义的变量只在主函数中有效,因为主函数也是一个函数,它与其他函数是平行关系;输出语句这里,考虑局部优先的原则,故输出3,8;

2.

对于以下变量定义,正确的赋值是()。

int *p[3], a[3];

A.p = a

B.*p = a[0]

C.p = &a[0]

D.p[0] = &a[0]

解析:

p[3]为存放三个指针的指针数组,题目的意思是将三个指针分别指向a数组中的三个值需要进行的完整或者其中一个步骤,对于A,p为指针数组地址,关于p的操作都是错误的,ac排除,关于B,a[0]为第一个元素的值,明显不对,故D正确。

3.

有说明:char *language[] = {"FORTRAN", "BASIC", "PASCAL", "JAVA", "C"};

则表达式 *language[1] > *language[3]  比较的是 ( )。

A.字符 'F' 和字符 'P'

B.字串 "BASIC" 和字符串 "JAVA"

C.字符 'B' 和字符 'J'

D.字符串 "FORTRAN" 和字符串 "PASCAL"

答案选C

4.

若已建立下面的链表结构,指针 p、q 分别指向图中所示结点,则不能将 q 所指结点插入到链表末尾的语句是( )。

1.jpg

A.

q->next = NULL;
p = p->next; 
p->next = q;

B.

p = p->next; 
q->next = p->next;
p->next = q;

C.

p = p->next; 
q->next = p;
p->next = q;

D.

p = (*p).next; 
(*q).next = (*p).next;
(*p).next = q;

 答案选C

5.

假设下列程序保存在test.c中,编译后运行test hello world,则输出是

#include<stdio.h>
int main(int argc, char *argv[ ])
{
      printf("%d,%s", argc, argv[1]+1);
            
      return 0;
}

 解析:argc代表的是元素的个数。hello world 为两个参数,argv[1]代表的是hello,故argv[1]+1为e的地址。

6.

以下语句将输出 ()。

#include <stdio.h>
printf("%d  %d  %d", NULL, '\0', EOF);

 解析:

0 0 -1。

7.缓冲文件系统的文件缓冲区位于()。 

内存数据区中。

8.

以下可作为函数fopen中第一个参数的正确格式是( )。

A.c:user\text.txt

B.c:\user\text.txt

C."c:\user\text.txt"

D."c:\\user\\text.txt"

9.

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

A."w"

B.”wb"

C."w+"

D."wb+"

“r+”扩展读为读取/写入打开文件从起始读取错误
“r”为读取打开文件从起始读取打开失败
“w”为写入创建文件销毁内容创建新文件
“w+”扩展写为读取/写入创建文件销毁内容创建新文件
“rb”以二进制模式读为读取打开文件从起始读取打开失败
“wb”以二进制模式写为写入创建文件销毁内容创建新文件

10.

直接使文件指针重新定位到文件读写的首地址的函数是() 。

A.ftell()函数

B.fseek()函数

C.rewind()函数

D.ferror()函数

直接使文件指针重新定位到文件读写的首地址的函数是  rewind ()

ftell() 函数用于得到文件指针当前位置相对于文件首地址的偏移字节数;

fseek()函数用于设置文件指针的位置;

rewind()函数用于将文件内部的位置指针重新指向一个流(数据流/文件)的开头;

ferror()函数可以用于检查调用输入输出函数时出现的错误。

11.

函数fgetc的作用是从指定文件读入一个字符,该文件的打开方式可以是( )。

A.只写

B.追加

C.读或读写

D.答案B和C都正确

12.

C语言的编译预处理功能包括()。

A.文件包含

B.宏定义

C.条件编译

都对

13.

下列程序的输出结果为()

#include <stdio.h>
int fib(int g)
{   
    switch(g){
        case 0: return 0;
        case 1: 
        case 2: return 2;
    }
    printf("g=%d,", g);     /* 中间没有空格 */
    return fib(g-1) + fib(g-2);
}
int main(void)
{
    int k;
        
    k = fib(4);
    printf("k=%d\n", k);     /* 中间没有空格 */
        
    return 0;
}

 易错点:case1与case2 之间没有break,所以1与2都return的是2; 总的输出是g=4,g=3,k=6

14.

阅读以下程序并回答问题。

#include <stdio.h>
#define S(x) 3 < (x) < 5
int a, n;

void f1(int n) 
{   
    for(; n >= 0; n--){
        if(n % 2 != 0) continue;
        printf("%d ", n);           /*%d后面有1个空格*/
    }
    printf("\n");
}

double f2(double x, int n)
{  
    if(n == 1) return x;
    else return x * f2(x, n-1); 
}

int main(void)
{   
     int a = 9 ;
         
     printf("%d,%d\n", a, S(a));  /* 中间没有空格 */
     f1(4);
     printf("%.1f\n", f2(2.0, 3));
     printf("%d,%d\n", n, S(n));   /* 中间没有空格 */
         
     return 0;
}

 易错点:1.3<(x)<5,首先判断左边,9>3,没问题结果为1,在判断右边1<5,故返回值为1。

                2.全局变量与函数参数都定义int n ,但函数内变量值改变不影响全局变量,n默认为0.

15

​
#include<stdio.h>
int main(void)
{
    const char *language[] = {"BASIC", "FORTRAN", "PROLOG", "JAVA", "C++" } ;
    const char  ___;
    int k;

    for(k = 0 ; k < 5 ; k++)
 {
        
    _______;
    printf ("%s\n", *q);
 }
    return 0;
}

​

**q,q=language+k

16. break语句只能用于循环语句中。 F   switch中;

17.continue 只能用于循环体中。  T 

18.在C程序中,main函数必须位于源程序的最前面  F

19.在C程序中,函数可以嵌套调用,但不可以嵌套定义。 T

20.

The following code fragment outputs the string str. The loop condition str[i]!='\0' can be replaced by __.

char str[80]="hello, world";
for (i = 0; str[i] != '\0'; i++)
    putchar(str[i]);

A.str[i]

B.i < 80

C.!(str[i] = '\0')

D.i<= 80

 A.

21.

After executing the following code fragment, the value of variable m is __.

int m;
for( m=0; m<9; m++ )   m++;

 10. 0,2,4,6,8,10,

22.

在一个被调用函数中,关于 return 语句使用的描述,错误的是( )。

A.被调用函数中可以不用 return 语句

B.被调用函数中可以使用多个 return 语句

C被调用函数中,如果有返回值,就一定要有 return 语句

D调用函数中,一个 return 语句可以返回多个值给调用函数

D

23.

可以使用以下语句来读取一行字符,并依次处理各个字符(直到遇到’\n’结束)

char ch;
while(ch = getchar() != ‘\n’)
{
  do something;
}

F 等号从右到左,故ch=getchar() 要加括号

24.静态变量的作用域是整个文件  F,仅作用于源文件

25.当变量的存储类型定义缺省时,系统默认为变量的存储类型为auto类型,分配在静态区。

F

26.C语言函数返回类型的默认定义类型是void。 F 是int

27.函数的实参可以是常量,变量或表达式。  T

28.局部变量如果没有指定初值,则其初值不确定。 T  静态局部变量是确定的,局部是不确定的

29.函数形参的存储单元是动态分配的。 F,

不是,函数的变量一般是栈区,只要退出函数,系统就会自动回收栈区
而动态分配分配时分配堆区,堆区只能手动回收(free函数)

30.全局变量只能定义在程序的最前面,即第一个函数的前面。   F

31.自动变量如果没有赋值,其值被自动赋为0。 F

32.在所有的关系运算符(>=、>、==、!=、<=、<)中,优先级最低的运算符是“==、!=”。 T

33.在C 语言中,常量和变量都有数据类型。 T

34.表达式 !x 等价于x != 1。   F 令x=5,则两者均成立。而两者在01是一样的。

35.运算符“+”不能作为单目运算符。  F

36.

下面合法的C语言字符常量是()。

A.'\t'

B."A"

C.'xx'

D.A

A  转义字符是合法的如 '\n'等等。单引号+单个字符

37.下面的程序段输出是( )。

int k=11;
printf("k=%d,k=%o,k=%x\n",k,k,k);

 11 13   B

38.设int a = 5, b = 6; 则表达式(++a == b--) ? ++a : --b的值是 7

39.

假定char类型变量占用1个字节,且数组定义如下,则数组str在内存中所占字节数是( )。

char  str[81];

A.0

B.10

C.80

D.81

D

40.

在以下描述中,( )是正确的。

A.

int a[5] = {1, 2, 3, 4, 5};

定义了数组a,并对数组元素赋初值。此时,a[0]为1,a[1]为2,a[2]为3,a[3]为4,a[4]为5。

B.

static int b[10];

定义了静态数组b,且10个数组元素的初值都为0。

C.

int fib[45];

定义了数组fib,且45个数组元素的值都为0。

D.

static int week[7] = {1, 2, 3};

定义了静态数组week,并对数组 week 的前3个元素week[0]~week[2]赋初值,week[3]~week[6]值都是不确定的。

E.

int cnt[10] = {1};

定义了数组cnt,并对cnt[0]赋初值1,其余元素的初值为0。

解析:ABE,想使一个数组中全部元素值为0,可以写成:a[10]={0};

  需要注意 int a[10] = {1}; 并不能把数组初始化为全1,只是将第一位初始化为1,后面全部都是0滴.

41.

选项( )与以下字符数组定义等价。

static char s[6] = {'H', 'a', 'p', 'p', 'y', '\0'};

A.

static char s[6] = {'H', 'a', 'p', 'p', 'y'};

B.

static char s[6] ="Happy";

C.

static char s[6] ={"Happy"};

D.

static char s[6] = {'H', 'a', 'p', 'p', 'y', 0};

 ABCD

42.执行语句int *p = 1000;后,指针变量p指向地址为1000的变量。 F , 报错

43.两个任意类型的指针可以使用关系运算符比较大小。 F

44.冒泡排序效率较高,因为它只需要约
 

1.jpg


次比较。

F 效率不高

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值