C语言试题错题集
- 格式:doc
- 大小:62.50 KB
- 文档页数:16
目录题目一前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项之和。
错题集相同优先级运算符,从左至右依次运算。
注意后缀运算优先级高于前缀。
因此++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 单目转型表式式,包括取地址& ,提领* ,正号+ ,负号- 位反~ 逻辑否!。
下列链表中,其逻辑结构属于非线性结构的是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)错误。
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语言数组笔试错题。
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语言找错题,供大家练习。
题目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语言改错题题库及详解答案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. 题目:找出并改正以下代码段中的语法错误。
以下各个项中,可作为C语言中合法整数的是( )。
A.10110BB.0386C.0XffaD.x2a2错解:B 错认为是十进制整形数据,开头为0,后面无意义。
整形常量:十进制 +(-)0—9八进制 +(-)O 0—7十六进制 +(-)OX 0—f或OX 0—F在输出是不会输出前导符。
下列定义变量的语句中错误的是()A.int _int;B.double int_;C.char For;D.float US$;正解:D 变量格式:数据类型名(整型、实型、字符型)+变量名变量名即格式字符属于标识符(符号常量名、函数名、数组名、文件名)由有效字符序列组成:字母、数字、下划线,且第一个字符不能是数字,另外C语言中大小写字母不等效。
设有定义:int a; float b; ,执行scanf("%2d%f",&a,&b);语句时,若从键盘输入876 <空格>543.0<回车>,则a和b的值分别是()A.87 和 6.00000B.876 和 543.0C.87 和 543.0D.76 和 543.0正解:%2d决定了a只能接受两位数字,所以a的值为87%2d%f是连在一起的,所以按照默认规定,输入的数据也是连续的,中间没有空格,否则会将空格作为输入的结束符来看待。
已知字符 'a' 的ASCII码为 97,执行下列语句的输出是____。
printf ("%d, %c", 'b', 'b'+1 ) ;A.98,bB.语法不合法C.98,99D.98,c正解:C.字符数据在内存中以ASCII码存储,因此字符数据和整型数据可以通用,可相互赋值。
有以下程序:main(){int m=0256, n=256;printf("%o %o\n", m, n);}运行程序后的输出结果是( )A.0256 0400B.0256 256C.256 400D.400 400错解:A. %O输出结果无前导符符号,若输出需要带上前导符,则应该为%#O,同理十六进制输出前导符为%#OX。
一、选择题1.以下所列的C 语言整形常量中,正确的是____A)0x10g B)0976 C)076L D)01ff2.以下合法的字符常量为____A) 'ab ' B) '\482' C) '\' D) '\xaf '3.若有以下定义和语句:int u=010,v=0x10,w=10,printf("%d,%d,%d\n ",u,v,w);则输出结果是____A)8,16,10 B)10,10,10 C)8,8,10 D)8,10,104.假设在程序中a,b,c 均被定义成整型,并且已赋大于1的值,则下列能正确表示代数式abc1的表达式是____ A) 1/a*b*c B)1/(a*b*c) C) 1/a/b/ (float) c D)1.0/a/b/c5.若有定义:int a=8,b=5, c ; char d='A '; 则执行语句 c=a/b+d%a+0.5; 后c 的值为A) 2 B)2.5 C) 3 D)类型不一致,无法计算,编译出错6.在有以下程序main(){ int i=10,j=1;i=i+j++;printf("%d,%d,%d\n ",i++,++j,i);}执行后输出结果是____A) 12,3,11 B) 12,2,11 C) 11,3,11 D) 12,3,127.已知int y,a,i=1;,则语句printf("%d,%d ",-i++,(y=a=3.6*3));的输出结果为___A. -1,10B. -2,1.8C. 0,3D. 1,188.有以下程序main(){ char a,b,c,d;a='\'; b='\xbc ';c='\0xab '; d='\023';printf("%c%c%c%c\n ",a,b,c,d);}编译时出现错误,以下叙述中正确的是A) 程序中只有a='\';语句不正确 B) b='\xbc ';语句不正确C) d='\023';语句不正确 D) a='\';和c='\0xab ';语句都不正确9.有以下程序main(){ double d=3.2; int x,y;x=1.2; y=(x+3.8)/5.0;printf("%d\n ",d*y);}程序的输出结果是A )3B )3.2C )0D )3.0710. 有以下程序main(){ double d; float f; long l; int i;i=f=l=d=20/3;printf("%d %ld %.1f %.1f\n",i,l,f,d);}程序的输出结果是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.011. 有以下程序main(){ int x,y,z;x=y=1;z=x++,y++,++y;printf("%d,%d,%d\n",x,y,z);}程序运行后的输出结果是A) 2,3,3 B) 2,3,2 C) 2,3,1 D) 2,2,112. 有以下程序#include <stdio.h>main(){ char c1,c2,c3,c4,c5,c6;scanf("%c%c%c%c",&c1,&c2,&c3,&c4);c5=getchar(); c6=getchar();putchar(c1); putchar(c2);printf("%c%c\n",c5,c6);}程序运行后,若从键盘输入(从第1列开始)123<回车>45678<回车>则输出结果是。
练习11、在下数据输出的判断中,正确的是()。
int x=0xaffbc;printf(“%x”,x);A.赋值非法B.输出值不确定C.输出值为affbD.输出值为ffbc2、下列语句中,最正确的赋值语句是()。
A.a=7+b+c=a+7;B.a=7+b++=a+7;C.a=7+b,b++,a+7;D.a=(7+b,c=a+7);3、下列语句中正确的是()。
A.int x=y=z=0;B.int z=(x+y)++;C.x+=3= =2;D.x%=2.5;4、表达式a=(a=6,a*3,a+3);运行后。
则a的值为()。
A. 39B. 36C. 6D. 95、C语言的程序一行写不下时,可以()。
A. 用逗号换行B.用分号换行C.在任意一空格处换行D.用回车符换行6、对于条件表达式(M)?(a++):(a--)来说,其中的表达式M等价于()。
A. M==0B. M==1C. M!=0D.M!=17、下列程序的输出结果是()。
main(){int x=0,y=5,z=3;while(z-->0&&++x<5)y=y-1;printf(“%d,%d,%d\n”,x,y,z);}A.3,2,0B.3,2,-1C.4,3,-1D.5,-2,5练习21、若x和y均为int型变量,则执行下面的循环后,y的值为()。
for(y=1,x=1;y<=5;y++){if(x>=10)break;if(x%2==1){x+=5;continue;}x-=3;}A.2B.4C.6 D82、在下列程序中,若要求a1,a2,c1,c2的值分别为10,20,A,B,正确的数据输入是()。
main(){int a1,a2;char c1,c2;scanf(“%d%d”,&a1,&a2);scanf(“%c%c”,&c1,&c2);}A.1020AB<CR>B.10 20<CR>AB<CR>C.10 20 AB<CR>D.10 20AB<CR>3、下列程序段中所表示的逻辑关系是()。
1、有以下程序:#include <stdio.h>#include <string.h>typedef struct {char name[9]; char sex; float score[2];} STU;void f(STU a){ STU b={"Zhao", 'm', 85.0, 90.0}; int i;strcpy(, );a.sex=b.sex;for (i=0; i<2; i++)a.score[i]=b.score[i];}main( ){STU c={"Qian",'f',95,92};f(c);printf("%s,%c,%d,%d",(int),c.sex,(int)c.score[0],c.score[1]);}程序运行后的输出结果是( A )。
A)Qian,f,95,92B)Qian,m,85,90C)Zhao,f,95,92D)Zhao,m,85,90本题考查的是结构体变量用作函数参数。
结构体变量用作函数参数时是传值调用,即在函数内部无论怎样修改形参结构体变量的内容,都不会影响到调用函数时传递给函数的实参结构体变量。
因此,本题的f()函数没有任何实际作用,它改变不了什么内容。
故本题的结果是定义结构体c时给出的初始值,应该选择A)。
2、有以下程序:#include <stdio.h>main( ){ FILE *fp; int a[10]={1,2,3}, i, n;fp = fopen("d1.dat", "w");for (i=0; i<3; i++)fprintf(fp, "%d", a[i]);fprintf(fp, "\n");fclose(fp);fp = fopen("d1.dat", "r");fscanf(fp, "%d", &n);fclose(fp);printf("%d\n",n);}程序的运行结果是( B )A)12300B)123C)1D)321本题主要考查的是文件的操作。
计算机四级考试大纲基本要求1、具有计算机及其应用的基础知识。
2、熟悉计算机操作系统、软件工程和数据库的原理及其应用。
3、具有计算机体系结构、系统组成和性能评价的基础及应用知识。
4、具有计算机网络和通信的基础知识。
5、具有计算机应用项目开发的分析设计和组织实施的基本能力。
6、具有计算机应用系统安全和保密知识。
考试内容一、计算机系统组成及工作原理1、计算机系统组成:(1)计算机的发展。
(2)计算机的分类及应用。
(3)计算机硬件结构。
(4)主要部件功能。
(5)计算机软件的功能与分类。
(6)系统软件与应用软件。
2、计算机工作原理:(1)计算机机中数的表示。
(2)运算器。
(3)控制器。
(4)存储器。
(5)输入与输出系统。
3、计算机的主要性能:(1)计算机系统性能指标。
(2)处理机指标。
(3)存储容量指标。
(4)I/O总线能力。
(5)系统通信能力。
(6)联机事务处理能力。
(7)软件支持。
二、数据结构与算法1、基本概念:(1)数据结构的基本概念。
(2)算法的描述与分析。
2、线性表:(1)线性表的逻辑结构。
(2)线性表的顺序存储结构。
(3)线性表的链式存储结构。
3、数组:(1)数组的定义与运算。
(2)数组的顺序存储结构。
(3)矩阵的压缩存储。
4、栈与队列:(1)栈的定义和运算。
(2)栈的存储结构。
(3)队列的定义和运算。
(4)链队列与循环队列。
5、串:(1)串及其操作。
(2)串的存储结构。
6、树和二叉树:(1)树的定义。
(2)二叉树的定义及性质。
(3)二叉树与树的转换。
(4)二叉树的存储。
(5)遍历二叉树与线索二叉树。
7、图:(1)图及其存储结构。
(2)图的遍历。
(3)图的连通性。
(4)有向无环图。
(5)最短路径。
(6)拓扑排序。
8、查找:(1)线性表查找。
(2)树形结构与查找。
(3)散列查找。
9、排序:(1)插入排序。
(2)交换排序。
(3)选择排序。
(4)归并排序。
(5)基数排序。
10、文件组织:(1)顺序文件。
C语言模拟考试错题集31下列关于栈叙述正确的是()。
A) 栈顶元素最先能被删除B) 栈顶元素最后才能被删除C) 栈底元素永远不能被删除D) 栈底元素最先被删除A 解析】栈是先进后出的数据结构,所以栈顶元素最后入栈却最先被删除。
栈底元素最先入栈却最后被删除。
所以选择A)。
2 下列叙述中正确的是()。
A) 在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B) 在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C) 在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化D) 以上说法均不正确C 【解析】栈是先进后出的数据结构,在整个过程中,栈底指针不变,入栈与出栈操作均由栈顶指针的变化来操作,所以选择C)。
3 某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)()。
A) 3B) 4C) 6D) 7D 【解析】根据二叉树的基本性质3:在任意一棵二叉树中,多为0的叶子结点总比度为2的结点多一个,所以本题中度为2的结点为1-1=0个,所以可以知道本题目中的二叉树的每一个结点都有一个分支,所以共7个结点共7层,即度为7。
4 软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。
下面属于应用软件的是()。
A) 学生成绩管理系统B) C语言编译程序C) UNIX 操作系统D) 数据库管理系统【解析】软件按功能可以分为:应用软件、系统软件、支撑软件。
操作系统、编译程序、汇编程序、网络软件、数据库管理系统都属于系统软件。
所以B)、C)、D)都是系统软件,只有A)是应用软件。
5 下面描述中错误的是()。
A) 系统总体结构图支持软件系统的详细设计B) 软件设计是将软件需求转换为软件表示的过程C) 数据结构与数据库设计是软件设计的任务之一D) PAD图是软件详细设计的表示工具A 【解析】详细设计的任务是为软件结构图中而非总体结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节,所以A)错误。
1.改错题(30题)第一题:#include<stdio.h>void main(){int a,b,c;/**/ float f; /**/ f为小数类型,具体下方f的输出用%f可看出为float 类型clrscr();printf("Please input a b :");scanf("%d%d",/**/&a,&b/**/);变量a,b必须取地址,除非数组名不取地址,因数组名就是地址f=/**/ (float)a/b; /**/ a,b均为整数,要获得结果的小数部分必须进行强制类型转换c=(int)((f-(int)f)*10);printf("\n%f %d\n",f,c);getch();}第二题:#include <stdio.h>void find(/**/int m /**/)参数类型必须指出,具体main函数中调用find函数的参数k为int 类型,所以对应的参数m也是int类型{int a1,a2;a1=m%10;求m的个位a2=m/10;求m的十位if(m%3==0 &&(/**/ a1==4 || a2==4 /**/))如果m能被3整除且个位或者十位是4 printf("%d\n",m);则输出m}void main(){ int k;for(k=10;k<=99;k++)k从10到99,一一尝试/**/ find( k ) /**/;调用函数find,函数的作用是寻找满足条件的数getch();}第三题:#include<stdio.h>void main(){/**/ int a,tag; /**/语法错误c语言的变量区分大小写,程序中用到小写tag,此处改为小写int num1=0,num2=0; num1和num2分别为大于个数和小于个数的计数器,程序开始归零clrscr();printf("please input numbers :");scanf("%d",/**/ &a /**/);语法错误变量a需取地址,输入第一个数tag=a;将第一个数放入tag中while(a)程序以0结束,循环的条件为:只要不输入0{ scanf("%d",&a);程序循环输入数字,存入a/**/ if(!a) /**/ continue;逻辑错误,程序执行的条件,a不为0else if(a<tag) num1++;如果a中数比tag小,计数器num1增加1else if(a>tag) num2++;如果a中数比tag大,计数器num2增加1}printf("\n%d %d\n",num1,num2);getch();}第四题:#include <stdio.h>long int fsum(int n) fsum函数用于求阶乘{long int k;if(n==1)/**/ k=1 /**/;逻辑错误,1的阶乘为1elsek=n*fsum(n-1);n的阶乘为n-1的阶乘乘以nreturn (/**/ k /**/);逻辑错误,运算结果在k中}void main(){ int i;long int sum;sum=0;for(i=1;i<=9;/**/ i++,i++ /**/)语法错误for语句格式不符sum+=fsum(i);printf("sum=%ld\n",sum);getch();}第五题:#include<stdio.h>void main(){ int i,a=0;/**/char c1,c2; /**/ 语法错误c1,c2为字符类型,程序中用getchar()获取clrscr();printf("Enter an 8 bit binary number :");c2=getchar();/**/ for(i=1;i<=7;i++) /**/语法错误for语句中间为;{ c1=getchar();a=a*2+c1-'0';}/**/ if (c2=='1') /**/ a=(-1)*a;如果依照题意c2=='1',a是负数printf("\n%d \n",a);getch();}第六题:#include<stdio.h>void main( ){int i,n;/**/ n = 0; /**/n为计数器,从0开始for(i=10;i<=100;i++)判断10-99是否是对称数if(i/10==i%10) i/10得到十位,i%10得到个位,若相等则是对称数{printf("%5d",i);输出对称数n++;计数器增加1if(/**/ n%9==0 /**/)语法错误表示相等的关系用双等号;printf("\n");9个数一行输出,换行}for(i=100;i<=999;i++)判断100-999是否是对称数if(/**/ i/100==i%10 /**/) i/100得到百位,i%10得到个位,若相等则是对称数{printf("%5d",i);n++;if(n%9==0)printf("\n");}getch();}第七题:#include <stdio.h>void main(){/**/ int a[10]; /**/语法错误数组下标用中括号;int i,j,k,x;printf("Enter 10 numbers:");scanf("%d",/**/ &x /**/);语法错误x需取地址;a[0]=x;for(k=1;k<=9;k++){ scanf("%d",&x);for(i=0;i<k;i++)if (a[i]>x) break;if(i<k)for(j=k;j>i;j--) a[j]=a[j-1];a[i]=x;}/**/ for(i=0;i<10;i++) /**/逻辑错误,数组下标从0开始printf("%d ",a[i]);printf("\n");getch();}第八题:#include <stdio.h>#include <math.h>int fun( /**/ float a,float b,float c /**/)语法错误函数三个参数的类型此处必须列出;{float t;int mk = 0;if(c<a){ t = a; a = c; c = t;}if(c<b){ t = b; b = c; c = t;}通过以上两次比较将最大的边放入c中if( fabs( c*c - (a*a+b*b)) < 1.0e-8)mk = 1;/**/ return mk; /**/}main(){float a,b,c;printf("Please input three numbers(a b c):\n");scanf("%f%f%f",&a,&b,&c);if(/**/ fun(a,b,c) /**/== 1)法错误调用函数三个参数之间用,分隔;printf("Yes\n");elseprintf("No\n");getch();}第9题:基本思路:每一趟从待排序的数列中选出值最小(或最大)的数据,将它与当前待排序的子数列的最后一个数据进行交换,直到全部数据排序完毕。
C语言错题集篇第一章公共基础知识1.在下列关于二叉树的叙述中,正确的是( )。
A)在二叉树中,任何一个结点的度都是2B)二叉树的度为2C)在二叉树中,至少有一个结点的度是2D)一棵二叉树的度可以小于2答案:D【解析】本题考查了二叉树的基本概念。
在二叉树中,叶子结点的度是1;当该二叉树为空树时,根结点的度为零;为非空树时,根结点的度为2。
2.树是结点的集合,它的根结点数目是( )。
A)有且只有1B)1或多于1C)0或1D)至少2答案:C【解析】树是N(N≥0)个结点的有限集合,当N=0时称为空树,空树没有根结点,即根结点的个数为0,对于非空树,有且只有一个根结点,所以树的根结点数目为0或1。
3.下列叙述中正确的是( )。
A)对长度为n的有序链表进行查找,最坏情况下需要的比较次数为nB)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2)C)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n)D)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(nlog2n)答案:A【解析】对长度为n的有序链表进行查找,最坏情况是从最小值开始查找最大值(或从最大值开始查找最小值),这个过程需要比较的次数为n,故选项A)正确。
对分查找只能针对随机存取的有序表进行,而有序链表只能进行顺序存取,不能进行随机存取,在有序链表上不能进行对分查找,故B)、C)、D)选项都错误。
4.下列排序方法中,最坏情况下比较次数最少的是( )。
A)冒泡排序B)简单选择排序C)直接插入排序D)堆排序答案:D【解析】冒泡排序、简单选择排序和直接插入排序在最坏情况下的比较次数都是"n(n-1)/2",堆排序在最坏情况下的比较次数最少,是"O(nlog2n)"。
5.软件生命周期中所花费用最多的阶段是( )。
A)详细设计B)软件编码C)软件测试D)软件维护答案:D【解析】软件生命周期分为软件定义、软件开发及软件运行维护3个阶段。
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)。