我的c语言错题

这篇博客详细记录了作者在学习C语言过程中遇到的错题,涵盖选择题、判断题和填空题,涉及指针、数组、运算符、函数指针等多个知识点。通过分析错题,帮助读者理解C语言中的关键概念和常见陷阱。
摘要由CSDN通过智能技术生成

我的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()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值