c语⾔程序设计易错题,c程序设计错题集
错题集
数组:
1.数组定义中,数组名后是⽤⽅括号括起来的常量表达式,不能⽤圆括号。(正确)
解析:数组标准样式array[ ],不能⽤array();
2.函数strcmp从头⾄尾顺序地将其对应字符⽐较,遇到两个字符不等时,两个字符相减得到⼀个int型值,两个字符串完全相同时,则返回0。
(正确)
解析:⽤strcmp函数时头⽂件⽤#include
在字符串⽐较时 如果相等时 返回int值0
如果字符串1>字符串2,则返回正整数
反之返回负整数。
3 .数组定义后,只能引⽤单个的数组元素,⽽不能⼀次引⽤整个数组。
(正确)
解析:数组只能⽤循环输出,
但是字符串数组可以⽤%s输出
4 .若有定义int a[]={2,4,6,8,10},a[1]和a++表⽰的含义相同。
(错误)
解析:a为数组名,数组名不能⾃增。
程序填空题:
1.选择法排序:本题要求将给定的nnn个整数从⼩到⼤排序后输出。输出时相邻数字中间⽤⼀个空格分开,⾏末不得有多余空格。
#include
#define MAXN 10
int main()
{
int i, index, k, n, temp;
int a[MAXN];
scanf("%d", &n);
for(i = 0; i < n; i++){
scanf("%d", &a[i]);
}
for(k = 0; k < n-1; k++){
index = k
for(i = k + 1; i < n; i++){
if(a[i] < a[index]){
index = i;
}
}
temp = a[index]; a[index] = a[k]; a[k] = temp;
}
for(i = 0; i < n; i++) {
if((i == 0)){
printf("%d", a[i]);
}else{
printf(" %d", a[i]);
}
}
printf("\n");
return 0;
}
2.冒泡法排序:本题要求将给定的nnn个整数从⼩到⼤排序后输出。输出时相邻数字中间⽤⼀个空格分开,⾏末不得有多余空格。#include
#define MAXN 10
int main()
{
int i, index, j, n, repeat, temp;
int a[MAXN];
for(repeat = 1; repeat <= 4; repeat++){
scanf("%d", &n);
for(i = 0; i < n; i++){
scanf("%d", &a[i]);
}
for( i = 1; i < n; i++ ){
for(j = 0; j < n-i; j++ ) {
if (a[j] > a[j+1]){
temp = a[j]; a[j] = a[j+1]; a[j+1] = temp;
}
}
}
for(i = 0; i < n; i++) {
if (i == 0){
printf("%d", a[i]);
}else{
printf(" %d", a[i]);
}
}
printf("\n");
}
return 0;
}
⽂件流:
1.随机操作只适⽤于⼆进制⽂件。
(错误)
解析:随机操作⽂本指的是⽤seek函数重新定位⽂件指针进⾏读写操作,访问数组中的元素也是随机的,知道下标就可以,所以说随机操作不只是针对于⽂件来讲。
2.以“a”⽅式打开⼀个⽂件时,⽂件指针指向⽂件⾸。
(错误)
解析:⽂件打开时,原有⽂件内容不被删除,位置指针移到⽂件末尾,可以进⾏添加或读操作
3.fopen函数打开⽂件失败时,返回给⽂件指针的值是NULL。
(正确)
解析:NULL的值为0,当fopen失败时返回NULL。
4.直接访问就是直接利⽤变量的地址直接进⾏访问。
(正确)
解析:a. 直接访问某个地址,就相当于你知道某个物品放在某个抽屉⾥,然后你去那个抽屉,然后访问你的物品。
b. 间接访问就是,你知道某个抽屉放着⼀个纸条,纸条写着:某某物品存放于某某另外⼀个抽屉。
这样的话
a⾥⾯的抽屉,就是变量,
b⾥⾯存放纸条的抽屉,就是指针,指针的值,就是那个纸条,纸条指向另外⼀个抽屉(变量),另外⼀个抽屉存放的东西,就是⼀个变量的值。
5.int (p)[4]它表⽰p是⼀个指针数组,它包含4个指针变量元素。
(错误)
解析:数组指针是指向数组地址的指针,其本质为指针;指针数组是数组元素为指针的数组(例如 int p
[4],定义了p[0],p[1],p[2],p[3]三个指针),其本质为数组。数组指针的使⽤在某些情况下与指针数组很相似,要注意区别。p是⼀个指针变量,它指向包含4个int元素的⼀维数组,此时p的增量以它所指向的⼀维数组长度为单位。(p+i)是⼀维数组a[i][0]的地址;(p+2)+3表⽰a[2][3]地址(第⼀⾏为0⾏,第⼀列为0列),((p+2)+3)表⽰a[2][3]的值
扩展:对指针进⾏初始化或赋值只能使⽤以下四种类型的值:
0 值常量表达式,例如,在编译时可获得 0 值的整型 const对象或字⾯值常量 0。
类型匹配的对象的地址。
另⼀对象末的下⼀地址。
同类型的另⼀个有效指针。
6.结构体类型本⾝不占⽤内存空间,结构体变量占⽤内存空间。
c语言如何创建字符串数组(正确)
解析:结构体类型的定义只是告诉编译器该如何表⽰数据,但是它没有让计算机为其分配空间。结构体类型的定义就是结构体的声明,不管是定义还是申明,这句话都是正确的。
只有在结构体变量,声明的时候可以分配。要使⽤结构体,那么就需要创建变量,也就是结构体变量。
结构链表:
1.单向链表中的每个结点都需要动态分配内存空间。
(正确)
解析:定义的结构体指针只是说明这个指针是指向这个结构的,但并未给它分配内存空间,这就类似于声明,只是告诉系统我这个指针是⼲什么⽤的。链表是由⼀个个的结点链接起来的,⽽每个结点都是需要内存空间来存储数据的,所以你每新建⼀个结点,都需要开辟⼀个空间来存储数据。
2.在⼀个以 h 为头的单向链表中,p 指针指向链尾的条件是:
A.p->next=h
B.p->next=NULL
C.p->next->next=h
D.p->.data=-1
(A)
解析:⾸先链表为不带头结点的,然后循环链表⾸尾相连即尾的next指向了头,如果要求p指向尾,则肯定有p->next=h。
3.对于⼀个头指针为head的带头结点的单链表,判定该表为空表的条件是:
A.headNULL
B.head→nextNULL
C.head→next==head
D.head!=NULL
(B)
解析:要其后⾯的指针指向空时要头指针指向的值为空。
4.已知有如下C语⾔代码:(2分)
struct node {
int val;
struct node *next;
} p[3] = { 4, &p[2], 6, &p[0], 5, &p[1] };
其中值为6的表达式是:
A.p[1].next->val
B.(&p[0])->next->val
C.p[2].val
D.p[2].next->val
(D)
解析:⼀开始p[]为结构体数组变量,当其选出⾥⾯p[2]的指针(地址)再⽤其指向Int 型的VAL。
结构体:
1.int (p)[4]它表⽰p是⼀个指针数组,它包含4个指针变量元素。
(错误)
解析: 此表达式是⼀个数组指针,p是⼀个指向含有四个整型元素的⼀维数组的指针。数组指针是指向数组地址的指针,其本质为指针;指针数组是数组元素为指针的数组(例如 int p[4],定义了p[0],p[1],p[2],p[3]三个指针),其本质为数组。数组指针的使⽤在某些情况下与指针数组很相似,要注意区别。
p是⼀个指针变量,它指向包含4个int元素的⼀维数组,此时p的增量以它所指向的⼀维数组长度为单位。
(p+i)是⼀维数组a[i][0]的地址;(p+2)+3表⽰a[2][3]地址(第⼀⾏为0⾏,第⼀列为0列),((p+2)+3)表⽰a[2][3]的值。
2.指针数组的每个元素都是⼀个指针变量.
(正确)
解析:指针数组如:int *p[3],其每⼀个元素都是⼀个指针。
补充:1.指针常量——指针类型的常量(int *const p) 本质上⼀个常量,指针⽤来说明常量的类型,表⽰该常量是⼀个指针类型的常量。在指针常量中,指针⾃⾝的值是⼀个常量,不可改变,始终指向同⼀个地址。在定义的同时必须初始化。
2.常量指针——指向“常量”的指针(const int *p, int const *p) 常量指针本质上是⼀个指针,常量表⽰指针指向的内容,说明该指针指向⼀个“常量”。在常量指针中,指针指向的内容是不可改变的,指针看起来好像指向了⼀个常量。
3.char *s=“C Language”;表⽰s是⼀个指向字符串的指针变量,把字符串的⾸地址赋予s。
(正确)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。