我的c语言错题
选择题
第一题
下列表达式中,不满足“当x的值为偶数时值为真,为奇数时值为假”要求的是( B )我的答案(C)
A: x%2==0
(代表着x为偶数,因为x%2没有余数)
B: !x%2!=0(当x为偶数时,!x%2为假,应等于0,当题目中给出!=0时该选项错误)
C: (x/2*2-x)==0(该运算实际为x-x|==0)
D: !(x%2) (只是一个简单的否定语句,没有任何真假的值)
第二题
若希望当A的值为奇数时,表达式的值为”真”,A的值为偶数时,表达式的值为”假”,则以下不能满足要求的表达式是( C )。我的答案(B)
A: A%2==1 (运算代表A%2|==1为奇数,否则为假有题述功能)
B: !(A%20) (否定语句,当A%20为假时,则该语句为真,正确)
C: !(A%2) (简单的!语句,无法判断)
D: A%2
第三题
若有以下定义,则说法错误的是( D )。我的答案(B)
int a=100,*p=&a ;
A: 声明变量p,其中*表示p是一个指针变量
B: 变量p经初始化,获得变量a的地址
C: 变量p只可以指向一个整形变量
D: 变量p的值为100
//变量p是一个地址值
第四题
以下正确的定义语句和赋值语句是___B______。我的答案(C)
A: int b[3][5],(*p)[3],(*q)[5];p=b;q=b;
//数组指针p大小不够
B: float b[3][5],*p[3];p[0]=b[0];p[2]=*b+4;
C: double b[3][5],s[5][3],*q;q=b;s=q;
//指针不能赋给一个数组,并且b和s的排列不同
D: int b[10],*q;char *s;q=b;s=b;
//字符和数组不同类型
详解知识:https://wenwen.sogou.com/z/q737337203.htm
第五题
若有以下定义和赋值语句,则对b数组的第i行第j列(假设i,j已正确说明并赋值)元素的非法引用为______C________。我的答案(D)
int b[2][3]={0}, (*p)[3];
p=b;
A: *(*(p+i)+j)
B: *(p[i]+j)
C: *(p+i)+j
//p[i]相当于a[i],a[i]+j并非数组元素,而是加上一个值
D: (*(p+i))[j]
第六题
若有定义:int (*p)[4];则标识符p_____C_______。我的答案(B)
A: 是一个指向整型变量的指针
B: 是一个指针数组名
C: 是一个指针,它指向一个含有四个整型元素的一维数组
//该数组为数组指针,先结合*p,再结合(*p)和[ ],代表着这个数组指向一个一维数组
D: 定义不合法
第七题
下面判断正确的是_____A_______。我的答案(B)
A: char *a=“china”;等价于char *a; a=“china”;
B: char str[10]={“china”};等价于char str[10];str[]={“china”};
//第一个代表数组str第一个元素为china,而第二个,赋值错误
C: char *s=”china”;等价于char *s; *s=”china”;
//error C2440: ‘=’ : cannot convert from ‘char [6]’ to ‘char’
D: char c[4]=”abc”,d[4]=”abc”;等价于char c[4]=d[4]=”abc”;
//数组d没有定义
第八题
有如下语句int a=10,b=20,*p1,*p2;p1=&a;p2=&b;如图1所示,若要实现图2所示的存储
结构,可选用的赋值语句是( B )。我的答案(C)
A: *p1=*p2;
//只是简单地赋值,并没有将地址改变
B: p1=p2;
C: p1=*p2;
//*p2可以代表一个值,C选项并不能实现赋值
D: *p1=p2;
第九题
若有以下定义,且0≤i<4,则不正确的赋值语句是___B____.我的答案(A)
int b[4][6], *p, *q[4];
A: q[i] = b[i];
B: p = b;//数组名其实也是一个指针,b指向的是一个二维数组,但p只是一个普通的指针变量,所以赋值失败
C: p = b[i]
D: q[i] = &b[0][0];
第十题
若有以下定义和赋值语句,则对b数组的第i行第j列(假设i,j已正确说明并赋值)元素的非法引用为______C________。我的答案(D)
int b[2][3]={0}, (*p)[3];
p=b;
A: *(*(p+i)+j)
//p为一个指针,实际上就相当于b,p[i]就相当于b[i],在外围加上一个j和*时,就相当于a[i][j]
B: *(p[i]+j)
//p为一个地址符,相加上一个数,相当于a[i][j];
C: *(p+i)+j
//p为一个指针,实际上就相当于b,p[i]就相当于b[i],p[i]+j就相当于b[i]+j;
D: (*(p+i))[j]
//(*(p+i))相当于a[i],则D选项相当于a[i][j]
第十一题
对于两个类型相同的指针变量,不能进行( A)运算?我的答案(B)
A: +
B: -
C: =
D: ==
我的答案:D 标准答案:A
原因:指针无论任何情况下都无法相加
判断题篇
(1)两个指针在任何情况下相减都是有意义的。(Y)
//指针可以相减
(2)字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值(Y)
//同一级别,可以赋值
(3)语句*–p;执行之后p指向的内存单元被改变。(Y)
//先执行–p所以p指向位置改变
(4)定义指针时不可以赋初值。(N)
//不赋初值会产生错误
(5)通过变量名或地址访问一个变量的方法称为“直接访问”方式。(Y)
(6)函数指针所指向的是程序代码区。(Y)
(7)C语言共用体类型变量在程序运行期间只有一个成员驻留在内存中
标准答案:Y 您的答案:N
(8)设有如下定义:
char *s[2]={“abcd”,“ABCD”};
则s数组元素的值分别是“abcd”和“ABCD”两个字符串的首地址
标准答案:Y 您的答案:N
填空题
第一题
定义:int m=5,n=3;则表达式m/=n+4的值是___0____,表达式m=(m=1,n=2,n-m)的值是____1____,m+=m-=(m=1)*(n=2)的值是____-2____。(逗号表达式结果来自最后一项)
表达式1,表达式2,表达式3,… ,表达式n逗号表达式的要领:(1) 逗号表达式的运算过程为:从左往右逐个计算表达式。(2) 逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。(3) 逗号运算符的优先级别在所有运算符中最低。
第二题
C程序是由____函数_____构成的。
第三题
下面程序段是把从终端读入的一行字符作为字符串放在字符数组中,然后输出。请填空。
#include<stdio.h>
main( )
{
int i;
char s[80],*p;
for(i =0;i<79;i++)
{
s[i]=getchar( );
if(s[i]=='\n')
break;
}
s[i]= ___'\0'____ ;//空格作为结束标志
p=s;
while(*p)
putchar(*p++);
}
编程题
下面
程序段是把从终端读入的一行字符作为字符串放在字符数组中,然后输出。请填空。
描述:键盘输入一个整数,要求将该数奇数位上的数字提取出来构成新的数。奇数位即从右边开始计数,分别是个位,百位,万位等,例如:“125486”, 奇数位上的数字分别是6、4、2,提取出来即构成新的数246。注意:原来高位还是高位。
输入:
输入只有一个用例,即一个整数n。
输入:
用一行输出对应的奇数位上数字提取出来构成的数。
样例输入:
1568758
样例输出:
1678
#include<stdio.h>
#include<string.h>
int main()