数据结构预习之c语言知识点

  • 1. 以下对 C 语言函数的有关描述中,正确的是(                )。

    (A)在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参

    (B)C 函数既可以嵌套定义又可以递归调用

    (C)函数必须有返回值,否则不能使用函数

    (D)C 程序中有调用关系的所有函数必须放在同一个源程序文件中

    答案:B选项。不能嵌套定义。C选项,函数可以没有返回值。D选项,没有必要放在同一个c文件中,用其他c文件的函数可以给其定义的地方函数名前面加extern修饰。

2.递归函数的两个要素是(   )。

A、递归表达式、递归方程

B、递归出口、边界条件

C、函数头、函数体

D、边界条件、递归方程

答案:D选项。

3.【单选题】一个递归算法必须包括()。

  • A、循环部分
  • B、终止条件和循环部分
  • C、递归部分
  • D、终止条件和递归部分

我的答案:D

4

【单选题】下述对C语言字符数组的描述中错误的是(  )。

  • A、字符数组中的字符串可以整体输入、输出
  • B、字符数组可以存放字符串
  • C、可以在赋值语句中通过赋值运算符"="对字符数组整体赋值
  • D、不可以用关系运算符对字符数组中的字符串进行比较

我的答案:C得分: 6.6分

解析:a)字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。
    char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'};
    即把10个字符分别赋给str[0]到str[9]10个元素。
    如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即'\0' )。

   b)可以用字符串常量来初始化字符数组:
        char str[ ]={"I am happy"}; 可以省略花括号,如下所示
        char str[ ]="I am happy";
        注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的
        char str[ ];
        str="I am happy";

不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引
号“”而不是单引号‘’括起来的)作为初值。显然,这种方法更直观方便。(注意:
数组str 的长度不是10,而是11,这点请务必记住,因为字符串常量"I am happy"
的最后由系统自动加上一个'\0')
因此,上面的初始化与下面的初始化等价
char str[ ]={'I',' ','a','m',' ','h','a','p','p','y','\0'};
而不与下面的等价
char str[ ]={'I',' ','a','m',' ','h','a','p','p','y'};
前者的长度是11,后者的长度是10.
说明:字符数组并不要求它的最后一个字符为'\0',甚至可以不包含'\0',向下面
这样写是完全合法的。
char str[5]={'C','h','i','n','a'};
++++++++
可见,用两种不同方法初始化字符数组后得到的数组长度是不同的。

5

【单选题】在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是(   )。

  • A、单向值传递
  • B、由实参传给形,再由形参传回实参
  • C、传递方式由用户指定
  • D、地址传递

我的答案:A得分: 6.6分

6

【单选题】对以下定义,若要使指针变量p指向data中的成员a,则下列正确的赋值语句是__________。
      struck sk{ int a; float b; }data;
      int *p;

  • A、p=&a;
  • B、*p=data.a;
  • C、p=&(data.a);
  • D、p=data.a;

我的答案:C得分: 6.7分

7

【单选题】对于以下结构定义,++p->str中的++加在(  )。
struct {
    int len;
    char *str;
} *p;

  • A、语法错误
  • B、str指向的内容上
  • C、指针str上
  • D、指针p上

我的答案:A 得分: 0.0分

正确答:C

解析:->的等级大于++的等级,所以先p->str,然后+1。相当于++(p->str)。

8

【单选题】变量的指针是指变量的(   )。

  • A、
  • B、地址
  • C、
  • D、内存单元

我的答案:B得分: 6.7分

9

【单选题】关于函数递归,下列说法不正确的是:

  • A、实际上递归的思路是把一个不能或者不好直接求解的“大问题”转化为一个或者几个“小问题”来解决。
  • B、一般地,一个递归模型是由递归出口和递归体两部分组成,后者确定递归到何时结束。
  • C、若调用自身,称之为直接递归;若过程或函数p调用过程或函数q,而q又调用p,称之为间接递归。
  • D、在定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归。

我的答案:B得分: 6.7分

10

【单选题】有定义语句“char s[10];”可以把字符串常量"123456"赋值给字符数组s的语句正确的是 (   )。

  • A、strcpy(s,"123456");
  • B、s[]="123456";
  • C、strcmp(s,"123456");
  • D、s="123456";

我的答案:A得分: 6.7分

解析:s是数组首地址,不能把字符串的地址赋值给s,s不能被改变。 如若赋值成功,则s被改变,原来的数组就无法通过某个值访问了。

11

【单选题】以下叙述中正确的是(  )。

  • A、

    结构体类型的变量,不能在声明结构体类型组成时一起定义

  • B、

    元素为结构体类型的数组,只能在声明过结构体类型之后,单独进行定义

  • C、

    使用typedef定义新类型名后,新类型名与原类型名实际上是等价的

  • D、

    结构体类型中的各个成分均不能是数组或指针

我的答案:C得分: 6.7分

12

【单选题】关于数组名作为函数参数的说法错误的是(   )。

  • A、通过数组名作为函数参数,可以达到返回多个值的目的
  • B、参数传递时,实参数组的首地址传递给形参数组
  • C、在函数调用期间,形参数组和实参数组对应的是不同的数组
  • D、在函数调用期间,形参数组的改变就是实参数组的改变

我的答案:C得分: 6.7分

解析:数组传递时,等价于地址传递,对应的值会发生改变。

13

【单选题】关于函数递归,下列说法不正确的是:

  • A、一般地,一个递归模型是由递归出口和递归体两部分组成,后者确定递归到何时结束。
  • B、若调用自身,称之为直接递归;若过程或函数p调用过程或函数q,而q又调用p,称之为间接递归。
  • C、实际上递归的思路是把一个不能或者不好直接求解的“大问题”转化为一个或者几个“小问题”来解决
  • D、在定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归。

我的答案:A得分: 6.7分

14

【单选题】结构体定义如下:
      struct date
      {
         int month;
         int day;
         int year;
      };
      struct student
      {
         char name[10];
          int age;
         char gender;
         struct date birthday;
      }std[30],*p=std;
相关程序的如下语句有错误的是(  )。

  • A、scanf("%d",&p.age);
  • B、scanf("%c",&p->gender);
  • C、printf("%c",(*(p+5)).gender);
  • D、(*p).birthday.day = std[15].birthday.day;

我的答案:A得分: 6.7分

15

【单选题】定义下列结构体数组:
      struct stu{
         char name[10];
         int age;
      }a[5]={"ZHOU", 18,  "WU", 19,  "ZHENG", 20,  "WANG", 21};
执行语句printf("%d, %s", a[2].age,  a[1].name);的输出结果为(   )。

  • A、19, ZHOU
  • B、21, WANG
  • C、18, ZHENG
  • D、20, WU

我的答案:D

16

【单选题】若定义pf为指向float类型变量f的指针,下列语句中__是正确的。

  • A、float f, *pf = f;
  • B、float *pf = &f, f;
  • C、float f, *pf =0.0;
  • D、float f, *pf = &f;

我的答案:A

正确:D  解析:读题,是让pf指向f,而不是指向f的指针。

17

【单选题】C语言规定,程序中各函数之间(    )。

  • A、不允许直接递归调用允许间接递归调用
  • B、既允许直接递归调用也允许间接递归调用
  • C、允许直接递归调用不允许间接递归调用
  • D、不允许直接递归调用也不允许间接递归调用

我的答案:A

正确答案:待补充

18

【单选题】设有如下定义:
char* aa[2] = {"abcd", "ABCD"};
则以下说法中正确的是(  )。

  • A、aa数组的元素的值分别是字符串“abcd”和“ABCD”的内容
  • B、aa数组的两个元素中各自存放了字符串“a”和“A”
  • C、aa是指针变量,它指向含有两个数组元素的字符型一维数组
  • D、aa数组的两个元素分别存放的是字符串的首地址

我的答案:D得分: 6.7分

解析:

这种定义方式:char * aa[2]定义的是一个指针数组,数组的成员是字符指针,而非字符串数据。
在这里,数组中的两个字符指针,分别指向了常量字符串"abcd"和"ABCD",换句话说,这两个指针的值就是这两个字符串的首地址。

A.数组中元素的值不是字符串,而是字符串"abcd"和"ABCD"的首地址
B.aa是指针数组,不是指针变量(aa是数组名字,aa[i]才是指针变量)
C.因为字符串隐含的有’\0’字符,作为结束,所以应该是含有5个字符的一维数组。

19

若有定义typedef struct {int n;char ch[8];} PER;以下叙述中正确的是(  )。

  • A、PER是结构体类型名
  • B、PER是结构体变量名
  • C、typedef struct 是结构体类型
  • D、struct 是结构体类型名

我的答案:A

https://blog.csdn.net/mpp_king/article/details/70229150

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值