C语言程序改错答案
C语言程序改错题库
int i,j; char t; for(j=1;j<N;j++)
/***********FOUND***********/ for(i=0;i<N-j;i--)
/***********FOUND***********/ if(str[i]<str[i+1]) {
/**********FOUND**********/ int i;j; /**********FOUND**********/ for(i=1; i < 3; i++)
for(j=0; j < 3; j++) /**********FOUND**********/ array[i][j]=array[i][j]/5;
第 3 题 (10.0 分) /*------------------------------------------------------
} } for(p=str;*p;p++) {
for(q=p;*p==*q;q++); strcpy(p+1,q); } printf("结果字符串:%s\n\n",str); getch(); } 答案:
#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; }
C语言改错题答案
改错题(一)1.Cmody.011.C,功能是:从字符串数组str1中取出ASCII码值为偶数且下标为偶数的字符依次存放到字符串t中。
如:若str1所指的字符串为:4Az18c?Ge9a0z! 则t所指的字符串为:4z8z注意:数组下标从0开始#include <math.h>#include <stdio.h>#include <string.h>#include <conio.h>void main(){char str1[100],t[200];int i,j;/**/ i=0;j=o;/**/strcpy(str1,"4Az18c?Ge9a0z!");for(i=0;i<strlen(str1);i++){/**/ if((str1[i]%2==0)&&(i%2!==0)) /**/{t[j]=str1[i];j++;}}t[j]='\0';printf("\nOriginal string :%s\n",str1);printf("\nResult string :%s\n",t);}2.Cmody012.C,fun()功能:根据n,计算大于10的最小n个能被3整除的正整数的倒数之和。
如:fun(8)=1/12+1/15+1/18+1/21+1/24+1/27+1/30+1/33=0.396#include <math.h>#include <stdio.h>#include <string.h>#include <conio.h>#define M 50double fun(int n){double y=0.0;int i,j;j=0;for(i=1;;i++){/**/ if(i<>10)&&(i%3==0)) /**/{ /**/ y+=1 1.0/i; /**/j++;}if(j==n) break;}return y;}void main(){printf("fun(8)=%8.3lf\n",fun(8));}(二)1.Cmody021.C,输出:*************************#include <stdio.h>void main(){/**/int i;,j; /**/for(i=1;i<=5;i++){for(j=1;j<=10-2*i;j++) printf(" ");/**/ for(j=1;j<=52*i-1;j++) /**/printf("*");printf("\n");}}2.Cmody022.C的功能是求解百元买百鸡问题:设一只公鸡2元,一只母鸡1元,一只小鸡0.5元。
C语言程序改错题及答案
#include <string.h>
#include <stdlib.h>
void main()
{ int n,i;
/***** 1 *****/
char str;// char*str
scanf("%d\n",&n); str=(char*)malloc(n); gets(str);
int a[N]={5,4,3,2,1,9,8,7,6,0};
printf("\nThe array is:\n"); /*输出数组元素*/
for (i=0;i<N;i++)
printf("%5d",a[i]);
for (i=0;i<N-1;i++ห้องสมุดไป่ตู้ /*排序操作*/
{
min = i;
for (j=i+1; j<N; j++)
/****** 2 *****/
putchar(\n);//‘\n’
}
}
12、在考生目录下,有Modify.c程序,该程序中“/***** N *****/”的下一行中有错误,
请改正(注意:不得加行、减//行、加句、减句,否则后果自负)。
该程序功能:输入n以及小于n个字符的字符串,将字符串中所有小写字母改为相应的大写字母后,输出该字符串。
}
11、在考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下
一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)
程序改错完整版---C语言
(一)功能:用选择法对数组中的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语言
(一)功能:用选择法对数组中的 #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个字符,以相反顺序打印出来。
大学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程序填空改错及答案(可编辑修改word版)
15、结果:52
#include<stdio.h> int fun(int a,int b) { int r,t;
if(a<b) { t=a; a=b; b=t; } r=a%b; while(r!=0) { a=b;
b=r; /*下行有错*/ r=a/b; // r=a%b; } /*下行有错*/ return a; // return b; } main() { int a; a=fun(780,208); printf("%d\n",a); }
#include<stdio.h> void main() {
int num,a,b,c,count=0; /*下行有错*/ while(num=101;num<1000;num++) // for(num=101;num<1000;num++) {
a=num/100; b=num%100/10; c=num%10; /*下行有错*/ if(num+c*100+b*10+a=1333) // if(num+c*100+b*10+a==1333)
if(a%b==0) sum=sum+a/b; } for(i=2;i<=9;i++) if(sum==a*i) /*下行有错 */ count+=i; //count+=1; } printf("%d\n",count); }
7、结果:495.00
#include<stdio.h> float fun(int m, int n) {
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). a.c='a';2). printf("%d,%c",a.x,a.c);3). b.c='y';题⽬:下列程序中,函数fun的功能是:先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后⾯。
例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:“ABCDEEDCBA”。
答案:1). for(i=0;i2). t[sl+i]=s[sl-i-1];3). t[sl+i]='\0';题⽬:编写函数fun其功能是在键盘上输⼊⼀个3⾏3列矩阵的各个元素的值(值为整数),然后输出矩阵第⼀⾏与第三⾏元素之积,并在fun()函数中输出。
答案:1). sum=1;2). for(i=0;i<3;i+=2) 或 for(i=0;i<3;i=i+2) 或 for(i=0;i<3;i++,i++)3). sum=sum*a[i][j]; 或 sum*=a[i][j];题⽬:函数fun的功能是:⽤下⾯的和式求圆周率的近似值。
直到最后⼀项的绝对值⼩于等于0.0001。
π 1 1 1— = 1 - — + — - — + ...2 3 5 7请改正程序中的错误,使它能得出正确的结果。
答案:1). #include "math.h"2). float s=0,t=1,p=1; 或 float s=0,p=1,t=1; 或 float p=1,s=0,t=1; 或 float p=1,t=1,s=0; 或 float t=1,p=1,s=0; 或 float t=1,s=0,p=1;3). while(fabs(t)>1e-4) 或 while(0.00010.0001)4). printf("pi=%f\n",★s★*★4★);题⽬:给定程序MODI1.C中函数fun的功能是:将长整型数中每⼀位上为奇数的数依次取出,构成⼀个新数放在t中。
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语言程序改错题
第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语言期末考试复习资料-程序改错部分试题及答案
/*------------------------------------------------------【程序改错】--------------------------------------------------------功能:求如下表达式:1 1 1S = 1 + —— + ——— + ...... + ———————1+2 1+2+3 1+2+3+......+n ------------------------------------------------------*/#include <stdio.h>main(){int n;double fun();printf("Please input a number:");/**********FOUND**********/print("%d",n) ;printf("%10.6f\n",fun(n));}/**********FOUND**********/fun(int n){int i,j,t;double s;s=0;/**********FOUND**********/while(i=1;i<=n;i++);{t=0;for(j=1;j<=i;j++)t=t+j;/**********FOUND**********/=s+1/t;}return s;}/*------------------------------------------------------【程序改错】--------------------------------------------------------功能:判断m是否为素数,若是返回1,否则返回0。
------------------------------------------------------*/#include <stdio.h>/**********FOUND**********/void fun( int n){int i,k=1;if(m<=1) k=0;/**********FOUND**********/for(i=1;i<m;i++)/**********FOUND**********/if(m%i=0) k=0;/**********FOUND**********/return m;}void main(){int m,k=0;for(m=1;m<100;m++)if(fun(m)==1){printf("%4d",m);k++;if(k%5==0) printf("\n");}}/*------------------------------------------------------【程序改错】--------------------------------------------------------功能:用下面的和式求圆周率的近似值。
C语言改错题答案(精选)
改错题答案第1题读入一个整数k(2<=k<=1000),打印它的所有质因子(即所有为素数的因子)。
第1处:IsPrime(int n);应改为IsPrime(int n)第2处:if!(n%i)应改为if(!(n%i))第2题fun函数的功能是:逐个比较a、b两个字符串对应位置中的字符,把ASCII值大于或相等的字符依次存放到c数组中,形成一个新的字符串。
第1处:int k=1;应改为int k=0;第2处:while(*p!=*q)应改为while(*p||*q)第3题fun函数的功能:是依次取出字符串中所以数字字符,形成新的字符串并取代原符串第1处:s[j]=s[i];应改为s[j++]=s[i];第2处:s[j]="\0";应改为s[j]='\0';第4题fun函数的功能;分别统计字符串中大写字母和小写字母的个数第1处:void fun(char*s,int a,int b)应改为void fun(char*s,int*a,int*b)第2处:a++;应改为(*a)++;第3处:b++;应改为(*b)++;第5题假定整数数列中的数不重复,并存放在数组中。
第1处:a[i+1]=a[i];应改为a[i]=a[i+1];第6题计算如下公式的值t=1-1/2*2-1/3*3-…1/m*m第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题在字符串str中找出ASCII码值最大的字符将其放在第一个位置上;并将该字符前的原字符向后顺序移动。
第1处:void fun(char*p);应改为void fun(char*p)第2处:p=q+i;应改为q=p+i;第9题从n个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。
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程序改错题――有答案
c程序改错题――有答案试卷编号:10578 所属语言:C语言试卷方案:TC_150522153552 试卷总分:440分共有题型:1种一、程序改错共44题(共计440分)第1题(10.0分)题号:380 难度:中第2章 /*------------------------------------------------------ 【程序改错】--------------------------------------------------------功能:输入两个双精度数,函数返回它们的平方和的平方根值。
例如:输入:22.936 和 14.121,输出为:y = 26.934415。
------------------------------------------------------*/#include #include #include/**********FOUND**********/double fun (double *a, *b)//double fun(double *a,double *b) {double c;/**********FOUND**********/ c = sqr(a*a + b*b);//sqrt/**********FOUND**********/ return *c; }main ( ) {double a, b, y;printf ( \scanf (\ y = fun (&a, &b); printf (\}第2题(10.0分)题号:438 难度:中第2章 /*------------------------------------------------ 【程序改错】--------------------------------------------------功能:编写函数fun,求两个整数的最小公倍数,然后用主函数main()调用这个函数并输出结果,两个整数由键盘输入。
计算机二级C语言改错题答案
第1题void fun (char *s, char *t){ int i, sl;sl = strlen(s);/************found************/for( i=0; i<=s1; i ++)t[i] = s[i];for (i=0; i<sl; i++)t[sl+i] = s[sl-i-1];/************found************/t[sl] = '\0';}答案:(1)for( i=0; i<=sl-1; i ++) (2)t[sl+i] = '\0'; 第2题/************found************/void fun (long s, long t){ long sl=10;*t = s % 10;while ( s > 0){ s = s/100;*t = s%10 * sl + *t;/************found************/sl = sl*100;}}main(){ long s, t;printf("\nPlease enter s:"); scanf("%ld", &s);fun(s, &t);printf("The result is: %ld\n", t);}答案:(1)void fun (long s, long *t) (2)sl = sl*10;第3题void fun ( int n, int *a ){ int i, j, p, t;for ( j = 0; j<n-1 ; j++ ){ p = j;/************found************/for ( i=j+1; i<n-1 ; i++ )if ( a[p]>a[i] )/************found************/t=i;if ( p!=j ){ t = a[j]; a[j] = a[p]; a[p] = t; }}}答案:(1)for ( i=j+1; i<n ; i++ ) (2)p=i; 第4题void fun (long s, long *t){ int d;long sl=1;*t = 0;while ( s > 0){ d = s%10;/************found************/if (d%2=0){ *t=d* sl+ *t;sl *= 10;}/************found************/s \= 10;}}答案:(1)if (d%2 = = 0) (2)s /= 10;第5题long fun (long num){/************found************/long k;do{ k*=num%10 ;/************found************/num\=10 ;} while(num) ;return (k) ;}答案:(1)long k=1; (2)num /=10 ;第6题/************found************/fun (char a){ if ( *a ){ fun(a+1) ;/************found************/printf("%c" *a) ;}}main( ){ char s[10]="abcd";printf("处理前字符串=%s\n处理后字符串=", s);fun(s); printf("\n") ;}答案:(1)fun (char *a) (2)printf("%c", *a) ; 第7题void fun(int a[], int n){ int i, j, t, p;for (j = 0 ;j < n-1 ;j++) {/************found************/p = jfor (i = j+1;i < n; i++)if(a[i] < a[p])/************found************/p = j;t = a[p] ; a[p] = a[j] ; a[j] = t;}}答案:(1)p = j ;(2)p = i;第8题fun ( char *p){ int i,t; char c[80];/************found************/For (i = 0,t = 0; p[i] ; i++)if(!isspace(*(p+i))) c[t++]=p[i];/************found************/c[t]="\0";strcpy(p,c);}答案:(1)f or (i = 0,t = 0; p[i] ; i++) (2)c[t]='\0'; 第9题char * fun (char *s, char *t ){char *p , *r, *a;/************found************/a = Null;while ( *s ){ p = s; r = t;while ( *r )/************found************/if ( r == p ){ r++; p++; }else break;if ( *r == '\0' ) a = s;s++;}return a ;}答案:(1) a = NULL; (2)if ( *r == *p ) 第10题void fun (char *s, char *t1, char *t2 , char *w) {char *p , *r, *a;strcpy( w, s );while ( *w ){ p = w; r = t1;/************found************/while ( r )if ( *r == *p ) { r++; p++; }else break;if ( *r == '\0' ){ a = w; r = t2;while ( *r ){/************found************/*a = *r; a++; r++}w += strlen(t2) ;}else w++;}}答案:(1)while ( *r ) (2)*a = *r; a++; r++; 第11题int fun (char *s, char *t){int n; char *p , *r;n = 0;while ( *s ){ p = s; r = t;while ( *r )if ( *r == *p ) {/************found************/r++; p++}else break;/************found************/if ( r == '\0' )n++;s++;}return n;}答案:(1)r++; p++;(2)if ( *r == '\0' )第12题/************found************/IsPrime ( int n );{ int i, m;m = 1;for ( i = 2; i < n; i++ )/************found************/if !( n%i ){ m = 0; break ; }return ( m );}main( ){ int j, k;printf( "\nPlease enter an integer number between 2 and 10000: " ); scanf( "%d", &k );printf( "\n\nThe prime factor(s) of %d is( are ):", k );for( j = 2; j <= k; j++ )if( ( !( k%j ) )&&( IsPrime( j ) ) ) printf( "\n %4d", j );printf("\n");}答案:(1)IsPrime ( int n ) (2)if ( n%i = =0)第13题long fun ( int k){/************found************/if k > 0return (k*fun(k-1));/************found************/else if ( k=0 )return 1L;elsereturn 1L;}答案:(1)if ( k > 0 )(2)else if ( k= =0 )第14题void fun ( char str[][10], int m, char *pt ){/************found************/Int k, q, i ;for ( k = 0; k < m; k++ ){ q = strlen ( str [k] );for (i=0; i<q; i++)/************found************/pt[i] = str[k,i] ;pt += q ;pt[0] = 0 ;}}答案:(1)i nt k, q, i ;if ( k > 0 )(2)pt[i] = str[k][i] ;第15题/**********found**********/void fun ( int a, b ){ int t;/**********found**********/t = b; b = a ; a = t;}main ( ){ int a, b;printf ( "Enter a , b : "); scanf ( "%d,%d", &a, &b );fun ( &a , &b ) ;printf (" a = %d b = %d\n ", a, b );}答案:(1)void fun ( int *a, int *b ) (2)t = *b; *b = *a ; *a = t; 第16题void fun ( int * a, int n ){ int i, m, t, k ;for(i=0;i<2;i++) {/**********found**********/m=0;for(k=i+1;k<n;k++)/**********found**********/if(a[k]>a[m]) k=m;t=a[i];a[i]=a[m];a[m]=t;}}答案:(1)m= i ; (2)if(a[k]>a[m]) m=k;第17题/**********found**********/void fun(char str, char ch ){ while ( *str && *str != ch ) str++;/**********found**********/if ( *str = = ch ){ str [ 0 ] = ch;/**********found**********/str[1] = '0';}}main( ){ char s[81], c ;printf( "\nPlease enter a string:\n" ); gets ( s );printf ("\n Please enter the character to search : " );c = getchar();fun(s, c) ;printf( "\nThe result is %s\n", s);}答案:(1)void fun(char *str, char ch ) (2)if (*str!= ch) (3)str[1] = '\0';评析】(1)fun函数中先设置了二个循环从字符串str中寻找字符ch,如果找到则中断循环并保留字符ch的地址,否则一直循环到串尾"。
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语言改错题以及参考答案
改错参考答案:(3)将字符串yy在屏幕上输出#include<stdio.h>void main(){/*********Found************/ char yy[100] = "ok??\n";/*********Found************/f0r (; *yy; yy++){putchar(*yy);}}#include<stdio.h>void main(){/*********Found************/ char*yy="ok??\n";/*********Found************/for (; *yy; yy++){putchar(*yy);}}(4)计算半径为2+3的圆的面积#include<stdio.h>#define PI3."14/*********Found************/#define S(r) PI*r*rvoid main(){/*********Found************/ int mianJi;mianJi = S(2+3);printf("mian ji=%5."2f\n", mianJi);}#include<stdio.h>#define PI3."14/*********Found************/#define S(r) PI*(r)*(r)void main(){/*********Found************/1floatmianJi; mianJi = S(2+3);printf("mian ji=%5."2f\n", mianJi);}(8)打开文件d:\te.c用于读并判断打开是否成功#include<stdio.h>void main(){FILE *fp;/*********Found************/char fileName[] = "d:\te.c";/*********Found************/fp = fopen(fileName, "w");/*********Found************/if (fp == EOF){puts("File Open Error!");exit(1);}putchar(fgetc(fp));fclose(fp);}#include<stdio.h>void main(){FILE *fp;/*********Found************/char fileName[] = "d:\\te.c";/*********Found************/fp = fopen(fileName, "r");/*********Found************/if (fp ==NULL){puts("File Open Error!");exit(1);}putchar(fgetc(fp));fclose(fp);}(9)申请100个字节的内存空间,显示其首地址,然后释放申请到的内存空间#include<stdio.h>#include<alloc.h>void main(){/*********Found************/char p[100];2/*********Found************/if (p = (char *)malloc(100) == NULL){printf("malloc memory fail!\n");return ;}printf("%p\n", p);/*********Found************/fclose(p);}#include<stdio.h>#include<alloc.h>void main(){/*********Found************/ char*p;/*********Found************/if ((p = (char *)malloc(100))== NULL){printf("malloc memory fail!\n"); exit(1);}printf("%p\n", p);/*********Found************/free(p);}(10)将字符串p显示在屏幕上#include<stdio.h>/*********Found************/#define BEGIN/*********Found************/#define ENDvoid main(){char *p = "";const int i = 0;for (printf("\n"); p[i]; )BEGINputchar(p[i]);i++;END}#include<stdio.h>/*********Found************/#define BEGIN{/*********Found************/#define END}3void main(){char *p = "";const int i = 0;for (printf("\n"); p[i]; )BEGINputchar(p[i]);/*********Found************/p++;END}(14)调用函数swap,将a和b的值交换,最后在屏幕上显示交换后的a,b之值#include<stdio.h>/*********Found************/void swap(int x, int y){int tmp;/*********Found************/______*x = *y;/*********Found************/y = x;}void main(){int a = 3, b = 4;swap(a, b);printf("a=%d b=%d\n", a, b);}#include<stdio.h>/*********Found************/void swap(int*x, int*y){int tmp;/*********Found************/tmp = *x;*x = *y;/*********Found************/*y = tmp;}void main(){int a = 3, b = 4;/*********Found************/swap(&a,&b);printf("a=%d b=%d\n", a, b);}4(15)调用函数swap,将a和b的值交换,最后在屏幕上显示交换后的a,b之值#include<stdio.h>void swap(int *x, int *y){int *tmp, xy;/*********Found************/*tmp = x;*x = *y;/*********Found************/y = *tmp;}void main(){int a = 3, b = 4;/*********Found************/swap(*a, *b);/*********Found************/printf("a=%d b=%d\n", &a, &b);}#include<stdio.h>void swap(int *x, int *y){int *tmp, xy;/*********Found************/xy=*x;*x = *y;/*********Found************/*y =xy;}void main(){int a = 3, b = 4;/*********Found************/swap(&a,&b);/*********Found************/printf("a=%d b=%d\n",a,b);}(16)worker的信息使用结构体存储,从键盘读入其各项信息并显示#include<stdio.h>void main(){struct WKER{long ID;long int num;char name[20];5char sex;/*********Found************/} ;worker.ID = 1L;/*********Found************/scanf("%d %s %s", &worker.num, , &worker.sex);/*********Found************/printf("worker's info:num=%d name=%s sex=%s\n",worker.num, , worker.sex);}#include<stdio.h>void main(){struct WKER{long ID;long int num;char name[20];char sex;/*********Found************/}worker;worker.ID = 1L;/*********Found************/scanf("%ld %s %c", &worker.num, ,&worker.sex);/*********Found************/printf("worker's info:num=%ld name=%s sex=%c\n",worker.num, , worker.sex);}(17)函数userLogin的功能主要是统计并返回登录的用户数,用户名最长30字节#include <stdio.h>long userLogin(char *userName){/*********Found************/long userCount = 0;userCount++;/*********Found************/return ;}void main( ){/*********Found************/char *userName;int i;while(1){printf("userName:");scanf("%s", userName);i = userLogin(userName);6}}#include <stdio.h>long userLogin(char *userName){/*********Found************/ staticlong userCount = 0;userCount++;/*********Found************/returnuserCount;}void main( ){/*********Found************/ charuserName[31];int i;while(1){printf("userName:");scanf("%s", userName);i = userLogin(userName);}}(19)将inBuf中字符串拆分成一个个的单词/*单词之间的分隔符由串divChar,程序中定义为“;?!,.>/\”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目:编写函数fun计算下列分段函数的值:
x*x+x x<0且x≠-3
f(x)= x*x+5x 0≤x<10且x≠2及x≠3
x*x+x-1 其它
答案:
3). while(fabs(t)>1e-4) 或 while(0.0001<fabs(t)) 或 while(1e-4<fabs(t)) 或 while(fabs(t)>0.0001)
4). printf("pi=%f\n",★s★*★4★);
题目:给定程序MODI1.C中函数fun的功能是:将长整型
2). for( i = 100; i <= m; i += 100 )
3). y += 1.0 / d ;
题目:给定程序MODI1.C中函数fun的功能是:
将长整型数中每一位上为偶数的数依次取出,
构成一个新数放在t中。高位仍在高位,低位
仍在低位。
2 3 5 7
请改正程序中的错误,使它能得出正确的结果。
答案:
1). #include "math.h"
2). float s=0,t=1,p=1; 或 float s=0,p=1,t=1; 或 float p=1,s=0,t=1; 或 float p=1,t=1,s=0; 或 float t=1,p=1,s=0; 或 float t=1,s=0,p=1;
3). b.c='y';
题目:利用条件运算符的嵌套来完成此题:学习
成绩>=90分的同学用A表示,60-89分之间
的用B表示,60分以下的用C表示。
答案:
1). char grade;
2). scanf("%d",&score);
题目:下题是一段有关结构体变量传递的程序.
答案:
1). a.c='a';
2). printf("%d,%c",a.x,a.c);
3). b.c='y';
题目:下列程序中,函数fun的功能是:先将在字符
串s中的字符按正序存放到t串中,然后把s中
3). pt += q ; 或 pt=★pt★+★q★;
请改正程序中的错误,使它能得出正确的结果。
答案:
1). float xa=0; 或 float xa=0.0;
2). for(j=0;j<n;j++) 或 for(j=0;n>j;j++) 或 for(j=0;n-1>=j;j++) 或 for(j=0;j<=n-1;j++)
例如,当s中的数为:87653142时,t中的数为:
8642。
答案:
1). if(★d%2★==★0★)
2). { *t=d* sl+ *t;
3). s/=10; 或 s=s/10;
题目:编写函数fun求20以内所有5的倍数之积。
3). b.c='y';
题目:给定程序函数 fun 的功能是:删除
字符串s中的所有空白字符(包括Tab字符、回车
符及换行符)。输入字符串时用'#'结束输入。
答案:
1). for (i = 0,t = 0; p[i] ; i++)
2). if(!isspace(*(p+i))) c[t++]=p[i];
成一个新串,放入pt所指字符串中。
例如:
把3个串:"abc","CD","EF"串连起来,结
果是The result is : abcCDEF。
答案:
1). int k, q, i;
2). pt[i] = str[k][i] ;
3). c[t]='\0';
题目:给定程序MODI1.C中函数 fun 的功能是:
统计字符串中各元音字母(即:A、E、I、
O、U)的个数。注意:字母不分大、小写。
例如:若输入:THIs is a boot,则输
出应该是:1、0、2、2、0。
3). s /= 10; 或 s=s/10
题目:fun函数的功能是:给定n个实数,输出平均值,并统计
在平均值以下(含平均值)的实数个数。例如,n=6时,
输入23.5, 45.67, 12.1, 6.4,58.9, 98.4所得平均值
为40.828335,在平均值以下的实数个数应为3。
数中每一位上为奇数的数依次取出,构成一个新
数放在t中。高位仍在高位,低位仍在低位。
例如,当s中的数为:87653142时,t中的数为:
7531。
答案:
1). *t = 0;
2). if(d%2) 或 if(d%2!=0) 或 if((d%2)!=0)
框元素值之和应为65。
请改正程序中的错误,使它能得出正确的结果。
答案:
1). int i,j,s,s1=0,s2=0,s3=0,s4=0;
2). s2=★s2★+★a[m-1][j]★; 或 s2+=a[m-1][j];
3). for(i=1;i<m-1;i++) 或 for(i=1;i<-1+m;i++) 或 for(i=1;m-1>i;i++) 或 for(i=1;-1+m>i;i++) 或 for(i=1;i<=m-2;i++) 或 for(i=1;m-2>=i;i++)
的字符按逆序连接到t串的后面。
例如:当s中的字符串为:“ABCDE”时,
则t中的字符串应为:“ABCDEEDCBA”。
答案:
1). for(i=0;i<sl;i++)
2). t[sl+i]=s[sl-i-1];
3). t[sl+i]='\0';
答案:
1). num[k]=0;
2). switch(*s)
3). if (i >= 0)
题目:fun函数的功能是:求一个3行4列矩阵的外框的元素值之
和,注意,矩阵四个角上的元素不能重复加。例如,矩阵
元素为1,2,3,4,5,6,7,8,9,10,11,12时,四
答案:
1). int ★s=1★,★i★;
2). if(i%m==0)
3). s=s*i 或 s=i*s 或 s*=i
题目:下题是一段有关结构体变量传递的程序.
答案:
1). a.c='a';
2). printf("%d,%c",a.x,a.c);
3). grade=score>=90?'A':(score>=60?'B':'C');
题目:给定程序MODI1.C中函数 fun 的功能是:输入两
个双精度数,函数返回它们的平方和的平方根值。
例如输入:22.936 和 14.121,输出为:y
= 26.934415。
答案:
1). int i,j;
2). for(j=i+1;j<num;j++)
3). ห้องสมุดไป่ตู้ if(s[i]<s[j])
题目:下题是一段有关结构体变量传递的程序.
答案:
1). a.c='a';
2). printf("%d,%c",a.x,a.c);
题目:编写函数fun其功能是在键盘上输入一个3行3列矩阵
的各个元素的值(值为整数),然后输出矩阵第一行
与第三行元素之积,并在fun()函数中输出。
答案:
1). sum=1;
2). for(i=0;i<3;i+=2) 或 for(i=0;i<3;i=i+2) 或 for(i=0;i<3;i++,i++)
根据整型形参 m,计算某一数据项的值。
y = 1/(100*100)+1/(200*200)+
1/(300*300) + …… + 1/(m*m)
例如,若m = 2000,则应输出: 0.000160。
答案:
1). double fun ( int m )
3). sum=sum*a[i][j]; 或 sum*=a[i][j];
题目:函数fun的功能是:用下面的和式求圆周率的近似值。直
到最后一项的绝对值小于等于0.0001。
π 1 1 1
— = 1 - — + — - — + ...
3). for(j=0;j<n;j++) 或 for(j=0;n>j;j++) 或 for(j=0;j<=n-1;j++) 或 for(j=0;n-1>=j;j++)
4). return c; 或 return (c);
题目:给定程序MODI1.C中函数 fun 的功能是:
1). float y;