程序改错示例

合集下载

程序改错

程序改错

1.给定程序modi.c中函数fun的功能是:首先将大写字母转换为对应小写字母;若小写字母为a~u,则将其转换为其后的第5个字母;若小写字母为v~z,使其值减21。

转换后的小写字母作为函数值返回。

例如,若形参是字母A,则转换为小写字母f;若形参是字母W,则转换为小写字母b。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <stdio.h>#include <ctype.h>char fun(char c){ if( c>='A' && c<='Z')/**************found************* */c=tolower(c);if(c>='a' && c<='u')/**************found************* */c=c+5;else if(c>='v'&&c<='z')c=c-21;return c;}main(){ char c1,c2;printf("\nEnter a letter(A-Z): ");c1=getchar();if( isupper( c1 ) ){ c2=fun(c1);printf("\n\nThe letter \'%c\' change to \'%c\'\n", c1,c2);}else printf("\nEnter (A-Z)!\n");}2. 给定程序modi.c中函数fun的功能是:从整数10到55之间,选出能被3整除、且有一位上的数是5的那些数,并把这些数放在b所指的数组中,这些数的个数作为函数值返回。

程序改错

程序改错

1、*【程序改错】*题目:从键盘上输入任意一串字符,判断是否回文。

例如:MUM、456654,MADAM。

SET TALK OFFACCEPT "A=" TO AL=LEN(A)FLAG=1I=1**********FOUND**********DO WHILE FLAG=1 AND I<=INT(L/2)**********FOUND**********IF SUBS(A,I,1)<>SUBS(A,L-I,1)FLAG=0ENDIFI=I+1ENDDO**********FOUND**********IF FLAG=0? "是回文"ELSE? "不是回文"ENDIFCANCEL『错误答案』:1 DO WHILE FLAG=1 AND I<=INT(L/2) 或DO WHILE FLAG=1 .AND. I<=INT(L/2)2 IF SUBS(A,I,1)<>SUBS(A,L-I+1,1) 或IF SUBS(A,I,1)<>SUBS(A,L+1-I,1) 或IF SUBSTR(A,I,1)<>SUBSTR(A,L-I+1,1)3 IF FLAG=12、【程序改错】*题目:程序输入两个任意整数,求最小公倍数,并显示输出。

SET TALK OFFINPUT " X=" TO XINPUT " Y=" TO YMAX=XIF Y>XMAX=Y**********FOUND**********ENDFORA=MAXDO WHILE A<=X*YIF INT(A/X)=A/X AND INT(A/Y)=A/Y**********FOUND**********LOOPENDIFA=A+MAXENDDO**********FOUND**********? " 最小公倍数为", XCANCEL『错误答案』:1 ENDIF 或ENDI2 EXIT3 ? "最小公倍数为", A3、题目:输入两个任意整数,求最大公约数,并显示输出最大公约数。

计算机程序改错题,及答案

计算机程序改错题,及答案

11*程序名:TEST.prg*检索选修课程门数等于3门或3门以上,每门课程成绩大于或等于70分的每个学生的*学号,姓名,性别,平均成绩,最低分和选课门数,并将结果存储到表NEW_TEST中.*以下程序有三处错误,请改正OPEN DA TABASE SDBSELECT STUDENT.学号,姓名,性别,A VG(成绩) 平均成绩,MIN(成绩) 最低分,COUNT(*) 选课门数;FROM STUDENT,SC;WHere STUDENT.学号= SC.学号AND 成绩>= 70 ; &&**********Error**********GROUP BY STUDENT.学号HA VING count(课程号) >= 3; &&**********Error**********inTO table NEW_TEST &&**********Error********** CLOSE ALL9*程序名:dbtest3.prg*定义一个视图VS1,*检索选课门数是3门以上的每个学生的学号、姓名、平均成绩、最低分、选课门数和院系编号,*并按平均成绩降序排序.*以下程序有三处错误,请改正SET TALK OFFSET SAFETY OFFopen DATABASE SDB &&****Error***修改本行的语法错误,不许注释掉本行或删除本行CREATE VIEW VS1SELECT STUDENT2.学号, 姓名, A VG(成绩) 平均成绩, MIN(成绩) 最低分, COUNT(*) 选课门数, 院系编号;FROM STUDENT2, sc; &&*************Error*************WHERE STUDENT2.学号= SC.学号;GROUP BY SC.学号HA VING COUNT(课程号) > 3;ORDER BY 平均成绩desc &&*************Error*************CLOSE DATABASERETURNi=2create table four(结果I)do while i<=1000if i%3=0insert into four values(i) &&错误语句请修改endifi=i+1 && 请增加一条语句enddocreate database 学习情况create table 学生(姓名C(20),学号C(10) primary key) &&有错误alter table 学生add总分I &&有错误alter table 学生alter总分set check 总分<=800 and 总分>=0 &&有错误insert into 学生values ("林红","20100808",788) &&有错误update 学生set 总分=786 where 学号="20100808"&&有错误alter table employee alter 性别set check 性别="男" or 性别="女"SELECT Department.部门名, count(*) as 总人数;FROM employee_m!department INNER JOIN employee_m!employee ;ON Department.部门号= Employee.部门;group by 部门号;INTO TABLE tone.dbfSELECT Department.部门名, count(*) as 人数_男;FROM employee_m!department INNER JOIN employee_m!employee ;ON Department.部门号= Employee.部门;where 性别="男";group by 部门号;INTO TABLE ttwo.dbfSELECT tone.部门名, ttwo.人数_男, 总人数-人数_男as 人数_女, tone.总人数;FROM tone INNER JOIN ttwo ;on tone.部门名=ttwo.部门名;order by tone.部门名desc;INTO TABLE tableone12*程序名:dbtest61.prg*检索同时选修课程号c1和c2的学生的学号*以下程序有三处错误,请改正SELECT 学号;FROM SC ;WHERE 课程号= 'c1' AND 学号in ; &&************Error************ ( SELECT 学号FROM SC ; &&************Error************WHERE 课程号= 'c2' ) &&************Error************CLOSE DATABASE*程序名:dbtest4.prg*检索选课门数大于或等于3门以上的每个学生的学号、姓名、平均成绩、最低分、选课门数和院系,*并按平均成绩降序排序,将结果存储到表TEST1中.*以下程序有三处错误,请改正SET TALK OFFSET SAFETY OFFSELECT STUDENT.学号, 姓名, A VG(成绩) 平均成绩, MIN(成绩) 最低分, COUNT(*) 选课门数,院系院系;FROM STUDENT, SCORE;WHERE STUDENT.学号= SCORE.学号;GROUP BY STUDENT.学号HA VING count(课程编号) >= 3; &&*********Error************ ORDER BY 平均成绩desc; &&*********Error************INTO table TEST1 &&*********Error************RETURN18 $$75所有器件的单价增加5元UPDATE order_detail1 SET 单价=单价+ 5计算每种器件的平均单价SELECT 器件号,A VG(单价) AS 平均价FROM order_detail1 group BY 器件号INTO CURSOR lsb&&查询平均价小于500的记录SELECT * FROM lsb where平均价< 50019&&功能:如果用户输入的用户名和口令一致,则在提示信息后关闭该表单;&&否则重新输入用户名和口令。

程序改错——精选推荐

程序改错——精选推荐

程序改错【程序改错】--------------------------------------------------------功能:在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。

------------------------------------------------------*/#include <stdio.h>#define N 11main(){int i,number,a[N]={1,2,4,6,8,9,12,15,149,156};printf("please enter an integer to insert in the array:\n");/**********FOUND**********/scanf("%d",&number);printf("The original array:\n");for(i=0;i<N-1;i++)printf("%5d",a[i]);printf("\n");/**********FOUND**********/for(i=N-2;i>=0;i--)if(number<=a[i])/**********FOUND**********/a[i+1]=a[i];else{a[i+1]=number;/**********FOUND**********/break;}if(number<a[0]) a[0]=number;printf("The result array:\n");for(i=0;i<N;i++)printf("%5d",a[i]);printf("\n");}【程序改错】--------------------------------------------------------功能:判断m是否为素数,若是返回1,否则返回0。

程序改错——精选推荐

程序改错——精选推荐

【程序改错】1.下列给定程序中函数fun的功能是:删除s所指字符中所有的小写字母c 。

请改正程序中的错误,使它能得出正确的结果。

#include <stdio.h>void fun( char *s ){ int I,j;for(i=j=0; s[i]!='\0'; i++)if(s[i]!='c')/***********FOUND***********/s[j++]=s[i];/***********FOUND***********/s[j]='\0';}main(){ char s[80];printf("Enter a string: "); gets(s);printf("The original string: "); puts(s);fun(s);printf("The string after deleted : "); puts(s);printf("\n\n");}2. 下列给定程序中,函数fun的功能是:根据整型参数m,计算如下公式的值。

y=1/(100×100)+1/(200×200)+1/(300×300)+…+1/(m×m)例如,若m=2000,则应输出0.000160。

请改正程序中的错误,使它能得出正确的结果。

#include <stdlib.h>#include <conio.h>#include <stdio.h>/***********FOUND***********/double fun (int m){ double y=0, d;int i;/***********FOUND***********/for(i=100;i<=m;i+=100){d=(double)i*(double)i;y+=1.0/d;}return(y);}void main(){ int n=2000;system("CLS");printf("\nThe result is %lf\n",fun(n));}3. 下列给定程序中函数fun的功能是:根据以下公式求π值,并作为函数值返回。

程序改错完整版---C语言

程序改错完整版---C语言

(一)功能:用选择法对数组中的 #include "stdio.h"n 个元素按从小到大的顺序进行排序#define N 20 void fun(int a[], int n){int i, j, t, k;for (j = 0 ;j < n-1 ;j++) {k = jfor (i = j+1;i < n; i++)if(a[i] >a[k])k=j; t = a[k] ; a[k] = a[j] ; a[j] = t;}}main(){int a[N]={9,6,8,3,-1},i, m = 5; printf(" 排序前的数据 :") ; for(i = 0;i < m;i++) printf("%d ",a[i]);printf("\n");fun(a,m);printf(" 排序后的数据 :") ; for(i = 0;i < m;i++)printf("%d ",a[i]);printf("\n");【参考答案】 k = j;【参考答案】 if(a[i] < a[k]) if(a[k] > a[i]) ERROR* ERROR* ERROR*参考答案】k = i;(二)功能:求广义菲玻那契级数的第n项。

广义菲玻那契级数的前n 项为:1 ,1,1,3,5,9,17,31,⋯⋯项值通过函数值返回main ( ) 函数。

例如:若n = 15 ,则应输出:The value is: 2209 。

#include "conio.h"#include "stdio.h" long fun ( int n ) {long a=1, b=1, c=1, d=1, k;ERROR*for (k=4; k<n; k++) {d = a+b+c;ERROR*a=bb=c; c=d;}ERROR*return k;}main( ){int n = 15;printf( "The value is: %ld\n", fun ( n ) ); }【参考答案】for (k=4; k<=n; k++) 【参考答案】a=b;【参考答案】return d;(三)功能:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

程序改错题——精选推荐

程序改错题——精选推荐

1、Gaicuo1.cpp的功能是:1!+2!+3!+……+20!。

程序有两处错误,在****found****处附近有错,请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <stdio.h>void main(){float s=0,t;int n,i;for(n=1;n<=20;n++)/****found*****/{for(i=1,t=1;i<=n;i++)t=t*i;/****found****/s=s+t;}printf("the sum is:%e.\n",s);}2、gaicuo2.cpp的功能是:输入两个不等的整数分别给x和y,输出其中的大数。

程序有两处错误,在****found****处附近有错,请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <stdio.h>void main( ){ int x,y;printf("Enter x & y:\n");scanf("%d%d",&x,&y);if(x<y)printf ("max=%d",y) ;elseprintf ("max=%d",x) ;}3、gaicuo3.cpp的功能是交换两个数,若输入10和20,则输出20和10。

程序有两处错误,在****found****处附近有错,请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <stdio.h>void main( ){int x,y,t;printf("Enter x & y:\n");scanf("%d%d",&x,&y);t=x;x=y; y=t;printf("x=%d y=%d",x,y) ;}4. gaicuo4.cpp的功能是输入一个整数,判别它是否能被3整除,若能整除,打印YES;不能打印NO。

高中学业水平考试——信息技术 ——程序改错

高中学业水平考试——信息技术 ——程序改错

程序改错1、陈婷植树:陈婷今年17岁,植了3棵树。

以后每年多植一棵,问她到多少岁时才能累计种到或超过100棵树? 程序改错参考答案(文本框里是正确答案)Private Sub Command1_Click()Dim Age As Integer, Tree As IntegerAge = 17DoAge = Age + 1Tree = Tree + Age - 14Loop Until Tree = 100Print "到"; Age; "岁时种到100棵树"End Sub2、累乘(1×2×3×……×9×10=?)Private Sub Command1_Click()Dim S As Integer, A As IntegerFor A = 1 To 10S = S * ANext SPrint "S="; SEnd Sub3、求解一元二次方程的程序Private Sub Command5_Click()Dim a, b, c, d As IntegerDim x1, x2 As Singlea = InputBox("请输入二次项系数:", "输入")b = InputBox("请输入一次项系数:", "输入")c = InputBox("请输入常数项:", "输入")d = b ^ 2 - 4 a cIf d >= 0 Thenx1 = (-b + Sqr(d)) / 2 * ax2 = (-b - Sqr(d)) / 2 * aPrint "X1="; x1, "X2="; x2ElsePrint "此一元二次方程无解!"End Sub4、百钱买百鸡:“今有鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一,凡百钱买百鸡,问鸡翁、鸡母、鸡雏各几何。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序改错:在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。

练习1:下列程序是将“China”编成密码,规律是:如是大写字母,用原字母后面第4个字母代替原字母,例字母“A”后面第4个字母是“E”,用“E”代替“A”;小写字母用原字母后面第2个字母代替原字母,例如字母“a”后面第2个字母是“c”,用“c”代替“a”。

因此,“China”密码为“Gjkpc”。

SET COLLATE TO "MACHINE"LOCAL mSting,cString,chmString=SPACE(0)cString="China"FOR i=1 TO VAL(cString) ***FOR i=1 TO Len(cString)ch=SUBSTR(cString, 1, i) ***ch=SUBSTR(cString, i,1)IF BETWEEN(ch,"a","z")mString=mString+CHR(ASC(ch)+2)ELSEmString=mString+CHR(ASC(ch)+4)ENDIFENDFORWAIT WINDOW cString+"密码为"+mString练习2:下列程序中的过程(过程名为ren)用来产生n个a~b之间的随机整数,然后将它们以从大到小的顺序存储在数组X中,并分别输出n=10、a=5、b=25和n=20、a=50、b=80时数组X的值。

=ren(10,5,25)=ren(20,50,80)PROC renPARA a,b,n ***PARA n,a,bDIME x(n)x = 0FOR i = 1 TO nx(i) = INT((b-a)*RAND() + a)ENDFORFOR j = 1 TO n-1FOR k = j+1 TO nIF x(k) > x(j)t = x(j)x(k) = x(j) ***x(j) = x(k)x(k) = tENDIFENDFORENDFORFOR i = 1 TO nx(i)ENDFORENDPROC练习3:下列程序用来产生10个30~50之间的随机整数,并将它以从大到小的顺序存储在数组X中。

DIMENSION X(10)x = 0FOR i = 1 TO 10x(i) = INT((50-30)*RAND()+20) **x(i) = INT((50-30)*RAND()+30) ENDFORFOR j = 1 TO 9FOR k = j+1 TO 10IF x(k) > x(j)t = x(j)x(j) = x(k)x(k) = tENDIFENDFORENDIF **ENDFORCLEARFOR i = 1 TO 10x(i)ENDFOR练习4:数组A中存放着n个互不相同的整数,且按从小到大的顺序排列,要求在A数组中插入一个给定整数x(x不等于n个数中任何一个),插入以后A数组仍然是有序的。

假定这n个整数分别为10、20、30、40、50、60、70、80、90和100,X=55。

n=10DIMENSION a(n+1)x = 55FOR i = 1 TO na( i ) = i*nENDFORFOR j=1 TO n-1IF a(j)>xFOR k = n+1 TO j+1 STEP -1a(k) = a(j+1) ***a(k) = a(k-1)ENDFORa(j) = xLOOP ***EXITENDIFa(n+1)=IIF(j=n-1,x,a(n+1))ENDFORDISPLAY MEMORY LIKE A*练习5:数组A中存放着n个互不相同的数据,且按从小到大的顺序排列,要求从A数组中删除与给定数x相同的那个数,后面数依次前移一个位置。

假定这n个数为10、20、30、40、50、60、70、80、90和100,x=60。

要求:n=10DIMENSION A(n)x = 60FOR i = 1 TO nA(i) = i*nENDFORm = INT((n+1)/2)IF A(m) > xt1 = 1t2 = mENDIF ***ELSEt1 = mt2 = nENDIFFOR j = t1 TO t2IF A(j) = xFOR k = j TO n-1A(k) = A(j+1) ** A(k) = A(K+1)ENDFORA(n) = .F.EXITENDIFENDFORDISPLAY MEMORY LIKE A*练习6:找出1~2000之内所有的阿姆斯特朗数(Armstrong number)。

一个数如果等于其每一位数字立方之和,则此数称为阿姆斯特朗数。

例如407就是一个阿姆斯特朗数,因为:407 = 43 + 03 + 73。

要求:"1~2000之内的阿姆斯特朗数为:"nCount=0FOR i = 1 TO 2000n = LEN(ALLT(STR(i)))m = 0FOR j = 1 TO nm = m + VAL(RIGHT(ALLT(STR(i)), j, 1))^3*** m = m + VAL(substr(ALLT(STR(i)), j, 1))^3ENDFORIF i = n **IF i=mnCount= nCount+1iENDIFENDFOR”共计”+ALLT(STR(nCount))+”个”练习7:下列程序用来找出1000以内同时满足以下条件的数:1)个位数字与十位数字之和除以10所得的余数是百位数;2)该数是素数(仅能被1和本身整除的数称为“素数”)。

例如211、239、367等。

CLEARFOR i = 1 TO 1000yn = .T.FOR j = 3 TO i-1IF MOD(i,j) = 0yn = .F.EXITENDIFENDFORIF yns = ALLT(STR(i))s1 = RIGHT(s,1)s2 = LEFT(RIGHT(s,2),1)s3 = LEFT(RIGHT(s,3),1)IF MOD(s1+ s2,10) = s3 ** IF MOD(VAL(s1)+ VAL(s2),10) = VAL(s3) iENDIFENDIFENDIF ***ENDFOR练习8:下列程序用来计算1!+(1!+3!)+(1!+3!+5!)+…+(1!+3!+5!+…+11!)。

CLEARm = 0FOR i = 1 TO 6FOR j = i TO 2*i -1 STEP 2m = m + jc(j)ENDFORENDFOR‘1!+(1!+3!)+(1!+3!+5!)+…+(1!+3!+5!+…+11!)的值为:’+STR(m) FUNCTION jcPARAMETERS ns =1FOR k = 1 TO ns = s*kNEXT ****ENDFORRETURN ****RETURN S练习9:下列程序的功能是找出1000之内所有的完数,并统计它们的个数(完数是指这样一个数,该数的各因子之和正好等于该数本身。

例如,6的因子是1,2,3,而1+2+3=6,所以6是完数)。

要求:CLEARnCount=0FOR n1 = 1 TO 1000m=0FOR n2 = 1 TO n1-1IF n1/n2 = MOD(n1,n2)*** IF n1/n2 = INT(n1,n2)m = m + n2ENDIFENDIF ***ENFFORIF n1 = mn1nCount = nCount + 1ENDIFENDFORWAIT WINDOWS '"完数的个数为"' + STR(nCount)练习10:下列程序的功能是找出1000之内所有完数的个数(完数是指这样一个数,该数的各因子之和正好等于该数本身。

例如,6的因子是1,2,3,而1+2+3=6,所以6是完数)。

要求:CLEARn1 = 1nCount = 0DO WHILE n1<=1000m=0FOR n2 = INT(n1/n2) TO 1 STEP -1 *** n2=int(n1/2) IF n1/n2 = INT(n1/n2)m = m + n2ENDIFENDFORIF n1 = mnCount = nCount + 1n1ENDDO***ENDIFn1 = n1 + 1ENDDOWAIT WINDOWS '"完数的个数为"' + STR(nCount)练习11:下列程序的功能是找出两个正整数的最大公约数。

可以用辗转相除法来求最大公约数。

例如27和6,先用27除以6,余数为3,由于余数不为0,再将6作为被除数,3作为除数,得到余数为0,则3就是27和6的最大公约数。

要求:CLEARm = 27n = 6IF m<nt = mm = nn = tENDIFr = MOD(m,n)DO WHILE r<>0m = nn = t **n=rr = MOD(m,n)ENDDOWAIT WINDOWS '最大公约数为'+ STR(r) *** STR(n)练习12:下列程序的功能是找出1992至2010年中的闰年。

判断闰年的条件是:(1)能被4整除,但不能被100整除的年份;(2)能被100整除,又能被400整除的年份。

如1989,1900年不是闰年,1992,2000是闰年。

要求:n=1992y = 1DO WHILE n<=2010IF INT(n/4) = n/4IF INT(n/100) <> n/100y = 1ELSEIF INT(n/400) = n/400y = 1ELSEy = 0ENDIFENDIFENDIF****ELSEy = 0ENDIFWAIT WINDOWS STR(n) + '是' + IIF(y = ‘1’,'闰年','非闰年') ***y=1n = n + 1ENDDO练习13:下列程序的功能是求函数f(x)的值,同时分别给出x= -2,x=2,x=6时函数的值。

函数表达式为:CLEARf(-2)f(2)f(6)FUNCTION fPARAMETERS xIF x < 2y = 2*x^2 + 3*x + 4ELSEIF x = 2Y = 0ENDIF ****ELSEy = -2*x^2 + 3*x - 4ENDIFENDIFRETURN x **** RETURN Y练习14:下列程序用来产生20个随机数,并将它以从大小的顺序存贮在数组X中。

相关文档
最新文档