1.以下程序求1000以内的所有的完全数之和,请将程序补充完整,并给出正确结果,填入相应窗口。”完全数”是指:一个数如果刚好与它所有的真因子(不包括该数本身)之和相等,如:6=1+2+3,则6就是一个完全数。
程序:#include
#include
#include
main()
{
int sum,n,m,s,k;
sum=0;
for (n=3;n<=1000;n++) 完数
{
s=0;
k=n/2+1;
for (m=1;m if (n%m==0) s=s+m; if (s==n) { sum+=n; } } printf("\nThe sum=%d",sum); } s=s+m; sum=sum+n; 530 2.以下程序求[10,1000]之间能被3或5或8整除的数之和。请将程序补充完整,给出正确程序运行结果,填入相应窗口。 #include #include #include main() { int i; long sum; sum=0; for ( i=10;i<=1000;i++) { if(i%3==0||i%5==0||i%8==0) sum+=i; clrscr(); printf("%ld\n",sum); } int i; i%3==0||i%5==0||i%8==0 267793 3.下面程序求[3,750]之间同构数之和,请将程序补充完整,并给出正确结果,填入相应窗口。同构数是:一自然数平方的末几位与该数相同时,称此数为自构数,例如:5*5=25,25*25=625则称5、25为自同构数。 程序: #include #include #include main() { long sum,n,m,s,k; sum=0; for (n=3;n<=750;n++) { if (n<10) k=10; else if (n<100) k=100; else k=1000; s=n*n; _________; if (s%k==0) { ___________ } } printf("\n The sum = %d",sum); } s=s-n; sum+=n; 1113 4.下面程序是求[5,75]之间的所有奇数的立方和。请将程序补充完整,并给出正确结果,填入相应窗口。程序: #include #include #include main() { long sum; int i; sum=0; for (i=5;i<=75;i++) if (i%2!=0) sum+=i*i*i; } clrscr(); printf("%ld\n",sum); } int i; sum=sum+i*i*i; 105568 5.下面程序是求[1,450]之间同时满足除3余2和除5余3条件的数的个数。请将程序补充完整,并给出正确结果,填入相应窗口。 程序: #include #include #include main() { int count; int i; count=0; for (i=1;i<=450;i++) { if (fmod(i,3)==2 && fmod(i,5)==3) count++; } clrscr(); printf("%d\n",count); } count=0; count++; 30 6.下面程序是求[50,450]之间的能被3和5整除的数的平方和。请将程序补充完整,并给出正确结果,填入相应窗口。 程序: #include #include #include main() { long sum; int i; sum=0; for (i=50;i<=450;i++) if (fmod(i,3)==0 && fmod(i,5)==0) sum+=i*i; } clrscr(); printf("%ld\n",sum); } int i; sum=sum+i*i; 27073 7.下面的程序是求[2,500]之间的所有的素数的个数。请将程序补充完整,并给出正确结果,填入相应窗口。 程序: #include #include #include int prime(int n) { int yes, i; if(n<=1) {return 1;} yes=1; for(i=2; i<=sqrt(n); i++) if(n%i==0){ yes=0; break;} 素数return yes; } main() { int count=0, i; clrscr(); for(i=2;i<=500; i++) if(prime(i)) count++; printf("%d\n", count); } return yes; count++; 95 8.下面的程序是求表达式的值: s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+......+(1*2*3*....*n)/(3*5*7*.....(2*n+1)) 请将程序补充完整,并给出当n=20时,程序的运行结果(按四舍五入保留10位小数)。 程序: #include #include #include double fun(int n) { double s, t; int i; ____________ for(i=1;i<=n; i++) { t=t*i/(2*i+1); ____________ } return s; } main() {printf("\n %12.10lf", fun(20)); } s=1; s=s+t; 1.5707961494 9.下面的程序是求如下表达式的值。 S=sqrt(ln(1)+ln(2)+ln(3)+……+ln(n)) 将程序补充完整,当n=60时,给出程序运行结果(按四舍五入保留6位小数)。 程序: #include #include #include double fun(int n) { ________________ int i; for(i=1;i<=n;i++) s+=log(1.0*i); s=sqrt(s); return s; } main() { clrscr(); printf(______________); } double s=0; “%.6lf”,fun(60) 13.734197 改错: 1.下面的程序是求500以内的所有的素数之和。请修改程序中的错误,使它能得出正确的结果,并给出正确结果。 程序: #include #include #include int prime(int n) { int yes, i; 素数 if(n<=1) {return 1;} yes=1; for(i=2; i<=sqrt(n); i++) if(n%i==0){ yes=0; break;} return yes; } main() { int sum=0, i; clrscr(); for(i=2;i<=500; i++) if(prime(i)) sum+=i; printf("%d\n", sum); } return yes; 21536 2.下面的程序中,函数fun的功能是:根据形参m,计算下面公式的值。 T=1+1/(2*3)+1/(3*4)+……+1/(m*(m+1)) 请改正程序中的错误,并运行改正后的程序。当从键盘输入70时,给出程序运行的正确结果(按四舍五入保留6位小数)。 程序: #include #include double fun(int m) { double t=1.0; int i=2; for(i=2; i<=m; i++) t+=1.0/(i*(i+1)); return t; } main() { int m; clrscr(); printf("\n 请输入一个整数: "); scanf("%d",&m); printf("\n 结果是: %.6lf \n", fun(m)); } t+=1.0/( i*(i+1)); return t; %.6lf 1.485915 3.下面的程序中,函数fun的功能是:根据形参m,计算下面公式的值。 T=1/1!+1/2!+1/3!+……+1/m! 请改正程序中的错误,并运行改正后的程序。当从键盘输入10时,给出程序运行的正确结果(按四舍五入保留10位小数)。 程序: #include #include double fun(int m) { double fac, t=0.0; int i=1, j; for(i=1;i<=m;i++) { fac=1.0; for(j=1; j<=i; j++) fac=fac*j; t+=1.0/fac; } return t; } main() { int m; clrscr(); printf("\n 请输入整数: "); scanf("%d", &m); printf("\n 结果是: %12.10lf \n",fun(m)); } j<=i fac=fac*j; 1.7182818011 4.下面的程序中,函数fun的功能是:根据形参m,计算下面公式的值。 T=1+1/(1*2)+1/(2*3)+……+1/(m-1)*m 请改正程序中的错误,并运行改正后的程序。当从键盘输入70时,给出程序运行的正确结果(按四舍五入保留6位小数)。 程序: #include #include double fun(int m) { double t=1.0; int i=2; for(i=2;i<=m; i++) t+=1.0/(i*(i+1)); return ; } main() { int m; clrscr(); printf("\n 输入整数: "); scanf("%d", &m); printf("\n 结果是: %lf \n",fun(m)); } t+=1.0/(i*(i-1)); return t; %.6lf 1.985714 5.下面程序中,函数fun的功能是:计算并输出k以内的最大的10个能被13或17整除的自然数之和。请改正程序中的错误,并运行正确的程序。当从键盘输入500时,给出程序运行的正确结果。 #include #include int fun(int k) { int m=0, mc=0, j; while((k>=2)&&mc<10) { if ((k%13==0) || (k%17==0)) { m=m+k; mc++; } k--; } return m; } main() { int k; clrscr(); printf("\n 请输入整数:"); scanf("%d", &k); printf("\n 结果是: %d\n",fun(k)); } && || 4622 6.下列程序的功能是:求出以下分数序列的前30项之和, 2/1,3/2,5/3,8/5,13/8,21/13,…… 请改正程序中的错误,并运行修改后程序,给出程序结果(按四舍五入保留6位小数)。程序: #include #include main() { long a,b,c,k; double s; clrscr(); s=0.0; a=2; b=1; for(k=1;k<=30;k++) s=s+a/b; c=a; a=a+b; b=c; printf("\n 结果: %lf\n", s); } {s=s+(float)a/b; c=a; a=a+b; b=c;} %.6lf 48.840601 7.下面的程序是求400以内的所有的素数之和。请修改程序中的错误,使它能得出正确的结果,给出正确结果。 #include #include #include int prime(int n) { int yes, i; if(n<=1) {return 0;} yes=1; for(i=2; i<=sqrt(n); i++) if(n%i==0){ yes=0; break;} return yes; } main() { int sum=0, i; clrscr(); for(i=2;i<=400; i++) if(prime(i)) sum+=i; printf("%d\n", sum); } yes=1; yes=0; 13887 8.下面的程序是计算:s=f(-30)+f(-29)+......+f(-1)+f(0)+f(1)+......+f(30) 的值。其中函数定义如下: f(x)=(x+1)/(x-2) if x>=1 f(x)=0 if x=0 or x=2 f(x)=(x-1)/(x-2) if x<0 请改正程序中的错误,并给出正确程序的运行结果(按四舍五入保留6位小数)。程序: #include #include #include double f(double x) { if(x==0 && x==2) return 0.0 ; else if(x<0.0) return (x-1)/(x-2); else return (x+1)/(x-2); } double fsum(int n) { int i; double s=0.0, y; for(i=-n; i<=n;i++) {y=f(1.0*i); s+=y;} } main() { clrscr(); printf("%lf\n", fsum(30)); } x==0 || x==2 return s; %.6lf 65.223018 9.下面的程序是计算如下公式的A15值。 A1=1, A2=1/(1+A1), A3=1/(1+A2), A4=1/(1+A3), ...... 请改正程序中的错误,并给出程序运行的正确结果(按四舍五入保留10位小数)程序: #include #include double fun(int n) { int A=1.0;int i; for(i=2; i<=n; i++) A+=1.0/(1+A); return A; } main() { clrscr(); printf("%12.10lf\n", fun(15)); } double A=1.0; A=1.0/(1+A); 0.6180344478 下列程序是建立一个包含学生有关数据的单向链表。但该程序有2个错误,错误出现在每个注释行附近,请调试改正。调试改正中,不得改变程序结构,也不得增删语句。 #define NULL 0 struct stud { long num; char name[10]; float score; struct stud *next; }; /* …………… comment …………… */ int n; struct stud create() 序中有两处错误代码,请改正.注意,不得改变程序结构。 #include <> main() { int a[8],*p=a; int i,j; int tempmin,tempcode; printf("\n input the numbers:\n"); for (i=0;i<8;i++) scanf("%d",p+i); tempmin=*p; for (i=0;i<7;i++) { for (j=i;j<8;j++) if (j==i||*(p+j) C语言改错题库 目录 C语言改错题库 (1) 从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。 (3) 2.求一维数组a中的值为偶数的元素之和。 (3) 3.求二维数组a中的最大值。 (4) 5.猴子第一天摘下若干桃子 (5) 6. 将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。 (5) 7.求出a所指数组中最大数(规定最大数不在a[0]中),最大值和a[0]中的数对调。 (6) 8.输出200~300之间的所有素数,要求每行输出8个素数。 (6) 9.打印九九乘法表 (6) 10.输出100~200之间既不能被3整除也不能被7整除的整数并统计这些整数的个数,要求每行输出8个数。 (7) 10.输出100~200之间既不能被3整除也不能被7整除的整数并统计这些整数的个数,要求每行输出8个数。 (7) 11.打印输出以下图形 (8) 12.求:1!+2!+3!+ ...... + 20! (8) 13.输入一个百分制成绩,打印出五级记分成绩。 (8) 14.求一维数组a中值为奇数的元素的平均值。 (9) 15.将[m,n]之间的所有素数存放到一维数组a中,并输出。 (9) 16.求一维数组a中所有元素的平均值。 (10) 17.将[2,100]之间的所有素数存放到一维数组a中,并输出这些素数。 (10) 18.求一维数组a中所有元素的平均值,结果保留两位小数。 (11) 19. 当M为5时,如果从键盘上输入的5个数 (11) 20. 在第一个循环中给a数组的前10个数组元素 (12) 21. 把数组a(大小为M)中前M-1个元素中的最大值放入a的最后一个元素中。 (12) 22.求排列组合的值 (12) 23. 计算正整数num的各位上的数字之和。 (13) 24.从键盘上输入一个正整数n,计算并输出n的阶乘。 (13) 25.从键盘上输入一个数字组成的字符串(字符串长度小于8),将该字符串转换成一个十进制数. 例如:从键盘上输入2345, (14) 26. 求一维数组a中素数的个数。 (14) 27.输出Fabonacci数列:1,1,2,3,5,8,......的前20项的值,要求每行输出5个数。 .. (15) 28.求一维数组a中非素数之和。 (15) 29.求两个正整数m,n之间的非素数之和(包含m和n)。 (16) 30.将无符号八进制数字构成的字符串转换为十进制整数。 (16) 31.计算1到M(M为100)之间的奇数之和及偶数之和。 (16) 32.实现在N行M列的二维数组中,找出每一行上的最大值,且原数组值不变。 (17) 第12次上机程序改错第1题 【程序改错】 -------------------------------------------------------- 功能:求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积。 例如:输入圆的半径值:19.527 输出为:s = 598.950017。 ------------------------------------------------------*/ #include printf ( "Enter x: "); scanf ( "%f", &x ); printf (" s = %f\n ", fun ( x ) ); } 第2题【程序改错】 功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。 例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:“EDCBAABCDE”。 ------------------------------------------------------*/ #include 1、以下程序的功能是求如下表达式: 1 1 1 S = 1 + ——+ ———+ ...... + ——————— 1+2 1+2+3 1+2+3+......+n 『答案』:1 scanf("%d",&n); 2 float fun(int n) 3 for(i=1;i<=n;i++) 4 s+=1.0/t 或s= s + 1.0 /t; 2、题目:函数fun的功能是:根据整型形参m的值,计算如下公式的值。 1 1 1 t = 1- ——- ——- ... - —— 2x2 3x3 mxm 例如,若m=5,则应输出:0.536389 『答案』:1 for(i=2;i<=m;i++)或for(i=2;i (一)功能:用选择法对数组中的n个元素按从小到大的顺序进行排序。#include "stdio.h" #define N 20 void fun(int a[], int n) { int i, j, t, k; for (j = 0 ;j < n-1 ;j++) { /**********ERROR**********/ k = j for (i = j+1;i < n; i++) /**********ERROR**********/ if(a[i] >a[k]) /**********ERROR**********/ 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]) 【参考答案】 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 C语言改错题常见错误归纳 一、书写错误 1:mian→(main)见例一 2:print→(printf) 3:include 五、赋值错误 1:未赋初值。如求和时一般sum=0,求阶乘时一般n=1。见例一 2:注意题中赋值是否正确。如究竟i是赋1还是0。见例五 六、大小关系错误 1:大于号和小于号与所求程序不符。见例一 2:是否携带等号<=,>= 七、返回值错误 1:在子函数中,return (i)i 是要返回到主函数的值。 2:在子函数中,return(1)返回主函数是执行后yes 的结果,return(0) 返回执行后no的结果。见例二 3:一般在主函数中很少涉及返回值的错误 八、其他错误 1、参数未定义:程序中出现的任何变量i或常量j=1,都要定义他们的类型。 2、等号与赋值弄混好:==为等号,=为赋值号。见例二 3、与scanf搭配未加地址符, 也不可加\n换行符在d 后面,scanf(“%d”,&i); 4、行末未加分号,每行后面需要分号。 5、子函数中形参为定义好。见例六 经典例题C语言程序改错及填空题
C语言改错题库
C语言程序改错题
C语言程序改错2
程序改错完整版---C语言
C语言常见改错
齐齐哈尔大学C语言题库 程序改错(部分)