程序设计练习题及代码
C语言程序设计基础题
3.1鸡兔同笼一共有40只脚,求鸡兔各有多少只,总共有多少种组合。
#include
main()
{
int i,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()
{
int one,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()
{
int A,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=%d B=%d C=%d\n",A,B,C);
}
}
}
}
}
3.4设abcd*e=dcba,(a非0,e非0非1),求满足条件的整数abcd与e
#include
main()
{
int a,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=%d b=%d c=%d d=%d e=%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()
{
int i,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()
{
int x,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()
{
int i,j,k;
int x,y,n,m;
int a[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() { double x1=-10,x2=10,middle; double y1,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() { double H=100,high=0,x=0; int i; 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() { int num=1,i; for(i=10;i>1;i--) { num=(num+1)*2; } printf("第一天共摘%d个桃子\n",num); } 3.11打印形状为直角三角形的九九乘法表 #include main() { int i,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求s =a+aa+aaa+……+aa...a之值(n个a),其中a是一个一位整数. n 如:2+22+222+2222+22222+...... #include void main() { int Sn=0,s=0,a,n; int i; 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利用循环,打印除如下图案。 ab abc abcd { char a[6]={'a','b','c','d','e','f'}; int i,j,x=0; int n=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 int Sum(int n) { int s=0,i; for(i=1;i<=n;i++) { s=s+i; } return s; } void main() { int n,s; scanf("%d",&n); s=Sum(n); printf("前n项和为:%d\n",s); } 2.3 #include int Sum(int n) { int s=0,i,j=1,k=1; for(i=1;i<=n;i++) { s=s+j*k; k=(-1)*k; j=j+2; } return s; } void main() { int n=100,s; s=Sum(n); printf("前100项和为:%d\n",s); } 2.5 #include long Sum(int n) { int i; long s=1; for(i=1;i<=n;i++) { s=s*i; } return s; } void main() { int n; long s=1; scanf("%d",&n); printf("n=%d\n",n); s=Sum(n); printf("n!:%ld\n",s); } 2.6 #include long Sum(int n) { int i; long S=0,s=1; for(i=1;i<=n;i++) { s=s*i; S=S+s; } return S; } void main() { int n; long s=1; scanf("%d",&n); printf("n=%d\n",n); s=Sum(n); printf("和为:%ld\n",s); } 2.9 #include int Prime(int n) { int i,k=1; for(i=2;i { if(n%i==0) { k=0; break; } } return(k?1:0); } void main() { int n,k; scanf("%d",&n); k=Prime(n); if(k==0) { printf("%d不是素数!\n",n); } else { printf("%d是素数!\n",n); } } 2.10 #include #include void Primescope(int n,int m) { int i,j,k; for(i=n;i<=m;i++) { k=0; for(j=2;j { if(i%j==0) { k=0; break; } else k=1; } if(k==1) { printf("%d\n",j); } } } void main() { int n,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 int Num(char *p) { int num=0,word=0,other=0; while(*p!='\0') { if('a'<=*p&&*p<='z'||'A'<=*p&&*p<='Z') { num++; } else if ('0'<=*p&&*p<='9') { word++; } else other++; p++; } printf("字母个数:%d\n",word); printf("数字个数:%d\n",num); printf("其他字符个数:%d\n",other); return num; } void main() { char a[50]; char *p=a; gets(a); Num(p); } 5.2输入一个十六进制数,转换成十进制输出. #include #include int Transform(char a[]) { int i,j,n=0; char *p=a; int x,X=0; while(*p!='\0') { p++; n++; } p--; for(i=0;i { x=(int)*(p--); if(x>57) { switch(x) { case 65:x=10;break; case 66:x=11;break; case 67:x=12;break; case 68:x=13;break; case 69:x=14;break; case 70:x=15;break; default :printf("输入错误!"),exit(0); } } else { x=x-48; } for(j=1;j<=i;j++) { x=x*16; } X=X+x; } return X; } void main() { char a[20]; int X; printf("请输入十六进制数(大写表示):\n"); scanf("%s",a); X=Transform(a); printf("转换后:%d\n",X); } 5.3求Fibonacci数列的前20项.a 1=1,a 2 =1,a 3 =a 1 +a 2 ,..., a n =a n-1 +a n-2 #include void Fibonacci() { int a1=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); } } int main() { int n; Fibonacci(); } 5.4将一个整型数组中的元素逆置. #include void Swap(int a[],int n) { int i,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"); } void main() { int a[]={1,2,3,4,5,6,7,8,9}; int n=sizeof(a)/sizeof(a[0]); Swap(a,n); } 5.5求一个数组中最大、最小元素的值以及下标. #include void Find(int a[],int n) { int i,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); } void main() { int a[]={7,5,3,9,2,1,6,4,8}; int n=sizeof(a)/sizeof(a[0]); Find(a,n); } 5.6求一个数组中的最大、次大元素的值以及下标. #include void Find(int a[],int n) { int i,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); } void main() { int a[]={7,5,3,9,2,1,6,4,8}; int n=sizeof(a)/sizeof(a[0]); Find(a,n); } 5.7已知一个数组中的元素按非递减有序排列,现要向其中插入一个元素,要求数组仍然有序. #include void Insert(int a[],int x,int n) { int i; a[n+1]=x; for(i=8;i>=0&&x { a[i+1]=a[i]; } a[i+1]=x; } void main() { int a[10]={1,3,4,5,7,9,11,13,17}; int i,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 void Wipe(int a[],int n) { int i,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--; } else j++; } } for(i=0;i { printf("%d\n",a[i]); } printf("剩下元素的个数为:%d\n",n); } void main() { int a[9]; int i; for(i=0;i<9;i++) { scanf("%d",&a[i]); } Wipe(a,9); } 5.9将两个按值非递减排列的整型数组合并为一个非递减排列的数组,且值相等的元素只保留一个(即结果数组中没有重复的元素)。 #include void Combine(int a[],int n,int b[],int m,int c[]);//合并模块 void Insert(int a[],int n);//插入排序法 int Wipe(int a[],int n);//去除数组中重复元素 void Combine(int a[],int n,int b[],int m,int c[]) { int i,j=0,num; for(i=0;i { if(i<9) { c[i]=a[i]; } else { c[i]=b[j]; j++; } } Insert(c,n+m);//排序c(插入排非递减排列) num=Wipe(c,n+m);//去除c中重复元素 printf("\n数组c:\n"); for(i=0;i { printf("%d ",c[i]); } printf("\n"); } void Insert(int a[],int n)//插入排序法 { int i,j,t; for(i=1;i { t=a[i]; for(j=i-1;j>=0&&t { a[j+1]=a[j]; } a[j+1]=t; } } int Wipe(int a[],int n) { int i,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--; } else j++; } } return n; } void main() { int a[9],b[9],c[18]; int i; printf("请输入数组a:"); for(i=0;i<9;i++) { scanf("%d",&a[i]); } printf("请输入数组b:"); for(i=0;i<9;i++) { scanf("%d",&b[i]); } printf("数组a:\n"); for(i=0;i<9;i++) { printf("%d ",a[i]); } printf("\n数组b:\n"); for(i=0;i<9;i++) { printf("%d ",b[i]); } Combine(a,9,b,9,c); } 5.10将两个按值非递减排列的整型数组合并为一个非递减排列的数组(即求并集)。 #include void Combine(int a[],int n,int b[],int m,int c[]);//合并模块 void Insert(int a[],int n);//插入排序法 void Combine(int a[],int n,int b[],int m,int c[]) { int i,j=0; for(i=0;i { if(i<9) { c[i]=a[i]; } else { c[i]=b[j]; j++; } } Insert(c,n+m);//排序c(插入排非递减排列) printf("\n数组c:\n"); for(i=0;i { printf("%d ",c[i]); } printf("\n"); } void Insert(int a[],int n)//插入排序法 { int i,j,t;