C语言改错题库.docx
《C语言改错题库.docx》由会员分享,可在线阅读,更多相关《C语言改错题库.docx(26页珍藏版)》请在冰点文库上搜索。
C语言改错题库
C语言改错题库
从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。
例如,当s中的数为:
7654321时,t中
的数为:
7531。
#include
voidmain()
{longs,t,sl=10;
printf("\nPleaseenters:
");
scanf("%ld",&s);
/************found************/
t=s%10;
while(s>0)
{s=s/100;
t=s%10*sl+t;
/************found************/
sl=sl*10;
}
printf("Theresultis:
%ld\n",t);
}
2.求一维数组a中的值为偶数的元素之和。
例如,当一维数组a中的元素为:
10,4,2,7,3,12,5,34,5,9,程序
的输出应为:
Theresultis:
62
#include
#include
voidmain()
{inta[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("Theresultis:
%d\n",s);
}
若用函数调用来求呢?
#include
intsum(intarr[],intn)
{inti,s;
s=0;
for(i=0;iif(arr[i]%2==0)
/************found************/
s=s+arr[i];
return(s);
}
voidmain()
{inta[10]={10,4,2,7,3,12,5,34,5,9},i,s;
/************found************/
s=sum(a,10);
printf("Theresultis:
%d\n",s);
}
3.求二维数组a中的最大值。
例如,当二维数组a中的元素为:
4434
7312
565程序的输出应为:
Themaxis:
34。
#include
intarrmax(intarr[3][3])
{inti,j,max;
max=arr[0][0];
/************found************/
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(maxreturn(max);}
voidmain()
{inta[3][3]={4,4,34,7,3,12,5,6,5},i,j;
/************found************/
printf("Themaxis:
%d\n",arrmax(a));}
若用函数调用呢?
#include
intmax;
maxarr(intarr[])
{intpos,i;
/************found************/
max=arr[0];
pos=0;
for(i=1;i<10;i++)
if(max{max=arr[i];
pos=i;}
/************found************/
return(pos);
}
voidmain()
{inta[10]={34,4,2,7,3,12,5,8,5,9};
printf("Themaxis:
%d,posis:
%d\n",max,maxarr(a));
}
5.猴子第一天摘下若干桃子
当即吃了一半又多吃一个;第二天
将剩下的桃子吃了半又多吃一个,到第12天的早上,只剩下一个
桃子,求第一天共摘了多少桃子。
#include
voidmain()
{inti,j,x,p;
x=1;
/************found************/
j=11;
while(j>=1)
{p=(x+1)*2;
/************found************/
X=p;
j--;
}
printf("totalis%d\n",p);
}
6.将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中。
高位仍在高位,低位仍在低位。
例如,当s中的数为:
87653142时,t中的数为:
8642。
#include
voidmain()
{longs,t,sl=1;
intd;
printf("\nPleaseenters:
");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("Theresultis:
%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
#defineN10
voidmain()
{inta[N]={7,10,12,0,3,6,9,11,5,8},n=10,i,k,m,max,t;
for(i=0;imax=a[0];m=0;
for(k=1;k/************found************/
if(a[k]>max)
{max=a[k];m=k;}
/************found************/
t=a[0];a[0]=a[m];a[m]=t;
for(i=0;iprintf("%d",a[i]);
printf("\n");
}
8.输出200~300之间的所有素数,要求每行输出8个素数。
#include
#include
voidmain()
{intm,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
voidmain()
{inti,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
voidmain()
{inti;
/************found************/
intn=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("\nNumbersare:
%d\n",n);
}
10.输出100~200之间既不能被3整除也不能被7整除的整数并统计这些整数的个数,要求每行输出8个数。
#include
voidmain()
{inti;
/************found************/
intn=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("\nNumbersare:
%d\n",n);
}
11.打印输出以下图形
*
***
*****
*******
*********
#include
voidmain()
{inti,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
voidmain()
/*************found**************/
{floats,t;
intn;
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.输入一个百分制成绩,打印出五级记分成绩。
#includevoidmain()
{intscore,t;
do
scanf("%d",&score);
while(score<0||score>100);
t=score/10;
/*************found**************/
switch(score/10)
{case10:
case9:
printf("Excellent!
\n");break;
case8:
printf("Good!
\n");break;
case7:
printf("Middle!
\n");break;
case6:
printf("Pass!
\n");break;
/*************found**************/
default:
printf("Fail!
\n");}}
14.求一维数组a中值为奇数的元素的平均值。
#include
doubleaverage(intarr[],intn)
{intk=0,i;doubles;
s=0;
for(i=0;i/************found************/
if(arr[i]%2==1)
{s=s+arr[i];k++;}
return(s/k);}
main()
{inta[12]={10,4,2,7,3,12,5,34,5,9,21,18};
doubles;
/************found************/
s=average(a,12);
printf("Theresultis:
%.2f\n",s);
}
15.将[m,n]之间的所有素数存放到一维数组a中,并输出。
#include
#include
prime(intm)
{intj,k;
k=sqrt(m);
for(j=2;j<=k;j++)
if(m%j==0)return(0);
return
(1);}
voidmain()
{inta[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
floataverage(a,n)
/************found************/
inta[],n;
{intj;floataver;
/************found************/
floats=0;
for(j=0;js+=a[j];
aver=s/n;
return(aver);}
main()
{inta[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
voidmain()
{inta[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
程序的输出应为:
Theaveris:
9.10。
#include
voidmain()
{inta[10]={10,4,2,7,3,12,5,34,5,9},i;
/************found************/
floataver,s;
/************found************/
s=a[0];
for(i=1;i<10;i++)
s+=a[i];
aver=s/i;
printf("Theaveris:
%.2f\n",aver);
}
19.当M为5时,如果从键盘上输入的5个数
分别为:
1、2、3、4、5时,输出应为:
12321。
当M为10时,如果从键盘上输入的10个数
分别为:
1、2、3、4、5、6、7、8、9、10时,
输出应为:
1234554321。
#defineM5
voidmain()
{inti,a[100],t;
/**************found************/
for(i=0;iscanf("%d",&a[i]);
for(i=0;i/**************found************/
a[M-i-1]=a[i];
for(i=0;iprintf("%5d",a[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
voidmain()
{inti,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
#defineM11
voidmain()
{inta[M],i;
for(i=0;iscanf("%d",&a[i]);
/************found************/
a[M-1]=a[0];
for(i=1;i/************found************/
if(a[M-1]a[M-1]=a[i];
printf("Maxis%d\n",a[M-1]);
}
22.求排列组合的值
求Cmn=——————之值。
n!
*(m-n)!
#include
longintfun(intx)
{longints=1;inti;
for(i=1;i<=x;i++)
s*=i;
/************found************/
return(s);
}
voidmain()
{longintm=12,n=2,s1,s2,s3;
s1=fun(m);s2=fun(n);s3=fun(m-n);
/************found************/
printf(“cmnis:
%ld",s1/(s2*s3));}
23.计算正整数num的各位上的数字之和。
若输入:
202,则输出应该是:
4。
voidmain()
{
intnum,k;
/************found************/
k=0;
printf("\Pleaseenteranumber:
");
scanf("%d",&num);
do
{
/************found************/
k=k+num%10;
num/=10;}
while(num);
printf("\n%d\n",k);
}
24.从键盘上输入一个正整数n,计算并输出n的阶乘。
例如,如果从键盘上输入8,程序的运行结果应为:
Theresultis:
40320。
#include
longfac(intn)
{inti;
longt=1;
for(i=2;i<=n;i++)
t=t*i;
return(t);
}
voidmain()
{intn;
longints;
printf("Enteranintegernumber:
");
/************found************/
scanf("%d",&n);
s=fac(n);
/************found************/
printf("Theresultis:
%ld\n",s);
}
25.从键盘上输入一个数字组成的字符串(字符串长度小于8),将该字符串转换成一个十进制数.例如:
从键盘上输入2345,
则程序运行的结果应当为:
n=2345。
#include"stdio.h"
voidmain()
{chars[10];inti;
longintn=0;
/**************found************/
scanf("%s",s);或gets(s);
/**************found************/
for(i=0;i='\0';i++)
n=n*10+s[i]-'0';
printf("n=%ld\n",n);
}
26.求一维数组a中素数的个数。
例如:
如果数组a的元素为:
2,3,5,7,8,9,10,11,12,13,
则程序的输出应为:
primenumber(s)is(are):
6。
#include
voidma