C语言试题错题集
全国计算机二级C语言程序改错题(-100%全中必过)

目录题目一前N项和问题 (3)题目二SS字符串问题 (4)题目三变量互换问题1 (4)题目三变量互换问题2 (5)题目三变量互换问题3 (5)题目四最大公约数问题 (6)题目五长数变短数1 (7)题目五长数变短数2 (7)题目五长数变短数3 (8)题目五长数变短数4 (9)题目五长数变短数5 (9)题目五长数变短数6 (10)题目五长数变短数7 (11)题目五长数变短数8 (11)题目五长数变短数9 (12)题目六斐波拉契数列 (13)题目七链表1 (14)题目七链表2 (15)题目七链表3 (16)题目七链表4 (17)题目八非素数问题 (19)题目九排序问题1 (19)题目九排序问题2 (20)题目九排序问题3 (21)题目九排序问题4 (22)题目九排序问题5 (23)题目九排序问题6 (24)题目九排序问题6 (25)题目九排序问题7 (26)题目十平均值问题1 (26)题目十平均值问题2 (27)题目十平均值问题3 (28)题目十平均值问题4 (29)题目十平均值问题5 (30)题目十一字符串连接1 (30)题目十一字符串连接2 (31)题目十一字符串连接3 (32)题目十一字符串连接4 (32)题目十二求和问题1 (33)题目十二求和问题2 (34)题目十二求和问题3 (35)题目十二求和问题4 (36)题目十二求和问题6 (37)题目十二求和问题7 (38)题目十二求和问题8 (39)题目十二求和问题9 (39)题目十二求和问题10 (40)题目十二求和问题11 (41)题目十二求和问题12 (42)题目十二求和问题13 (42)题目十二求和问题14 (43)题目十二求和问题15 (44)题目十二求和问题16 (44)题目十二求和问题17 (45)题目十二求和问题18 (45)题目十二求和问题19 (46)题目十三整数问题 (47)题目十四字符串逆置 (48)题目十五进制转换1 (48)题目十五进制转换2 (49)题目十六素数问题1 (50)题目十六素数问题2 (50)题目十六素数问题3 (51)题目十六素数问题4 (52)题目十六素数问题5 (53)题目十七删除字符串中指定项1 (53)题目十七删除字符串中指定项2 (54)题目十八最小公倍数问题 (55)题目十九字符串替换问题1 (55)题目十九字符串替换问题2 (56)题目二十找最长字符串 (57)题目二十一数组问题1 (58)题目二十一数组问题2 (59)题目二十一数组问题3 (60)题目二十二求平方根问题 (61)题目二十三短字符串变长字符串1 (61)题目二十三短字符串变长字符串2 (62)题目二十三短字符串变长字符串3 (63)题目二十三短字符串变长字符串4 (64)题目二十四字符串s问题1 (64)题目二十四字符串s问题2 (65)题目二十四字符串s问题3 (66)题目二十五求方程的根 (67)题目二十六求阶乘1 (68)题目二十六求阶乘2 (69)题目二十七方阵问题 (70)题目二十八查找字符串中某元素的数目 (71)题目二十九最大值问题1 (72)题目二十九最大值问题2 (72)题目二十九最大值问题3 (73)题目三十大小写转换1 (74)题目三十大小写转换2 (75)题目三十大小写转换3 (76)题目三十一:计算数字位数的问题1 (77)题目三十一:计算数字位数的问题2 (78)题目三十一:计算数字位数的问题3 (79)题目三十一:计算数字位数的问题4 (80)题目三十二统计字母数字个数问题1 (81)题目三十二统计字母数字个数问题2 (82)题目三十二统计字母数字个数问题3 (83)题目三十二统计字母数字个数问题4 (83)题目三十三对角线问题 (84)题目三十四比较字符串大小 (85)题目一前N项和问题.下列给定程序中函数fun的功能是:求出如下分数序列的前n项之和。
错题集c语言

错题集相同优先级运算符,从左至右依次运算。
注意后缀运算优先级高于前缀。
因此++i++应解释为++(i++)。
而与或非的运算优先级都不一样,因此a && b || b && c解释为(a && b) || (b && c)合理使用优先级可以极大简化表达式。
基本表达式1级基本表达式(Primary expressions),主要是用于运算符之间,做为运算数。
标识,常量,字符串文字量,优先级提升表达式最优先执行。
优先级提升表达式是指圆括号包围的表达式,如“( expression )”后缀表达式2极postfix-expression [ expression ],数组下标运算。
postfix-expression ( argument-expression-list),函数调用,括号内的参数可选。
postfix-expression . identifier,成员访问,postfix-expression -> identifier,成员访问,->号之前应为指针。
postfix-expression ++,后缀自增postfix-expression --,后缀自减( type-name ) { initializer-list }( type-name ) { initializer-list , } 复合初始化,C99后新增。
例如1 2 3 4 5 6 7 8 9 10int* a = (int[]) { 1, 2, 3 };//等价于int unamed[] = {1, 2, 3}; //unamed表示一个不可见的变量名。
int* a = unamed;单目/一元运算3级++ unary-expression 前缀自增-- unary-expression 前缀自减unary-operator cast-expression 单目转型表式式,包括取地址& ,提领* ,正号+ ,负号- 位反~ 逻辑否!。
c语言错题集锦讲解

下列链表中,其逻辑结构属于非线性结构的是A) 二叉链表B) 循环链表C) 双向链表D) 带链的栈【解析】在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。
带链的栈可以用来收集计算机存储空间中所有空闲的存储结点,是线性表。
在单链表中的结点中增加一个指针域指向它的直接前件,这样的链表,就称为双向链表(一个结点中含有两个指针),也是线性链表。
循环链表具有单链表的特征,但又不需要增加额外的存贮空间,仅对表的链接方式稍做改变,使得对表的处理更加方便灵活,属于线性链表。
二叉链表是二叉树的物理实现,是一种存储结构,不属于线性结构。
答案为A选项。
设循环队列的存储空间为Q(1: 35),初始状态为front=rear=35。
现经过一系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为A) 15B) 16C) 20D) 0或35、【解析】在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。
在循环队列中进行出队、入队操作时,头尾指针仍要加1,朝前移动。
只不过当头尾指针指向向量上界时,其加1操作的结果是指向向量的下界0。
由于入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针,故队空和队满时,头尾指针均相等。
答案为D选项。
void fun(int m,int k,int xx[]){int i,j,n;for(i=m+1,n=0;n<k;i++) /*找大于m的素数,循环k次,即找出紧靠m的k个素数*/ {for(j=2;j<i;j++) /*判断一个数是否为素数,如果不是,跳出此循环,判断下一个数*/if(i%j==0) break;if(j>=i) /*如果是素数,放入数组xx中*/xx[n++]=i;}}一·下列叙述中正确的是()。
A) 循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B) 在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C) 在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D) 循环队列中元素的个数是由队头指针和队尾指针共同决定【解析】循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所以A)错误;在循环队列中只需要队头指针与队尾两个指针来共同反映队列中元素的动态变化情况,所以B)与C)错误。
c语言易错选择题错题集

1:设有定义:char p[]={'1','2','3'},*q=p;,以下不能计算出一个char型数据所占字节数的表达式是()。
A) sizeof(p)B) sizeof(char)C) sizeof(*q)D) sizeof(p[0])参考答案:A【解析】根据题目中的定义可以知道sizeof(p),计算的是数组p中所有元素所占用的字节数,而不是char型数据所占字节数。
2:面向对象方法中,继承是指()。
A) 一组对象所具有的相似性质B) 一个对象具有另一个对象的性质C) 各对象之间的共同性质D) 类之间共享属性和操作的机制参考答案:D【解析】继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为基础建立新类的定义技术。
广义的说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。
3:若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是A) x+1=yB) ++x,y=x--C) x=x+10=x+yD) double(x)/10参考答案:B【解析】A选项中不能将变量y赋给表达式,C选项中错误与A选项一样,D选项中强制类型转换表达式应写成(double)x/10。4:有以下程序#include <stdio.h>main(){ FILE *pf;char *s1="China", *s2="Beijing";pf=fopen("abc.dat","wb+");fwrite(s2,7,1,pf);rewind(pf); /*文件位置指针回到文件开头*/fwrite(s1,5,1,pf);fclose(pf);}以上程序执行后abc.dat文件的内容是A) ChinaB) ChinangC) ChinaBeijingD) BeijingChina参考答案:B【解析】本题考查文件操作函数,fwrite和rewind函数,题目中先是将s2字符串写入adc.dat中,然后将写指针回到文件开头,然后写入s1字符串,那么s1字符串就将前五个字符覆盖,所以最终结果为Chinang,选项B正确。
c语言数组笔试错题

c语言数组笔试错题在学习C语言的过程中,我们经常会进行一些笔试来检验自己的掌握程度。
然而,有时候我们会在一些看似简单的题目上犯下错误。
下面就让我们来看看一些常见的C语言数组笔试错题。
1. 下面的代码段中,数组arr的长度是多少?```cint arr[] = {1, 2, 3, 4, 5};```A. 1B. 2C. 3D. 5正确答案:D. 5解析:在这个代码段中,我们使用了初始化列表来初始化数组arr。
初始化列表中有5个元素,因此数组arr的长度为5。
2. 下面的代码段中,数组arr的第一个元素的索引是多少?```cint arr[] = {1, 2, 3, 4, 5};```B. 1C. 2D. 3正确答案:A. 0解析:在C语言中,数组的索引是从0开始的。
因此,数组arr的第一个元素的索引是0。
3. 下面的代码段中,数组arr的最后一个元素的索引是多少?```cint arr[] = {1, 2, 3, 4, 5};```A. 3B. 4C. 5D. 6正确答案:B. 4解析:数组arr有5个元素,索引从0到4。
因此,数组arr的最后一个元素的索引是4。
4. 下面的代码段中,数组arr的长度是多少?int arr[10];```A. 0B. 5C. 10D. 11正确答案:C. 10解析:在这个代码段中,我们声明了一个长度为10的整型数组arr。
因此,数组arr的长度是10。
5. 下面的代码段中,数组arr的第一个元素的值是多少?```cint arr[5];```A. 0B. 1C. 未定义D. 随机值正确答案:C. 未定义解析:在这个代码段中,我们声明了一个长度为5的整型数组arr。
由于我们没有对数组进行初始化,因此数组arr的元素值是未定义的。
通过对这些常见的C语言数组笔试错题的解析,我们可以更好地理解和掌握C语言中数组的相关知识。
在以后的学习中,我们应该注意这些细节,避免在笔试中犯下类似的错误。
c语言面试找错题

c语言面试找错题C语言面试中经常会出现找错题,考察面试者在代码中找出错误的能力。
下面给出一些常见的C语言找错题,供大家练习。
题目1:```c#include <stdio.h>int main() {int a = 10;int b = 20;int sum = a + b;printf("The sum of a and b is: %d\n", sum);return 0;}```问题:请找出以上代码中的错误,并解释原因。
答案:以上代码没有错误。
题目2:```c#include <stdio.h>int main() {int a = 10;int b = 20;printf("The sum of a and b is: %d\n", a, b);return 0;}```问题:请找出以上代码中的错误,并解释原因。
答案:以上代码的错误在于`printf`函数的使用。
`printf`函数的第一个参数是一个格式化字符串,后续参数是格式化字符串中使用的参数。
在上述代码中,格式化字符串中只有一个`%d`,但是后续提供了两个参数`a`和`b`。
正确的写法应该是`printf("The sum of a and b is: %d\n", sum);`。
题目3:```c#include <stdio.h>int main() {int a = 10;int b = 20;int sum;sum = a + b;printf(“The sum of a and b is: %d\n”, sum);return 0;}```问题:请找出以上代码中的错误,并解释原因。
答案:以上代码的错误在于`printf`函数的格式化字符串中使用的双引号是中文引号,而不是英文引号。
C语言中使用的是英文引号,因此应该修改为`printf("The sum of a and b is: %d\n", sum);`。
C语言易错复习题

5
习题五
题目: 设有以下字符串定义, char s1[]={‘S’,’t’,’r’,’i’,’n’,’g’}; char s2[]=”String”; 则s1和s2:长度?内容? 解析:
以‘\0’结尾的字符数组是字符串
答案: 长度不同,但内容相同。 6
习题二
题目: 下面程序的输出是:
解析: ‘/’:取整; ‘%’:取余 答案: 3
3
习题三
题目: 你能找到这个程序的错误吗? 解析: 宏定义后面不要加’;’ ,有变量的 一定要加上括号。建议少用宏 定义(除条件编译外),可用 const 变量代替。 答案:去掉3.1415926后面的’;’ 4
解析:
对于i++,系统会有个临时变量存储i自加1后的值,而对 于++j,不需要临时变量。 i++和++i的效率:内置类型没有区别,用户自定义类型重载 后置++和前置++,前置比后置效率高.
答案: 9、16、6、6
14
补充
对于C中对字符数组赋值一共3种: 定义的时候直接赋值. 1:char a[20] = "Hello World!"; 2: char a[20]; strcpy(a, "Hello World!"); 3: char a[20] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!'}; 常见错误赋值方式(第八章选择题5) 1:char a[20]; 9 a = "Hello World!";
c语言改错题题库及详解答案

c语言改错题题库及详解答案1. 题目:以下代码段中存在错误,请找出并改正。
```c#include <stdio.h>int main() {int a = 10;int b = 20;int c = a + b;printf("The sum is %d", c);return 0;}```答案:代码中缺少了字符串结束的空格。
应改为:```cprintf("The sum is %d ", c);```2. 题目:找出并改正以下代码段中的错误。
```c#include <stdio.h>int main() {int num = 100;if (num = 100)printf("Number is 100\n");return 0;}答案:代码中使用了赋值运算符 "=" 而不是比较运算符 "=="。
应改为:```cif (num == 100)```3. 题目:以下代码段中存在逻辑错误,请指出并改正。
```c#include <stdio.h>int main() {float a, b, c;scanf("%f %f", &a, &b);c = a / b;printf("The result is %f", c);return 0;}```答案:代码中没有检查除数 b 是否为 0,这会导致运行时错误。
应添加检查:```cif (b != 0) {c = a / b;printf("The result is %f", c);} else {printf("Error: Division by zero.\n");}```4. 题目:找出并改正以下代码段中的语法错误。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言错题集单选:(2)微型计算机中运算器的主要功能是进行(C)。
A) 算术运算 B) 逻辑运算 C) 算术和逻辑运算 D) 初等函数运算(6) 下列叙述中正确的是(A)。
A) 指令由操作数和操作码两部分组成B) 常用参数xxMB表示计算机的速度C) 计算机的一个字长总是等于两个字节D) 计算机语言是完成某一任务的指令集(18) 下列程序执行后的输出结果是(小数点后只写一位)(A)。
A) 6 6 6.0 6.0 B) 6 6 6.7 6.7C) 6 6 6.0 6.7 D) 6 6 6.7 6.0main(){ double d; float f; ling l; int i;i=f=1=d=20/3;printf("%d %ld %f %f \n", i,l,f,d);}(19) 下列变量定义中合法的是(A)。
A) short _a=1-.le-1; B) double b=1+5e2.5;C) long do=0xfdaL; D) float 2_and=1-e-3;(20) 设 int x=1, y=1; 表达式(!x||y--)的值是(B)。
A) 0 B) 1 C) 2 D) -1(29) 下列程序执行后的输出结果是(D)。
A) 3 B) 6 C) 9 D) 随机数main(){ int a[3][3], *p,i;p=&a[0][0];for(i=p; i<9; i++) p[i]=i+1;printf("%d \n",a[1][2]);}(30) 设有数组定义: char array [ ]="China"; 则数组 array所占的空间为(C)。
A) 4个字节B) 5个字节 C) 6个字节D) 7个字节(33) 下列程序的输出结果是(B)。
A) 5 B) 6 C) 7 D) 8struct abc{ int a, b, c; };main(){ struct abc s[2]={{1,2,3},{4,5,6}}; int t;t=s[0],a+s[1],b;printf("%d \n",t);}(34) 设 int b=2;表达式(b>>2)/(b>>1)的值是(D)。
A) 0 B) 2 C) 4 D) 8(36) 下列程序执行后的输出结果是(C)。
A) -32767 B) FFFE C) -1 D) -32768 main(){ char x=0xFFFF; printf("%d \n",x--); }(38) 以下程序段的执行结果是(B)。
A) a=12 y=12 B) a=12 y=12a=14 y=16 a=16 y=28a=16 y=20a=18 y=24C) a=12 y=12 D) a=12 y=12a=14 y=26a=14 y=44int a, y;a=10; y=0;do{ a+=2; y+=a;printf("a=%d y=%d\n",a,y);if(y>20) break;{ while(a=14);...(39)若有以下调用语句,则不正确的fun函数的首部是(C)。
A) void fun(int m, int x[]) B) void fun(int s, int h[41]) C) void fun(int p, int *s) D) void fun(int n, int a) main(){ …int a[50],n;…fun(n, &a[9]);…}(41)请选出正确的程序段(C)。
A) int *p; B) int *s, k;scanf("%d",p); *s=100;……C) int *s, k; D) int *s, k;char *p, c; char *p, e;s=&k; s=&k;p=&c; p=&c;*p='a'; s=p;…*s=1;…(43) 设已有定义: char *st="how are you"; 下列程序段中正确的是(A)。
A) char a[11], *p; strcpy(p=a+1,&st[4]);B) char a[11]; strcpy(++a, st);C) char a[11]; strcpy(a, st);D) char a[], *p; strcpy(p=&a[1],st+2);(46) 假定下列程序的可执行文件名为prg.exe,则在该程序所在的子目录下输入命令行: prg hello good<回车>后,程序的输出结果是(B)。
A) hello good B) hg C) hel D) hellogoodmain()(int argc, char *argv[]){ int i;if(argc<-0)return;for(i=1;i<argc;i++) printf("%c", *argv[i]);}(48) 有以下结构体说明和变量的定义,且如下图所示指针p指向变量a,指针q指向变量b。
则不能把结点b连接到结点a之后的语句是(B)。
A) a.next=q; B) p.next=&b;C) p->next=&b; D) (*p).next=q;struct node{ char data;struct node *next;{ a,b,*p=&a,*q=&b;}Data next data next┌──┬──┐┌──┬──┐a│ 5 ││ b │ 9 │ 0 │└──┴──┘└──┴──┘↑p ↑q(49)变量a所占内存字节数是(C)。
A) 4 B) 5 C) 6 D) 8 union U{ char st[4];int i;long l;};struct A{ int c;union U u;}(24) 有如下程序main( ){ float x=2.0,y;if(x<0.0) y=0.0;else if(x<10.0) y=1.0/x;else y=1.0;printf(“%f\n”,y);}该程序的输出结果是()。
A) 0.000000 B) 0.250000 C) 0.500000 D) 1.000000(27) 有如下程序main( ){ int x=23;do{ printf(“%d”,x--);}while(!x);}该程序的执行结果是()。
A) 321 B) 23 C) 不输出任何内容D) 陷入死循环填空:(6) 设有以下变量定义,并已赋确定的值char w; int x; float y; double z;则表达式:w*x+z-y所求得的数据类型为 [double] 。
(17) 以下所列的C语言常量中,错误的是(B)。
A) 0xFF B) 1.2e0.5 C) 2L D) ‘\72’答:e或E的后面必须为整形22) 若变量已正确说明为float类型,要通过语句scanf(“%f %f %f ”,&a,&b,&c);给a赋于10.0,b赋予22.0,c 赋予33.0,不正确的输入形式是:(B)。
A) 10<回车> B) 10.0,22.0,33.0<回车>22<回车>33<回车>C) 10.0<回车> D) 10 22<回车>22.0 33.0<回车> 33<回车>答:打到电脑里试试,中间不能有逗号,中间可以是空格,或者打个回车25) 有以下程序段int k=0while(k=1)k++;while 循环执行的次数是(A)。
A) 无限次B) 有语法错,不能执行C) 一次也不执行D) 执行1次答:(26) 以下程序执行后sum的值是(C)。
A)15 B)14 C) 不确定 D)0min(){ int i , sum;for(i=1;i<6;i++) sum+=i;printf(“%d\n”,sum);}答:sum没有定义。
(27) 有以下程序段int x=3do{ printf(“%d”,x-=2); }while (!(--x));其输出结果是(C)。
A) 1 B) 3 0 C) 1 -2 D) 死循环答:执行x-=2后,x=1,在执行--x后x=0,!(--x)即非0则为1,所有继续执行,x=0,执行x-=2后x=-2,在执行--x为-3,!(--x)为假,退出循环(30) 以下程序的输出结果是(C)。
A) 0 B) 29 C) 31 D) 无定值fun(int x, int y, int z){ z=x*x+y*y; }main(){ int a=31;fun(5,2,a);printf(“%d”,a);}答:输出的a与fun()函数没有关系(33) 下列程序的运行结果是(B )。
A) 6 3 B) 3 6 C) 编译出错D) 0 0void fun(int *a, int *b){ int *k;k=a; a=b; b=k;}main(){ int a=3, b=6, *x=&a, *y=&b;fun(x,y);printf(“%d %d”, a, b);}答:(36) 设有以下说明语句struct ex{ int x ; float y; char z ;} example;则下面的叙述中不正确的是(B)。
A) struct结构体类型的关键字B) example是结构体类型名C) x,y,z都是结构体成员名D) struct ex是结构体类型答:example变量名Stcuct studnet{Char name;Int id;}student1;Struct stdent:结构体类型;char name,int id:结构体成员名;student1:变量名;(37) 以下只有在使用时才为该类型变量分配内存的存储类说明是(B)。
A) auto和 static B) auto和 registerC) register和 static D) extern和 register答:(43) 当执行下面的程序时,如果输入ABC,则输出结果是(A)。
A) ABC6789 B) ABC67 C) 12345ABC6 D) ABC456789 #include “stdio.h”#include “string.h”main(){ char ss[10]=“1,2,3,4,5”;gets(ss); strcat(ss, “6789”); printf(“%s\n”,ss);}答:程序执行到gets(ss),时,ss[10]中字符串就变成了“ABC”,再讲6789连接起来就成了A(48) 以下程序的输出是((47) 若定义了以下函数:void f(……){ ……*p=(double *)malloc( 10*sizeof( double));……}p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是(C)。