C语言改错题
C语言程序改错
C语言程序改错〖第1题〗『程序改错』(5分)(题号:422)/*------------------------------------------------------【程序改错】--------------------------------------------------------题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
--------------------------------------------------------注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/#include"stdio.h"main( ){/**********FOUND**********/long a,b,c,d,e,x,scanf("%ld",&x);a=x/10000;/**********FOUND**********/b=x/10000/1000;c=x%1000/100;d=x%100/10;e=x%10;/**********FOUND**********/if (a==0)printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a); else if (b!=0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b);else if (c!=0) printf(" there are 3,%ld %ld %ld\n",e,d,c);else if (d!=0) printf("there are 2, %ld %ld\n",e,d);else if (e!=0) printf(" there are 1,%ld\n",e);getch();}答案:1). long a,b,c,d,e,x;2). b=x%10000/1000; 或 b=x/1000%10;3). if (a!=0) 或 if (!a)〖第2题〗『程序改错』(5分)(题号:411)/*------------------------------------------------------【程序改错】--------------------------------------------------------题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后除以10的余数代替该位数字。
c语言改错
printf("%s\t%d\n",c[i].id,c[i].score);
n++; /*$ERROR3$*/
}
i++;
}
printf("n=%d\n",n);
}
3.题目:
从键盘输入一个小于10000的十进制正整数,求出它是几位数。如输入528,则结果为n=3。
while(n<=9) /*$ERROR1$*/
{
flag=0;
for(j=2;j<i;j++)
if(i%j!=0) /*$ERROR2$*/
{
flag=1;
break;
else
switch(a/20)
{
case 5: ; /*$ERROR3$*/
case 4: printf("A"); break;
case 3: printf("B"); break;
{
t=0; /*$ERROR2$*/
for(j=1;j<=i;j++)
t=t+j;
if(i%2!=0) /*$ERROR3$*/
s=s+1.0*i/t;
else
s=s-1.0*i/t;
#include <stdio.h>
long f(int n)
{
if(n==1|| n==2) /*$ERROR1$*/
return 1;
else
return f(n-1) + f(n-2); /*$ERROR2$*/
C语言程序改错练习题
C语言程序改错练习题程序改错练习题下面每个程序的划线处有语法或逻辑错误,请找出并改正,使程序符合题意。
1.求1?2?3?4? ?nmain(){ int sum; 正确:int sum=1;int n,i=1;scanf("%d",n); scanf(“%d”,&n);printf(“\n”);while(i<="n)</p">{ sum=sum*i;i++; }printf("sum=%c",sum); printf("sum=%d",sum);}2.求一个数组中最大值及其下标。
main( ){ int max,j,m;int a[5];for(j=1;j<=5;j++) 正确:for(j=0;j<5;j++)scanf(“%d”,a); scanf(“%d”,&a[j]);max=a[0];for(j=1;j<=5;j++) for(j=0;j<5;j++)if(max>a[j]) if(max<a[j])< p="">{ max=a[j];m=j;}printf(“下标:%d\n最大值:%d”, j, max) printf(“下标:%d\n 最大值:%d”, m,max);}3.用一个函数求两个数之和。
sum(x,y) 正确:float sum(float x, float y ){ float z;z=x+y;return ; return z;}main(){ float a,b;int c; float c;scanf("%f,%f",&a,&b);c=sum(a,b);printf("\nSum is %f",sum); printf("\nSum is %f",c);}4. x , y两个数中,让x中存较大的数,y存较小的数#includemain( ){int x , y=200 , z=0;x=180;if ( x<y)< p="">z=x; x=y; y=z; 正确:{ z=x;x=y;y=z;}printf(“x=%d,y=%d\n”,&x,&y);printf(“x=%d,y=%d\n”,x,y);}5.用指针作函数参数,对输入的两个整数按大小顺序输出。
C语言考试改错
第一套改错:fun的功能是:求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和a[1]中的数对调。
1、m=0; 改为m=i;2、if(a[k]>a[m]) k=m;改为if(a[k]>a[m]) m=k;第二套改错:fun的功能是:判断ch中的字符是否与str所指串中的某个字符相同;若相同,什么也不做,若不同,则将其插在串的最后。
1、void fun(char str, char ch ) 改为void fun(char *str, char ch ) 2、if ( *str == ch )改为if ( *str! = ch )3、str[1] = '0';改为str[1] = 0;第四套改错:fun函数的功能是:将p所指字符串中的每个单词的最后一个字母改成大写。
(这里的“单词”是指由空格隔开的字符串)。
1、if( p == ' ' )改为if( *p == ' ' )2、* (p-1) = toupper( *( p - 1 ) ) 改为* (p-1) = toupper( *( p - 1 ) );第六套改错:fun函数的功能是:tt所指字符串中的小写字母都改为对应的大写字母,其他字符不变。
1、if(( ‘a’ <= tt[i] )||( tt[i] <= ‘z’ ) )改为if(( ‘a’ <= tt[i] )&&( tt[i] <= ‘z’ ) )2、tt[i] + = 32;改为tt[i] - = 32;第三套改错:fun的功能是:计算整数n的阶乘。
1、result*=--n; 改为result*=n--;2、return _____;改为returnresult;第五套改错:fun函数的功能是:根据形参m,计算如下公式的值。
t=1+1/2+1/3+1/4+……+1/m1、t + = 1.0/k; 改为t + =1.0/i;2、________改为return t;第七套改错:fun函数的功能是:用冒泡法对6个字符串按由小到大的顺序进行排序。
最常用的一些c语言改错题
{int i,j,min;
min=0;(应改为:min=arr[0];)
for(i=0; i<3; i++)
for(j=0; j<3; j++)
if (min>arr[i][j])
min=arr[i][j];
return (min);
}
void main()
max=arr[0];
pos= 0;
for(i=1; i<n; i++) if (max<arr[i])
{
max=arr[i];
int a,n;(应改为:int a[],n;)
{
int j; float aver;
float s;(应改为:float s=0;)
for(j=0; j<n; j++) s+=a[j];
aver=s/n;
return (aver);
void main(){int a[12]={10,4,2,7,3,12,5,34,5,9,6,8};
if(prime==1)(应改为:if(prime(i)==1;)
{a[c]=i;
printf("%4d",a[c]);
++c;
}
}
七、求一维数组a中值为奇数的元素的平均值。
#include <conio.h>
#include <stdio.h>
double average( int arr[],int n)
改错题 一、求一维数组a中所有元素的平均值,结果保留两位小数。
c语言改错题
printf("\n");
}
output(stu);
}
void output(struct student stu[2])
{
int i, j;
printf("学号姓名成绩1成绩2成绩3\n");
for(i=0; i<2; i++)
{
/***********SPACE***********/
【printf】("%-6s%-6s", stu[i].number, stu[i].name);
功能:有n个整数,使其前面各数顺序向后移m个位置,最后m个
(*a)++ ;
if ( *s >= 'a' && *s <= 'z' )
/**********FOUND**********/
(*b)++;
s++;
}
}
main( )
{
char s[100]; int upper = 0, lower = 0 ;
printf( "\nPlease a string : " ); gets ( s );
printf("stuNo:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
sum=0;
/***********SPACE***********/
for(j=0;【j<3】;j++)
大学C语言期末考试练习题程序改错(带详解答案)
y=3.5+x;
printf(“y=%d”);
}
正确的:
int x; float y;
printf(“y=%f”,y);
6 编程计算下面分段函数, 输入 x, 输出 y
x 1 x 0 y 2x 1 0 x 10
3x 11 x 10
main() { int x,y;
第三处改为:if(n%3==0)
第四处改为:sum=sum+n;
8. 求表达式 c ab 的值
#include <stdio.h>
#include <math.h>
int fun(int x, int y);
main()
{ int a,b; float f; scanf(“%d,%d”,a,b); //与改错第 1 题中的 scanf 错误相同 if(ab>0){ // C 语言中乘号不能省略,且用*表示乘法运算 fun(a,b); // 调用带有返回值的函数,应将函数的返回值保存在变量里
} 第四行改为:for(j=0;j<5;j++) 第五行改为:scanf(“%d”,&a[j]); 第七行改为:for(j=1;j<5;j++) 第八行改为:if(max<a[j]) 第十三行改为:printf(“下标:%d\n 最大值:%d”, m,max)
3.用一个函数求两个数之和。 sum(x,y) //函数定义的一般形式 p173-174 { float z; z=x+y; return; //return 语句后面可以返回 0、常量、变量和表达式的值。 } main() { float a,b; int c; / /若定义变量的语句有错误,常见考点有两个:(1)变量的类型,(2)在定
c语言题库改错题及详解答案
c语言题库改错题及详解答案C语言是一种广泛使用的计算机编程语言,它以其强大的功能和灵活性而闻名。
在学习和掌握C语言的过程中,练习题库中的改错题是提高编程技能的有效方式。
以下是一些常见的C语言改错题及其详解答案。
1. 题目:编写一个程序,计算并输出1到10的累加和。
错误代码:```cint main() {int sum = 0;for(int i = 1; i <= 10; i++) {sum = sum + i;}print("Sum is %d", sum);return 0;}```错误点: `print` 函数应为 `printf`。
正确代码:```c#include <stdio.h>int main() {int sum = 0;for(int i = 1; i <= 10; i++) {sum += i; // 可以简化为 sum += i;}printf("Sum is %d\n", sum);return 0;}```2. 题目:编写一个程序,判断输入的年份是否为闰年。
错误代码:```cint main() {int year;printf("Enter a year: ");scanf("%d", &year);if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {printf("%d is a leap year.\n", year);} else {printf("%d is not a leap year.\n", year);}return 0;}```错误点:逻辑判断的括号使用不正确。
正确代码:```c#include <stdio.h>int main() {int year;printf("Enter a year: ");scanf("%d", &year);if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {printf("%d is a leap year.\n", year);} else {printf("%d is not a leap year.\n", year);}return 0;}```3. 题目:编写一个程序,实现字符串的反转。
C语言改错题-含答案
第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个随机整数从小到大排序。
c语言改错题题库及详解答案
c语言改错题题库及详解答案C语言是一种广泛使用的计算机编程语言,它以其高效性、灵活性和强大的功能而受到程序员的青睐。
然而,即使是经验丰富的程序员也难免会在编写C语言程序时犯一些错误。
下面是一个C语言改错题题库及其详解答案,帮助学习者识别并改正常见的编程错误。
题目1:错误的变量初始化```cint main() {int a;printf("%d", a); // 错误:变量a未初始化return 0;}```详解答案:在C语言中,如果一个变量在使用前没有被显式地初始化,它的值是不确定的。
为了修复这个错误,我们应该在声明变量时对其进行初始化。
```cint main() {int a = 0; // 正确的初始化printf("%d", a);return 0;}```题目2:错误的数组索引```cint main() {int arr[5] = {1, 2, 3, 4, 5};printf("%d", arr[5]); // 错误:数组索引越界return 0;}```详解答案:数组索引是从0开始的,所以对于一个有5个元素的数组,有效的索引范围是0到4。
访问数组的第6个元素会导致越界错误。
```cint main() {int arr[5] = {1, 2, 3, 4, 5};printf("%d", arr[4]); // 正确的索引return 0;}```题目3:错误的循环使用```cint main() {int i;for (i = 0; i <= 10; i++) {printf("%d ", i);} // 错误:循环条件错误return 0;}```详解答案:循环条件应该是`i < 10`,以确保循环不会无限执行。
```cint main() {int i;for (i = 0; i < 10; i++) {printf("%d ", i);}return 0;}```题目4:错误的函数调用```cint main() {int result = add(5, 3); // 错误:add函数未定义printf("%d", result);return 0;}```详解答案:在调用一个函数之前,需要确保该函数已经被定义。
c语言改错题题库及详解答案
c语言改错题题库及详解答案1. 题目:以下代码段中存在错误,请找出并改正。
```c#include <stdio.h>int main() {int a = 10;int b = 20;int c = a + b;printf("The sum is %d", c);return 0;}```答案:代码中缺少了字符串结束的空格。
应改为:```cprintf("The sum is %d ", c);```2. 题目:找出并改正以下代码段中的错误。
```c#include <stdio.h>int main() {int num = 100;if (num = 100)printf("Number is 100\n");return 0;}答案:代码中使用了赋值运算符 "=" 而不是比较运算符 "=="。
应改为:```cif (num == 100)```3. 题目:以下代码段中存在逻辑错误,请指出并改正。
```c#include <stdio.h>int main() {float a, b, c;scanf("%f %f", &a, &b);c = a / b;printf("The result is %f", c);return 0;}```答案:代码中没有检查除数 b 是否为 0,这会导致运行时错误。
应添加检查:```cif (b != 0) {c = a / b;printf("The result is %f", c);} else {printf("Error: Division by zero.\n");}```4. 题目:找出并改正以下代码段中的语法错误。
c语言程序改错题
【程序改错】功能: 根据整型形参m的值, 计算如下公式的值。
1 1 1.....1.—..—......——2x2 3x3 mxm例如: 若m=5, 则应输出: 0.536389------------------------------------------------------*/#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)/**********FOUND**********/return m; return y}main(){int n=5;printf("\nthe result is %lf\n",fun(n));}【程序设计】---------------------------------------------------------题目: 编程求所有4位数, 这些数具有以下特点: 这数本身是平方数, 且其低2位和高2位所组成的2个2位数也是平方数。
要求: 使用程序中定义的变量-------------------------------------------------------*/#include <stdio.h>#include <math.h>main(){int qw,bw,sw,gw; // qw千位数bw百位数sw十位数gw个位数int a,b; //a 高两位低两数int i; //循环变量/**********Program**********/for(i=1000;i<10000;i++){qw=i/1000;bw=i/100%10;sw=i/10%10;gw=i%10;1a=qw*10+bw;b=sw*10+gw;if(sqrt(i)==(int)sqrt(i)&&sqrt(a)==(int)sqrt(a)&&sqrt(b)==(int)sqrt(b)) printf(“%d\n”,i);}/********** End **********/}【程序设计】功能: 从键盘为一维整型数组输入10个整数, 调用fun 函数找出其中最小的数, 并在main函数中输出。
C语言程序改错——答案
C语言程序改错——答案(总33页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--程序改错--------------------------------------------------------请改正程序中的错误,使它能得出正确的结果。
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/题目1:函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。
例如,若给num1和num2分别输入49 和21,则输出的最大公约数为7。
int fun(int a,int b) {int r,t;if(a<b){t=a;/**********FOUND**********/b=a;/**********FOUND**********/a=t;}r=a%b;while(r!=0){a=b;b=r;/**********FOUND**********/r=a/b;}/**********FOUND**********/return a;}int main(void){int num1,num2,a;scanf("%d%d",&num1,&num2);a=fun(num1,num2);printf("the maximum common divisor is %d\n\n",a);return 0;}答案:1). a=b;2). b=t;3). r=a%b;}4). return b; 或 return(b); 或 return(b);题目2:下列给定程序中,函数fun 的功能是:判断m是否为素数,若是返回1,否则返回0。
主函数的功能是:按每行5个输出1-100之间的全部素数。
请改正程序中的4个错误,使它能得出正确的结果。
C语言程序改错题
C语言程序改错一、程序改错共 138 题(共计 1380 分)━━━━━━━━━━━━━━━━━━第 1 题(10.0 分)/*------------------------------------------------------ 功能:根据整型形参 m,计算如下公式的值:y=1+1/3+1/5+1/7+...+1/(2m-3)------------------------------------------------------*/ #include "stdio.h"double fun(int m){/**********FOUND**********/double y=1int i;/**********FOUND**********/for(i=3; i<m; i++)/**********FOUND**********/y+=1.0/(2i-3);return(y);}void main(void){int n;clrscr();printf("Enter n: ");scanf("%d", &n);printf("\nThe result is %1f\n", fun(n));getch();}答案:1). double y=1;2). for(i=3; i<=m; i++) 或 for(i=3; i<m+1;i++)3). y+=1.0/(2*i-3);第 2 题(10.0 分)/*------------------------------------------------------ 功能:用选择法对数组中的 n 个元素按从小到大的顺序进行排序。
------------------------------------------------------*/ #include <stdio.h>#define N 20void fun(int a[], int n){int i, j, t, p;for (j = 0 ;j < n-1 ;j++){/**********FOUND**********/p = jfor (i = j;i < n; i++)/**********FOUND**********/if(a[i] >a[p])/**********FOUND**********/p=j;t = a[p] ;a[p] = 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");getch();}答案:1). p = j;2). if(a[i] < a[p]) 或 if(a[p] > a[i])3). p = i;第 3 题(10.0 分)/*------------------------------------------------------ 功能:编写一个程序,从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,并删除重复的字符。
C语言《改错》
请改正程序中的错误,使其能得出正确的结果。
【答案】
(1)将s[j]=s[i]; 改为:s[j++]=s[i];
(2)将s[j]="\0"; 改为:s[j]= '\0';
5.在给定程序中,fun函数的功能是:将n个无序整数从小到大排序。
14.下列给定程序中,函数fun的功能是:逐个比较x、y两个字符串对应位置中的字符,把ASCII相等或值小的字符依次存放到z数组中,形成一个新的字符串。
【答案】
(1)将int i=1;改为:int i=0;
(2)将while(*a!=*b)改为:while(*a || *b)
15.下面程序中函数fun的功能是:将长整数s中每个十进制位上为奇数的数取出,形成一个新数在t中,t中数字顺序按原整数中数字的逆序排列。
(2)将 zero=count; 改为:*zero=count;
29.给定程序中,函数fun的功能是:先将s所指字符串中的字符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序连接到t所指串的后面。
【答案】
(1)将int i; 改为:int i,sl;
(2)将t[i] = s[sl-i]; 改为:
【答案】
(1)将p=h; 改为:p= h->next;
(2)将p=h->next; 改为:p=p->next;
8.给定程序中,函数fun的功能是:先将字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面。
【答案】
(1)将for( i=0; i<sl; i ++) 改为:
C语言改错100道
1. 若输入整数2310,则应输出:2,3,5,7,11第1处:IsPrime(int n);应改为IsPrime(int n)第2处:if!(n%i)应改为if(!(n%i))2. 若a中的字符串为aBCDeFgH,b中的字符串为:ABcd,则c中的字符串应为:aBcdeFgH 第1处:int k=1;应改为int k=0;第2处:while(*p!=*q)应改为while(*p||*q)3. 依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串第1处:s[j]=s[i];应改为s[j++]=s[i];第2处:s[j]="\0";应改为s[j]='\0';4. 给字符串s输入:AaaaBBb123CCccccd,则输出结果:upper=5,lower=9第1处:void fun(char*s,int a,int b)应改为void fun(char*s,int*a,int*b)第2处:a++;应改为(*a)++;第3处:b++;应改为(*b)++;5. 删除数列中值为x的元素,同时将其他元素前移。
n中存放的是数列中元素的个数第1处:a[i+1]=a[i];应改为a[i]=a[i+1];6. 若m中的值为5,则应输出:0.536389第1处:for(i=2;i<m;i++)应改为for(i=2;i<=m;i++)第2处:y-=1/(i*i);应改为y-=1.0/(i*i);7. 用选择法对数组中的n个元素按从小到大的顺序进行排列第1处:p=j应改为p=j;第2处:p=i;应改为p=j;8. 调用fun函数之前给字符串输入:ABCDeFGH,调用后字符串中内容为eABCDFGH 第1处:void fun(char*p);应改为void fun(char*p)第2处:p=q+i;应改为q=p+i;9. 则低于平均分的学生人数为4(平均分为:75.562500)第1处:t=s[k];应改为t+=s[k];第2处:*aver=&ave;应改为*aver=ave;10. 当s所指字符串中的内容为abcdabdab,t1所指子串中的内容为ab,t2所指子串中的内容为99时,结果,在w所指的数组中的内容应为99cd99f99第1处:void fun(char*s,*t1,*t2,*w)应改为void fun(char*s,char*t1,char*t2,char*w)第2处:while(r)应改为while(*r)11. 若输入77777,则输出将是32767第1处:n=*p-'o';应改为n=*p-'0';第2处:n=n*7+*p-'o';应改为n=n*8+*p-'0';12. 当字符串中的内容为abcdabfabcdx,t中的内容为ab时,输出结果应是:abcdx。
c语言程序改错题
程序改错-------------------------------------1题目:在一个一维整型数组中找出其中最大的数及其下标。
程序中共有4条错误语句,请改正错误。
-----------------*/#define N 10/**********FOUND**********/float fun(int *a,int *b,int n){int *c,max=*a;for(c=a+1;c<a+n;c++)if(*c>max){max=*c;/**********FOUND**********/b=c-a;}return max;}main(){int a[N],i,max,p=0;printf("please enter 10 integers:\n");for(i=0;i<N;i++)/**********FOUND**********/scanf("%d",a[i]);/**********FOUND**********/m=fun(a,p,N);printf("max=%d,position=%d",max,p);}-------------------------------------『错误答案』:1 int fun(int *a,int *b,int n)2 *b=c-a;}3 scanf("%d",&a[i]);4 max=fun(a,&p,N);/*-----------------------------------2题目:用起泡法对10个整数从小到大排序。
程序中共有4条错误语句,请改正错误。
-------------------------------------/**********FOUND**********/void sort(int x,int n){int i,j,k,t; for(i=0;i<n-1;i++)/**********FOUND**********/for(j=0;j<n-i;j++)/**********FOUND**********/if(x[i]>x[i+1]){ t=x[j];x[j]=x[j+1];x[j+1]=t;}}main(){int i,n,a[100];printf("please input the length of the array:\n");scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);sort(a,n);printf("output the sorted array:\n");for(i=0;i<=n-1;i++)printf("%5d",a[i]);printf("\n");}-------------------------------------『错误答案』:1 void sort(int x[],int n)2 for(j=0;j<n-1-i;j++) 或for(j=0;n-1-i>j;j++) 或for(j=0;j<n-(1+i);j++) 或for(j=0;n-(1+i)>j;j++)3 if(x[j]>x[j+1]) 或if(x[j+1]<x[j])-------------------------------------3题目:在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。
C语言改错题真题解析(30题)
1.改错题(30题)第一题:#include<stdio.h>void main(){int a,b,c;/**/ float f; /**/ f为小数类型,具体下方f的输出用%f可看出为float 类型clrscr();printf("Please input a b :");scanf("%d%d",/**/&a,&b/**/);变量a,b必须取地址,除非数组名不取地址,因数组名就是地址f=/**/ (float)a/b; /**/ a,b均为整数,要获得结果的小数部分必须进行强制类型转换c=(int)((f-(int)f)*10);printf("\n%f %d\n",f,c);getch();}第二题:#include <stdio.h>void find(/**/int m /**/)参数类型必须指出,具体main函数中调用find函数的参数k为int 类型,所以对应的参数m也是int类型{int a1,a2;a1=m%10;求m的个位a2=m/10;求m的十位if(m%3==0 &&(/**/ a1==4 || a2==4 /**/))如果m能被3整除且个位或者十位是4 printf("%d\n",m);则输出m}void main(){ int k;for(k=10;k<=99;k++)k从10到99,一一尝试/**/ find( k ) /**/;调用函数find,函数的作用是寻找满足条件的数getch();}第三题:#include<stdio.h>void main(){/**/ int a,tag; /**/语法错误c语言的变量区分大小写,程序中用到小写tag,此处改为小写int num1=0,num2=0; num1和num2分别为大于个数和小于个数的计数器,程序开始归零clrscr();printf("please input numbers :");scanf("%d",/**/ &a /**/);语法错误变量a需取地址,输入第一个数tag=a;将第一个数放入tag中while(a)程序以0结束,循环的条件为:只要不输入0{ scanf("%d",&a);程序循环输入数字,存入a/**/ if(!a) /**/ continue;逻辑错误,程序执行的条件,a不为0else if(a<tag) num1++;如果a中数比tag小,计数器num1增加1else if(a>tag) num2++;如果a中数比tag大,计数器num2增加1}printf("\n%d %d\n",num1,num2);getch();}第四题:#include <stdio.h>long int fsum(int n) fsum函数用于求阶乘{long int k;if(n==1)/**/ k=1 /**/;逻辑错误,1的阶乘为1elsek=n*fsum(n-1);n的阶乘为n-1的阶乘乘以nreturn (/**/ k /**/);逻辑错误,运算结果在k中}void main(){ int i;long int sum;sum=0;for(i=1;i<=9;/**/ i++,i++ /**/)语法错误for语句格式不符sum+=fsum(i);printf("sum=%ld\n",sum);getch();}第五题:#include<stdio.h>void main(){ int i,a=0;/**/char c1,c2; /**/ 语法错误c1,c2为字符类型,程序中用getchar()获取clrscr();printf("Enter an 8 bit binary number :");c2=getchar();/**/ for(i=1;i<=7;i++) /**/语法错误for语句中间为;{ c1=getchar();a=a*2+c1-'0';}/**/ if (c2=='1') /**/ a=(-1)*a;如果依照题意c2=='1',a是负数printf("\n%d \n",a);getch();}第六题:#include<stdio.h>void main( ){int i,n;/**/ n = 0; /**/n为计数器,从0开始for(i=10;i<=100;i++)判断10-99是否是对称数if(i/10==i%10) i/10得到十位,i%10得到个位,若相等则是对称数{printf("%5d",i);输出对称数n++;计数器增加1if(/**/ n%9==0 /**/)语法错误表示相等的关系用双等号;printf("\n");9个数一行输出,换行}for(i=100;i<=999;i++)判断100-999是否是对称数if(/**/ i/100==i%10 /**/) i/100得到百位,i%10得到个位,若相等则是对称数{printf("%5d",i);n++;if(n%9==0)printf("\n");}getch();}第七题:#include <stdio.h>void main(){/**/ int a[10]; /**/语法错误数组下标用中括号;int i,j,k,x;printf("Enter 10 numbers:");scanf("%d",/**/ &x /**/);语法错误x需取地址;a[0]=x;for(k=1;k<=9;k++){ scanf("%d",&x);for(i=0;i<k;i++)if (a[i]>x) break;if(i<k)for(j=k;j>i;j--) a[j]=a[j-1];a[i]=x;}/**/ for(i=0;i<10;i++) /**/逻辑错误,数组下标从0开始printf("%d ",a[i]);printf("\n");getch();}第八题:#include <stdio.h>#include <math.h>int fun( /**/ float a,float b,float c /**/)语法错误函数三个参数的类型此处必须列出;{float t;int mk = 0;if(c<a){ t = a; a = c; c = t;}if(c<b){ t = b; b = c; c = t;}通过以上两次比较将最大的边放入c中if( fabs( c*c - (a*a+b*b)) < 1.0e-8)mk = 1;/**/ return mk; /**/}main(){float a,b,c;printf("Please input three numbers(a b c):\n");scanf("%f%f%f",&a,&b,&c);if(/**/ fun(a,b,c) /**/== 1)法错误调用函数三个参数之间用,分隔;printf("Yes\n");elseprintf("No\n");getch();}第9题:基本思路:每一趟从待排序的数列中选出值最小(或最大)的数据,将它与当前待排序的子数列的最后一个数据进行交换,直到全部数据排序完毕。
C语言程序改错练习
/**********FOUND**********/
b|=7
printf("\40: The a & b(decimal) is %d \n",b);
}
答案:
=======(答案1)=======
int a,b;
main()
{
int a,b;
double x;
/***********FOUND***********/
scanf("%d,%d",a,b);
/***********FOUND***********/
x=2ab/(a+b)(a+b);
/***********FOUND***********/
printf("x=%d\n",x);
for(i=1;i<=5;i++)
for(j=1;j<5;j++)
for (k=1;k<5;k++)
{
/**********FOUND**********/
if (i!=k||i!=j||j!=k)
printf("%d,%d,%d\n",i,j,k);
}
}
答案:
=======(答案1)=======
------------------------------------------------------*/
#include<stdio.h>
void main()
{
/**********FOUND**********/
c语言改错题型
C语言程序设计练习题三、程序改错并得到答案(10分)1. 求 s=1!+4!+7!+ …+(3n+1)!。
程序中有一处错误。
(1) 输入原程序并运行,输入4,记录运行结果,将结果填入答题窗口的①。
(程序名由考生自定)(2) 更正程序中的错误,运行更正后的程序,输入10,记录运行结果,将结果填入答题窗口的②。
#include "stdio.h"main(){ long s,f,n;int I,j;printf("Enter a number: \n");scanf("%ld",&n); s = 0;for (I=1; I<= n; I+=3){ f = 1;for (j=1; j<=I; j++)f = f*I; 改为f=f*js += f; }printf("%ld\n",s); }错误程序的结果为①更正后的结果为②2.已知 f(n)=f(n-1)+2f(n-2)-5f(n-3), f(0)=1,f(1)=2,f(2)=3, 求 f(0)+f(1)+……+f(20)。
程序中有一处错误。
(1) 输入原程序并运行,记录运行结果,将结果填入答题窗口的①。
(程序名由考生自定)(2) 更正程序中的错误,运行更正后的程序,记录运行结果,将结果填入答题窗口的②。
#include "stdio.h"main(){ long f0=1,f1=2,f2=3,f,s,I; s=f0+f1+f2;for (I=1; I<=30应改为I<=20; I++){ f=f2+2*f1-5*f0; s+=f; f0=f1; f1=f2; f2=f;}printf("%ld\n",s);}3. 求解方程 x^2- 7912x +12976 = 0 的最大实根。
程序中有一处错误。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题号:1题目:在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列/************FOUND***********/a[i]=a[i-1];/************FOUND***********/exit;}正确答案:a[i+1]=a[i];break;}题号:2题目:以下程序的功能是求如下表达式:/************FOUND***********/print("%d",n) ;/************FOUND***********/fun(int n)正确答案:scanf(“%d”,&n);float fun(int n)题号:3题目:函数fun的功能是:根据整型形参m的值,计算如下公式的值。
/**********FOUND**********/y-=1/(i*i);/**********FOUND**********/return m;正确答案:y-=1.0/(i*i);return c;题号:4题目:以下程序把一由小到大的有序数列放在a[1]到a[n]中,a[0]用做工作单元,程序把读入的x值插入到a数组中,插入后,数组中的数仍有序。
/************FOUND***********/{ a[i]=a[i+1];/************FOUND***********/for(i=0;i<=n;i++)正确答案:{ a[i+1]=a[i];for(i=1;i<=n;i++)题号:5题目:函数scopy的功能是:将一个字符串前面n个子字符送到一个字符型数组中去,然后再加上一个'\0'。
不用系统提供的函数strcpy。
请改正程序中的2个错误,使它能得出正确的结果。
/**************FOUND**************/scanf("%d",n);/**************FOUND**************/scopy(str1,str2);正确答案:scanf("%d",&n);scopy(str1,str2,n);题号:6题目:函数fun的功能是:求n!。
主函数的功能是计算: x!+y!+z!的值。
请改正程序中的错误,使它能得出正确的结果。
/**********FOUND**********/scanf("%d,%d,%d",x,y,z);/**********FOUND**********/printf("Sum=%d\ n",sum);正确答案:scanf("%d,%d,%d",&x,&y,&z);printf("Sum=%ld\ n",sum);题号:7题目:编写函数fun求整数n以内(不包括n)3的倍数之和,在main函数中由键盘输入n值,并输出运算结果。
/**********FOUND**********/scanf("%d",n);/**********FOUND**********/result=fun( );正确答案:scanf("%d",&n);result=fun(n);题号:8题目:函数fun的功能是:求1到20的阶乘的和。
/**********FOUND**********/s+t=s;/**********FOUND**********/printf("jiecheng=%d\n",s);正确答案:s+=t;printf("jiecheng=%f\n ",s);题号:9题目:函数fun的功能是:输出Fabonacci数列的前20项,要求变量类型定义成浮点型,输出时只输出整数部分,输出项数不得多于或少于20。
/************FOUND***********/f2=f1;/************FOUND***********/f3=f2;正确答案:f1=f2;f2=f3;题号:10题目:函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。
k的值由主函数传入,若k的值为500,则函数值为4622。
/**********FOUND**********/while ((k>=2)||(mc<10))/**********FOUND**********/if((k%13=0)||(k%17=0))正确答案:while ((2<=k)&&(mc<10))if((k%17==0)||(k%13==0))题号:11题目:函数fun的功能是:计算正整数num的各位上的数字之积。
/**********FOUND**********/scanf("%ld", n);/**********FOUND**********/printf("\n%ld\n",fun(long n));正确答案:scanf("%ld", &n);printf("\n%ld\n",fun(n));题号:12题目:函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。
例如,若给num1和num2分别输入49和21,则输出的最大公约数为7。
/************FOUND***********/r=a/b;}/************FOUND***********/return a;正确答案:r=a%b;}return b;题号:13题目:在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。
下列给定程序中,函数fun的功能是:计算数组元素中值为正数的平均值(不包括0)。
/************FOUND***********/int sum=0.0;/************FOUND***********/while(s[i] =0)正确答案:double sum=0.0;while(s[i] !=0)题号:14题目:fun函数的功能是:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线上的元素之和sum。
/**********FOUND**********/a=0;/**********FOUND**********/scanf("%d",a[i][j]);正确答案:sum=0;scanf("%d",&a[i][j]);题号:15题目:fun函数的功能是:实现3行3列矩阵的转置,即行列互换。
/**********FOUND**********/a[i][j]=t;/**********FOUND**********/t=a[j][i];正确答案:t=a[j][i];a[i][j]=t;题号:16题目:fun函数的功能是:求一个3行4列矩阵的外框的元素值之和矩阵元素为1,2,3,4,5,6,7,8,9,10,时……/**********FOUND**********/int i,j,s,s1=s2=s3=s4=0;/**********FOUND**********/s2=s2+a[m][j];正确答案:int i,j,s,s1=0,s2=0,s3=0,s4=0;s2=s2+a[m-1][j];题号:17题目:以下程序输出前六行杨辉三角形,既11 11 2 11 3 3 11 4 6 4 1……………………/***********FOUND***********/if(j==0&&j==i)/***********FOUND***********/a[i][j]=a[i-1][j-1]+a[i][j-1];正确答案:if(j==0||j==i)a[i][j]=a[i-1][j-1]+a[i-1][j];题号:18题目:fun函数的功能是:实现两个字符串的连接。
例如:输入dfdfqe和12345时,则输出dfdfqe12345./**********FOUND**********/s2[j]=s1[i];/**********FOUND**********/s2[j]='\ 0';正确答案:s[i]=s2[j];s1[i]='\0';题号:19题目:fun函数的功能是:给定n个实数,输出平均值,并统计在平均值以下(含平均值)的实数个数。
/**********FOUND**********/for(j=0;j<=n;j++)/**********FOUND**********/return xb;正确答案:for(j=0;j<n;j++)return c;题号:20题目:fun函数的功能是:找出大于m的最小素数,并将其作为函数值返回。
/**********FOUND**********/for(k=1;k<i;k++)/**********FOUND**********/if(i%k!=0) break;正确答案:for(k=2;k<i;k++)if(i%k= =0) break;题号:21题目:将s所指字符串的反序和正序进行连接形成一个新串放在t所指的数组中。
例如:当s所指的字符串的内容为"ABCD"时,t所指数组中的内容为"DCBAABCD"。
/**********FOUND**********/void fun (char s, char t)/**********FOUND**********/d = len(s);正确答案:void fun (char s[], char t[])d = strlen(s);题号:22题目:有一数组内放10个整数,要求找出最小数和它的下标,然后把它和数组中最前面的元素即第一个数对换位置./***********FOUND***********/scanf("%d", a[i]);/***********FOUND***********/for(i=3;i<10;i++)正确答案:scanf("%d", &a[i]);for(i=1;i<10;i++)题号:23题目:有一数组内放10个整数,要求求出所有元素的平均值./***********FOUND***********/for(i=0;i<10;i++)/***********FOUND***********/int score[10],aver ;正确答案:for(i=1;i<10;i++)float score[10],aver ;题号:24题目:一个已排好序的一维数组,输入一个数number,要求按原来排序的规律将它插入数组中./***********FOUND***********/if(number>end) a[11]=number;/***********FOUND***********/if(a[i]<number)正确答案:f(number>end) a[10]=number;if(a[i]>number)题号:25题目:用"起泡法"对输入的十个字符排序后按从小到大的次序输出./***********FOUND***********/scanf("%s",&str);/***********FOUND***********/sort(str[N]);正确答案:scanf("%s",str);sort(str);题号:26题目:函数fun的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。