第一次C语言考核题目分析

第一次考核分析

一、转义字符
题目:以下字符中不是转义字符的是( ).
A.‘\c’
B.‘\a’
C.‘\b’
D.‘\’

答案为A

分析:
在这里插入图片描述

二、双向链表的插入

题目:在双向链表指针p的指针前插入一个指针q的结点
在这里插入图片描述

思路如下:
在这里插入图片描述

三、结构体指针变量

*题目有以下代码

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

*则以下各输入语句中错误的是:
A.scanf("%s" ,&std.name);
B.scanf("%c" ,&std[0] .gender);
C.scanf("%d" ,&(p) .age );
D.scanf("%c" ,&(p->gender));

答案为A
分析:结构体中的成员name定义的是字符数组,输入时也要用数组的形式,应改为scanf("%s" ,&std[0].name)

四、%nd的含义
题目:
阅读下面的程序

#include<stdio.h>
void main()
{
    int i,j;
    scanf("%3d%2d",&i,&j);
    printf("i=%d,j=%d\n",i,j);
}

如果从键盘上输入1234567<回车>,则程序的运行结果是______.
A.i=123,j=4567
B.i=1,j=2
C.i=1234,j=567
D.i=123,j=45

答案为D

分析:%nd中n为指定的输出字段的宽度,如果数据的位数小于n,则左端补以空格,若大于n,则按实际位数输出。

五、枚举类型
题目:有枚举类型定义: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.

在这里插入图片描述

如果仅给一部分枚举常量赋初值,则其后的枚举常量表示的整型值是前一个枚举常量的整型值+1.

在这里插入图片描述
六、二维数组的定义
题目:对二维数组的正确定义是( ).
A.int a[ ] [ ]={1,2,3,4,5,6};
B.int a[2] [ ]={1,2,3,4,5,6};
C.int a[2,3]={1,2,3,4,5,6};
D.int a[ ] [3]={1,2,3,4,5,6};

答案为D
分析:
1.二维数组初始化可以省略行数,不可省略列数,故A.B错误
2.二维数组的形式为a[][],方括号内为常量,故C错误

七、a++与++a
题目下面程序的输出结果是______.

#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先进行运算再自增。
在这里插入图片描述
则输出结果为0,0,3

八、字符数组有效长度
题目:已知char x[]=“hello”, y[]={‘h’,‘e’,‘a’,‘b’,‘e’};, 则关于两个数组长度的正确描述是( ) .
A.x小于y
B.以上答案都不对
C.x大于y
D.相同

答案为C
分析:char x[]="hello"是字符串初始化,x[0]-x[4]存储有效字符,x[5]存放\0,该字符串有效长度为6,在y[]={‘h’,‘e’,‘a’,‘b’,‘e’}中,字符数组元素数等于{}中的字符数,有效长度为5。

九、二维数组的下标引用
在这里插入图片描述

答案为AC
分析:
X[ii][j]代表二维数组中第ii行第j个元素的值
二维数组名X表示第一个元素的地址,这里的第一个元素代表一维数组,(X+ii+j)表示第(ii+j)个元素的地址,与上述含义不同,同理C也错误

十、读代码
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;
}

输出答案为____.(答案用单个空格分隔)
答案为2 5
分析:在这里插入图片描述

2.以下代码:

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;
}

输出答案为____.
答案为1
分析:当逗号作为运算符时,其值为最右边的值,本题(0,1)的”,“为逗号运算符,其值为1。因此二维数组a[3][2]所存储的数据为

1  0  0
3  0  0
5  0  0

因此答案为1

十一、函数的引用传递
题目要求:通过键盘输入两整型变量a和b,定义两个指针变量p1和p2指向整型变量a和b,然后a和b之间相互比较,a若小于b,则调用函数swap,实现a和b两数交换,然后再按从小到大顺序输出

分析:要注意在函数中调用实参给形参一律使用值传递。如果直接用变量名作实参,函数对形参的修改结果不会带到main函数中,用指针变量作为形参,实参用变量的地址,就可以通过地址的值传递实现指向变量的引用传递。
在调用函数时,如果是实参是简单变量,它与对应形参之间的数据传递方式是单向值传递

代码如下:

#include<stdio.h>
int swap(int *p1,int *p2)
{
	int temp;
	temp=*p1;
	*p1=*p2;
	*p2=temp;
}
int main()
{
	int a,b;
	scanf("%d %d",&a,&b);
	int *p1,*p2;
	p1=&a;
	p2=&b;
	if(a<b)
	{
		swap(&a,&b);
		printf("%d %d",*p2,*p1);
	}
	else
	printf("%d %d",*p2,*p1);
return 0;	
}

运行结果如下:
在这里插入图片描述
在这里插入图片描述
十二、结构体与共用体的区别
分析:
结构体可以同时存储多种变量类型,而共同体同一个时间只能存储和使用多个变量类型的一种,当另一时间,变量类型被改变后,原来的变量类型和值将被覆盖。共用体的作用是同一个数据项可以使用多种格式,可以节省空间。

十三、下述三个定义有什么区别?
*char * const p;
char const * p
const char p
分析:
char * const p:常量指针,p的值不可以修改
char const * p与const char *p:指向常量的指针,指向的常量值不可以改

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值