第四章
练习题:
1.求2~1000中的守形数(若某数的平方,其低位与该数本身相同,则称该数为守形数。例如25,25的平方=625,625的低位25与原数相同,则25称为守形数。
#include
void main()
{
int i=2,n,c;
c=0;
printf("守形数有:");
while(i<1001)
{
n=i*i;
if(n%10==i)
{
printf("%5d",i);
c++;
}
else if(n%100==i)
{
printf("%5d",i);
c++;
}
else if(n%1000==i)
{
printf("%5d",i);
}
else
(n%1000!=i&&n%100!=i&&n%10!=i);
{
i++;
}
}
}
3.求Sn=a+aa+aaa+…+aa…a之值,其中a代表1~9中的一个数字。例如:a代表2,则求2+22+222+2222+22222(此时n=5),a和n由#include
void main()
{
int a,b,n,i=1,sum=0;
scanf("%d%d",&a,&n);
sum+=a;
b=a;
while(i!=n)
{
b=b*10+a;
sum+=b;
i++;
}
printf("%d",sum);
}键盘输入。
2.输入两个正数m和n,求其最大公约数和最小公倍数。
#include
void main()
{
int m,n,r,s,num1,num2;
printf("两个正整数:");
scanf("%d%d",&m,&n);
num1=m,num2=n;
while(num2!=0)
{
r=num1%num2;
num1=num2;
num2=r;
s=m*n/num1;
}
printf("最大公因子是:%d",num1);
printf("最小公倍数是:%d",s);
}
4.从键盘输入一个正整数n,计算该数的各位数之和并输出。例如,输入数是52446,则计算:5+2+4+6=17并输出。
#include
void main()
{
int a,n,sum=0;
scanf("%d",&a);
while(a!=0)
{
n=a%10;
sum+=n;
a=a/10;
}
printf("各位数之和为:%d",sum);
}
5.猴子吃桃子问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃昨天的一半零一个。到第十天早上一看,只剩下一个桃子了。求第一天共摘了多少个桃子?
#include
void main()
{
int i=0, a=1,sum=0;
while(i<=10)
{
sum+=a;
a=a*2+1;
i++;
}
printf("%d",sum);
}
第五章
课本练习
1. 编一个程序,求费那契(Fibonacci)序列:1,1,2,3,5,8,。请输出前二十项。序列满足关系式:F1=1,F2=1,Fn=Fn-1-Fn-2(其中n为大于等于3的整数)。
#include
void main()
{
int num1=1,num2=1,i=1;
printf("%3d%3d",num1,num2);
while(i<=20)
{
num1=num1+num2;
num2=num1+num2;
i++;
printf("%3d%3d",num1,num2);
}
}
2.祖父年龄70岁,长孙20岁,次孙15岁,幼孙5岁。问要过多少年,三个孙子年龄之和同祖父的年龄相等?请编写程序实现。
#include
void main()
{
int a=70,b=20,c=15,d=5,i=0;
printf("祖父70,长孙20,次孙15,幼孙5");
while(a!=b+c+d)
{
a++;
b++;
c++;
d++;
i++;
}
printf("要过%d年三个孙子的年龄相加同祖父的年龄相等",i);
}
2, 求出10个“韩信点兵数”,该数除以3余2,除以5余3,除以7余4(例如53,158,263.)。
#include
void main()
{
int n=1,i=1;
printf("10个韩信点兵数有:");
while(i<=10)
{
if(n%3==2&&n%5==3&&n%7==4)
{
printf("%5d",n);
i++;
}
else
n++;
n++;
}
}
4,读入10个数,计算它们的和、积、平方和及和的平方。
#include
#include
int main()
{
int i=0;
int nums[10];
int sum = 0;
int product = 1;
int sum_of_square = 0;
for( i=0; i<10; ++i )
{
printf( "请输入数据: " );
scanf( "%d", &nums[i] );
sum += nums[i];
product *= nums[i];
sum_of_square += (int)pow((double)nums[i], 2);
}
printf( "\n和: %d\n积: %d\n平方和: %d\n和的平方: %d\n", sum, product, sum_of_square, (int)pow((double)sum,2) );
}
5.计算并输出1!,2!3!,35!,提示:阶乘结果定义为实型,以便表示较大的数。每个阶乘乘一个数就得到后一个阶乘值。要求用一重循环编程。
#include
void main()
{
int i;
float j;
for(i=1,j=1;i<=35;i++)
{
j*=i;
printf("%d!=%f\n",i,j);
}
}
6.计算并输出2n,2-n.已知n=0,1,2,3,```,15!
提示:结果定义为浮点型。不要用指数函数与对数函数运算,用乘2递推计算。
#include
void main()
{
int i=0;
float sum1=1,sum2=1;
while(i<=15)
{
if(i==0)
{
sum1=sum2=1;
}
else
{
sum1*=2;
sum2*=0.5;
}
printf("2(%d)=%f\n,2(-%d)=%f\n",i,sum1,i,sum2);
i++;
}
}
7.利用下列公式计算并输出π的值。π/4=1-1/3+1/5-1/7+```+1/(4n-3)-1/(4n-1) (n=1000)
#include
void main()
{
int n=1;
float sum=0;
while(n<=10000)
{
sum+=1/(4*n-3)-1/(4*n-1);
n++;
}
sum*=4;
printf("π=%f",sum);
}
8.一个球从一百米的高度落下,每次落地后反跳回原来的一半,再落下,以此类推,求它在第10次落地时,共经过多少米?第10次反跳多高?
#include
void main()
{
int i=0,sum=0;
float h=100;
while(i<10)
{
sum+=h;
h=h/2;
sum+=h;
i++;
}
printf("共经过%d米\n",sum);
printf("第十次反弹高度为:%f",h);
}
9.鸡与兔同笼,其中共有25个头,有80只脚,问笼中鸡和兔各多少只?
#include
void main()
{
int i,j;
for(i=1;i<25;i++)
{
j=25-i;
if(2*i+4*j==80)
break;
}
printf("笼中有鸡%d只,有兔%d只",i,j);
}
10.输出1~999中能被3整除,且至少有一位数字是5的所有整数。
#include
void main(void)
{
int i;
for(i=1;i<1000;i++)
{
if(i%3==0)
{
if(i%10==5||i%100==5||1%1000==5)
{
printf("%d\n",i);
}
}
}
}
11. 1.求2~1000中的守形数(若某数的平方,其低位与该数本身相同,则称该数为守形数。例如25,25的平方=625,625的低位25与原数相同,则25称为守形数。
#include
void main()
{
int i=2,n,c;
c=0;
printf("守形数有:");
while(i<1001)
{
n=i*i;
if(n%10==i)
{
printf("%5d",i);
c++;
}
else if(n%100==i)
{
printf("%5d",i);
c++;
}
else if(n%1000==i)
{
printf("%5d",i);
}
else
(n%1000!=i&&n%100!=i&&n%10!=i);
{
i++;
}
}
}
12.输入20个数,求出它们的最大值、最小值及平均值。
#include
void main()
{
int a[20];
int i,max,min;
float ave,sum=0;
printf("请输入20个数");
for(i=0;i<20;i++)
scanf("%d",&a[i]);
min=a[0];
max=a[0];
for(i=0;i<20;i++)
{
if(min>a[i])
min=a[i];
sum=sum+a[i];
if(min
void main()
{
int m,n,r,s,num1,num2;
printf("两个正整数:");
scanf("%d%d",&m,&n);
num1=m,num2=n;
while(num2!=0)
{
r=num1%num2;
num1=num2;
num2=r;
s=m*n/num1;
}
printf("最大公因子是:%d",num1);
printf("最小公倍数是:%d",s);
}
14.输入20个数,统计其中正、负和零的个数。
#include
void main()
{
int a[20];
int i;
float z=0,f=0,l=0;
printf("请输入20个数");
for(i=0;i<20;i++)
scanf("%d",&a[i]);
for(i=0;i<20;i++)
{
if(a[i]>0)
z++;
if(a[i]==0)
l++;
if(a[i]<0)
f++;
}
printf("正数有%f个,负数有%f个,0有%f个",z,f,l);
}