程序改错(1)汇总
- 格式:doc
- 大小:152.00 KB
- 文档页数:25
程序改错1.计算下列分段函数的值,输入x输出y的值f(x)= x*2 x<0且x≠-3sin(x) 0<=x<10 且x≠2且x≠3x*x+x-1 其他1)scanf(“%f,&x); 2)y=sin(3*x);3)printf(“%f\n”,y);2.输入两个整数n1,n2(n1<n2),统计两整数范围内被3整除的数的个数。
1)scanf(“%d%d”,&n1,&n2);2)n2=j; 3)if(j%3==0) n++;3.输入一个长整数,求各位数字的平方和。
如果输入的是负数,求其相反数的个位数字的平方和。
例如输入-123输出14.1)scanf(“%ld”,&in);2)While(in>0);3)in=in/10;4.从键盘上输入20个元素的值存入以为数组m中,然后将下标为奇数的元素赋值给数组n,最后输出数组n的内容。
1)for(a=0;a<20;a++) 2)if(a%2==1)3)b++; 4)for(a=0;a<10;a++)5.从键盘输入10个学生的成绩,统计最高分max,最低分min和平均分avg。
1)float a[8],min,max,avg;2)scanf(“%f”,&a[i]);3)max=min=avg=a[0]; 4)if(a[i]<min)6.一数列从第0项开始的前3项分别0,0,1,以后各项是相邻前三项和。
求该数列的前n 项平方根之和sum,n的值通过形参传入。
例如,当n=10时程序的输出结果应为23.197745.1)double fun (int n) 2)sum=1.0;3)s2=1.0; 4)for(k=4;k<=n;k++)7.求1/2的圆面积,函数通过形参得到的圆半径。
例:半径19.527,输出s=598.950017.1)float fun(float r)2)s=1.0/2*3.14159*r*r;3)return s;8.求1到10的阶乘和。
(一)功能:用选择法对数组中的n个元素按从小到大的顺序进行排序。
#include "stdio.h"#define N 20void fun(int a[], int n){int i, j, t, k;for (j = 0 ;j < n-1 ;j++){/**********ERROR**********/k = jfor (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<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个字符,以相反顺序打印出来。
C语言程序改错题汇总程序改错题汇总1、用“起泡法“对连续输入的十个字符排序后按从小到大的次序输出. 2、分别统计字符串中大写字母和小写字母的个数。
3、求1到10的阶乘的和。
4、判断m是否为素数,若是返回1,否则返回0。
5、用选择法对数组中的n个元素按从小到大的顺序进行排序。
6、求一个3行4列矩阵的外框的元素值之和。
7、以下程序把两个数按由大到小的顺序输出来。
8、求1到20的阶乘的和。
9、判断字符ch是否与str所指串中的某个字符相同;若相同,什么也不做,若不同,则将其插在串的最后。
(指针)10、已知一个数列从第0项开始的前三项分别为0、0、1,以后的各项都是其相邻的前三项的和。
下列给定程序中,函数fun的功能是计算并输出该数列的前n项的平方根之和sum,n的值通过形参传入。
11、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数都是多少12、编写函数fun计算下列分段函数的值x*xx x0.0 { 累计营业额;输入下一笔交易额;} 输出营业额;} 记一笔交易额为变量sale,营业额为sigma。
124、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少125、编写一个程序模拟袖珍计算器的加、减、乘、除四则运算。
例如输入35=或5-2=或3*4=或4/2=,求表达式结果。
126、输入字符序列,字符序列以特殊字符“”结束。
程序从前向后依次读入字符,并翻译出新的字符输出。
翻译的规则是如果当前读入的字符是数字符,如果该字符的面值为n,则它的后一个字符包括数字符需重复输出n1次如果当前读入的字符不是数字符,则输出该字符。
输出时,以上述一次翻译为一组,不同组间输出用一个空白字符隔开。
翻译直至当前读入的字符为字符‘’,结束翻译和输出。
127、某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下每位数字都加上5,然后除以10的余数代替该位数字。
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、第一大类(交换类)共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。
第1题【程序改错】功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。
例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:“EDCBAABCDE”。
------------------------------------------------------*/#include <conio.h>#include <stdio.h>#include <string.h>void fun (char *s, char *t){/**********FOUND**********/int i;sl = strlen(s);for (i=0; i<sl; i++)/**********FOUND**********/t[i] = s[sl-i];for (i=0; i<sl; i++)t[sl+i] = s[i];/**********FOUND**********/t[2*sl] = "0";}main(){char s[100], t[100];printf("\nPlease enter string s:"); scanf("%s", s);fun(s, t);printf("The result is: %s\n", t);}答案:1). int i,sl;2). t[i] = s[sl-i-1];3). t[2*sl] = '\0'; 或 t[2*sl] = 0;第2题【程序改错】功能:求出以下分数序列的前n项之和。
和值通过函数值返回main 函数。
2/1+3/2+5/3+8/5+13/8+21/13 ……例如:若n = 5,则应输出:8.391667。
------------------------------------------------------*/#include <conio.h>#include <stdio.h>/**********FOUND**********/fun ( int n ){int a, b, c, k; double s;s = 0.0; a = 2; b = 1;for ( k = 1; k <= n; k++ ){/**********FOUND**********/s = (double)a / b;c = a;a = a + b;b = c;}/**********FOUND**********/return c;}main( ){int n = 5;printf( "\nThe value of function is: %lf\n", fun ( n ) );}答案:1). double fun(int n)2). s = s + (double)a / b; 或 s += (double)a / b; 或 s += a /(double)b; 或s=s+a/(double)b;3). return s;第3题【程序改错】功能:读入一个整数m( 5≤m≤20 ),函数getarr调用函数rnd获得m个随机整数,函数sortpb将这m个随机整数从小到大排序。
程序改错题共2题,每题5 分答题注意事项:调试程序中要修改、编译、运行,观察结果的正确性容易出现VC死掉现象,这时用Ctrl+Del+Alt组合键进入Windows任务管理器,结束VC进程。
就可以继续操作了。
第一题/*------------------------------------------------------【程序改错】--------------------------------------------------------功能:求1到10的阶乘的和。
------------------------------------------------------*/#include "stdio.h"main(){ int i;float t,s=0;float fac(int n);/**********FOUND**********/for(i=1;i<10;i++)/**********FOUND**********/s=fac(i);printf("%f\n",s);}float fac(int n){ /**********FOUND**********/int y=1;int i;for(i=1 ;i<=n;i++)y=y*i;/**********FOUND**********/return;}修改后的程序:/*------------------------------------------------------【程序改错】功能:求1到10的阶乘的和。
------------------------------------------------------*/#include "stdio.h"main(){ int i;float t,s=0;float fac(int n);/**********FOUND**********/for(i=1;i<10;i++)/**********FOUND**********/s=s+fac(i);printf("%f\n",s);}float fac(int n){ /**********FOUND**********/int y=1;int i;for(i=1 ;i<=n;i++)y=y*i;/**********FOUND**********/return y;}老师得分:2分标准答案:第二题/*------------------------------------------------------【程序改错】--------------------------------------------------------功能:先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面。
/*------------------------------------------------------ 【程序改错】--------------------------------------------------------功能:将 m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt所指字符串中。
例如:把3个串:“abc”,“CD”,“EF”串连起来,结果是“The result is: abcCDEF”。
------------------------------------------------------*/#include <conio.h>#include <stdio.h>#include <string.h>int fun ( char str[][10], int m, char *pt ){/**********ERROR**********/int k, q, ifor ( k = 0; k < m; k++ ){q = strlen ( str [k] );for (i=0; i<q; i++)/**********ERROR**********/pt[i] = str[k,i] ;/**********ERROR**********/pt = q ;pt[0] = 0 ;}}main( ){int m, h ;char s[10][10], p[120] ;printf( "\nPlease enter m:" ) ;scanf("%d", &m) ; gets(s[0]) ;printf( "\nPlease enter %d string:\n", m ) ;for ( h = 0; h < m; h++ ) gets( s[h]) ;fun(s, m, p) ;printf( "\nThe result is : %s\n", p) ;}【改错1】正确【学生答案】int k, q, i;【参考答案】int k, q, i;============================================================【改错2】错误【学生答案】pt[i] = str[k,i] ;【参考答案】pt[i] = str[k][i] ;============================================================【改错3】错误【学生答案】pt = q ;【参考答案】pt += q ;pt=pt+q;============================================================/*------------------------------------------------------ 【程序改错】--------------------------------------------------------功能:使数组左下三角元素中的值乘以n 。
------------------------------------------------------*/#include <stdio.h>#include <conio.h>#include <stdlib.h>#define N 3int fun ( int a[][N], int n ){/**********ERROR**********/int i;j;for(i=0; i < N; i++)/**********ERROR**********/for(j=0; j<N; j++)/**********ERROR**********/a[i][j]=*n;}main ( ){int a[N][N], n, i, j;printf("***** The array *****\n");for ( i =0; i<3;i++){for ( j =0; j<3;j++){a[i][j] = rand()%10;printf( "%4d", a[i][j] );}printf("\n");}don = rand();while ( n >=5||n<1 );printf("n = %4d\n",n);fun ( a, n );printf ("***** THE RESULT *****\n");for ( i =0; i<3;i++){for ( j =0; j<3;j++)printf( "%4d", a[i][j] );printf("\n");}【改错1】正确【学生答案】int i,j;【参考答案】int i,j;============================================================【改错2】错误【学生答案】for(j=1; j<N; j++)【参考答案】for(j=0; j<=i; j++)============================================================【改错3】错误【学生答案】a[i][j]==n;【参考答案】a[i][j]*=n;============================================================/*------------------------------------------------------- 【程序填空】---------------------------------------------------------功能:以下程序是用选择法对10个整数按升序排序。
-------------------------------------------------------*/#include <stdio.h>/**********FILL**********/_____main(){int i,j,k,t,a[N];for(i=0;i<=N-1;i++)scanf("%d",&a[i]);for(i=0;i<N-1;i++){/**********FILL**********/_____/**********FILL**********/for(j=i+1; _____;j++)if(a[j]<a[k]) k=j;/**********FILL**********/if(_____){t=a[i];a[i]=a[k];a[k]=t;}}printf("output the sorted array:\n");for(i=0;i<=N-1;i++)printf("%5d",a[i]);printf("\n");}【空1】错误【学生答案】_____【参考答案】#define N 10============================================================【空2】错误【学生答案】_____【参考答案】k=i============================================================【空3】错误【学生答案】for(j=i+1; _____;j++)【参考答案】j<NN>jj<=N-1N-1>=j============================================================【空4】错误【学生答案】if(_____)【参考答案】k!=ii!=k============================================================/*------------------------------------------------------- 【程序填空】---------------------------------------------------------功能:文件操作。
-------------------------------------------------------*/# include <stdio.h># include <stdlib.h>void main(){/* 定义一个文件指针fp *//**********FILL**********/_____ *fp;char ch, filename[10];printf("Please input the name of file: ");scanf("%s", filename); /* 输入字符串并赋给变量filename */ /* 以读的使用方式打开文件filename *//**********FILL**********/if((fp=fopen(filename, "_____")) == NULL){printf("Cannot open the file.\n");exit(0); /* 正常跳出程序 */}/* 关闭文件 *//**********FILL**********/_____;}【空1】错误【学生答案】_____ *fp;【参考答案】FILE============================================================【空2】错误【学生答案】if((fp=fopen(filename, "_____")) == NULL)【参考答案】r============================================================【空3】错误【学生答案】break;【参考答案】fclose(fp)============================================================/*------------------------------------------------------ 【程序改错】--------------------------------------------------------功能:求一个3行4列矩阵的外框的元素值之和。