计算机二级试题-改错题
- 格式:doc
- 大小:462.50 KB
- 文档页数:81
计算机等级考试(NCRE)二级c语言搞错题1、给定程序MODI1.C中,函数fun的功能是求矩阵(二维数组)a[N][N]中每行的最小值,结果存放到数组b中。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h>#define N 4void fun(int a[][N], int b[]){ int i, j;for (i=0; i<N; i++){/**********found**********/b[i] = a[i][0];/**********found**********/for (j=1; j<=N-1; j++)/**********found**********/if ( b[i] > a[i][j] )b[i] = a[i][j];}}main(){ int a[N][N]={{1,4,3,2},{8,6,5,7},{11,10,12,9},{13,16,14,15}},b[N]; int i;fun(a,b);for (i=0; i<N; i++) printf("%d,", b[i]);printf("\n");}2、给定程序MODI1.C中规定输入的字符串全部为字母,fun函数的功能是:统计a所指字符串中每个字母在字符串中出现的次数(统计时不区分大小写),并将出现次数最高的字母输出(如果有多个相同,输出一个即可)。
例如对于字符串:dadbcdbabdb,对应的输出应为:b或d。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include<stdio.h>#include <stdio.h>#include <string.h>void fun(char a[]){ int b[26], i, n,max;for (i=0; i<26; i++)/**********found**********/b[i] = 0;n= strlen(a);for (i=0; i<n; i++)if (a[i] >='a' && a[i]<='z')/**********found**********/b[a[i] - 'a']++;else if (a[i] >='A' && a[i]<='Z')b[a[i] -'A']++;max = 0;for (i=1; i<26; i++)/**********found**********/if (b[max] < b[i])max=i;printf("出现次数最多的字符是 : %c\n", max + 'a');}main( ){ char a[200];printf("请输入一个待统计的字符串 : "); scanf("%s", a);fun(a);}3、给定程序MODI1.C中,函数fun()的功能是统计s所指一维数组中0的个数(存在变量zero中)和1的个数(存在变量one中),并输出结果。
1 下列给定程序中,函数fun 的功能是:计算S=f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…f(n)的值。
例如,当n 为5时,函数值应为10.407143。
f(x)函数定义如下:f(x)=(1)(2)0002(1)(2)0x x x x x x x x ⎧+/->⎪==⎨⎪-/-<⎩或请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:#include <stdlib.h> #include <conio.h> #include <stdio.h> #include <math.h>/*************found**************/ f(double x)2 下列给定程序中,fun 函数的功能是:根据形参m,计算下列公式的值:t=1+1/2+1/3+1/4+…+1/m例如,若输入5,则应输出2.283333。
3 下列给定程序中,函数fun 的功能是:分别统计字符串中大写字母和小写字母的个数。
例如,给字符串s 输入:AaaaBBb123CCccccd,则应输出结果:upper=5,lower=9。
4 下列给定程序中函数fun 的功能是:计算正整数num 各位上的数字之积。
例如,若输入252,则输出应该是20。
若输入202,则输出应该是0。
5 下列给定程序中函数fun 的功能是:计算n!。
例如,给n 输入5,则输出120.000000。
6 下列给定的程序中,函数fun 的功能是:计算并输出k 以内最大的10个能被13或17整除的自然数之和。
k 的值由主函数传入,若k 的值为500,则函数的值为4622。
7 下列给定程序中,函数fun()的功能是:根据整型形参m 的值,计算如下公式的值:t=1-1/(22)1/(33)...1/()m m ⨯-⨯--⨯8 在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。
1改错题下列给定程序的功能是:读入一个整数K(2〈=K 〈=10000),打印它的所有因子(即所有为素数的因子)。
例如,若输入整数2310,则应输出:2、3、5、7、11。
第1处:Isprime(int n);应改为Isprime(int n)第2处:if !(n%i)应该为if(!(n%i))2改错题下列给定程序中,函数FUN的功能是:逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c数组中,形成一个新的字符串。
例如,若a中的字符串为aBCDeFgH,b中的字符串为:ABcd,则c中的字符串应为:aBcdeFgH。
第1处:int k=1应改为int k=0;第2处:while(*p!=*q)应改为while(*p||*q)3改错题下列给定的程序中,函数fun的功能是:依次取出字符串中所以数字字符,形成新的字符串,并取代原字符串。
第1处:s[j]=s[i];应改为s[j++]=s[i]第2处:s[j]=”/0”;应改为s[j]=’\0’;4改错题下列给定程序中,fun函数的功能是:分别统计字符串中大写字母和小写字母的个数。
例如,给字符串s输入:AaaaBBb123CCccccd,则应输出结果:upper=6,lower=8第1处:void fun (char *s,int a,int b)应改为void fun(char *s,int *a,int *b)第2处:a++;应改为(*a)++;第3处:b++;应改为(*b)++;5改错题假定整数数列中的数不重复,并存放在数组中。
下列给顶程序中,函数fun的功能是删除数列中值为x的元素,同时将其他元素前移。
N中存放的是数列中元素的个数。
第1处:a[i+1]=a[i];应改为a[i]=a[i+1]6改错题下列给定程序中,函数fun的功能是:根据整型参m的值,计算如下公式的值。
例如,若m中的值为5,则应输出:0.536389第1处:for (i=2;i<m;i++)应改为for(i=2;i<=m;j++)第2处:y-=1/(i*i);应改为y-=1.0/(i*i)7改错题下列给定程序中函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。
目录题目一前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语言考试真题及答案一、单项选择题(每题2分,共20分)1. 在C语言中,以下哪个关键字用于声明一个函数?A. intB. voidC. returnD. function答案:A2. 若有定义:int a=5, b=10; 则以下哪个表达式的值不为5?A. a+bB. a-bC. a*bD. a/b答案:C3. 在C语言中,以下哪个选项不是标准输入输出库函数?A. printf()B. scanf()C. puts()D. strcat()答案:D4. 下列哪个选项是C语言中的合法标识符?A. 2variableB. variable2C. _variableD. variable-2答案:B5. 若有定义:char c='A'; 则以下哪个表达式的值不为65?A. cB. 'A'C. "A"D. '\101'答案:C6. 在C语言中,以下哪个选项表示逻辑“与”操作?A. &&B. ||C. !D. =答案:A7. 在C语言中,以下哪个选项是正确的字符串声明?A. char str[5] = "ABCDE";B. char str[5] = {'A', 'B', 'C', 'D', 'E'};C. char str[5] = {'A', 'B', 'C', 'D'};D. char str[5] = "ABC" "DE";答案:D8. 若有定义:int x=10; 则以下哪个表达式的值不为10?A. x++B. x--C. ++xD. --x答案:D9. 在C语言中,以下哪个选项是正确的二维数组声明?A. int array[3][2];B. int array[][] = {1, 2, 3};C. int array[3][];D. int array[2, 3];答案:A10. 在C语言中,以下哪个选项是正确的文件操作函数?A. fopen()B. fclose()C. fgetc()D. All of the above答案:D二、程序填空题(每空2分,共20分)给定以下程序片段,请在空白处填入正确的代码。
1 下列给定程序中,函数fun 的功能是:计算S=f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…f(n)的值。
例如,当n 为5时,函数值应为10.407143。
f(x)函数定义如下:f(x)=(1)(2)0002(1)(2)0x x x x x x x x ⎧+/->⎪==⎨⎪-/-<⎩或请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:#include <stdlib.h> #include <conio.h> #include <stdio.h> #include <math.h>/*************found**************/ f(double x)2 下列给定程序中,fun 函数的功能是:根据形参m,计算下列公式的值:t=1+1/2+1/3+1/4+…+1/m例如,若输入5,则应输出2.283333。
3 下列给定程序中,函数fun 的功能是:分别统计字符串中大写字母和小写字母的个数。
例如,给字符串s 输入:AaaaBBb123CCccccd,则应输出结果:upper=5,lower=9。
4 下列给定程序中函数fun 的功能是:计算正整数num 各位上的数字之积。
例如,若输入252,则输出应该是20。
若输入202,则输出应该是0。
5 下列给定程序中函数fun 的功能是:计算n!。
例如,给n 输入5,则输出120.000000。
6 下列给定的程序中,函数fun 的功能是:计算并输出k 以内最大的10个能被13或17整除的自然数之和。
k 的值由主函数传入,若k 的值为500,则函数的值为4622。
7 下列给定程序中,函数fun()的功能是:根据整型形参m 的值,计算如下公式的值:t=1-1/(22)1/(33)...1/()m m ⨯-⨯--⨯8 在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。
11、第一大类(交换类)共7道/**found**/t=*x; *x=y;/**found**/return(t);2. 程序修改(第60套)void fun(int *a,int *b)/**found**/t=*b;*b=*a;*a=t;2.程序修改(第88套)/**found**/void fun(int *x, int *y)/**found**/t=*x,*x=*y,*y=t;2、第二大类(计算类)共22道2.程序修改(第1套)求岀以下分数序列的前n 项之和。
2/1+3/2+5/3+8/5+13/8+21/13+……和值通过函数值返回main函数。
例如n=5,则应输出:。
/**foun d**/double fun (i nt n)/**foun d**/s=s+(double)a/b;2.程序修改(第6套)给定程序中函数fun的功能是:用递归算法计算列中第n 项的值。
从第一项起,斐波拉契数列为:1、1、2、3、5、8、13、21、/**found**/ switch(g)/**found**/case 1:case 2:return 1;2.程序修改(第13套)long s=0,t=0;t=t/10;2.程序修改(第21套)double f(double x)/**found**/ return s;2.程序修改(第27套)/**found**/double fun(double a,doublex0)/**found**/if(fabs(x1-x0)> 2程序修改(第29套)/**found**/#define FU(m,n) (m)/(n)return (value);2.程序修改(第33套)/**found**/for (i =2 ; i<= m; i++)/**found**/y+=1.0/ ( i* i);2.程序修改(第37套)/**found**/while((fabs(t))>=num)/**found**/t=s/n2.程序修改(第45套)/**found**//**found**/t+=i;2/**found**/result *=n__;2.程序修改(第48套)/**found**/for (i =2 ; i<= m; i++)/**found**/y+=1.0/ ( i* i);s=s +(double)(n+1)/n;/**found**/return t;2.程序修改(第52套)/**found**/int fun(int n)/**found**/if(n==1) 2.程序修改(第58套)给定程序中函数fun的功能是:求K! <k<13>,所求阶乘的值作为函数值返回。
11、第一大类(交换类)共7道/**found**/t=*x; *x=y;/**found**/return(t);2. 程序修改(第60套)void fun(int *a,int *b)/**found**/t=*b;*b=*a;*a=t;2.程序修改(第88套)/**found**/void fun(int *x, int *y)/**found**/t=*x,*x=*y,*y=t;2、第二大类(计算类)共22道2.程序修改(第1套)求岀以下分数序列的前n 项之和。
2/1+3/2+5/3+8/5+13/8+21/13+……和值通过函数值返回main函数。
例如n=5,则应输出:。
/**foun d**/double fun (i nt n)/**foun d**/s=s+(double)a/b;2.程序修改(第6套)给定程序中函数fun的功能是:用递归算法计算列中第n 项的值。
从第一项起,斐波拉契数列为:1、1、2、3、5、8、13、21、/**found**/ switch(g)/**found**/case 1:case 2:return 1;2.程序修改(第13套)long s=0,t=0;t=t/10;2.程序修改(第21套)double f(double x)/**found**/ return s;2.程序修改(第27套)/**found**/double fun(double a,doublex0)/**found**/if(fabs(x1-x0)> 2程序修改(第29套)/**found**/#define FU(m,n) (m)/(n)return (value);2.程序修改(第33套)/**found**/for (i =2 ; i<= m; i++)/**found**/y+=1.0/ ( i* i);2.程序修改(第37套)/**found**/while((fabs(t))>=num)/**found**/t=s/n2.程序修改(第45套)/**found**//**found**/t+=i;2/**found**/result *=n__;2.程序修改(第48套)/**found**/for (i =2 ; i<= m; i++)/**found**/y+=1.0/ ( i* i);s=s +(double)(n+1)/n;/**found**/return t;2.程序修改(第52套)/**found**/int fun(int n)/**found**/if(n==1) 2.程序修改(第58套)给定程序中函数fun的功能是:求K! <k<13>,所求阶乘的值作为函数值返回。
浙江省计算机二级c考试真题及答案一、单项选择题(每题2分,共20分)1. 在C语言中,以下哪个关键字用于定义一个结构体?A. structB. unionC. enumD. typedef答案:A2. 若有定义 int a[5] = {1, 2, 3, 4, 5}; 则数组元素a[2]的值是多少?A. 1B. 2C. 3D. 4答案:C3. 在C语言中,哪个函数用于计算字符串的长度?A. strlen()B. strcpy()C. strcat()D. strcmp()答案:A4. 下面哪个选项不是C语言中的基本数据类型?A. intB. floatC. doubleD. string答案:D5. 在C语言中,以下哪个运算符用于逻辑与操作?A. &&B. ||C. !D. ~答案:A6. 若有定义 int x = 10; 则表达式 x % 3 的值是多少?A. 1B. 2C. 3D. 4答案:A7. 在C语言中,哪个关键字用于定义一个函数?A. functionB. defC. defineD. void答案:D8. 下面哪个选项是正确的C语言变量声明?A. int 5x;B. int x = 5C. int x = 5;D. int x = 5, y;答案:C9. 在C语言中,哪个函数用于将字符串复制到另一个字符串?A. strcpy()B. strncpy()C. strcat()D. strcmp()答案:A10. 若有定义 int a = 5, b = 10; 则表达式 a + b 的值是多少?A. 15B. 5C. 10D. 0答案:A二、程序填空题(每空2分,共20分)请根据题目要求,填写空白处的代码。
11. 给定以下代码片段,完成计算两个数之和的函数:```cint sum(int a, int b) {return _____;}```答案:a + b12. 给定以下代码片段,完成计算两个数之差的函数:```cint difference(int a, int b) {return _____;}```答案:a - b三、程序改错题(每题10分,共20分)13. 阅读以下代码,找出并修正其中的错误。
计算机二级C++练习题:改错题计算机二级C++练习题:改错题为了使广阔考生在备战计算机等级考试时,更快的把握相应学问点,下面是我搜寻整理的计算机二级C++练习题:改错题,供参考练习,预祝考生们考出自己抱负的成果!计算机二级C++练习题:改错题使用VC6打开考生文件夹下的.工程kt7_1,此工程包含一个源程序文件kt7_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:Constructor1Constructor1Constructor1DestructorConstructor2Destructorx=0x=5DestructorDestructor源程序文件kt21_1.cpp清单如下:#includeclassB{intx;public:B(){x=0;coutConstructor1ENDL;}B(inti){x=i;coutConstructor2ENDL;} ~B(){coutDestructorENDL;}/**********found**********/~B(inti){coutIBEDESTRUCTORENDL;} voidprint(){coutx=XENDL;}};voidmain(){B*ptr;ptr=newB[2];/**********found**********/ptr[0]=B(0);ptr[1]=B(5);/**********found**********/for(inti=0;i2;)ptr[i].print();[]ptr;}(1)将~B(inti){coutIp=be=(2)将ptr[0]=B(0);改为:ptr[0]=B();(3)将for(inti=0;i2;)改为:for(inti=0;i2;i++) B(inti){x=i;coutConstructor2ENDL;}~B(){coutDestructorENDL;}/**********found**********/~B(inti){coutIBEDESTRUCTORENDL;}voidprint(){coutx=XENDL;}};voidmain(){B*ptr;ptr=newB[2];/**********found**********/ptr[0]=B(0);ptr[1]=B(5);/**********found**********/for(inti=0;i2;)ptr[i].print();[]ptr;}本题主要考查对文件相关操作的娴熟程度。
功能:在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。
------------------------------------------------------*/#include "stdio.h"#define N 11main(){int i,j,t,number,a[N]={1,2,4,6,8,9,12,15,149,156};printf("please enter an integer to insert in the array:\n");/**********ERROR**********/scanf("%d",&number)printf("The original array:\n");for(i=0;i<N-1;i++)printf("%5d",a[i]);printf("\n");/**********ERROR**********/for(i=N-1;i>=0;i--)if(number<=a[i])/**********ERROR**********/a[i]>=a[i-1];else{a[i+1]=number;/**********ERROR**********/exit;}if(number<a[0]) a[0]=number;printf("The result array:\n");for(i=0;i<N;i++)printf("%5d",a[i]);printf("\n");}1.scanf("%d",&number);2.for(i=N-2;i>=0;i--)for(i=N-2;0<=i;i--)3.a[i+1]=a[i];4.break;功能:用下面的和式求圆周率的近似值。
第一套:下列程序是将从键盘上输入的字符(只含数字或字母)按下列规则编成密码后输出:对输入的数字字符用其ASCII码减10;小写字母用该字母的ASCII码前面加星号(*);大写字母用其ASCII码加左右括号,输入其他字符则表示输入结束。
例如,从键盘输入字符串"A12bMc",输出的密码为"(65)3940*108(77)*109"。
要求:(1)将下列程序输入到项目中的程序文件progm中,并对其中的两条错误语句进行修改。
(2)在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。
CLEARcpassword="ckey1="DO WHILE.T.WAIT WIND"请输入字符串……(按[Enter]键结束)"TO ckeyIF BETWEEN(ckey, 0 , 9 )ckey1=ALLT(STR(ASC(ckey)-10))ELSEIF BETWEEN(ASC(ckey),ASC("A"),ASC("Z"))ekey1= ( +ALLT(STR(ASC(ckey)))+ )ELSEIF BETWEEN(ASC(ckey),ASC( a ),ASC( z ))ckey1= * +ALLT(STR(ASC(ckey)+10))ENDIFEXITENDIFENDIFENDIFcpassword=ckey1+cpasswordENDDO?cpassword【答案】(1)第14行改为:ELSE(2)第19行改为:cpassword = cpassword+ckey1【分析】(1)IF语句未结束。
(2)ckey1应接在cpassword后面构成新的cpassword。
第二套:下列程序是将从键盘上输入的字符串(只含数字或字母)按下列规则编成密码后输出:对输入的数字字符用其ASCII码减10;小写字母用该字母的ASCII码前面加星号(*);大写字母用其ASCII码加左右括号,输入其他字符则结束输入。
江苏省计算机等级考试二级C上机考试模拟试题试题 1一、改错题(18分)【题目】函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上各元素之和,返回此和数。
含有错误的程序如下:#include <conio.h>#include <stdio.h>#define M 5int fun(int n,int xx[][]){ int i,j,sum;printf("\nThe %d x %d matrix:\n",M,M);for(i=0;i<M;i++){ for(j=0;j<M;j++)printf("%f",xx[i][j]);printf("\n");}for(i=0;i<n;i++)sum+=xx[i][i]+xx[i][n-i];return(sum);}main( ){int aa[M][M]={ {1,2,3,4,5},{4,3,2,1,0},{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};clrscr( );printf ("\nThe sum of all elements on 2 diagnals is %d.",fun(M,aa));}【要求】1.将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译处理命令,但不能增加其他语句,也不能删去整条语句。
3.改正后的源程序(文件名myf1.c)必须放在考试软盘的根目录下,供阅卷用,否则不予评分。
二、编程题(22分)【题目】1.编写函数fun,函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第m个字符平移到字符串的最后,把第m+1到最后的字符串移到字符串的前部。
计算机二级C上机:程序改错题计算机二级C上机:程序改错题为了使广大考生在备战计算机等级考试时,更快的掌握相应知识点,下面是店铺搜索整理的计算机二级C上机:程序改错题,供参考练习,预祝考生们考出自己理想的成绩!程序改错题使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正程序中的错误,使程序输出的结果为150200注意:错误的语句在//******error******的下面,修改该语句即可。
提示:定义Numl为一个整型数据位长的`变量。
试题程序:#include//******error******struct{//******error******intNuml:1;intNum2;}MyStruct;voidmain(){MyStructmstr;mstr.Num1=150;mstr.Num2=15;//******error******int*ptr=&mstr.Numl;cout<<*ptr<<endl;*ptr=200;cout<<*ptr<<endl;}答案:(1)“typedefstruct”。
(2)“intNuml:32;”或“intNuml;”。
(3)“int*ptr=(int*)&mstr;”。
【解析】第1处是定义结构体,结构体定义的一般形式为struct(结构体名>{<成员列表>}(变量名列表);程序当中定义结构体名放在后面,MyStruct为结构体变量类型,相当于typedef为已有的类型定义一个新的类型,第1处应改为“typedefstruct”。
第2处是定义Numl为一个整型数据变量,整型数据位数为32(4字节),因此第2处应改成“intNuml:32;”或“intNuml;”。
ptr为整型数据指针,mstr为MyStruct类型结构变量,两者类型不一致应该做强制类型转换,第3处应改成“int*ptr=(int*)&mstr;”,表示将mstr的地址给ptr,ptr指向MyStruct的第一个域Numl,Numl也是整型,类型一致,故可通过ptr指针来改变Numl的值。
第一套一、改错题1 .题目要求下列给定程序中函数fun的功能是:计算函数F(x, y, z)= (x + y)/(x —y) + (z+ y)/(z —y)的值。
其中x和y 的值不相等,z和y的值不相等。
例如,当x的值为9, y的值为11, z的值为15时,函数值为一3.50。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构。
#i nclude <stdio.h>#in clude <math.h>#in clude <stdlib.h>**********fo un d**********#defi ne FU(m, n) ((m/n)) float fun (float a,float b,float c) { float value;value=FU(a+b,a-b)+FU(c+b,c-b);**********fo un d**********Return(Value);}mai n(){ float x,y,z,sum;prin tf("I nput x y z:");scan f("%f%f%f", &x, &y,& z);prin tf("x=%f,y=%f,z=%f\n",x,y,z);if (x==y||y==z){pri ntf("Data error!\n");exit(0);} sum=fu n(x,y,z);printf("The result is : %5.2f\n",sum);}2 .算法分析①#define FU(m,n) ((m/n)) 错误这样定义FU (m,n)造成语句value=FU(a+b,a-b)+FU(c+b,c-b) 执行为value=(a+b/a-b)+(c+b/c-b) ,所以应该将语句#define FU(m,n) ((m/n))改为#define FU(m,n) (m)/(n)②语句Return(Value);错误 C 语言中大小写字母有不同的含义,此处希望执行返回value的值的操作,所以应该改为return(value);二、填空题1 .题目要求下列给定程序中,函数fun的功能是:有NXN矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。
1.2给定程序MODI1.C中函数fun的功能是:先将在字符串s中的字符串按正序存放到t串中,然后把s终端字符按逆序连接到t串的后面。
例如:当s中的字符串为”ABCDE”时,则t中的字符串应为:“ABCDEEDCBA”。
第一处:把s1改成sl第二处:把t[sl]=‘\0’改成t[2*sl]=‘\0’2.2给定程序MODI1.C中的函数fun的功能是:从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。
高位仍在高位,低位仍在低位。
例如:当s 中的数为:7654321时,t中的数为:7531。
第一处:void fun(long s,long t)改为void fun(long s, long *t)第二处:sl=sl*100改为sl=sl*103.2给定程序MODI1.C中的函数fun的功能是:将n个无序整数从小到大排序。
第一处:for(i=j+1;i<n-1;i++)改为for (i=j+1;i<n;i++)第二处:t=i改成p=i4.2给定程序MODI1.C中的函数fun的功能是:将长整型数中的每一位上为偶数的数依次取出,构成一个新数放在t中。
高位仍在高位,低位仍在低位。
例如:当s中的数为:87654321时,t中的数为:8642。
第一处:if(d%2=0)改为if(d%2= =0)第二处:s\=10;改为s/=105.2给定程序MODI1.C中的函数fun的功能是:计算正整数num的各位上的数字之积。
例如:若输入:252,则输出应该是20。
若输入:202,则输出应该是:0。
第一处:long k改为long k=1;第二处:num\=10改为num/=106.2给定程序MODI1.C中函数fun的功能是:将字符串中的字符按逆序输出,但不改变字符串中的内容。
例如,若字符串为abcd,则应输出:dcba. 第一处:fun(char a)改为fun(char *a) 第二处:printf(“%c“*a)改为printf(“%”,*a)7.2给定程序modi1.c中函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。
第01套给定程序MODI1.C中函数fun 的功能是:计算n!。
例如,给n输入5,则输出120.000000。
请改正程序中的错误,使程序能输出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include <stdio.h>double fun ( int n ){ double result = 1.0 ;/************found************/if n = = 0 改为:if (n==0)return 1.0 ;while( n >1 && n < 170 )/************found************/result *= n-- 改为:result *= n--;return result ;}main ( ){ int n ;printf("Input N:") ;scanf("%d", &n) ;printf("\n\n%d! =%lf\n\n", n, fun(n)) ;}解题思路:第一处:条件语句书写格式错误,应改为:if (n==0)。
第二处:语句后缺少分号。
第02套给定程序MODI1.C中函数fun的功能是: 依次取出字符串中所有数字字符, 形成新的字符串, 并取代原字符串。
请改正函数fun中指定部位的错误, 使它能得出正确的结果。
注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!给定源程序:#include <stdio.h>void fun(char *s){ int i,j;for(i=0,j=0; s[i]!='\0'; i++)if(s[i]>='0' && s[i]<='9')/**********found**********/s[j]=s[i]; 改为:s[j++]=s[i];/**********found**********/s[j]="\0"; 改为:s[j]='\0';.}main(){ char item[80];printf("\nEnter a string : ");gets(item);printf("\n\nThe string is : \"%s\"\n",item);fun(item);printf("\n\nThe string of changing is : \"%s\"\n",item );}解题思路:第一处: 要求是取出原字符串中所有数字字符组成一个新的字符串,程序中是使用变量j 来控制新字符串的位置,所以应改为:s[j++]=s[i];。
第二处: 置新字符串的结束符,所以应改为:s[j]='\0';.第03套给定程序MODI1.C中的函数Creatlink的功能是创建带头结点的单向链表, 并为各结点数据域赋0到m-1的值。
请改正函数Creatlink中指定部位的错误, 使它能得出正确的结果。
注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!给定源程序:#include <stdio.h>#include <stdlib.h>typedef struct aa{ int data;struct aa *next;} NODE;NODE *Creatlink(int n, int m){ NODE *h=NULL, *p, *s;int i;/**********found***********/p=(NODE )malloc(sizeof(NODE)); 改为:p=(NODE *)malloc(sizeof(NODE)); h=p;p->next=NULL;for(i=1; i<=n; i++){ s=(NODE *)malloc(sizeof(NODE));s->data=rand()%m; s->next=p->next;p->next=s; p=p->next;}/**********found***********/return p; 改为:return h;}outlink(NODE *h){ NODE *p;p=h->next;printf("\n\nTHE LIST :\n\n HEAD ");while(p){ printf("->%d ",p->data);p=p->next;}printf("\n");}main(){ NODE *head;head=Creatlink(8,22);outlink(head);}解题思路:第一处: 指向刚分配的结构指针,所以应改为:p=(NODE *)malloc(sizeof(NODE));第二处: 在动态分配内存的下一行语句是,使用临时结构指针变量h保存p指针的初始位置,最后返回不能使用p,是因为p的位置已经发生了变化,所以应改为返回h。
第04套给定程序MODI1.C中函数fun的功能是: 在字符串的最前端加入n个*号, 形成新串, 并且覆盖原串。
注意: 字符串的长度最长允许为79。
请改正函数fun中指定部位的错误, 使它能得出正确的结果。
注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!给定源程序:#include <stdio.h>#include <string.h>void fun ( char s[], int n ){char a[80] , *p;int i;/**********found***********/s=p; 改为:p=s;for(i=0; i<n; i++) a[i]='*';do{ a[i]=*p;i++;}/**********found***********/while(*p++) 改为:while(*p++);a[i]=0;strcpy(s,a);}main(){ int n; char s[80];printf("\nEnter a string : "); gets(s);printf("\nThe string \"%s\"\n",s);printf("\nEnter n ( number of * ) : "); scanf("%d",&n);fun(s,n);printf("\nThe string after insert : \"%s\" \n" ,s);}解题思路:第一处: 指针p应指向s,所以应改为:p=s;。
第二处: 死循环,当do while循环执行一次,临时变量p应该指向字符串的下一位置,所以应改为:while(*p++);。
第05套给定程序MODI1.C中函数fun的功能是: 对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来, 并将这些学生数据存放在一个动态分配的连续存储区中, 此存储区的首地址作为函数值返回。
请改正函数fun中指定部位的错误, 使它能得出正确的结果。
注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!给定源程序:#include <stdio.h>#include <alloc.h>#include <string.h>#define N 10typedef struct ss{ char num[10];int s;} STU;STU *fun(STU a[], int m){ STU b[N], *t;int i,j,k;/**********found**********/t=(STU *)calloc(sizeof(STU),m) 改为:t=(STU *)calloc(sizeof(STU),m);for(i=0; i<N; i++) b[i]=a[i];for(k=0; k<m; k++){ for(i=j=0; i<N; i++)if(b[i].s > b[j].s) j=i;/**********found**********/t(k)=b(j); 改为:t[k]=b[j];b[j].s=0;}return t;}outresult(STU a[], FILE *pf){ int i;for(i=0; i<N; i++)fprintf(pf,"No = %s Mark = %d\n", a[i].num,a[i].s);fprintf(pf,"\n\n");}main(){ STU a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} };STU *pOrder;int i, m;printf("***** The Original data *****\n");outresult(a, stdout);printf("\nGive the number of the students who have better score: ");scanf("%d",&m);while( m>10 ){ printf("\nGive the number of the students who have better score: ");scanf("%d",&m);}pOrder=fun(a,m);printf("***** THE RESULT *****\n");printf("The top :\n");for(i=0; i<m; i++)printf(" %s %d\n",pOrder[i].num , pOrder[i].s);free(pOrder);}解题思路:第一处: 语句最后缺少分号。