C语言学习时易错题

(1).函数strcmp从头至尾顺序地将其对应字符比较,遇到两个字符不等时,两个字符相减得到一个int型值,两个字符串完全相同时,则返回0。(T)
例如:

		char array_1[4]="abd",array_2[4]="abc";
		printf("%d\n",strcmp(array_1,array_2));

输出:1
strcmp()将a,b,d与a,b,c的ASCII码依次相减,‘a’-‘a’=0,‘b’-‘b’=0,‘d’-‘c’=1 所以输出的是1.

(2).指向数组元素的指针只可指向数组的首元素。(F)
不是只能指向首元素,也可指向数组内其他元素。

(3).数组名就是一个指针常量,指向数组的首元素(或者说代表了数组的首地址)。(F)
数组名是数组的首地址,不可修改,而指针内的值可修改。数组名和指针所占用的内存字节数不同,而且两者在内存中所处区域不同。

(4).在C语言中能逐个地使用下标变量,也能一次引用整个数组。(F)

(5).假设有定义如下: int array[10]; 则该语句定义了一个数组array。其中array的类型是整型指针(即: int *)。(F)
array是指向array[ ]这个数组的指针,也就是array=&array[0]

(6).一维数组定义的一般形式如下,其中的类型名指定数组变量的类型。
类型名 数组名[数组长度];(F)

(7).数组定义后,只能引用单个的数组元素,而不能一次引用整个数组。 (T)

(8)通常使用结构的嵌套来定义单向链表结点的数据类型。(T)
例如:

struct a {
	int num;
	struct *p;
}c,d=NULL;
c.p=&d ;

这样就建立了一个链表

(9)直接访问就是直接利用变量的地址直接进行访问。(T)
通过地址直接访问为直接访问,通过指针指向一个元素为间接访问。

(10)结构体类型本身不占用内存空间,结构体变量占用内存空间。 (T)
结构体类型定义时并不占内存,只有当结构体变量定义时才分配内存给这个变量。

(11)文件指针用于指向文件,文件只有被打开后才有对应的文件指针。(T)
文件被打开后fopen函数才会返回一个地址值给文件指针,若未打开文件,则不会返回地址而是一个空指针NULL。

(12)变量被定义后 , 它不仅有一个确定的地址值 , 而且还会有一个确定的本身值(F)
变量定义后会有一个确定的地址值,如果变量并未初始化或者未赋值,则变量的值不会是一个确定的值,而是程序中一个默认的值。

(13)变量被定义后 , 它的作用域和寿命就被确定了 , 并且不可改变(T)
变量被定义时就已经确定它是全局变量,局部变量或者其他类型的变量,这时变量的作用域和寿命就已经确定。

(14)两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数(T)
指针变量当中所储存的是一个地址,当两个同类型的指针变量相减时,所得的值就是两个元素地址相差的值,也就是元素之间相隔得元素个数。

(15)c语言源程序是文本文件,目标文件和可执行文件是二进制文件。 (T)

(16)文件指针指向文件缓冲区中文件数据的存取位置(F)

(17).以下哪个定义中的p不是指针,请选择恰当的选项:(C)
A.char **p;
B.char (*p)[10];
C.char *p[6];//p为指针数组名
D.给出的三项中,p都是指针

(18)
在这里插入图片描述

#include<stdio.h>
int main()
{
	int i,temp,n,n1,sum=0,acc=1;
	scanf("%d",&n);
	for(i=0;i<4;i++,acc*=10)
	{
		temp=(n/acc)%10;
		temp=(temp+9)%10;
		sum+=temp*acc;
	}
	for(acc=1,i=0;i<2;i++)
	{
		temp=((sum/acc)%10)*10000;
		sum+=temp;
		sum/=10;
	}
	printf("The encrypted number is %04d",sum);
}

(19).对于以下结构定义,++p->str中的++加在____。(A)

struct { 
    int len; 
    char *str;
} *p;

A.指针str上
B.指针p上
C.str指的内容上
D.以上均不是

’->‘的优先级高于‘++’
所以先运算‘->’,然后再运算’++’.

(20).设变量定义为 int a[2]={1,3}, p=&a[0]+1;,则p的值是(B )。
A.2
B.3
C.4
D.&a[0]+1

&a[0]+1所得的值是啊a[2]的地址值。

(21).假设scanf语句执行时输入ABCDE<回车>,能使puts(s)语句正确输出ABCDE字符串的程序段是__。(D)

A.char s[5]={"ABCDE"}; puts(s);//末尾缺少一个终止符号'/n'
B.char s[5]={'A', 'B', 'C', 'D', 'E'}; puts(s);//末尾缺少一个终止符号'/n'
C.char *s; scanf("%s", s); puts(s);//s中应该存入一个地址的值
D.char *s; s="ABCDE"; puts(s);

(22).在一个以 h 为头的单向链表中,p 指针指向链尾的条件是(A)
A.p->next=h
B.p->next=NULL
C.p->next->next=h
D.p->.data=-1

(23)对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是(B).
A.head = =NULL
B.head→next= =NULL
C.head→next==head
D.head!=NULL

(24)在一个单链表head中,若要删除指针p所指结点的后继结点,则执行(D)
A.p=p->next;free§;
B.p->next=p->next->next; free§;
C.q= p->next q->next=p->next; free(q);
D.q=p->next; p->next=q->next; free(q);

(25).若有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方式是(A )
A.p=max;
B.*p=max;
C.p=max(a,b);//不能带参数
D.*p=max(a,b);

(26)以下不正确的赋值或赋初值的方式是( C)。
A.char str[]=“string”;
B.char str[7]={‘s’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’};
C.char str[10];str=“string”;//字符串的复制应该用strcpy(str,‘string’);
D.char str[7]={‘s’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’, ’\0’};

(27)若以“a+”方式打开一个已存在的文件,则以下叙述正确的是(A )。
A.文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作
B.文件打开时,原有文件内容不被删除,位置指针移到文件开头,可作重写和读操作
C.文件打开时,原有文件内容被删除,只可作写操作
D.以上各种说法都不正确

(28)有一文本文件test.txt,其内容为"cprogram"(不包含引号),以下程序段的运行结果是(A)。

FILE *fp;
char str[20];
if((fp=fopen("test.txt","r"))!=NULL)
str=fgets(str,5,fp); printf("%s",str);/*fgets(str,n,fp)的功能是从fp指向的文件读入一个长度为(n-1)的字符串,存放到字符数组str中*/

A.cpro
B.cprog
C.prog
D.cprogram

  • 11
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值