勾股弦的编程c语言,C语言编程小练习 基础

​​​​第一题:求[666,777]范围内素数的个数。16

#include

#include

void main()

{ int i,n=0,j;

for (i=666;i<=777;i++)

{

for (j=2;j<=sqrt(i);j++)

if

(i%j==0) break;

if

(j>sqrt(i)) {n++; printf("]",i);}

}

printf("\n]",n);

}

第二题:求方程X^3-2X-5=0在区间[1.5,2.5]上的一个实根。要求:按四舍五入的方式精确到小数点后第二位。

2.09

#include

#include

void main()

{

float x,x0=2.0,f,f0;

do

{

x=x0;

f=x*x*x-2*x-5;

f0=3*x*x-2;

x0=x-f/f0;

}

while(fabs(x-x0)>=1e-6);

printf("%.2f",x);

}

第三题:求1/2+2/3+3/5+5/8+……的前1000项的和(注:该数列从第二项开始,其分子等于前一项的分母,而其分母等于前一项分子与分母之和)。要求:按四舍五入的方式精确到小数点后第二位。617.95

#include

#include

void main()

{

int

i;

double

n=1,m=2,d,sum=0;

for(i=1;i<=1000;i++)

{

sum+=n/m;

d=m;

m+=n;

n=d;

}

printf("1/2+2/3+3/5+5/8+……的前1000项的和为%.2lf\n",sum);

}

第四题:一个数如果刚好与它所有的因子之和相等,则称该数为一个“完数”,如:6=1+2+3,则6就是一个完数。求出200到500之间所有的完数之和。

496

#include

void main()

{

int

a,b,c=0,s=0;

for(a=200;a<500;a++)

{

s=0;

for(b=1;b

{

if(a%b==0)

s+=b;

}

if(s==a)

c+=a;

}

printf("%d\n",c);

}

第五题:求Y=1-1/2+1/3-1/4+...-1/2*n前30项之和。要求:按四舍五入的方式精确到小数点后第二位。0.68

#include

#include

void main()

{

int

i;

float

n=1,m=1,sum=0;

for(i=2;i<=29;i++)

{

sum+=n;

m=-m;

n=m/i;

}

printf("Y=1-1/2+1/3-1/4+...-1/2*n……前30项之和为%.2lf\n",sum);

}

第六题:已知24有8个正整数因子(即:1,2,3,4,6,8,12,24),而24正好被其因子个数8整除。求[1,100]之间第10个能被其因子数目整除的正整数。

56

#include

void main()

{

int i,n,j,k=0;

clrscr();

for (i=1;i<=100;i++)

{

n=0;

for

(j=1;j<=i;j++)

if

(i%j==0)

n++;

if

(i%n==0)

{

k++;

printf("]",i);

}

if

(k==10)

{

printf("\n]",i);

break;

}

}

}

第七题:倒勾股数是满足公式:

1/A^2+1/B^2=1/C^2的一组正整数(A,B,C),例如,(156,65,60)是倒勾股数,因为:1/156^2+1/65^2=1/60^2。假定A>B>C,求A,B,C均小于或等于100的倒勾股数有多少组?

5

#include

#include

void main()

{ int i,n=0,j,k;

for (i=1;i<=100;i++)

for

(j=i;j<=100;j++)

for

(k=j;k<=100;k++)

if(fabs(1.0/(k*k)+1.0/(j*j)-1.0/(i*i))<1e-10)

{

n++;printf("%d,%d,%d\n",i,j,k); }

printf("%d\n",n);

}

第八题:已知Fibonacci数列:1,1,2,3,5,8,……,它可由下面公式表述:

F(1)=1

if n=1  F(2)=1 if

n=2

F(n)=F(n-1)+F(n-2)

ifn>2试求F(1)+F(2)+……+F(50)值。

提示:最好使用递推法求解,因为使用递归调用很可能超出某些语言的递归深度。

32951280098

#include

main()

{  int i;

double

f[50]={1,1},s=0;

for(i=2;i<50;i++)

f[i]=f[i-2]+f[i-1];

for(i=0;i<50;i++)

{

if(i%2==0)printf("\n");

s=s+f[i];

printf(".0f",f[i]);

}printf("\n.0f",s);

}

第九题:有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13....

(注:该数列从第二项开始,其分子是前一项的分子与分母的和,而其分母是前一项的分子),

求出这个序列前24项的和。要求:按四舍五入的方式精确到小数点后第二位。

39.13

#include

main()

{  float

s1=2,s2=1,s,t=0,i;

t=t+s1/s2;

for

(i=1;i<=23;i++)

{

s=s1;

s1=s1+s2;

s2=s;

t=t+s1/s2;

}

printf("%.2f",t);

}

第十题:已知24有8个正整数因子(即:1,2,3,4,6,8,12,24),而24正好被其因子个数8整除。问[100,300]之间有多少个能被其因子数目整除的数。

19

#include

void main()

{ int i,n,j,k=0;

clrscr();

for (i=100;i<=300;i++)

{n=0;

for

(j=1;j<=i;j++)

if

(i%j==0) n++;

if

(i%n==0)

{

k++; printf("]",i);}

}printf("\n]",k);

}

第十一题:自然数对是指两个自然数的和与差都是平方数,如8和17的和8+17=25与其差17-8=9都是平方数,则称8和17是自然数对(8,17)。假定(A,B)与(B,A)是同一个自然数对且假定A>=B,求所有小于或等于100(即:A<=100,B<=100)的自然数对中B之和。

1160

#include "stdio.h"

#include "math.h"

void main()

{ int a,b,n=0;float s1,s2;

for(b=1;b<=100;b++)

for

(a=b+1;a<=100;a++)

{

s1=sqrt(a+b);s2=sqrt(a-b);

if

( s1==(int)s1 && s2==(int)s2

)

{

n=n+b;printf("%d,%d\t\t",a,b);} }

printf("\n%d",n);

}

第十二题:水仙花数是一个三位正整数,它等于它的各位数字的立方之和.

例如:153=1^3+5^3+3^3,所以153是水仙花数.试求有多少个水仙花数?

4

#include "stdio.h"

void main()

{ int i,a,b,c,n=0;

for(i=100;i<=999;i++)

{

a=i/100;

b=(i/10);

c=i;

if

(i==a*a*a+b*b*b+c*c*c)

{

n++;printf("]",i);}

}

printf("\n%d",n);

}

第十三题:勾股弦数是满足公式:

A^2+B^2=C^2

(假定A的一组正整数(A,B,C),

例如,(3,4,5)是勾股弦数,因为:3^2+4^2=5^2。

求A,B均小于25且A+B+C<=100的勾股弦数的个数。11

#include

#include

void main()

{ int i,n=0,j,k;

for (i=1;i<=25;i++)

for

(j=i;j<=25;j++)

for

(k=j;k<=100;k++)

if

(i*i+j*j==k*k &&

i+j+k<100)

{

n++;printf("%d,%d,%d\n",i,j,k); }

printf("%d\n",n);

}

第十四题:设有6个十进制数字a,b,c,d,f,e,求满足abcdf×e=fdcba条件的五位数abcdf(a≠0,e≠0,e≠1)的个数。

2

#include

void main()

{ long int a,b,c,d,e,f,n=0;

for

(e=2;e<=9;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(f=0;f<=9;f++)

if

((a*10000+b*1000+c*100+d*10+f)*e==f*10000+d*1000+c*100+b*10+a)

{printf("%ld,%ld,%ld,%ld,%ld,%ld\n",a,b,c,d,f,e);

n++; }

printf("\n%ld",n);

}

第十五题:勾股弦数是满足公式: A^2+B^2=C^2

(假定A的一组正整数(A,B,C),

例如,(3,4,5)是勾股弦数,因为:3^2+4^2=5^2。求A,B,C均小于或等于100的勾股弦数中A+B+C的最大值。

240

#include

#include

void main()

{ int i,j,k,i1=0,j1=0,k1=0;

for (i=1;i<=100;i++)

for

(j=i;j<=100;j++)

for

(k=j;k<=100;k++)

if

(i*i+j*j==k*k )

{

printf("%d,%d,%d,%d\n",i,j,k,i+j+k);

if

(i+j+k>i1+j1+k1)

{i1=i;j1=j;k1=k;}

}

printf("\n%d\n",i1+j1+k1);

}

第十六题:设某四位数的各位数字的平方和等于100,问共有多少个这种四位数?

49

#include

#include

void main()

{ int i,n=0,a,b,c,d;

for (i=1000;i<=9999;i++)

{a=i/1000;

b=(i00)/100;

c=((i00)/10);

d=i;

if

(a*a+b*b+c*c+d*d==100 )

{

n++;printf("%d,%d,%d,%d\t\t",a,b,c,d);

}

}

printf("\n%d",n);

}

第十七题:所谓“同构数”是指这样一个数,它出现在它的平方数的右侧,例如5的平方是25,25的平方是625,故5和25都是同构数,求[1,1000]之间所有同构数的个数和总和。7,1114

#include

int main()

{

int

i,sum=0,c=0;

for(i=1;i<=1000;i++)

{

if((i*i)==i||(i*i)0==i||(i*i)00==i)

{

c+=1;

sum+=i;

}

}

printf("count=%d,sum=%d\n",c,sum);

return

0;

}

第十八题:已知A且A,B为正整数,求满足个条件A×B=716699且A+B最小的A值。

#include

#include

#include

void main()

{

int

a,b,min=716700,mina=1;

int

k=sqrt(716699);

for(a=1;a

{

for(b=a+1;b<=716699;b++)

{

if(a*b==716699)

{

if(a+b

{

min=a+b;

mina=a;

}

}

}

}

printf("mina

is %d , mim(a+b)is %d\n",mina,min);

}

#include "stdio.h"

#include "math.h"

void main()

{ long int a,b,i,j;

i=716699;

j=716699;

for(a=3;a

for(b=a;b<2*sqrt(716699);b+=2)

if(a*b==716699)

{

if((a+b)

{i=a;j=b;}

}

printf("a=%ld,b=",i,j);

}

第十九题:猴子第一天摘下若干桃子,当即吃了一半,还不过瘾又多吃了一个。第二天早上又将剩下的桃子吃了一半,还是不过瘾,有多吃一个。以后每天都吃前一天剩下的一半再加一个。到第10天再吃剩下一个了。求猴子第一天摘了多少桃子?1534

#include

int main()

{

int

i,sum=1;

for(i=1;i<=9;i++)

sum=(sum+1)*2;

printf("第一天摘了%d个桃子\n",sum);

return

0;

}

第二十题:编写程序,求所有符合算式ij*ji=1300的最小数ij(即i*10+j)。其中i、j是1~9之间的一位整数。25

#include

int main()

{

int

i,j,m,n;

m=9;

n=9;

for(i=1;i<=9;i++)

{

for(j=i+1;j<=9;j++)

{

if((i*10+j)*(j*10+i)==1300)

{

printf("i=%d,j=%d\t",i,j);

if((i+j)

{

m=i; n=j;}

}

}

}

printf("\nmin=%d%d\n",m,n);

return 0;

}

第二十一题:设某国今年的国民生产总值为45600亿元,若今后每年以8%的增长率增长,计算多少年后能实现国民生产总值翻两番?

19

#include

#include

int main()

{

double i,b;

int

count=0;

b=45600*2*2;

for(i=45600;i<=b;)

{

i=i*(1+0.08);

count+=1;

}

printf("%d\n",count);

return 0;

}

第二十二题:求满足条件abcd*e=dcba的最小的四位数abcd,其中a,b,c,d,e均为0到9的数字,但a非0,e非0非1。1089

#include

int main()

{

int

a,b,c,d,e,min,i;

for

(a=9;a>0;a--)

{

for

(b=9;b>=0;b--)

{

for

(c=9;c>=0;c--)

{

for (d=9;d>=0;d--)

{

for (e=2;e<10;e++)

{

if((a*1000+b*100+c*10+d)*e == d*1000+c*100+b*10+a)

{

i=a*1000+b*100+c*10+d;

min=i;

}

}

}

}

}

}

printf("min=%d\n",i);

return

0;

}

第二十七题:自然数对是指两个自然数的和与差都是平方数,如8和17的和8+17=25与其差17-8=9都是平方数,则称8和17是自然数对(8,17)。假定(A,B)与(B,A)是同一个自然数对且假定A>=B,求所有小于或等于100(即:A<=100,B<=100)的自然数对中A之和。

1669

#include

#include

void main()

{ int a,b,n=0;

float s1,s2;

for(b=1;b<=100;b++)

{

for

(a=b+1;a<=100;a++)

{

s1=sqrt(a+b);s2=sqrt(a-b);

if

( s1==(int)s1 && s2==(int)s2

)

{

n=n+a;

printf("%d,%d\t\t",a,b);

}

}

}

printf("\nsum a is

%d\n",n);

}

第二十八题:求方程8x-5y=3,在|x|<=150,|y|<=200内的整数解。试问这样的整数解中|x|+|y|的最大值是多少?323

(我估计参考答案错误)

#include

int main()

{

int

x,y,a,b,m=1,n=1;

for(x=-150;x<=150;x++)

{

a=x;

if(x<0)

{

a=-x;}

for(y=-200;y<=200;y++)

{

b=y;

if(y<0)

{

b=-y;}

if(8*a-5*b==3)

{

printf("x=%d,y=%d\t",x,y);

if((a+b)>(m+n))

{ m=a;n=b;}

}

}

}

printf("\n|x|+|y|的最大值为%d\n",n+m);

return

0;

}

第二十九题:把一张一元钞票,换成一分、二分和五分硬币,每种至少11枚,问有多少种方案?

13

#include

int main()

{

int

a,b,c,x,y,z,count=0;

for(a=11;a<=100;a++)

{

for(b=22;b<=100;b+=2)

{

for(c=55;c<=100;c+=5)

{

if(a+b+c==100)

{

x=a/1;

y=b/2;

z=c/3;

printf("1分=%d,2分=%d;5分=%d\t\t\t",x,y,z);

count++;

}

}

}

}

printf("\n有%d种方案\n",count);

return 0;

}

数组题:

⑴求1/2+2/3+3/5+5/8+……的前1000项的和(注:该数列从第二项开始,其分子等于前一项的分母,而其分母等于前一项分子与分母之和)。要求:按四舍五入的方式精确到小数点后第二位。617.95

#include

void main()

{

int

i;

double

a[1001],sum;

a[0]=1;

a[1]=2;

sum=a[0]/a[1];

for(i=2;i<=1000;i++)

{

a[i]=a[i-1]+a[i-2];

sum+=a[i-1]/a[i];

}

printf("%.2lf",sum);

}

(2)已知一个数列的前三项为0,0,1,以后各项都是其相邻的前三项之和,求该数列前30项之和。

#include

void main()

{

int

i;

int

a[30],sum;

a[0]=a[1]=0;

a[2]=1;

sum=a[0]+a[1]+a[2];

for(i=3;i<=29;i++)

{

a[i]=a[i-1]+a[i-2]+a[i-3];

sum+=a[i];

}

printf("%d\n",sum);

}

(3)求Y=1-1/2+1/3-1/4+...-1/2*n前30项之和。要求:精确到小数点后第二位。0.68

#include

int main()

{

int i;

double

a[30],t=1,sum;

a[0]=1;

sum=a[0];

for(i=1;i<=29;i++)

{

t=-t;

a[i]=a[i-1]+1;

sum+=t/a[i];

}

printf("%.2lf\n",sum);

}

(4)已知Fibonacci数列:1,1,2,3,5,8,……,它可由下面公式表述:

F(1)=1

if

n=1

F(2)=1

if

n=2

F(n)=F(n-1)+F(n-2)

if

n>2试求F(1)+F(2)+……+F(50)值。

32951280098

#include

int main()

{

int

i;

double

a[50],sum;

a[0]=a[1]=1;

sum=a[0]+a[1];

for(i=2;i<=49;i++)

{

a[i]=a[i-1]+a[i-2];

sum+=a[i];

}

printf("%.lf\n",sum);

return

0;

}

编程训练

(1)编程求菲波那挈数列1,1,2,3,5,8,13,21,......的前n项,n由用户输入要求使用数组。(n值小于30)

#include

int main()

{

int

a[30],i,n,sum;

do

{

printf("Please

input n(1<=n<=30):\n");

scanf("%d",&n);

}while

(n<1||n>=30);

a[0]=1;

a[1]=1;

sum=a[0]+a[1];

for(i=2;i

{

a[i]=a[i-1]+a[i-2];

sum+=a[i];

}

printf("菲波那挈数列的前%d项之和为%d\n",n,sum);

}

(2)输入一数组,按从大到小的顺序排列(提示:可用选择排序、冒泡排序或插入排序的任意一种)。

#include

int main()

{

int

a[30],n,index,i,k,temp;

do

{

printf("Please

input n(1<=n<=30:\n");

scanf("%d",&n);

}while

(n<1||n>30);

printf("Please

input %d elements:\n",n);

for

(i=0;i

scanf("%d",&a[i]);

printf("The

original array is:\n");

for

(i=0;i

printf("]",a[i]);

printf("\n");

for

(k=0;k

{

index=k;

for

(i=k+1;i

if(a[i]

index=i;

if(index!=k)

{

temp=a[index];

a[index]=a[k];

a[k]=temp;

}

}

printf("The

sorted array is:\n");

for

(i=0;i

printf("]",a[i]);

printf("\n");

return

0;

}

(3)编程,输入n(3个数,输出这n个数中的最小值及其下标。

#include

int main()

{

int

a[10],i,n,x=0,k,j=1;

do

{

printf("请输入n(3

scanf("%d",&n);

}while

(n<=3||n>10);

printf("Please

input %d elements:\n",n);

for(i=0;i

scanf("%d",&a[i]);

printf("\n");

for(i=0;j

{

while

(j

{

if(a[i]>a[j])

break;

j++;

}

}

k=i-1;

printf("最小值为%d\n",a[i-1]);

printf("最小值下标为%d\n",k);

return

0;

}

练习题

1:编写程序。从键盘上输入20个整数,求去掉最大值和最小值以后那些元素的平均值。

#include

int main()

{

int

a[20],max,min,i,sum=0,count=0;

double

n;

printf("请输入20个整数:\n");

for(i=0;i<20;i++)

{

scanf("%d",&a[i]);

max=min=a[0];

}

for (i=0;i<20;i++)

{

if(*(a)>max)max=*(a);

else

if(*(a)

}

for

(i=0;i<20;i++)

if(a[i]!=max&&a[i]!=min)

{

sum+=a[i];

count++;

}

n=sum/count;

printf("count=%d,n=%lf\n",count,n);

return

0;

}

2.编写程序。首先计算Fibonacci数列1,1,2,3,5,8,13,21,……的前N项(n不超过40)存入一堆数组中,再按每行8项的格式输出。

#include

int main()

{

int a[40],i;

a[0]=1;

a[1]=1;

for(i=1;i<=40;i++)

a[i+1]=a[i]+a[i-1];

for(i=0;i<=40;i++)

{

printf("d",a[i]);

if((i+1)%8==0)

printf("\n");

}

printf("\n");

return 0;

}

3.输入学生人数(不超过30)后输入每个学生的成绩,统计每个分数段学生人数个数,并求最高分、最低分和平均值。

#include

void main()

{

int

i,n,count[5];

double

sum,min,max,point[31];

printf("请输入学生人数:");

scanf("%d",&n);

for(i=0;i<5;i++)

count[i]=0;

printf("请输入每个学生的分数:\n");

for(i=0;i

scanf("%lf",&point[i]);

max=point[0];min=point[0];sum=0.0;

for(i=0;i

{

if(max

max=point[i];

if(min>point[i])

min=point[i];

if(0.0<=59.0)

count[0]++;

elseif(60.0<=69.0)

count[1]++;

elseif(70.0<=79.0)

count[2]++;

elseif(80.0<=89.0)

count[3]++;

if(89.0<=100.0)

count[4]++;

sum+=point[i];

}

printf("最高分为:%lf\n",max);

printf("最高低为:%lf\n",min);

printf("平均分为:%lf\n",sum/n*1.0);

printf("0分到59分:

%d\n",count[0]);

printf("60分到69分:

%d\n",count[1]);

printf("70分到79分:

%d\n",count[2]);

printf("80分到89分:

%d\n",count[3]);

printf("90分到100分:

%d\n",count[4]);

}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值