帮忙看几道C语言的期末题目~~谢谢!
6.以下各程序语句中,有语法错误的是A)intx=1,y=2,z,a[2*’n’];B)z=x+++y;C)z=x+++y--;D)z=(x+1)++-y;请问intx=...
6.以下各程序语句中,有语法错误的是
A) int x=1,y=2,z,a[2*’n’]; B) z=x+++y; C) z=x+++y--; D) z=(x+1)++-y;
请问int x=1,y=2,z,a[2*’n’]; 这个a[2*’n’]怎么没有语法错误,什么意思? D) z=(x+1)++-y为什么是错误的?
14.以下求矩阵a中主对角元素之和的各程序段中,不正确的是
A) int a[3][3]={1,2,3,4,5,6,7,8,9}, s=0, *p=a; for ( p=a; p<a+3; p+=3 ) s+=*p++;
B) int a[3][3]={1,2,3,4,5,6,7,8,9}, s=0, i; for ( i=0; i<3; i++ ) s+=a[i][i];
C) int a[3][3]={1,2,3,4,5,6,7,8,9}, s=0, *p=a, i; for ( i=0; i<3; i++ ) s+=p[i][i];
D) int a[3][3]={1,2,3,4,5,6,7,8,9}, s=0, *p=a; for ( p=a; p<a+3; p+=4 ) s+=*p;
答案给的c,c错在哪里了? 还有A选项p++是移到下一个元素还是移到下一行,*p=a还可以这样赋值吗?
2.假定有char a=’A’, b=’B’, c, 则执行 printf(“%d”,(c=a<b--?a+b:a-b);的值是
A) 130 B) 131 C) 0 D) 都不是
为什么不是130,而是-126?
7. 设char a[]=”xy\n0\1238\\0”;则数组a的长度是
A)7 B)8 C)9 D)13
答案给的是C,为什么不是B,难道是数组以‘\0’结束的,也要占数组一个位置吗??
5.设有下面的程序段:char s[]=“china”;char *p; p=s;则下列叙述正确的是
A) s和p完全相同 B) 数组s中的内容和指针变量p中的内容相等
C) s数组长度和p所指向的字符串长度相等 D) *p与s[0]相等
这一题答案选D,C错在哪里? 展开
A) int x=1,y=2,z,a[2*’n’]; B) z=x+++y; C) z=x+++y--; D) z=(x+1)++-y;
请问int x=1,y=2,z,a[2*’n’]; 这个a[2*’n’]怎么没有语法错误,什么意思? D) z=(x+1)++-y为什么是错误的?
14.以下求矩阵a中主对角元素之和的各程序段中,不正确的是
A) int a[3][3]={1,2,3,4,5,6,7,8,9}, s=0, *p=a; for ( p=a; p<a+3; p+=3 ) s+=*p++;
B) int a[3][3]={1,2,3,4,5,6,7,8,9}, s=0, i; for ( i=0; i<3; i++ ) s+=a[i][i];
C) int a[3][3]={1,2,3,4,5,6,7,8,9}, s=0, *p=a, i; for ( i=0; i<3; i++ ) s+=p[i][i];
D) int a[3][3]={1,2,3,4,5,6,7,8,9}, s=0, *p=a; for ( p=a; p<a+3; p+=4 ) s+=*p;
答案给的c,c错在哪里了? 还有A选项p++是移到下一个元素还是移到下一行,*p=a还可以这样赋值吗?
2.假定有char a=’A’, b=’B’, c, 则执行 printf(“%d”,(c=a<b--?a+b:a-b);的值是
A) 130 B) 131 C) 0 D) 都不是
为什么不是130,而是-126?
7. 设char a[]=”xy\n0\1238\\0”;则数组a的长度是
A)7 B)8 C)9 D)13
答案给的是C,为什么不是B,难道是数组以‘\0’结束的,也要占数组一个位置吗??
5.设有下面的程序段:char s[]=“china”;char *p; p=s;则下列叙述正确的是
A) s和p完全相同 B) 数组s中的内容和指针变量p中的内容相等
C) s数组长度和p所指向的字符串长度相等 D) *p与s[0]相等
这一题答案选D,C错在哪里? 展开
2个回答
展开全部
6.a[2*’n’],这里是字符'n',用作乘法运算就是取出‘n'的ASCII码值进行运算,也就是110,a[2*110]自然没错;D) z=(x+1)++-y,x+1运算结果作为常量保存在暂存器中,无法进行自增运算
14.二维数组在内存中其实是一维数组,比如int a[3][3],然后a[0][0]就是第0个元素,a[2][2]就是第2*3+2=8个元素,而p只是一个int*,编译器压根就不知道p[i][i]应该是第i*1+i还是i*2+i或者i*n+i个元素,所以只能用p[i]一维数组的形式。
*p=a这里其实是int *p = a;相当于int *p, p = a;在vs2010是直接报错的。
p++,p是int*类型,++就是移动一个int。
2.char只有8位,去掉一个符号位就剩下7位了,没法表示出130;
7.数组并不以'\0'结束,但是字符串是以'\0'结束,所以要占个位置;
5.数组'\0'算长度,字符串'\0'不算长度。
14.二维数组在内存中其实是一维数组,比如int a[3][3],然后a[0][0]就是第0个元素,a[2][2]就是第2*3+2=8个元素,而p只是一个int*,编译器压根就不知道p[i][i]应该是第i*1+i还是i*2+i或者i*n+i个元素,所以只能用p[i]一维数组的形式。
*p=a这里其实是int *p = a;相当于int *p, p = a;在vs2010是直接报错的。
p++,p是int*类型,++就是移动一个int。
2.char只有8位,去掉一个符号位就剩下7位了,没法表示出130;
7.数组并不以'\0'结束,但是字符串是以'\0'结束,所以要占个位置;
5.数组'\0'算长度,字符串'\0'不算长度。
追问
int a[2][2]={1,2,3,4},*p; p=a;
为什么这样在vc6中会报错啊?这不是将二维数组的地址赋给指针p吗?
int a[2][2]={1,2,3,4},*p; p=&a[0][0];
如果改成这样为什么就对了?
追答
p=&a[0][0],就是把一个int*指向一个int,当然是对的;
p只是一个int*,就像上面说的 编译器压根就不知道p[i][i]应该是第i*1+i还是i*2+i或者i*n+i个元素,所以它不能指向二维数组;
除非你告诉编译器它的一行有几列,那就可以指向二维了,比如:
int a[2][2]={1,2,3,4};
int (*p)[2]; p=a;
这个就不会有错
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询