计算机二级 南开百题程序改错题要点
- 格式:doc
- 大小:158.50 KB
- 文档页数:10
计算机二级上机考试程序修改题常见应试技巧
计算机二级上机考试,题库每年都有,如果你的记忆力足够好,再加上那么一点
点运气的话,把每年的100题目全部都背下来,还是可以顺利通过上机考试的(或者
说是应付…)。
但是,一百套题,背着背着就会混淆,所以光背是远远不够的,所以,本人在这里把最容易拿分的程序修改题的应试技巧总结下来,分享给大家。
上机之后,针对程序修改题,首先单击F7,进行Build操作。
步骤如下:
1、单击“F7”
2、出现这个对话框后单击“是”
3、程序最下方会出现这样的显示:MODI1.exe - 1 error(s), 0 warning(s)。
当
提示“MODI1.exe - 1 error(s)”中“”error(s)不为零时,即为程序有
错误,无法执行。
在这个框中我们向上看出现错误的信息。
4、在程序修改题中,题目中所有的错误都出现在
“/************found************/”的下方,换句话说,就是
有几个“/************found************/“,其下方就有几处
错误。
5、各种错误信息的出现形式、修改方法参见下表:
上面介绍的是C语言上机考试程序修改题目中最常见的错误类型,总结出来供大家参考,希望对大家有所帮助,谢谢!。
第一套1. 程序填空程序通过定义学生结构体数组,存储了若干个学生的学号、姓名和三门课的成绩。
函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大排序)。
第一处struct student t;第二处for(i=0;i<n-1;i++)第三处if(strcmp(a[i]. name,a[j]. name)>0)2 程序修改/**fou nd**/q=p+i;/**fou nd**/while(q>p)3程序设计int fun(STREC *a,STREC *b,intl,i nt h){int i,j=0;for(i=0;i<N;i++)if((a[i].s>=1 &&a[i].s<=h) b[j++]=a[i]; return j;}第二套1. 程序填空给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递增有序连接。
函数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。
第一处free(q);第二处q=p->next; 第三处q=q_>next;2. 程序修改/**fou nd**/p=j;/**fou nd**/p=i;3. 程序设计void fun (i nt m,i nt *a,i nt *n){int i;*n=0;for(i=7;i<=m;i++)if((i%7==0)||(i%11==0)) a[(* n)++]=i;}第三套1. 程序填空函数fun的功能是:逆置数组元素是的值。
例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。
形参n给出数组中数组中数据的个数。
第一处for(i=0;i<n/2;i++) 第二处a[i]=a[n-1-i];第三处a[n-i-1]=t;2程序修改/**fou nd**/ n=*p_ ‘0';/**fou nd**/n=n*8+*p- ‘O';3.程序设计STREC fun (STREC*a,char *b){STREC c;Int i;c.num[0]= ' \0 ';c.s=-1; for(i=0;i<N;i++) if(strcmp(a[i]. num,b)==0) {strcpy(c. nu m,a[i]. nu m);c.s=a[i].s;break;} return c;}第四套1. 程序填空Z |给定程序中,函数fun的功能是:在带有头结点的单向链表中,查找数据域中值为ch的结点。
改错题1、给定程序中fun函数的功能是:根据整型形参m的值,计算如下公式的值:例如,若m中的值为5,则应输出0.536389。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <stdio.h>double fun ( int m ){ double y = 1.0 ;int i ;/**************found**************/for(i = 2 ; i < m ; i++) 改为:for(i = 2 ; i <= m ; i++)/**************found**************/y -= 1 /(i * i) ; 改为:y -= 1.0 /(i * i) ;return( y ) ;}main( ){ int n = 5 ;printf( "\nThe result is %lf\n", fun ( n ) ) ;}2、给定程序中fun函数的功能是:将s所指字符串的正序和反序进行连接,形成一个新串放在t所指的数组中。
例如,当s所指字符串为“ABCD”时,则t所指字符串的内容应为“ABCDDCBA”#include <stdio.h>#include <string.h>/************found************/void fun (char s, char t) 改为:void fun (char * s, char * t) { int i, d;d = strlen(s);for (i = 0; i<d; i++) t[i] = s[i];for (i = 0; i<d; i++) t[d+i] = s[d-1-i];/************found************/t[2*d-1] = '\0'; 改为:t[2*d] = '\0';}main(){ char s[100], t[100];printf("\nPlease enter string S:"); scanf("%s", s);fun(s, t);printf("\nThe result is: %s\n", t); }3、给定程序中fun函数的功能是:将s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t所指数组中(规定第一个字符放在第0位中)。
1、改错:将P所指字符串中每个单词的最后一个字母改成大写if(p==’’)改为if(*p==’’)*(p-1)=toupper(*(p-1))改为*(p-1)=toupper(*(p-1));2、改错:函数fun的功能是:根据形参m(2=<m<=9)在二维数组中存放一张m行m列的表格fun(int *a int m)改为fun(int (*a)[M] int m)a[i][k]=k*j改为a[j][k]=k*j3、改错:函数fun的功能:求K!(k<13)所求阶乘作为函数值返回if k>0改为if(k>0)else if(k=0)改为else if(k==0)4、改错:函数fun的功能:根据形参m的值,计算如下公式的值。
int k改为int iy=i**i改为y-=i*i5、改错:程序运行时,输入一串字符,程序查找每一个“str”子串将其换为buf[j]=buf[j+3]改为buf[j+3]=buf[j]printf(“%c\n”,buf)改为printf(“%s\n”,buf)6、改错:统计字符串s中各原音字母(即:A、B、C、D、E)的个数,注意:不分大小写写出。
switch (*s)case’a’:’A’:改为case’a’:case’A’7、改错:求整数X的Y次方的低3位值for(i=1;i<y;i++)改为for(i=1;i<y+1;i++)t=t/1000改为t=t%10008、改错:将一无序数a1,a2,a3……a10由小到大的顺序进行排序for(i=0;i<9;i--)改为for(i=0;i<9;i++)if(a[i]<a[j])改为if(a[i]>a[j])9、改错:MODI,C程序的功能是:读入两个字符串str1和str2for(j=0;t[j]==0;j++)改为for(j=0;t[j]!=0;j++)if(s[i]=t[j])改为if(s[i]==t[j])10、改错:函数fun的功能是:求出s所指字符串中最后一次出现的t所指子字符串的地址,若未找到,则函数值为NULLa=Null改为a=NULLif(r==p)改为if(*r==*p)11、改错:读入n(<=20)个只含字母和数字的字符串s(长度<20),将其中长度最大的字符串找出来并返回其首地址。
程序编程题目1、第一大类(交换类)共7道2. 程序修改(第3套)给定程序中函数fun 的功能是:通过某种方式实现两个变量的交换,规定不允许增加语句和表达式。
例如变量a中的值原为8,b中的值原为3,程序运行后a中值为3,b 中的值为8./**found**/t=*x; *x=y;/**found**/return(t);2. 程序修改(第60套)给定程序中函数fun的功能是:实现两个整数的交换。
例如给a和b分别输入60和65,输出为:a=65 b=60/**found**/void fun(int *a,int *b)/**found**/t=*b;*b=*a;*a=t;2. 程序修改(第88套)给定程序中函数fun的功能是:将主函数中两个变量的值进行交换。
例如,若变量a中的值为8,b中的值为3,则程序运行后,a中的值为3,b中的值为8。
/**found**/void fun(int *x, int *y)/**found**/t=*x,*x=*y,*y=t;2、第二大类(计算类)共22道2. 程序修改(第1套)给定程序中函数fun的功能是:求出以下分数序列的前n项之和。
2/1+3/2+5/3+8/5+13/8+21/13+……和值通过函数值返回main函数。
例如n=5,则应输出:。
/**found**/double fun(int n)/**found**/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套)给定程序中函数fun的功能是:求 s=aa…aa—…—aaa—aa—a(此处aa…aa表示n个a,a和n的值在1至9之间)。
例如,a=3,n=6,则以下表达式为:S=333333-33333-3333-333-33-3其值是296298。
计算机等级考试二级C语言上机改错题考点汇总改错题的错误主要分为以下几类:1、if或while语句若错误行是if或者while语句,则要注意以下点:1)首先判断是否正确书写if或while关键字;2)然后看有没有用小括号把while或者if后面的条件表达式括起来,若没有则加上小括号;3)若条件表达式中有指针变量而且没有指针运算符时,则加上指针运算符; int *p;* 指针运算符4)若if条件表达式中只有一个等于号即数学等号(=),则要改写成两个等于号即逻辑等号(= =);5)若if条件表达式为其他的比较运算符,则一般是进行逆转或加一个等于号;2、for语句若错误行是for语句,则要注意以下几点:1)首先判断for有没有书写正确;2)然后看for中的表达式是不是用分号(;)隔开,不是则改为分号。
记住是分号(;),不是逗号(,)!3) 再者,分析for中的三个表达式,是否符合题意;第一个表达式表示起始条件,第二个表达式表示终止条件,第三个表达式表示循环变量的变化。
3、return语句若错误为return语句,则要注意以下几点:1)首先看是不是正确书写return关键字;2)然后看是不是缺少分号,若是则加上分号即可;3)再者判断return后的变量或表达式是否正确;4)函数开头的返回值类型与return 返回类型一致,这种错误需要根据题意来分析,分析返回变量或表达式的值和类型。
4、赋值语句若错误行是赋值语句,则要看赋值是否正确,然后看赋值运算符是否写正确。
5、定义语句若错误行是定义语句,则要注意:1)首先分析变量类型名是否写对, 前后对应;2)然后分析给变量赋初值是否正确;3)若以上均不是,则看是不是少定义了某个变量或少了花括号;int i,sum;6、表达式错误问题:若错误行中有整数1除以某个表达式或变量时,需要double或float类型结果时必须把整数1改为1.0; double a=1/b; b int若变量或表达式是整型时,进行强制类型转换。
二级计算机改错技巧今天来聊聊二级计算机改错的一些实用技巧,相信对于那些经常在编程或者计算机等级考试中被bug折磨的小伙伴们来说,这可是个宝贵的话题。
最近在研究这块儿,发现了一些简单却有效的方法,能帮大家快速定位问题,提高改错效率,咱们就一边聊一边分享吧。
众所周知,二级计算机改错最头疼的就是面对错综复杂的代码,往往看了半天也找不到问题的源头。
我刚开始也是,面对满屏幕的代码像看天书一样,但后来通过实践总结出了几个小窍门。
首先,别一上来就埋头苦改,先大体浏览一遍整个程序结构,这就像搬家前要先规划好怎么摆家具一样,心里有数才能下手。
对了,还有个事儿要说,编码规范超级重要!很多人可能觉得这只是形式上的东西,但实际上它能帮你减少很多不必要的错误。
比如,坚持使用统一的代码缩进,变量命名要有意义,注释要写清楚——这些都是能让你在后期改错时省很多事的好习惯。
你可能会问,那具体到改错过程呢?这时,你可以利用IDE自带的调试功能,设置断点一步步执行,看是哪个环节出了问题。
这就像是侦探查案,一步步追踪线索。
有个小遗憾是,不是所有错误都能轻易通过IDE捕捉到的。
有时候,逻辑错误很难一眼看穿。
这时,我就把代码简化到一个最小可复现问题的版本,这样更容易聚焦问题本身。
讲真,一开始我也不知道这招,走了不少弯路。
还有啊,别忘了检查边界条件和特殊情况,比如除数为零、数组越界之类的,这些往往是第一个被排除但又是最容易出错的环节。
说到这里,我想起有个经典的改错案例是关于字符串拼接的错误。
原代码中直接将两个有null可能性的字符串进行"+"操作,导致运行时错误。
我当时的处理方式是先检查每个字符串是否为空,或者使用更安全的字符串操作方法,比如利用"StringBuilder"。
这些技巧虽然简单,但效果杠杠的,能大大提升程序的健壮性。
老实说,计算机改错没有一劳永逸的方法,每个错误都有其独特性。
但掌握一些基本原则和工具使用,会让你在改错的路上更加得心应手。
1.调试C程序时常见的错误类型分析一般情况下,错误主要分为两大类:一、语法错误。
对于这种错误,用编译器很容易解决。
所以,改错题的第一步是先编译,解决这类语法错误。
下面总结了二级C 语言上机改错题中常见的语法错误:(1)丢失分号,或分号误写成逗号。
(2)关键字拼写错误,如本来小写变成大写。
(3)语句格式错误,例如for语句中多写或者少写分号。
(4)表达式声明错误,例如:少了()(5)函数类型说明错误。
与main()函数中不一致。
(6)函数形参类型声明错误。
例如:少*等。
(7)运算符书写错误,例如:/写成了\。
二、逻辑错误,或者叫语义错误,这和实现程序功能紧密相关,一般不能用编译器发现。
对于逻辑错误可以按这样的步骤进行查找。
(1)先读试题,看清题目的功能要求。
(2)通读程序,看懂程序中算法的实现方法。
(3)细看程序,发现常见错误点。
2.改错题的改错方式总结,当然这些总结只能对大部分改错行有效。
1、若错误行是函数首部,可分为以下几种情况:A、该行最后若有分号则删除,中间若有分号则改成逗号B、形参类型不一致的问题,特别是指针类型,若后面用到某形参时有指针运算则该形参必为指针类型;若形参是二维数组或指向m个元素的指针变量,则第二维的长度必须与main中对应数组的第二维长度相同C、函数类型不一致的问题,若函数中没有return语句则函数类型为void,若有return语句则函数的类型必须与return 后变量的类型一致。
2、若错误行是if或while语句,则首先看有没有用小括号将整个表达式括起,若没有则加上小括号。
3、若错误行中有if、while、for则要特别注意条件表达式的错误问题:A、指针变量的应用,若表达式中有指针变量且没有指针运算符,则加上指针运算符B、若条件表达式中只有一个等于号,则改成两个等于号,若为其它比较运算符则一般是进行逆转或加一个等于号C、for中要用分号分隔表达式,而不是用逗号4、语法错误A、语句缺少分号,若错误行中有语句没有用分号结束,则加上分号。
程序改错题一.数学问题用递归算法计算斐波拉契数列中第n项的值。
从第1项起,斐波拉契数列为:1、1、2、3、5、8、13、21、……例如:若给n输入7,该项的斐波拉契数值为13。
{/**********found**********/switch(g);/*改为;去掉*//**********found**********/case 1 ;case 2 : return 1 ;/*改为case 1:*/ }二.一维数组给定程序MODI1.C中函数fun的功能是:将p所指字符串中的所有字符复制到b中,要求复制三个字符之后插入一个空格/**********found**********/b[k]=p;/*改为b[k]=*p*//**********found**********/b[k++]=" "; }/改为b[k++]=‟‟;3.给定程序MODI1.C中函数fun的功能是:找出一个大于形参m且紧随m的素数,并作为函数值返回。
/**************found**************/if (i % k != 0)/*改为if(i%k==0)*//**************found**************/if (k<i)/*改为(k==i)*/4.给定程序MODI1.C中函数fun的功能是:删除p所指字符串中的所空白字符(包括Tab字符、回车符及换行符)。
输入字符串用‟#‟结束输入/************found************/For (i = 0,t = 0; p[i] ; i++)/*改为for(i=0,t=0;p[i];i++)*//************found************/c[t]="\0";/*改为c[t]=‟\0‟*/5.给定程序MODI1.C中函数fun的功能是:比较两个字符串,将长的那个字符串的首地址作为函数值返回.#include <stdio.h>/**********found**********/char fun(char *s, char *t)/*改为char *fun(char *s,char *t) *//**********found**********/(*ss)++;/*改为ss++ *//**********found**********/(*tt)++;/*改为tt++ */ }6.给定程序MOID1.C中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。
/**********found***********/p=(NODE )malloc(sizeof(NODE));/*改为(NODE *)*/ /**********found***********/return p;/*改为return h*/}printf("\n");}main(){ NODE *head;head=Creatlink(8,22);outlink(head);}7.给定程序MODI1.C中函数fun的功能是:利用插入排序对字符串的字符按从小到大的顺序进行排序。
插入法的基本算法是:先对字符串中的头两个元素进行排序。
然后把第三个字符插入到前两字符中,插入后前三个字符依然有序;再把第四个字符插入到前三个字符中,……。
待排序的字符串已在主函数中赋予。
/**********found**********/n=strlen[ aa ];/*改为n=strlen(aa)*//**********found**********/c=aa[i];/*改为ch=aa[i]*/8.给定程序MOID1.C中函数fun的功能是:求出两个非零整数的最大公约数,并作为函数值返回。
例如,若给num1和num2分别输入49和21,则输出的最大公约数为7/************found************/t=a; b=a; a=t;/*改为t=a;a=b;b=t*/ }/************found************/return(a);/*改为return (b);*/}9.给定程序MODI1.C中函数fun的功能是:根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。
例如,若输入2 则输出1 22 4/**************found**************/fun(int **a, int m)/*改为fun(int (*a)[10],int m)*//**************found**************/a[j][k] = k * j ;/*改为a[j][k]=(k+1)*(j+1)*/}10.给定程序MODI1.C中函数fun的功能是:计算S=f(-n)+f(-n+1)+…+f(0)+f(1)+…+f(n)的值。
例如:当n为5时,函数值为:10.407143。
f(x)函数定义如下:┌(x+1)/(x-2) x>0且x≠2f(x)= ┤0 x=0或x=2└(x-1)/(x-2) x<0/************found************/f( double x)/*改为double f(double x)*//************found************/return s }/*改为return s;*/11.给定程序MOID1.C中函数fun的功能是:找出100至n(不大于1000)之间三位数字相等的所有整数,把这些整数放在s所指数组中,个数作为函数值返回。
/**************found**************/k=n;/*改为k=i*//**************found**************/c=k%10/*改为c=k%10;*/12.给定程序MODI1.C中函数fun的功能是:交换主函数中两个变量的值。
例如:若变量a中的值原为8,b中的值为3。
程序运行后a中的值为3,b中的值为8。
/*********found**********/int fun(int x,int y)/*改为int fun(int *x,int *y) *//*********found**********/t=x;x=y;y=t;/*改为t=*x;*x=*y;*y=t */}13.给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。
高位仍在高位,低位仍在低位。
例如,当s 中的数为:7654321,t中的数为:642。
/************found************/void fun (long s, long t)/*改为void fun(long s,long *t) *//************found************/while ( s < 0)/*改为while(s>0)*/14.给定程序MODI1.C是建立一个带头结点的单向链表,并用随机函数为各结点赋值。
函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来并且作为函数值返回。
/***********found**********/p=h;/* 改为p=h->next *//***********found**********/p=h->next;/*改为p=p->next */ }15.给定程序MODI1.C中函数fun的功能是:求k!(k<13),所求阶乘的值作为函数值返回。
例如:若k=10,则应输出:3628800。
long fun ( int k){/************found************/if k > 0 /*改为if(k>0) *//************found************/else if ( k=0 )/*改为else if( k==0) */16.给定程序MODI1.C中fun函数的功能是:将p所指字符串中每个单词的最后一个字母改成大写。
(这里的”单词”是指由空格隔开的字符串)。
例如,若输入”I am a student to take the examination.”,则应输出”I aM A studenT tO takE thE examination.”{/**********found***********/if( p == ' ' )/*改为if(*p==‟ ‟) *//**********found***********/* (p-1) = toupper( *( p - 1 ) ) /* 改为此句末尾加; */ 17.给定程序MODI1.C中函数fun的功能是:求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。
例如:当字符串中的内容为:”abcdabfabcdx”,t中的内容为:”ab”时,输出结果应是:abcdx。
当字符中内容为:”abcdabfabcdx”,t中的内容为:”abd”时,则程序输出未找到信息:not be found!。
/************found************/a = Null;/*改为a=NULL *//************found************/if ( r == p ) { r++; p++; }/*改为if(*r==*p) {r++;p++;} */18.给定程序MODI1.C中函数fun的功能是:求整数x 的y次方的低3位值。
例如:整数5的6次方为12625,此值的低3位值为625。
/**************found**************/for(i=1; i<y; i++)/*改为for(i=1;i<=y;i++) *//**************found**************/t=t/1000;/*改为t=t%1000; */19.给定程序MODI1.C中函数fun的功能是:由形参给定n个实数,输出平均值,并统计在平均值以上(含平均值)的实数的个数。
例如,n=8时,输入:193.199,195.673,195.757,196.051,196.092,196.596,196.5 79,196.763所得平均值为:195.838745,在平均值以上的实数个数应为:5/************found************/int j, c=0; float xa=0.0;/*改为{ int j,c=0;float xa=0.0;*//************found************/if (x[j] => xa)/*改为if(x[j]>=xa) */20.给定程序MODI1.C中函数fun的功能是:将tt所指字符串的小写字母都改为对应的大写字母,其它字符不变。