程序改错题库
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 从低位开始取出长整型变量s中奇数位上的数,依次构成
一个新数放在t中。 例如,当s中的数为:7654321时,t 中
的数为:7531。
#include
void main( )
{ long s, t, sl=10;
printf("\nPlease enter s:");
scanf("%ld", &s);
/************found************/
t = s % 10;
while ( s > 0)
{ s = s/100;
t = s%10 * sl + t;
/************found************/
sl = sl*10;
}
printf("The result is: %ld\n", t);
}
2.求一维数组a中的值为偶数的元素之和。
例如,当一维数组a中的元素为:10,4,2,7,3,12,5,34,5,9 ,程序
的输出应为: The result is: 62
#include
#include
void main()
{ int a[10]={10,4,2,7,3,12,5,34,5,9},i,s;
s = 0;
for ( i=0; i<10; i++)
/************found************/
if (a[i] % 2 == 0)
s = s + a[i];
/************found************/
printf("The result is: %d\n", s);
}
若用函数调用来求呢?
#include
int sum ( int arr[ ],int n )
{ int i,s;
s = 0;
for ( i=0; i
/************found************/
s = s + arr[i];
return (s);
}
void main()
{ int a[10]={10,4,2,7,3,12,5,34,5,9},i,s;
/************found************/
s = sum( a ,10 );
printf("The result is: %d\n", s);
}
3.求二维数组a中的最大值。 例如,当二维数组a中的元素为:
4 4 34
7 3 12
5 6 5 程序的输出应为:The max is: 34 。
#include
int arrmax( int arr[3][3])
{ int i,j,max;
max=arr[0][0];
/************found************/
for ( i=0; i<3; i++)
for ( j=0; j<3; j++)
if (max < arr[i][j]) max = arr[i][j];
return (max); }
void main()
{ int a[3][3]={4,4,34,7,3,12,5,6,5},i,j;
/************found************/
printf("The max is: %d\n",arrmax(a)); }
若用函数调用呢?
#include
int max;
maxarr(int arr[ ])
{ int pos,i;
/************found************/
max =arr[ 0];
pos = 0;
for ( i=1; i<10; i++)
if (max < arr[i])
{ max = arr[i];
pos = i; }
/************found************/
return (pos);
}
void main()
{ int a[10]={34,4,2,7,3,12,5,8,5,9};
printf("The max is: %d ,pos is: %d\n", max , maxarr(a));
}
5.猴子第一天摘下若干桃子,当即吃了一半又多吃一个;第二天
将剩下的桃子吃了半又多吃一个,到第12天的早上,只剩下一个
桃子,求第一天共摘了多少桃子。
#include
void main()
{ int i,j,x,p;
x=1;
/************found************/
j=11;
while(j>=1)
{ p=(x+1)*2;
/************found************/
X=p;
j--;
}
printf("total is %d\n",p);
}
6. 将长整型数中每一位上为偶数的数依次取出,构成
一个新数放
在t中。高位仍在高位,低位仍在低位。
例如,当s中的数为:87653142时,t中的数为:8642。
#include
void main()
{ long s, t, sl=1;
int d;
printf("\nPlease enter s:"); scanf("%ld", &s);
t = 0;
while ( s > 0)
{ d = s%10;
/************found************/
if (d%2==0)
{ t=d * sl + t;
sl *= 10; }
/************found************/
s /= 10; }
printf("The result is: %ld\n", t); }
7.求出a所指数组中最大数(规定最大数不在a[0]中),最大值和a[0]中的数
对调。例如数组中原有的数为:7、10、12、0、3、6、9、11、5、8,
输出的结果为:12、10、7、0、3、6、9、11、5、8。
#include
#define N 10
void main( )
{ int a[N]={7,10,12,0,3,6,9,11,5,8}, n=10, i, k,m,max,t;
for ( i = 0; i
for ( k = 1; k
if ( a[k]>max )
{ max = a[k]; m = k; }
/************found************/
t = a[0]; a[0]=a[m]; a[m] = t;
for ( i=0; i
printf("\n");
}
8.输出200~300之间的所有素数,要求每行输出8个素数。
#include
#include
void main()
{ int m,j,n=0,k;
for(m=200;m<=300;m++)
{ k=sqrt(m);
for(j=2;j<=k;j++)
/************found************/
if(m%j==0) break;
if(j>k)
{ if(n%8==0) printf("\n");
/************found************/
printf("%6d",m);
n++;}
} }
9.打印九九乘法表
#include
void main()
{ int i,j,k;
for(i=1;i<=9;i++)
/************found************/
{ for(j=1;j<=i;j++)
printf("%3d *%3d =%3d",i,j,i*j);
/************found************/
printf("\n");
}
} {for(j=1;j<=i;j++) printf("\n");
10.输出100~200之间既不能被3整除也不能被7整除的
整数并统计这些整数的个数,要求每行输出8个数。
#include
void main()
{ int i;
/************found************/
int n=0;
for(i=100;i<=200;i++)
{
/************found************/
if(i%3!=0&&i%7!=0)
{ if(n%8==0) printf("\n");
printf("%6d",i);
n++; } }
printf("\nNumbers are: %d\n",n);
}
10.输出100~200之间既不能被3整除也不能被7整除的
整数并统计这些整数的个数,要求每行输出8个数。
#include
void main()
{ int i;
/************found************/
int n=0;
for(i=100;i<=200;i++)
{
/************found************/
if(i%3!=0&&i%7!=0)
{ if(n%8==0) printf("\n");
printf("%6d",i);
n++; } }
printf("\nNumbers are: %d\n",n);
}
11.打印
输出以下图形
*
* * *
* * * * *
* * * * * * *
* * * * * * * * *
#include
void main()
{ int i,j;
for(i=1;i<=5;i++)
/************found************/
{ printf( "\n ");
for(j=1;j<=10-i;j++)
printf(" ");
/************found************/
for(j=1;j<=2*i-1;j++)
printf("*"); }
printf("\n");
}
12.求:1!+2!+3!+ …… + 20!
#include
void main()
/*************found**************/
{float s,t;
int n;
s=0;t=1;
/*************found**************/
for(n=0;n<20;n++)
{ t=t*(n+1);
s=s+t; }
printf("1!+2!+3!+ … +20!=%e\n",s);
}
13.输入一个百分制成绩,打印出五级记分成绩。
#include
{ int score,t;
do
scanf("%d",&score);
while(score<0||score>100);
t=score/10;
/*************found**************/
switch(score/10)
{ case 10:
case 9:printf("Excellent!\n");break;
case 8:printf("Good!\n");break;
case 7:printf("Middle!\n");break;
case 6:printf("Pass!\n");break;
/*************found**************/
default :printf("Fail!\n"); } }
14.求一维数组a中值为奇数的元素的平均值。
#include
double average( int arr[ ], int n )
{ int k=0,i; double s;
s = 0;
for ( i=0 ;i
if (arr[i] % 2 == 1)
{ s = s + arr[i]; k++; }
return (s/k) ; }
main()
{ int a[12]={10,4,2,7,3,12,5,34,5,9,21,18};
double s;
/************found************/
s = average(a,12);
printf("The result is: %.2f\n", s);
}
15.将[m,n]之间的所有素数存放到一维数组a中,并输出。
#include
#include
prime (int m)
{ int j,k;
k=sqrt(m);
for ( j=2; j<=k; j++)
if (m % j == 0) return (0);
return (1); }
void main()
{ int a[100],i,c=0,m,n,t;
scanf("%d%d",&m,&n);
if(m>n) {t=m;m=n;n=t;}
/************found************/
for (i=m; i<=n; i++)
/************found************/
if(prime(i)==1)
{ a[c]=i;
printf("%4d",a[c]);
c++; } }
16.求一维数组a中所有元素的平均值。
#include
float average( a,n)
/************found************/
{ int a[],n;
int j; float aver;
/************found************/
float s=0;
for ( j=0; j
aver = s / n;
return (aver); }
main()
{ int a[12]={10,4,2,7,3,12,5,34,5,9,6,8};
printf("Theaverageis:%.2f\n",average(a,12));
}
17.将[2,100]之间的所有素数存放到一维数组a中,
并输出这些素数。
#include
#include
void main()
{ int a[100],i,j,k,m;
m = 0;
for ( i=2; i<=100; i++)
{ k=sqrt(i);
for ( j=2; j<=k; j++)
if (i % j == 0)
/**********
**found************/
break;
/************found************/
if(j >= k+1)
a[m++] = i;
for(i=0;i
18.求一维数组a中所有元素的平均值,结果保留两位小数。
例如,当一维数组a中的元素为:10,4,2,7,3,12,5,34,5,9
程序的输出应为:The aver is: 9.10 。
#include
void main()
{ int a[10]={10,4,2,7,3,12,5,34,5,9},i;
/************found************/
float aver,s;
/************found************/
s =a[0];
for ( i=1; i<10; i++)
s += a[i];
aver = s / i;
printf("The aver is: %.2f\n", aver);
}
19. 当M为5时,如果从键盘上输入的5个数
分别为:1、2、3、4、5时,输出应为:1 2 3 2 1。
当M为10时,如果从键盘上输入的10个数
分别为:1、2、3、4、5、6、7、8、 9、10 时,
输出应为:1 2 3 4 5 5 4 3 2 1。
#define M 5
void main( )
{ int i,a[100],t;
/**************found************/
for(i=0;i
for(i=0;i
a[M-i-1]=a[i];
for(i=0;i
printf("\n");
}
20. 在第一个循环中给a数组的前10个数组元素依次赋1、2、3、4、5、6、7、8、9、10;在第二个循环中使a数组前10个元素中的值对称折叠,变成1、2、3、4、5、5、4、3、2、1;在最后一个循环中输出对称折叠以后的a数组的前10个元素。
#include
void main( )
{ int i,a[10];
for(i=1;i<=10;i++)
/**************found************/
a[i-1]=i;
for(i=0;i<5;i++)
/**************found************/
a[10-i-1]=a[i];
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
}
21. 把数组a(大小为M)中前M-1个元素中的最大值放入a的最后一个元素中。
#include
#define M 11
void main()
{ int a[M],i;
for(i=0;i
/************found************/
a[M-1]=a[0];
for(i=1;i
if(a[M-1]a[M-1]=a[i];
printf("Max is %d\n",a[M-1]);
}
22.求 Cmn= —————— 之值。
n! * (m-n)!
#include
long int fun(int x)
{long int s=1; int i;
for (i=1;i<=x;i++)
s*=i;
/************found************/
return(s);
}
void main()
{ long int m=12,n=2,s1,s2,s3;
s1=fun(m); s2=fun(n); s3=fun(m-n);
/************found************/
printf(“cmn is : %ld",s1/(s2*s3) ); }
23. 计算正整数num的各位上的数字之和。
若输入:202,则输出应该是:4。
void main( )
{
int num,k;
/************found************/
k=0;
printf("\Please enter a number:") ;
scanf("%d",&num) ;
do
{
/************found************/
k=k+num%10 ;
num/=10; }
while(num) ;
printf("\n%d\n",k) ;
}
24.从键盘上输入一个正整数n,计算并输出n的阶乘。
例如,如果从键盘上输入8,程序的运行结果应为:The result is: 40320。
#include
long fac( int n )
{ int i;
long t=1;
for( i=2;i<=n;i++)
t = t*i;
return (t);
}
void main()
{ int n;
long int s;
printf("Enter an integer number:");
/************found************/
scanf("%d",&n);
s = fac(n);
/************found************/
printf("The result is : %ld\n",s);
}
25.从键盘上输入一个数字组成的字符串(字符串长度小于8),将该字符串转换成一个十进制数. 例如:从键盘上输入2345,
则程序运行的结果应当为:n=2345。
#include "stdio.h"
void main()
{ char s[10]; int i;
long int n=0;
/**************found************/
scanf("%s",s); 或gets(s);
/**************found************/
for(i=0;i
printf("n=%ld\n",n);
}
26. 求一维数组a中素数的个数。
例如:如果数组a的元素为:2,3,5,7,8,9,10,11,12,13,
则程序的输出应为:prime number(s) is(are): 6。
#include
void main()
{ int a[10]={2,3,5,7,8,9,10,11,12,13},i,j,k,count;
count = 0;
for ( i=0; i<10; i++)
{ k=sqrt(a[i]);
for ( j=2; j<=k; j++)
if (a[i] % j == 0) break; /************found************/
if(j>=k+1) count++;
}
/************found************/
printf("prime number(s) is(are): %d",count);
}
27.输出Fabonacci数列:1,1,2,3,5,8,……的
前20项的值,要求每行输出5个数。
#include "stdio.h"
void main()
{ long int f[20]={1,1};
int i;
/**************found************/
printf("%8ld%8ld ",f[0],f[1]);
for(i=2;i<20;i++)
{
f[i]=f[i-1]+f[i-2];
/**************found************/
if(i%5==0) printf("\n");
printf("%8ld",f[i]);
}
}
28.求一维数组a中非素数之和。
例如:如果数组a的元素为:2,3,5,7,8,9,10,11,12,13,15,17,
则程序的输出应为:Sum is: 54。
#include
#include
void main()
{ int a[12]={2,3,5,7,8,9,10,11,12,13,15,17},i,j,k,s;
s = 0;
for ( i=0; i<12; i++)
{
k=sqrt(a[i]);
for ( j=2;j <= k; j++)
/************found************/
if (a[i]% j == 0)
break;
/************found************/
if( j<=k )
s += a[i];
}
printf("Sum is: %d",s);
}
29.求两个正整数m,n之间的非素数之和(包含m和n)。
例如:如果数组m=2,n=20,则程序的输出应为:Sum is: 132。
#include
#include
void main()
{ int m=2,n=20,i,j,k,sum;
/************found************/
sum=0;
for ( i=m; i<=n; i++)
{ k=sqrt(i);
for (j=2;j <= k; j++)
if (i % j == 0) break;
/************found************/
if(j<=k ) sum += i;
}
printf("Sum is: %d\n",sum);
}
30.将无符号八进制数字构成的字符串转换为十进制整数。
例如,输入的字符串为:556,则输出十进制整数366。
#include
void main()
{ char s[6]; int n=0,j=0;
/************found************/
gets(s);
/************found************/
while(s[j]!=’\0’)
{ n=n*8+s[j]-’0’;
j++; }
printf("%d\n",n);
}
31.计算1到M(M为100)之间的奇数之和及偶数之和。程序运行结果为: sum of evens is 2550
sum of odds is 2500
#include
#define M 100
void main()
{ int a,b,c,i;
a=0;c=0;
/**************found************/
for(i=1;i<=M;i+=2)
{ a+=i;
/**************found************/
b=i+1;
c+=b; }
printf("sum of evens is %d\n",c);
printf("sum of odds is %d\n",a);
}
32.实现在N行M列的二维数组中,找出每一行上的最大值,且原数组值不变。 例如:如果二维数组元素的值为:
1 5 7 4
2 6 4 3
8 2 3 1
时,程序的运行结果应为:The max value in line 0 is 7
The max value in line 1 is 6
The max value in line 2 is 8
#define M 4
#define N 3
void main()
{ int i,j,p,x[N][M]={1,5,7,4,2,6,4,3,8,2,3,1};
/************found************/
for(i=0;i
for(j=0;j
x[i][p]=x[i][j]; 或p=j;
printf("The max value in line %d is %d\n",i,x[i][p]);
}
}
33.查找n在数组a中最后一次出现的位置。
例如:如果a数组中的元素为:1,5,2,5,6,8,7,4,3,0,
当n=5时,程序的输出结果为:5 is No.3 。
当n=10时,程序的输出结果应为:10 not found !。
#include
void main( )
{ int a[10]={1,5,2,5,6,8,7,4,3,0};
int i,k,n,f=0;
scanf("%d",&n);
for(i=0;i<10;i++)
/************found************/
if(n==a[i])
{ f=1;
/************found************/
k=i; }
if (f) printf("%d is No. %d\n", n,k);
else printf(" %d not found !\n",n);
}
34.求两个正整数x,y的最小公倍数。
例如:如果x=24,y=36,程序的输出应为:min is : 72。
#include
#include
void main()
{ int x,y,t,i;
printf("Please enter two numbers:");
scanf("%d,%d",&x,&y);
if(x > y) {t = x; x = y; y = t;}
/************found************/
for ( i=y; i<=x*y ;i++)
{
if(i%x==0 && i%y==0 )
break; }
/************found************/
printf("min is : %d",i);
}
35.求两个正整数x,y的最大公约数和最小公倍
数。
例如:如果x=24,y=36,程序的输出应为: max is : 12, min is : 72 。
#include
#include
void main()
{ int x,y,t,max,min,i,n1,n2;
scanf("%d,%d",&x,&y);
if(x > y) {t = x; x = y; y = t;}
n1=x; n2=y;
t = n2 % n1;
/************found************/
while( t!=0) 或while(t)
{ n2 = n1 ;
n1 = t ;
t = n2 % n1; }
/************found************/
max = n1 ;
min = x * y / max ;
printf("max is : %d\n",max);
printf("min is : %d\n",min);
}