c语言二级题目 要说明为什么方能采纳。有追加

来源:百度知道 编辑:UC知道 时间:2024/05/31 09:29:47
18)设有定义: int a; float b; 执行scanf("%2d%f",&a,&b);语句时,若从键盘输入
876543.0<CR>,a 和b 的值分别是( )。
A)876 和543.000000 B)87 和6.000000
C)87 和543.000000 D)76 和543.000000

main()
{ int a=1, b=3,c=5,*p;
int *p1=&a, *p2=&b, *p3=&c;
*p=*p1*(*p2);
printf("%d\n",*p);
}
执行后的输出结果是( )。
A)1 B)2
C)3 D)4

若有定义语句:int k[2][3], *pk[3];,则下列语句中正确的是( )。
A)pk=k; B)pk[0]=&k[1][2];
C)pk=k[0]; D)pk[1]=k;

45)有下列结构体说明、变量定义和赋值语句:
struct STD
{ char name[10];
int age;
char sex;
} s[5],*ps;
ps=&s[0];
则下列scanf 函数调用语句中错误引用结构体变量成员的是( )。
A)scanf("%s",s[0].name); B)scanf("%d",&s[0].age);
C)scanf("%c",&(ps->sex)); D)scanf("%d",ps->age);

(39)若有定义:char *x="abcdefghi";,下列选项中正确运用了strcpy 函数的是( )。
A)char y[10]; strcpy(y,x[4]); B)char y[10]; strcpy(+ +y,&x[1]);
C)char y[10],*s; strcpy(s=y+5,x); D)c

好了的吧,现在明白了的吧。
以后做题的时候多使用程序运行一下慢慢积累。
呵呵~~

1.
因为输入的时候是%2d,所以只有a只能有2位,后面的都是b的,所以选C、
2.int *p1=&a, *p2=&b, *p3=&c;
把p1的指针指向了a,p2吧指针指向了b,
所以*p1 = 1,*p2 = 3;
所以*p=*p1*(*p2)=1*3 = 3;
答案为C
3.因为k和pk都表示二维,所以也只能选A
4.看D,没有提取地址的符号&,所以就选它
5.strcpy(),连接的都是字符串,因为y没有初始化,所以只能从y【0】
开始连接,不然要错,所以就选A
6.
A)*(*w+3) 等价于w【0】【3】
B)*(*w+1)[4] 等价于w【1】【4】
C)*(*(*w+1))错误
D)*(&w[0][0]+1) 等价于w【0】【1】
7.
这题进行对比就知道D)int fun(double *, int *);正确。因为里面二个都必须是数组

1.87 6543.000000
2.有错,*P未初始化
3.B,int *pk[3],指针数组,其中每个元素是个整形指针,pk是数组名,不能能被赋值。pk[0]=&k[1][2]; 正确,把元素地址赋给指针。pk[1]=k;pk[1]是个整形指针,不能指向一个二维数组的地址
4.D,应改为scanf("%d",&ps->age);
5.C,字符窜拷贝函数,自己去看
6.B,C都是错的*(*w+1)[4] 把最前面一个*去掉,(*w+1)[4]表示a[0][0]后的第1+4个元素;*(*w+3)表示的是a[0][3],正确,反之c错误,D正确表示a[0][1];
7.D函数声明语句中的形参可省略,但类型应对应。

仅供参考......