四、程序修改题参考答案及解析
第1套 程序修改题参考答案及解析
【参考答案】
(1)double fun(int n)
(2)s=s+(double)a/b;
【考点分析】
本题考查:函数定义。函数定义的一般形式为“类型标识符函数名(形式参数表列)”,其中类型标识符用来说明函数值的类型,函数的类型实际上是函数返回值的类型。
【解题思路】
(1)由语句return(s);和变量s定义为double型可知,该函数定义时,其类型标识符为double类型。
(2)注意数据类型double的书写格式。
【解题宝典】
确定函数类型标识符在填空和改错题中经常考到,如果函数没有返回值,则函数定义为void型;如果函数有返回值,则函数类型应与返回值类型一致;如果不定义函数类型标识符,则系统默认为int型。
第2套 程序修改题参考答案及解析
【参考答案】
(1)for(i=0;str[i];i++)
(2)if(substr[k+1]== '\0')
【考点分析】
本题考查:for循环语句的格式,for循环语句的使用最为灵活,其一般形式为for(表达式1;表达式2;表达式3),注意表达式之间使用“;”相隔;if条件语句的格式,其中if关键字需要区别大小写,不能混淆使用。关键字是由C语言规定的具有特定意义的字符串,也称为保留字。用户定义的标识符不应与关键字相同,并且关键字应小写。
【解题思路】
先看循环条件for(i = 0,str[i],i++),不难发现此处for循环语句的格式有误,其中表达式之间应以“;”相隔;同时很容易发现if条件语句处的关键字书写错误。
第3套 程序修改题参考答案及解析
【参考答案】
(1)t = *x;*x = y;(2)return(t);或return t;
【考点分析】
本题考查:指针型变量的使用;通过 return语句完成函数值的返回。
【解题思路】
首先,定义变量t作为中间变量,然后进行数据交换,注意参数x是指针变量,交换时应使用*x,最后确定返回值;根据代码b=fun(&a,b),可以知道返回值将赋给变量b,而b中应存放交换前*x中的值,所以函数应返回变量t。
第4套 程序修改题参考答案及解析
【参考答案】
(1){t=a;a=b;b=t;}
(2)return(b);或return b;
【考点分析】
本题考查:return语句,其功能是计算表达式的值,并将其返回给主调函数。
【解题思路】
求最大公约数算法一般采用辗转相除法。辗转相除法的算法为:首先将 m除以 n(m>n)得余数 r,再用余数r去除原来的除数,得到新的余数,重复此过程直到余数为0 时停止,此时的除数就是m 和 n的最大公约数。
程序首先判断参数a和b的大小,如果a<b,则进行交换,这里是一个数学逻辑错误,应先将a的值赋给中间变量t,再将b的值赋给a,最后将t的值赋给b。当余数r为0时,除数b即为所求的最大公约数,所以函数应返回b。
第5套 程序修改题参考答案及解析
【参考答案】
(1)*t=0;
(2)if(d% 2!=0)或if(d% 2==1)
【考点分析】
本题考查:指针型变量作为函数参数;if语句条件表达式,结合奇偶数的表示方法来确定该表达式内容。
【解题思路】
(1)由函数定义可知,变量t是指针变量,所以对t赋初值0是不对的,因为t指向的是存放新数的变量,所以此处应给新数赋初值0,即*t=0;。
(2)变量d表示数s各位上的数,此处的if条件应为判断d是否为奇数。
第6套 程序修改题参考答案及解析
【参考答案】
(1)去掉分号
(2)case 1:case 2:return 1;
【考点分析】
本题考查:switch语句。其一般形式如下:
switch(表达式){
case常量表达式1:语句1;
case常量表达式2:语句2;
…case常量表达式n:语句n;
default:语句n+1;
}
其中switch(表达式)后不应该带有“;”,同时case语句常量后应该是“:”。
【解题思路】
C语言中,switch语句之后不能有分号,并且case语句常量后应用的是冒号。
第7套 程序修改题参考答案及解析
【参考答案】
(1)b[k]=*p;
(2)b[k]= ' ';k++;
【考点分析】
本题考查:指针类型变量作为函数的参数,函数的参数不仅可以是整型、实型、字符型等数据类型,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。
【解题思路】
(1)题目中p是指针类型变量做函数参数,因此给b[k]赋值时出现错误。
(2)题目要求复制3个字符后加一个空格,所以应该是先给b[k]赋值空格,然后变量k再加1。
【解题宝典】
C语言中为了表示指针变量和它所指向的变量之间的关系,在程序中用“*”符号表示“指向”,例如,pointer代表指针变量,而*pointer是pointer所指向的变量。
第8套 程序修改题参考答案及解析
【参考答案】
(1)if((tt[i]>= 'a')&&(tt[i]<= 'z'))
(2)tt[i]-=32;
【考点分析】
本题考查:if语句条件表达式;小写字母转换为大写字母的方法。
【解题思路】
(1)分析本题可知,要判断字符是否为小写字母,即判断其是否在a~z之间,所以这里需要进行连续的比较,用&&。
(2)从ASCII码表中可以看出,小写字母的ASCII码值比对应大写字母的ASCII码值大32。将字符串中的小写字母改为大写字母的方法是:从字符串第一个字符开始,根据ASCII码值判断该字母是不是小写字母,若是,则ASCII码值减32。
第9套 程序修改题参考答案及解析
【参考答案】
(1)for(j = i + 1;j < 6;j++)
(2)*(pstr + i)= *(pstr + j);
【考点分析】
本题考查:冒泡排序算法;for循环语句格式;指针数组。
【解题思路】
(1)此处考查for语句的格式,各表达式之间应用“;”隔开。
(2)此处考查用指针表示数组元素的方法,*(pstr+i)表示pstr所指向数组的第i个元素;同理,*(pstr+j)表示pstr所指向数组的第j个元素。
【解题宝典】
冒泡排序算法的基本思想是:将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中要对“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“最轻”的元素就浮到了最高位置;处理两遍之后,“次轻”的元素就浮到了次高位置。以此类推,完成排序。
实现数组s[N]的升序排列代码如下:
第10套 程序修改题参考答案及解析
【参考答案】
(1)long k=1;
(2)num / =10;
【考点分析】
本题考查:数据类型;保存乘积的变量初始化;除法运算符。
【解题思路】
(1)k用来存放各位数字的积,初始值应为1。
(2)此处是一个符号错误,除号用“/”来表示。
【解题宝典】
明确一下C语言中的算术运算符。
加法运算符“+”:双目运算符,即应有两个量参与加法运算。
减法运算符“-”:双目运算符,但“-”也可作为负值运算符,此时为单目运算符,例如-x、-5等具有左结合性。
乘法运算符“*”:双目运算符,具有左结合性。
除法运算符“/”:双目运算符,具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。
求余运算符(模运算符)“%”:双目运算符,具有左结合性。要求参与运算的量均为整型,其结果等于两数相除后的余数。
第11套 程序修改题参考答案及解析
【参考答案】
(1)float k;
(2)if(*a< *c)
【考点分析】
本题考查:变量定义,根据给定程序语句确定变量类型;if语句条件表达式。
【解题思路】
(1)观察程序中的k,在赋值语句中,k是以变量而非指针的形式进行赋值的,所以将k定义为指针是错误的。
(2)此处的if语句是为了将小于*c的值放入*c中,所以改为if(*a < *c)。
第12套 程序修改题参考答案及解析
【参考答案】
(1)int k = 0;
(2)while(*p||*q)
【考点分析】
本题考查:变量初始化,需要根据题意确定变量含义,然后对其进行初始化操作;while循环语句。
【解题思路】
(1)变量k存放数组c的下标,因此应初始化为0。
(2)while循环语句的循环条件是判断两个字符串是否到达结尾。
第13套 程序修改题参考答案及解析
【参考答案】
(1)long s=0,t=0;
(2)t=t/10;
【考点分析】
本题考查:变量赋初值操作;求余运算和除法运算的区别。
【解题思路】
(1)t用来存放每次循环后的多位数,第一次循环时,t应当是个位数,所以t的初始值应为0。
(2)根据题意,这里不需要求余数,而是要去掉个位数,重新组合为一个数,因此运用除法运算。
【解题宝典】
去掉数值n的个位数的方法是采用除法运算,如果需要取出个位数,则使用求余运算,不要混淆。
第14套 程序修改题参考答案及解析
【参考答案】
(1)a2=k/10;
(2)return(i);
【考点分析】
本题考查:取数n的各个位数值;return语句,将需要返回的函数值返回给main函数。
【解题思路】
(1)a2存放十位数,所以是a2=k/10,此处是一个书写错误。
(2)根据题意,要返回能被3整除的数的个数,从循环体中可以知道,其个数是由i计算的,所以返回的是i。
第15套 程序修改题参考答案及解析
【参考答案】
(1)void fun(char *a)
(2)printf("% c",*a);
【考点分析】
本题考查:函数定义,本题为有参函数定义。printf 函数,其一般形式为printf(“格式控制字符串”,输出表列)。
“%d”表示按十进制整型输出。
“% ld”表示按十进制长整型输出。
“%c”表示按字符型输出。
非格式字符串在输出时原样输出,起提示作用。
【解题思路】
(1)定义函数时,形参的类型要与调用函数中实参的类型一致,主函数中fun传递的是字符串s的首地址,所以此处形参应为指针类型。
(2)根据printf函数格式很容易找到错误之处。
第16套 程序修改题参考答案及解析
【参考答案】
(1)n=*p- '0';
(2)n=n*8+*p- '0';
【考点分析】
本题考查:数字和字符转换方法;八进制转十进制方法。
【解题思路】
(1)“0”和“1”是字符串中的数字字符,为了进行数字运算,必须要将数字字符转换为数字,用数字字符减去字符“0”的ASCII码值,就得到对应的数字。题中给出的是“o”,应该是“0”。
(2)要在一个八进制数的最后加上一位,原来各个位上的数上升一位,只需将原数乘以8再加上个位数。
【解题宝典】
各种进制之间的转换需要掌握二进制数、八进制数、十六进制数转换为十进制数采取按权求和的方法;十进制数转换为二进制数、八进制数、十六进制数采取除2/8/16取余的方法来实现。
第17套 程序修改题参考答案及解析
【参考答案】
(1)if(d% 2==0)
(2)s/ =10;
【考点分析】
本题考查:if语句条件表达式,注意“==”和“=”的区别;除法运算符“/”。
【解题思路】
(1)分析程序,在if条件表达式中,不应该出现赋值运算符“=”,应使用关系运算符“==”。
(2)此处是一个运算符的错误,表示除法的运算符是“/”。
【解题宝典】
一般情况下,在if条件语句中,很容易出现“==”和“=”混淆的错误,这也是经常考查的内容,考生应当注意。
第18套 程序修改题参考答案及解析
【参考答案】
(1)while((high>=2)&&(n<10))
(2)yes=0;break;
【考点分析】
本题考查:C语言程序的语法格式。
【解题思路】
while循环条件丢掉一个括号;另一处是很简单的程序语法错误,没有加分号。
第19套 程序修改题参考答案及解析
【参考答案】
(1)s[j++]=s[i];或{s[j]=s[i];j++;}
(2)s[j]= '\0';
【考点分析】
本题考查:数组元素下标;字符串结束标识符'\0'。
【解题思路】
由循环条件if(s[i]!= 'c')可知,如果字符串中的字符不是“c”,则将保留该字符到s[j]位置,然后下标j进行加1操作。循环结束后要在新串的结尾加上“\0”。
第20套 程序修改题参考答案及解析
【参考答案】
(1)void fun(long s,long *t)
(2)sl=sl*10;
【考点分析】
本题考查:函数定义,指针型变量;数n和其各个位数值如何表示。
【解题思路】
(1)主函数中调用函数的实参为地址,因此函数fun的形参应为指针类型。
(2)重新组合一个数,从个位开始,然后十位,以此类推,因此每增加一位数,原数值需乘以10,即“sl=sl*10;”。
第21套 程序修改题参考答案及解析
【参考答案】
(1)double f(double x)
(2)return s;
【考点分析】
本题考查:函数定义,其一般形式为“类型标识符 函数名(形式参数列表)”,其中类型标识符指明了本函数的类型,函数的类型实际上就是函数返回值的类型。
【解题思路】
该程序的流程是:fun函数对f(n)项循环累加,fun函数采用条件选择语句计算函数f(x)的值。第一处错误在于未定义函数f(double x)的类型,因为返回值类型为double型,所以此处函数应定义为double。第二处错误在于语法错误。
【解题宝典】
我们在做改错题目的时候,首先应该检查C语言语法是否有问题,在很多题目中都有类似的错误。
第22套 程序修改题参考答案及解析
【参考答案】
(1)fun(int x,int y,int z)或int fun(int x,int y,int z)
(2)return j;
【考点分析】
本题考查:函数定义,注意有参函数的参数列表;函数返回值,通过return语句返回给主函数。
【解题思路】
(1)定义函数时,必须为每个形参分别定义变量类型。
(2)通过return语句将最小公倍数j返回主函数。
【解题宝典】
几个自然数公有的倍数中最小的一个,称作这几个数的最小公倍数。求几个数的最小公倍数的方法为:定义一个变量从1开始增加,每增加1即对几个数进行求余运算,直到几个数的余数全部为0,此时该数为这几个数的最小公倍数。
第23套 程序修改题参考答案及解析
【参考答案】
(1)while(*r)
(2)*a=*r;a++;r++;
【考点分析】
本题考查:指针型变量;C语言语法。
【解题思路】
while(r)和r++都是简单的逻辑和语法错误,C语言中语句必须以分号“;”结尾。只要掌握了C语言的基础知识,发现这样的错误是很容易的。
第24套 程序修改题参考答案及解析
【参考答案】
(1)char *fun(char(*sq)[M])
(2)return sp;
【考点分析】
本题考查:函数定义;return语句。
【解题思路】
函数fun的形参为字符串指针数组,每个元素指向一个长度为M的字符串,要找出其中最长的字符串,可先假设指针数组的第1个元素所指的字符串最长,之后对字符串指针数组进行遍历,若遇字符串长度大于待定最长字符串的长度,则令该字符串为待定最长字符串,如此循环直至指针数组末尾,即可得到最长字符串的地址。
(1)此处是函数定义错误,根据返回值类型可知该函数应定义为字符型指针函数。
(2)由for循环体可知,指针sp指向长度最长的字符串,因此应返回sp。
第25套 程序修改题参考答案及解析
【参考答案】
(1)int fun(int a[],int m)或fun(int a[],int m)
(2)else if(m>a[mid])
【考点分析】
本题考查:折半查找算法;函数定义;if…else语句。
【解题思路】
(1)fun(int a[],int m)函数的返回值为int类型,所以定义函数时,函数的返回类型不能是void,而是int类型。这里int可以省略,若省略函数类型标识符,系统将默认为int型。
(2)else If(m > a[mid])中,关键字if需要区别大小写,大写是错误的。
【解题宝典】
折半查找算法是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。
第26套 程序修改题参考答案及解析
【参考答案】
(1)void fun(long s,long *t)
(2)while(s>0)
【考点分析】
本题考查:函数定义,指针型变量做函数参数;while循环语句。
【解题思路】
函数的形参类型应与实参类型相同,主函数中函数fun的调用方式说明其参数应为指针类型,所以形参t应定义为long *t;。
while循环的功能是,每循环一次就从s中的数上取出一位进行运算,直到取完为止,所以循环条件为s>0。
第27套 程序修改题参考答案及解析
【参考答案】
(1)double fun(double a,double x0)
(2)if(fabs(x1-x0)>=0.00001)
【考点分析】
本题考查:双精度实型变量定义(double);if语句条件表达式。
【解题思路】
用C语言求平方根的方法一般有两种经典的算法,分别是迭代法和递归法,本题要求仅用递归法。该程序采用了if语句,错误在于if语句的判断条件,程序的含义是当迭代结果差大于误差时进行循环,故正确的答案应该是 if(fabs(x1-x0)>=0.00001)。
【解题宝典】
递归算法是指一个过程或函数在其定义或说明时又直接或间接调用自身的一种方法。递归算法一般用于解决以下3类问题。
(1)数据的定义是按递归定义的(Fibonacci函数)。
(2)问题解法按递归算法实现(回溯)。
(3)数据的结构形式是按递归定义的(树的遍历)。
第28套 程序修改题参考答案及解析
【参考答案】
(1)p=j;
(2)p=i;
【考点分析】
本题考查:选择法排序。
【解题思路】
(1)此处是一个语法错误,缺少一个“;”号。
(2)p用来存放进行比较的两个数组元素中较小元素的下标,因此此处应为p=i;。
第29套 程序修改题参考答案及解析
【参考答案】
(1)#define FU(m,n)(m)/(n)
(2)return(value);
【考点分析】
本题考查:C语言宏定义;函数返回值。
【解题思路】
本题考查C语言的宏定义,其格式为“#define 标识符字符串”,中间要用空格分开。在该题中,标识符为FU(m,n),字符串为(m/n),由题干信息可知,m、n均为表达式,且先进行表达式运算,再进行除法运算,因此此处应为(m)/(n)。
第30套 程序修改题参考答案及解析
【参考答案】
(1)n=strlen(aa);
(2)ch=aa[i];
【考点分析】
本题考查:插入排序法;strlen函数。
【解题思路】
插入排序算法:先对字符串中的前两个元素进行排序,然后第三个元素插入到前两个元素中,三个元素依然有序,依此类推,完成排序。
(1)此处考查strlen函数的格式,应改为strlen(aa)。
(2)程序中并没有定义变量c,此语句的作用是将元素a[i]的值赋给中间变量ch,以与其他元素进行比较并交换,所以应改为ch=aa[i];。
第31套 程序修改题参考答案及解析
【参考答案】
(1)k++;
(2)if(m==k)
【考点分析】
本题考查:C语言中的语法格式,每个语句后面要以“;”结尾;if语句条件表达式,区别条件表达式中==和=的区别。
【解题思路】
函数fun的功能是判断m是否为素数:m从2开始作为除数,并对m取余,若不存在一个数使得余数为0,则m为素数,程序的错误在于if(m=k)语句中的逻辑表达式写成了赋值语句。
第32套 程序修改题参考答案及解析
【参考答案】
(1)void fun(char *s,char *t)
(2)t[2*d]= ′\0′;或 t[d+i]= ′\0′;或 t[2*d]=0;或 t[d+i]=0;
【考点分析】
本题考查:函数定义;指针型变量的使用;字符串结束标识符‘\0’。
【解题思路】
(1)从调用函数来看,函数传递的是数组,所以函数的形参应为指针。
(2)循环结束后回文字符的个数为2*d个,因为数组下标是从0开始的,所以最后一个字符的下标为2*d-1,在最后一个字符的后面加上结束符‘\0’,因此为t[2*d]=′\0′;。
第33套 程序修改题参考答案及解析
【参考答案】
(1)for(i=2;i<=m;i++)
(2)y+=1.0/(i*i);或y+=(double)1/(i*i);
【考点分析】
本题考查:for循环语句的循环条件;数据类型的强制转换。
【解题思路】
(1)根据公式可以知道for循环语句中变量i的取值范围应该包括m。
(2)变量y是一个double型变量,而i是整型变量,所以要进行类型转换,改为y+=1.0/(i*i);或y+=(double)1/(i*i);。
第34套 程序修改题参考答案及解析
【参考答案】
(1)if(i% 2 || s[i]% 2==0)或 if(i% 2!=0 || s[i] %2==0)
(2)t[j]= ′\0′;或 t[j]=0;
【解题思路】
(1)根据题意,将字符串 s 中位于奇数位置的字符或ASCII码值为偶数的字符,依次放入字符串t中,所以if条件中要使用“或”运算。
(2)变量j控制字符串t的下标,所以是t[j]。
第35套 程序修改题参考答案及解析
【参考答案】
(1)if(p==n)return -1;
(2)a[i]=a[i+1];
【考点分析】
本题考查:if语句条件表达式;数组元素赋值。
【解题思路】
(1)需要确定if条件语句的条件表达式,发现变量p大写,C语言中变量是区别大小写的。
(2)删除数列中的元素,删除后,后面的元素依次前移一个位置,因此此处应为a[i]=a[i+1];。
第36套 程序修改题参考答案及解析
【参考答案】
(1)r=t;
(2)r=t;或r=&t[0];
【解题思路】
从字符串s中找出子字符串的方法是:从第一个字符开始,对字符串进行遍历,若s串的当前字符等于t串的第一个字符,两字符串的指针自动加1,继续比较下一个字符;若比较至字符串t的末尾,则跳出循环;若s串的字符与t串的字符不对应相同,则继续对s串的下一个字符进行处理。
第37套 程序修改题参考答案及解析
【参考答案】
(1)while(fabs(t)>=num)
(2)t=s/n;
【考点分析】
本题考查:while循环语句;区别求余运算符“%”和除法运算符“/”。
【解题思路】
(1)函数fun中while语句的作用是,当新的一项大于给定参数时,循环累计计算s的值。题目要求最后一项的绝对值小于给定参数,因此循环条件应当是while(fabs(t)>=num)。
(2)变量t用来存放最后一项的值,因为每一项均为1或-1除以一个数,所以此处应使用除法运算符“/”。
第38套 程序修改题参考答案及解析
【参考答案】
(1)while(*s)或while(*s!=′\0′)
(2)s++;
【解题思路】
(1)通过while语句可对字符串所有字符进行遍历,循环条件是对当前字符进行判断,若当前字符不是字符串结尾,则对其进行其他操作。
(2)因为该循环通过指针s的移动遍历字符串,所以每循环一次要使指针向后移动一个位置,而不是将指针所指的元素加1。
第39套 程序修改题参考答案及解析
【参考答案】
(1)s[j++]=s[i];
(2)s[j]= ′\0′;
【解题思路】
题目要求依次取出字符串中所有的数字字符,因此将元素s[i]存入s[j]后要使j加1,为下次存储做准备。s[j]="\0";是一个语法错误。
第40套 程序修改题参考答案及解析
【参考答案】
(1)double sum=0.0;
(2)sum/ =c;
【考点分析】
本题考查:变量的数据类型,区别int整型和double双精度型;除法运算符“/”。
【解题思路】
(1)变量定义错误,变量sum存放所有数据的和,应定义为double型。
(2)C语言中的除法运算符是“/”。
【解题宝典】
以下表格列出了基本数据类型。
第41套 程序修改题参考答案及解析
【参考答案】
(1)while(*w)
(2)if(*r == *p)
【考点分析】
本题考查:while循环语句;C语言中的关键字。
【解题思路】
(1)此处要判断的是值的真假,而不是地址,所以改为while(*w)。
(2)C语言中关键字区分大小写,只需运行程序,就可以根据错误提示找到。
第42套 程序修改题参考答案及解析
【参考答案】
(1)t=(STU*)calloc(sizeof(STU),m);
(2)t[k]=b[j];
【解题思路】
(1)calloc应用于分配内存空间。调用形式为(类型说明符*)calloc(n,size),功能:在内存动态存储区中分配n块长度为“size”字节的连续区域,函数的返回值为该区域的首地址,(类型说明符*)用于强制类型转换。calloc 函数与malloc 函数的区别在于calloc函数一次可以分配n块区域。例如,ps=(struct stu*)calloc(2,sizeof(struct stu));,其中的sizeof(struct stu)是求stu的结构长度。该语句的意思是:按stu的长度分配两块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。在本题中不用考虑那么复杂,根据定义类型STU b[N],*t;就可以看出语句中最基本的错误未加分号。
(2)t(k)=b(j);的错误旨在考查对结构体概念的掌握和灵活应用程度。
第43套 程序修改题参考答案及解析
【参考答案】
(1)double r;
(2)while(fabs(n-m)>0.001)
【考点分析】
本题考查:变量数据类型;while循环语句。
【解题思路】
(1)程序中会发现r=(m+n)/2,而m和n都是double型的,并且根据题意可知,变量r需要定义为double型。
(2)绝对误差不超过 0.001,所以循环条件应为fabs(n-m)>0.001。
第44套 程序修改题参考答案及解析
【参考答案】
(1)int i,sl;
(2)t[i]=s[sl-i-1];
【考点分析】
本题考查:变量定义;字符串操作。
【解题思路】
(1)变量sl没有定义。
(2)该循环实现将s串中的字符逆序存入t串中,t[i]对应s串中的s[sl-i-1]。
第45套 程序修改题参考答案及解析
【参考答案】
(1)t=1.0;
(2)return(s*2);
【考点分析】
本题考查:根据给定公式的求值运算,因此需要确定变量定义的数据类型以及如何对其进行初始化;函数返回值。
【解题思路】
该题中,首先检查变量数据类型前后是否一致,因为变量t定义为double型,所以赋值时要赋以实型数值。return(s)是一个数学错误,应该返回return(s*2);。
第46套 程序修改题参考答案及解析
【参考答案】
(1)for(i=j+1;i<n;i++)
(2)p=i;
【考点分析】
本题考查:for循环语句;各个变量含义的明确。
【解题思路】
该程序是对n个无序数实现从小到大的排序,先找出整数序列的最小项,置于指针第1 个元素的位置;再找出次小项,置于第2个元素的位置;之后顺次处理后续元素。
(1)数组的长度为n,所以最后一个元素的下标值为n-1,i的取值范围应该包括此下标值。
(2)p是中间变量,存放值较小的元素下标。
第47套 程序修改题参考答案及解析
【参考答案】
(1)if(n==0)
(2)result *=n--;或{result *=n;n--;}
【考点分析】
本题考查:if语句条件表达式,需注意其格式;阶乘的计算方法。
【解题思路】
(1)这里是一个简单的格式错误,if条件判断语句应该加括号。
(2)根据阶乘的概念,从n开始,n!=n*(n-1)!,直到1,所以应该为result *=n--;。
第48套 程序修改题参考答案及解析
【参考答案】
(1)s=s +(double)(n+1)/n;
(2)return t;
【考点分析】
本题考查:变量数据类型,根据题目要求需要进行强制转换;return语句。
【解题思路】
(1)在C语言中,整数除以整数得出的结果也是整数,因此此处要转换数据类型。
(2)观察while循环,如果返回变量是s,那么返回的是大于q的值,而题中所要返回的是小于q的值,所以应该返回变量t。
第49套 程序修改题参考答案及解析
【参考答案】
(1)sum=0.0;
(2)if((i+1)% 5==0)
【考点分析】
本题考查:if语句条件表达式,需注意其格式是否正确;变量定义和变量使用。
【解题思路】
(1)变量sum书写错误。
(2)循环条件if(i+1% 5==0)是一个运算逻辑错误,应先计算i+1,再对5求余。
第50套 程序修改题参考答案及解析
【参考答案】
(1)for(i=0,t=0;p[i];i++)
(2)c[t]= ′\0′;
【考点分析】
本题考查:C语言关键字;字符串结束标识‘\0’。
【解题思路】
该题目考查C语言关键字的书写,C语言中关键字是区分大小写的。另外为字符串结尾添加结束符时应书写为‘\0’,而非“\0”,“\0”表示一个字符串。该程序的if条件中应用了isspace函数,该函数的功能是检查ch是否为空格、跳格符(制表符)或换行符。