实验室第一次考核错题分析及反思

单选

  • 第一题

在双向链表指针p的指针前插入一个指针q的结点,操作是___________.
A、q->next=p; q->prior =p->prior; p->prior->next=q; p->prior =q;

B、q->prior =p->prior; q->next=q; p->prior=q; p->prior =q;

C、p->prior=q; q->next=p; p->prior->next=q; q->prior =q;

D、p->prior=q; p->prior->next=q; q->next=p; q->prior =p->prior;

正确答案: A
请添加图片描述

  • 第二题

以下字符中不是转义字符的是( ).
A、‘\b’

B、‘\’

C、‘\a’

D、‘\c’
正确答案: D
解析:

样式含义
\n换行 ,将当前位置移到下一行开头
\’单引号
\\反斜杠
\r回车
\t水平制表
\v垂直制表
\a响铃
\b退格 ,将当前位置
  • 第三题

在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( ).
A、单向值传递

B、地址传递

C、传递方式由用户指定

D、由实参传给形参,再由形参传回实参移到前一列
正确答案: A
解析:
调用自定义函数时有两种数据传递方式:
(1)值传递:
实参向形参的数据传递是“值传递”,单项传递,只能由实参传向形参,不能由形参传向实参。
(2)址传递:
用数组元素作实参时,向形参变量传递的是数组元素的值,而用数组名作函数参数时,向形参(数组名或指针变量)传递的是数组首元素的地址。

  • 第四题

对二维数组的正确定义是( ).
A、int a[2,3]={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[ ] [ ]={1,2,3,4,5,6};
正确答案: C
解析:这个题错的非常不应该;二维数组的初始化,行可以省略但列不能省略。

  • 第五题

    struct student{
        char name[10];
        int age;
        char gender;
     }std[3], *p=std;
    

则以下各输入语句中错误的是:
A、scanf("%c" ,&std[0] .gender);

B、scanf("%s" ,&std.name);

C、scanf("%c" ,&(p->gender));

D、scanf("%d" ,&(*p) .age );
正确答案: B
解析: scanf输入结构体数组时要使用结构体数组的下标;
A:是取std[0].gender的地址;
B:std是首地址,首地址里面没有成员name,所以是错误的;
C:是指针变量p引用成员name,然后取地址;
D:指针变量p指向std[0],然后引用成员age,再取地址。

  • 第六题

阅读下面的程序
#include<stdio.h>
void main(){
int i,j;
scanf("%3d%2d" ,&i, &j);
printf(“i=%d j=%d\n”,i,j);}
如果从键盘上输入1234567<回车>则程序的运行结果是( )
A.=1234,j=567.

B.i=1,j=2.

C.i=123,j=45.

D.i=123,j=4567.
正确答案: C
解析:%3d 表示的是输出3位整型数, 不够3位向右对齐;%2d 表示则表示输出2位整型数,同时不够2位也向右对齐。

  • 第七题

有枚举类型定义:enum weekday {Sun,Mon,Tue=0,Wed,Thu,Fri,Sat}; 则枚举值Fri对应的整数值为( ).
A.2

B.1

C.3

D.4
正确答案: C
解析:在定义枚举类型是默认为0,1,2,3,4…。但是如果将某一常量赋初值则后面每一个常量值是前一个常量值+1.

  • 第八题

题目下面程序的输出结果是______.
#include<stdio.h>
void main()
{
int a=-1, b=4, k;
k=(++a<=0)&&(b–<=0);
printf("%d,%d,%d\n",k,a,b);
}
A.1,0,3
B.1,1,2
C.0,1,2
D.0,0,3
正确答案: D
解析:这道题考察的是++a和a++的意义,我是这样记的+在前就先加,++a是a先自增再做其他运算,a++是a先进行运算再自增。

多选题

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

A、*(X+ii+j)

B、*(X+ii)[j]

C、*( *(X+ii)+j)

D、*(X[ii]+j)

正确答案: AB
解析:
对二维数组下标的引用 一般情况下:都是使用a[i][j],和*(*(a+i)+j)的形式。对上述题目由于a[i]等价于 * (a+i), 所以 C. * ( *(X+ii)+ j) 与 D. * (X[ii]+ j) 等效。

填空题

在这里插入图片描述
解析:这是一道易错题,我最开始的答案是0;后来发现其中的问题。
表面上是考二维数组的指针,其实考的是二位数组的初始化,以及逗号运算符。
首先定义一个二维数组是 int a[3][2]={{1,2,3},{4,5,6}}使用的都是花括号,而本题使用的是()代替{ },就要考虑到里面的逗号运算符,即从左到右运算,但是最后取值只取最右面的值,所以答案是1。
在这里插入图片描述

在这里插入图片描述

简答题

在这里插入图片描述
解析:
char * const p 中的const限定的是指针p,所以p是常量指针;
char const * p 中的const限定的是(*p),即指针p指向一个常量;
const char *p 与char const *p同义。
在这里插入图片描述
解析:
结构体和共用体的区别在于:
结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。

结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。

3、通过键输入两整型量a和b定义两个指针变量p1相p2指向整型变量a和b,然后a和b相互比较大小,a若小于b,则调用函数swap实现a和b两数交换然后再按从小到大数序输出。(拍照上传)
在这里插入图片描述

算法题

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

思路:本题就是计算时间的差值以及时间单位的换算,第一点是秒钟相互减如果是负值则向前借一位(即+60),同时分钟也是一样,只要在小时互相减为负时改为(+24)。
代码运行:

#include<stdio.h>
int main()
 {
  int h1,m1,s1,h2,m2,s2;
  int k=0;
  scanf("%d:%d:%d",&h1,&m1,&s1);
  scanf("%d:%d:%d",&h2,&m2,&s2);
  if(s2>s1)
  {
   s2=s1-s2+60;
   m1-=1;
 }
 else
 {
 	s2=s1-s2;
 }
 if(m2>m1)
{
 	m2=m1-m2+60;
 	h1-=1;
 }
 else
 {
 	m2=m1-m2;
 }
 if(h2>h1)
 {
 	h2=h1-h2+24;	
 }
 else
 {
 	h2=h1-h2;
 }
 k=s2+m2*60+h2*3600;
 printf("%d",k);
 return 0;
}

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

在这里插入图片描述
解析:这个矩阵可以用四个for循环来完成
代码运行:

#include<stdio.h>
int main()
 {
    int i,j,n;
    scanf("%d %d %d",&n,&i,&j);
    int a[1000][1000]={1};
    int m=1;
    int y1,y2;
for(y1=0;y1<=n/2;y1++)
 {
  for(y2=y1;y2<=n-y1-1;y2++)//向上填充数 
   a[y1][y2]=m++;
  for(y2=a+1;y2<=n-y2-1;y2++)//向右填充数 
   a[y2][n-y1-1]=m++;
  for(y2=n-y1-2;y2>=y1;y2--)//向下填充数 
   a[n-y1-1][y2]=m++;
  for(y2=n-y1-2;y2>y1;y2--)//向左填充数 
   a[y2][y1]=m++;
  if(n%2==1)// 防止当n为奇数
   a[n/2][n/2]=n*n; 
 }
 printf("%d",a[i - 1][j - 1]);
 return 0;
}




总结反思:这次考核,发现自己还是存在很多问题的,首先对于基础知识学习不是很扎实,导致在简单的题目上失误,以及对于答案的不确定恍惚而丢分;其次算法题部分,思维理解不到位,同时平时练习过少,还是有点吃力,这次考核让我意识到仅仅是书本的片面学习往往是不够的,不多加练习是没有办法熟练应用和掌握这门语言,也让我知道应该更加努力去学习,也是给自己一个鞭策。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被窝探险家104

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值