第一次考核

第一题

[单选题] 以下字符中不是转义字符的是( ).

A. ‘\a'
B. ‘\b'
C. ‘\c'
D. ‘\\'

我的答案:
D
正确答案:
C

转义字符是很多程序语言、数据格式和通信协议的形式文法的一部分。对于一个给定的字母表,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现(没有转义字符开头)时的语义。
在这里插入图片描述

第二题:

[单选题] 已知char x[]=“hello”, y[]={‘h’,‘e’,‘a’,‘b’,‘e’};, 则关于两个数组长度的正确描述是( ) .

A. 相同
B. x大于y
C. x小于y
D. 以上答案都不对

我的答案:
A
正确答案:
B

char c[]=“hello”;的长度为6,和下面的字符数组等价。
char c[]={‘h’,‘e’,‘l’,‘l’,‘o’,’\0’};
而和下面的不同:
char c[]={h’,‘e’,‘l’,‘l’,‘o’};

第三题:

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

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

我的答案:
A
正确答案:
B
c语言中实际参数和形式参数之间采用单向值传递的方式来传递数据。

第四题:

[单选题] struct student{
char name[10];
int age;
char gender;
}std[3], *p=std;
则以下各输入语句中错误的是:

A. scanf("%d" ,&(*p) .age );
B. scanf("%c" ,&std[0] .gender);
C. scanf("%c" ,&(p->gender));
D. scanf("%s" ,&std.name);

我的答案:
C
正确答案:
D

C.指针变量P指向的是std的首地址,所以&(p->gender)相当于&std[0].gather
D. std是首地址,首地址里面没有成员,所以错误

第五题

[单选题] 在双向链表指针p的指针前插入一个指针q的结点,操作是___________.

A. p->prior=q; q->next=p; p->prior->next=q; q->prior =q;
B. p->prior=q; p->prior->next=q; q->next=p; q->prior =p->prior;
C. q->next=p; q->prior =p->prior; p->prior->next=q; p->prior =q;
D. q->prior =p->prior; q->next=q; p->prior=q; p->prior =q;

我的答案:
A
正确答案:
C
  1. 声明一个头结点head,其中head->prev指向链表最后一个结点,head —>next指向链表第一个结点。

  2. 当插入元素和链表中元素重复时,不执行插入操作。

  3. 双向链表

在单链表的基础上增加了前缀结点,一定程度上提升了查找元素的速度

在查找元素时,可以反向查找前缀结点
插入结点过程(分为4步)

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

第六题

[多选题] 已知 ii,j 都是整型变量,下列表达式中,与下标引用X[ii][j]不等效的是( ).

A. *(X[ii]+j)
B. *(X+ii)[j]
C. *(X+ii+j)
D. *(*(X+ii)+j)

我的答案:
ABC
正确答案:
BC

A.*(x[ii]+j)的意思是第ii-1行第j-1列,即为x[ii][j]

第七题

[填空题]

以下代码:

int main()
{
int a[3][2] = { (0, 1 ), ( 2, 3 ), (4, 5 ) };
int *p;
p = a[0];
printf("%d\n", p[0]);
system(“pause”);
return 0;
}
输出答案为____.

我的答案:
0
正确答案:
1

此处考察逗号运算符,
逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。
因为有逗号所以P只能取到1,3,5
所以P[0]=1

第八题

[填空题]

以下代码:

int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
int *ptr = (int *)(&a + 1);
printf("%d,%d", *(a + 1), *(ptr - 1));
system(“pause”);
return 0;
}
输出答案为____.(答案用单个空格分隔)

我的答案:
1 1
正确答案:
2 5

&a+1表示取a的地址再加1,此处表示ptr指针指向a的下一位与a类型相同的相邻地址
所以&a+指向&a[5]
由数组指针的相关知识易得*(a+1)==2
a既是数组名又是指向第一个元素的指针
interesting*ptr=(int)(&a+1)

简答题

1
下述三个定义有什么区别?
char * const p;
char const * p
const char *p

正确答案

char * const p; //常量指针,p的值不可以修改
char const * p;//指向常量的指针,指向的常量值不可以改
const char *p; //和char const *p

我的答案

第一个是定义一个字符的指针常数;

第二个是定义一个char类型的指针;

第三个定义一个字符型常量的指针。

清楚的记着当时学过,但是就是想不起来它们的区别,感觉很多概念都是这样,以至于有了上面奇奇怪怪的答案,以后一定要继续加油,温故而知新

2
简述结构体和共用体的区别。

正确答案

两者最大的区别在于内存的分配,结构体和共用体的区别在于:结构体的各个成员会占用不同的内存互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员,结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。

还有一个问题就是不会用特别专业的词汇来描述,脑子里面明明知道,但是就是不知道怎么说。

总结:

就是每次都感觉自己会了然后遇到题目还是会错,这应该是基础不扎实的表现把,在接下来的学习中一定要多多理解代码,而不是单纯的敲代码,最近的学习重心放在了敲代码上,但是一不小心就把最基本的概念和原理忘记了,对二维数组和指针还是不能完全理解,对链表也是了解的不够深入,以为自己会敲了就什么都会了,有点眼高手低,打算在闲暇时间重过一遍c语言的基础课程,理解并记住之前落下的东西,打牢基础,继续加油加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值