程序设计练习题及代码.docx
《程序设计练习题及代码.docx》由会员分享,可在线阅读,更多相关《程序设计练习题及代码.docx(63页珍藏版)》请在冰豆网上搜索。
程序设计练习题及代码
C语言程序设计基础题
3.1鸡兔同笼一共有40只脚,求鸡兔各有多少只,总共有多少种组合。
#include
main()
{
inti,j,x=0;
for(i=0;i<=10;i++)
{
for(j=0;j<=20;j++)
{
if((4*i+2*j)==40)
{
printf("兔的只数为:
%d鸡的只数:
%d\n",i,j);
x++;
}
}
}
Printf("组合数:
%d\n",x);
}
3.2换零钱.把一元钱全兑换成硬币(1分2分5分),有多少种兑换方法
#include
main()
{
intone,two,five;
for(one=1;one<=100;one++)
{
for(two=0;two<=50;two++)
{
for(five=0;five<=20;five++)
{
if(one+2*two+5*five==100)
{
printf("一分:
%d二分:
%d五分:
%d\n",one,two,five);
}
}
}
}
}
3.3已知A>B>C>0,A,B,C为整数,且A+B+C<100。
求满足1/A2+1/B2=1/C2的A,B,C共有多少组。
#include
main()
{
intA,B,C;
for(A=1;A<100;A++)
{
for(B=1;B<100;B++)
{
for(C=1;C<100;C++)
{
if(((A+B+C)<100)&&((1.0/(A*A))+(1.0/(B*B))==(1.0/(C*C))))
{
printf("A=%dB=%dC=%d\n",A,B,C);
}
}
}
}
}
3.4设abcd*e=dcba,(a非0,e非0非1),求满足条件的整数abcd与e
#include
main()
{
inta,b,c,d,e;
for(a=1;a<9;a++){
for(b=0;b<9;b++){
for(c=0;c<9;c++){
for(d=0;d<9;d++){
for(e=2;e<9;e++){
if(((a*1000+b*100+c*10+d))*e==(d*1000+c*100+b*10+a)){
printf("a=%db=%dc=%dd=%de=%d\n",a,b,c,d,e);
}
}
}
}
}
}
}
3.5因子之和等于它本身的数为完数。
如:
28的因子是1,2,4,7,14,且1+2+4+7+14=28,则28为完数。
求[2,1000]中的完数。
#include
main()
{
inti,j,x;
for(i=2;i<=1000;i++)
{
x=0;
for(j=1;j
{
if(i%j==0)
{
x=x+j;
}
}
if(x==i)
{
printf("%d\n",i);
}
}
}
3.6将一个整数分解为1、质因子或本身之积。
如5=1*5,8=1*2*2*2
#include
main()
{
intx,i=2,j;
scanf("%d",&x);
printf("%d=1",x);
while(x!
=1)
{
if(x%i==0)
{
printf("*%d",i);
x=x/i;
}
else
{
i++;
}
}
}
3.7求1000以内亲密数对。
亲密数对的定义是:
若正整数a的所有因子之和为b,b的所有因子之和为a,且a!
=b,则称ab互为亲密数对。
如:
220的因子之和1+2+4+…+110=284
284的因子之和1+2+…+142=220
#include
main()
{
inti,j,k;
intx,y,n,m;
inta[100],b[100];
for(i=7;i<1000;i++)
{
x=0,y=0,n=0,m=0;
for(j=2;j
{
if(i%j==0)
{
a[n++]=j;
x=x+j;
}
}
for(j=2;j{
if(x%j==0)
{
b[m++]=j;
y=y+j;
}
}
if(y==i&&i{
printf("%d的因子之和为:
1",i);
for(k=0;k{
printf("+%d",a[k]);
}
printf("=%d\n",x);
printf("%d的因子之和为:
1",x);
for(k=0;k{
printf("+%d",b[k]);
}
printf("=%d\n\n\n",y);
}
}
}
3.8用二分法求方程在(-10,10)之间的根.2x3-4x2+3x-6=0
#include
#include
main()
{
doublex1=-10,x2=10,middle;
doubley1,y2,ym;
while((x2-x1)>=0.00001)
{
middle=(x1+x2)/2;
y1=2*pow(x1,3)-4*pow(x1,2)+3*x1-6;
y2=2*pow(x2,3)-4*pow(x2,2)+3*x2-6;
ym=2*pow(middle,3)-4*pow(middle,2)+3*middle-6;
if((y1/ym)>0)
{
x1=middle;
}
else
x2=middle;
}
printf("%lf\n",(x1+x2)/2);
}
3.9一个球从100米的高度自由落下,每次落地后反跳回原高度的一半,再落下.求它在第10次落地后,共经过多少米?
第10次反弹多高?
#include
main()
{
doubleH=100,high=0,x=0;
inti;
for(i=1;i<=10;i++)
{
x=x+H+high;
H=H/2;
high=H;
}
printf("共经过多少米:
%f米\n第10次反弹多高度:
%f米\n",x,H);
}
3.10猴子吃桃子.猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天将剩下的桃子吃掉一半,又多吃了一个.以后每天都吃了前一天剩下的一半零一个.到第十天再想吃时,发现只剩下一个桃子.求第一天共摘多少桃子?
#include
main()
{
intnum=1,i;
for(i=10;i>1;i--)
{
num=(num+1)*2;
}
printf("第一天共摘%d个桃子\n",num);
}
3.11打印形状为直角三角形的九九乘法表
#include
main()
{
inti,j,x;
for(i=1;i<10;i++)
{
for(j=1;j<=i;j++)
{
x=j*i;
printf("%d*%d=%2d",j,i,x);
}
printf("\n");
}
}
3.12求sn=a+aa+aaa+……+aa...a之值(n个a),其中a是一个一位整数.
如:
2+22+222+2222+22222+......
#include
voidmain()
{
intSn=0,s=0,a,n;
inti;
printf("请输入a,n:
\n");
scanf("%d",&a);
scanf("%d",&n);
for(i=0;i{
s=s+a;
Sn=Sn+s;
s=s*10;
}
printf("Sn=%d\n",Sn);
}
3.13利用循环,打印除如下图案。
a
ab
abc
abcd
#include
voidmain()
{
chara[6]={'a','b','c','d','e','f'};
inti,j,x=0;
intn=sizeof(a)/sizeof(a[0]);
printf("n=%d",n);
printf("模式一:
\n");
for(i=0;i<6;i++)
{
for(j=0;j<=i;j++)
{
printf("%c",a[j]);
}
printf("\n");
}
printf("模式二:
\n");
for(i=0;i<3;i++)
{
for(j=0;j<2-i;j++)
{
printf("");
}
for(j=0;j
{
printf("%c",a[x]);
x++;
}
printf("\n");
}
printf("模式三:
\n");
x=0;
for(i=0;i<3;i++)
{
for(j=0;j<2-i;j++)
{
printf("");
}
for(j=0;j
{
printf("%c",a[x]);
x++;
}
printf("\n");
}
}
4.1用函数(传值和传址两种方式)实现2.2,2.3,2.5,2.6,2.9,2.10.
2.2
#include
intSum(intn)
{
ints=0,i;
for(i=1;i<=n;i++)
{
s=s+i;
}
returns;
}
voidmain()
{
intn,s;
scanf("%d",&n);
s=Sum(n);
printf("前n项和为:
%d\n",s);
}
2.3
#include
intSum(intn)
{
ints=0,i,j=1,k=1;
for(i=1;i<=n;i++)
{
s=s+j*k;
k=(-1)*k;
j=j+2;
}
returns;
}
voidmain()
{
intn=100,s;
s=Sum(n);
printf("前100项和为:
%d\n",s);
}
2.5
#include
longSum(intn)
{
inti;
longs=1;
for(i=1;i<=n;i++)
{
s=s*i;
}
returns;
}
voidmain()
{
intn;
longs=1;
scanf("%d",&n);
printf("n=%d\n",n);
s=Sum(n);
printf("n!
:
%ld\n",s);
}
2.6
#include
longSum(intn)
{
inti;
longS=0,s=1;
for(i=1;i<=n;i++)
{
s=s*i;
S=S+s;
}
returnS;
}
voidmain()
{
intn;
longs=1;
scanf("%d",&n);
printf("n=%d\n",n);
s=Sum(n);
printf("和为:
%ld\n",s);
}
2.9
#include
intPrime(intn)
{
inti,k=1;
for(i=2;i{
if(n%i==0)
{
k=0;
break;
}
}
return(k?
1:
0);
}
voidmain()
{
intn,k;
scanf("%d",&n);
k=Prime(n);
if(k==0)
{
printf("%d不是素数!
\n",n);
}
else
{
printf("%d是素数!
\n",n);
}
}
2.10
#include
#include
voidPrimescope(intn,intm)
{
inti,j,k;
for(i=n;i<=m;i++)
{
k=0;
for(j=2;j
{
if(i%j==0)
{
k=0;
break;
}
elsek=1;
}
if(k==1)
{
printf("%d\n",j);
}
}
}
voidmain()
{
intn,m;
printf("请输入想要的素数范围:
\n");
scanf("%d",&n);
scanf("%d",&m);
printf("%d到%d范围内的素数为:
\n",n,m);
if(n>=m)
{
printf("输入错误!
\n");
exit(0);
}
Primescope(n,m);
}
5.1输入一个字符串,求字母,数字其它字符的个数.
#include
intNum(char*p)
{
intnum=0,word=0,other=0;
while(*p!
='\0')
{
if('a'<=*p&&*p<='z'||'A'<=*p&&*p<='Z')
{
num++;
}
elseif('0'<=*p&&*p<='9')
{
word++;
}
elseother++;
p++;
}
printf("字母个数:
%d\n",word);
printf("数字个数:
%d\n",num);
printf("其他字符个数:
%d\n",other);
returnnum;
}
voidmain()
{
chara[50];
char*p=a;
gets(a);
Num(p);
}
5.2输入一个十六进制数,转换成十进制输出.
#include
#include
intTransform(chara[])
{
inti,j,n=0;
char*p=a;
intx,X=0;
while(*p!
='\0')
{
p++;
n++;
}
p--;
for(i=0;i{
x=(int)*(p--);
if(x>57)
{
switch(x)
{
case65:
x=10;break;
case66:
x=11;break;
case67:
x=12;break;
case68:
x=13;break;
case69:
x=14;break;
case70:
x=15;break;
default:
printf("输入错误!
"),exit(0);
}
}
else
{
x=x-48;
}
for(j=1;j<=i;j++)
{
x=x*16;
}
X=X+x;
}
returnX;
}
voidmain()
{
chara[20];
intX;
printf("请输入十六进制数(大写表示):
\n");
scanf("%s",a);
X=Transform(a);
printf("转换后:
%d\n",X);
}
5.3求Fibonacci数列的前20项.a1=1,a2=1,a3=a1+a2,...,an=an-1+an-2
#include
voidFibonacci()
{
inta1=1,a2=1,i,t;
printf("%d\n",a1);
printf("%d\n",a2);
for(i=3;i<=20;i++)
{
t=a2;
a2=a1+a2;
a1=t;
printf("%d\n",a2);
}
}
intmain()
{
intn;
Fibonacci();
}
5.4将一个整型数组中的元素逆置.
#include
voidSa[],intn)
{
inti,t;
printf("\n逆置前:
\n\t");
for(i=0;i{
printf("%d",a[i]);
}
for(i=0;i<(n/2);i++)
{
t=a[n-i-1];
a[n-i-1]=a[i];
a[i]=t;
}
printf("\n逆置后:
\n\t");
for(i=0;i{
printf("%d",a[i]);
}
printf("\n");
}
voidmain()
{
inta[]={1,2,3,4,5,6,7,8,9};
intn=sizeof(a)/sizeof(a[0]);
S);
}
5.5求一个数组中最大、最小元素的值以及下标.
#include
voidFind(inta[],intn)
{
inti,max=0,min=0;
for(i=0;i{
if(a[i]>a[max])
{
max=i;
}
if(a[i]{
min=i;
}
}
printf("最大值%d下标:
%d\n",a[max],max);
printf("最小值%d下标:
%d\n",a[min],min);
}
voidmain()
{
inta[]={7,5,3,9,2,1,6,4,8};
intn=sizeof(a)/sizeof(a[0]);
Find(a,n);
}
5.6求一个数组中的最大、次大元素的值以及下标.
#include
voidFind(inta[],intn)
{
inti,max=0,secondly=0;
for(i=0;i{
secondly=i;
if(a[i]>a[max])
{
max=i;
}
}
printf("最大值%d下标:
%d\n",a[max],max);
printf("次大值%d下标:
%d\n",a[secondly],secondly);
}
voidmain()
{
inta[]={7,5,3,9,2,1,6,4,8};
intn=sizeof(a)/sizeof(a[0]);
Find(a,n);
}
5.7已知一个数组中的元素按非递减有序排列,现要向其中插入一个元素,要求数组仍然有序.
#include
voidInsert(inta[],intx,intn)
{
inti;
a[n+1]=x;
for(i=8;i>=0&&x{
a[i+1]=a[i];
}
a[i+1]=x;
}
voidmain()
{
inta[10]={1,3,4,5,7,9,11,13,17};
inti,n,x;
n=sizeof(a)/sizeof(a[0]);
printf("请输入要插入的元素:
");
scanf("%d",&x);
Insert(a,x,8);
printf("\n");
for(i=0;i{
printf("%d\n",a[i]);
}
}
5.8将一个整型数组中重复的元素删除,并计算剩下元素的个数。
#include
voidWipe(inta[],intn)
{
inti,j,k,t;
for(i=0;i{
t=a[i];
for(j=i+1;j{
if(a[j]==t)
{
for(k=j;k{
a[k]=a[k+1];
}
n--;
}
elsej++;
}
}
for(i=0;i{
printf("%d\n",a[i]);
}
printf("剩下元素的个数为:
%d\n",n);
}
voidmain()
{
inta[9];
inti;
for(i=0;i<9;i++)
{
scanf("%d",&a[i]);
}
Wipe(a,9);
}
5.9将两个按值非递减排列的整型数组合并为一个非递减排列的数组,且值相等的元素只保留一个(即结果数组中没有重复的元素)。
#include
voidCombine(inta[],intn,intb[],intm,intc[]);//合并模块
voidInsert(inta[],intn);//插入排序法
intWipe(inta[],intn);//去除数组中重复元素
voidCombine(inta[],intn,intb[],intm,intc[])
{
inti,j=0,num;
for(i=0;i{
if(i<9)
{
c[i]=a[i];
}
else
{
c[i]=b[j];
j