第一次考核分析
一、转义字符 题目:以下字符中不是转义字符的是( ). 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:指向常量的指针,指向的常量值不可以改
|