1.问题 A: 求1000到n以内满足特定意义的数
求1000到n以内(包括n,1000<=n<=9999)中,满足(1)这些数本身是平方数,(2)低两位和高两位所成的两个两位数也是平方数。n由键盘输入(每个数后面带一个空格)
要求:(1)编写如下接口的功能函数:int fun(int n),该函数的功能是判断n是不是满足上述条件的数。若是,返回1,若不是返回0。
(2)main函数去调用该功能函数。
平方数定义:一个数的平方根若是整数,则该数就是平方数
#include <stdio.h>
#include <math.h>
int fun(int n)
{
int j= n/100;
int k= n%100;
int i= sqrt(n);
int x= sqrt(j);
int y= sqrt(k);
if(i*i==n)
{
if(x*x==j && y*y==k)
{
return 1;
}
else
{
return 0;
}
}
else
{
return 0;
}
}
int main()
{
int i;
scanf("%d", &i);
for(int n= 1000; n<= i; n++)
{
if(fun(n))
{
printf("%d ", n);
}
}
return 0;
}
2.问题 B: 求1到n以内所有的完全数
求1到n以内(包括n,n<1000)所有的完全数。n由键盘输入(每个数后面带一个空格)
要求:(1)编写如下接口的功能函数:int fun(int n),该函数的功能是判断n是不是完全数。若是,返回1,若不是返回0。
(2)main函数去调用该功能函数。
完全数定义:该数的所有因子之和为该数的两倍。如6的因子是1,2,3,6。6*2=1+2+3+6.所以6是完全数
#include <stdio.h>
int fun(int n)
{
int x, y, z=0;
int a[100];
int sum=0;
for(x= 1; x<= n; x++)
{
if(n%x==0)
{
a[z++]=x;
}
}
for(y=0; y<z; y++)
{
sum=sum+a[y];
}
if(sum==(2*n))
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int n;
int i=1;
scanf("%d", &n);
for(i=1; i<=n; i++)
{
if(fun(i))
printf("%d ", i);
}
return 0;
}
3.问题 C: 求100到n之间的各位数字的立方和等于1099的三位数
求100到n以内(n<1000),各位数字的立方和等于1099的三位数。n由键盘输入,并将这些素数存储到数组a中并输出(每个数后面带一个空格)
要求:(1)编写如下接口的功能函数:int fun(int n),该函数的功能是判断n的各个位数的立方和是不是1099。若是,返回1,若不是返回0。
(2)main函数去调用该功能函数。
#include <stdio.h>
#include <math.h>
int fun(int n)
{
int i, j, k;
i= n%10;
j= (n/10)%10;
k= n/100;
int sum;
sum= pow(i,3)+ pow(j,3)+ pow(k,3);
if(sum==1099)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int i;
int k=0;
int a[10];
scanf("%d", &i);
for(int n= 100; n< i; n++)
{
if(fun(n))
{
a[k++]=n;
}
}
for(int j=0; j< k; j++)
{
printf("%d ", a[j]);
}
return 0;
}
4.问题 D: 最大公约数和最小公倍数(书后习题5.3.2)
编写两个函数,分别求出两个整数的最大公约数和最小公倍数。用主函数调用这两个函数,并输出结果。两个整数由键盘输入。
#include <stdio.h>
int gbs(int n, int m)
{
int i;
int gbs;
if(n>=m)
{
for(i= n; ; i++)
{
if(i%n==0 && i%m==0)
{
gbs=i;
break;
}
}
}
else
{
for(i= m; ; i++)
{
if(i%n==0 && i%m==0)
{
gbs=i;
break;
}
}
}
return gbs;
}
int gys(int n, int m)
{
int gys;
int i;
if(n>=m)
{
for(i= m; i>0; i--)
{
if(n%i==0 && m%i==0)
{
gys=i;
break;
}
}
}
else
{
for(i= n; i>0; i--)
{
if(n%i==0 && m%i==0)
{
gys=i;
break;
}
}
}
return gys;
}
int main()
{
int x, y;
scanf("%d %d", &x, &y);
printf("gbs=%d,gys=%d", gbs(x,y), gys(x,y));
return 0;
}
5.问题 E: 【C语言训练】阿姆斯特朗数
如果一个正整数等于其各个数字的立方和,则称该数为阿姆斯特朗数(亦称为自恋性数)。
如 407=43+03+73就是一个阿姆斯特朗数。试编程求大于1小于1000的所有阿姆斯特朗数。
#include <stdio.h>
#include <math.h>
int amstl(int n)
{
int sum;
int i, j, k;
if(n>= 100)
{
i= n%10;
j= (n/10)%10;
k= n/100;
sum= pow(i,3)+ pow(j,3)+ pow(k,3);
if(sum==n)
{
return 1;
}else{
return 0;
}
}
else if(n>= 10)
{
i= n%10;
j= n/10;
sum= pow(i,3)+ pow(j,3);
if(sum==n)
{
return 1;
}else{
return 0;
}
}
else if(n> 1)
{
i= n;
sum= pow(i,3);
if(sum==n)
{
return 1;
}else{
return 0;
}
}
}
int main()
{
int i;
for(i= 2; i< 1000; i++)
{
if(amstl(i))
{
printf("%d ", i);
}
}
return 0;
}
6.问题 F: 【C语言训练】计算1~N之间所有奇数之和
计算1~N之间所有奇数之和
#include <stdio.h>
int main()
{
int n;
int sum=0;
scanf("%d", &n);
if(n%2==0)
{
for(int i= 1; i< n; i=i+ 2)
{
sum+=i;
}
}
else
{
for(int i= 1; i<= n; i=i+2)
{
sum=sum+i;
}
}
printf("%d", sum);
return 0;
}
7.问题 G: 【C语言训练】求s=a+aa+aaa+aaaa+aa...a的值
求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个一位的整数。
例如2+22+222+2222+22222(此时共有5个数相加)
#include <stdio.h>
#include <math.h>
int Sum(int x, int y)
{
int sum=0;
int j=0;
int n=0;
for(int i= 1; i<= y; i++)
{
j= x*(pow(10,(i-1)))+ n;
n=j;
sum+=j;
}
return sum;
}
int main()
{
int x, y;
scanf("%d %d", &x, &y);
printf("%d", Sum(x,y));
return 0;
}
8.问题 H: 求n到m之间的素数并输出
求n到m以内的素数(包含n,m,且m>=n>=1,n<=m<=100)n和m由键盘输入(每个素数后面带一个空格)
要求:(1)编写如下接口的功能函数:int fun(int n),该函数的功能是判断n是不是素数。若是,返回1,若不是返回0。
(2)main函数去调用该功能函数。
#include <stdio.h>
int fun(int n)
{
int i;
if(n< 2)
{
return 0;
}
for(i= 2; i< n; i++)
{
if(n%i==0)
{
return 0;
}
}
if(i>=n)
{
return 1;
}
}
int main()
{
int x, y, i;
scanf("%d,%d", &x, &y);
for( i= x; i<= y; i++)
{
if(fun(i))
{
printf("%d ", i);
}
}
return 0;
}