7.3
用函数编程计算两整数的最大值,在主函数中调用该函数计算并输出从键盘任意输入的两整数的最大值。
#include<stdio.h>
#include<stdlib.h>
int maxi(int a,int b)
{
if(a<b){
return b;
}
return a;
}
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("max=%d\n",maxi(a,b));
return 0;
}
7.4
利用穷举法,用编程实现计算两个正整数的最小公倍数的函数。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int LCM(int x,int y)
{
int j;
if(x>y)
j=x;
else
j=y;
for(;;j++){
if(j%x==0 && j%y==0){
return j;
}
}
}
int main()
{
int x,y;
scanf("%d %d",&x,&y);
printf("LCM=%d\n",LCM(x,y));
return 0;
}
7.5
参考例7.4,利用求阶乘函数Fact(),编程计算并输出从1到n之间所有数的阶乘值。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int LCM(int x,int y)
{
int j;
if(x>y)
j=x;
else
j=y;
for(;;j++){
if(j%x==0 && j%y==0){
return j;
}
}
}
int main()
{
int x,y;
scanf("%d %d",&x,&y);
printf("LCM=%d\n",LCM(x,y));
return 0;
}
7.6
参考例7.4,利用求阶乘函数Fact(),编程计算并输出1!+…+n!的值
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int LCM(int x,int y)
{
int j;
if(x>y)
j=x;
else
j=y;
for(;;j++){
if(j%x==0 && j%y==0){
return j;
}
}
}
int main()
{
int x,y;
scanf("%d %d",&x,&y);
printf("LCM=%d\n",LCM(x,y));
return 0;
}
7.7
求两个整数的最大公约数
(1)穷举法
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int GCD(int x,int y)
{
int i;
if(x>y){
i = y;
}
else{
i = x;
}
for(;i>=1;i--){
if(x%i==0 && y%i==0){
return i;
}
}
}
int main()
{
int x,y;
scanf("%d %d",&x,&y);
printf("GCD=%d\n",GCD(x,y));
return 0;
}
(2)欧几里德算法
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int GCD(int x,int y)
{
int r = x%y;
while(r!=0){
x = y;
y = r;
r = x%y;
}
return y;
}
int main()
{
int x,y;
scanf("%d %d",&x,&y);
printf("GCD=%d\n",GCD(x,y));
return 0;
}
(3)递归方法
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int GCD(int x,int y)
{
if(x>y){
return GCD(x-y,y);
}
if(x>y){
return GCD(x,y-x);
}
if(x == y){
return x;
}
}
int main()
{
int x,y;
scanf("%d %d",&x,&y);
printf("GCD=%d\n",GCD(x,y));
return 0;
}
7.9
有5个人围坐在一起,问第五个人多大年纪,他说比第四个人大2岁;问第四个人,他说比第三个人大2岁;…;问第一个人,他说自己10岁,用递归法编程计算输出第5个人的年龄。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int age(x)
{
if(x==1){
return 10;
}
else{
return age(x-1)+2;
}
}
int main()
{
int i;
for(i=1;i<=5;i++){
printf("%d\n",age(i));
}
return 0;
}
7.10
魔术师猜数游戏
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int guess(int x)
{
int a,b,c;
int acb,bac,cab,bca,cba;
a = x / 100;
b = (x - 100 * a) / 10;
c = x % 10;
acb = a* 100 + c * 10 + b;
bac = b * 100 + a * 10 + c;
bca = b * 100 + c * 10 + a;
cab = c * 100 + a * 10 + b;
cba = c * 100 + b * 10 + a;
return acb+bac+bca+cab+cba;
}
int main()
{
int sum;
scanf("%d",&sum);
int i,flag=0;
for(i=100;i<1000;i++){
if(sum == guess(i)){
flag = 1;
printf("%d\n",i);
break;
}
}
if(!flag){
printf("Caculate Wrong!");
}
return 0;
}
7.13
素数
(1)试商法判断素数
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int isPrime(int x)
{
int i;
for(i=2;i<x;i++){
if(x % i == 0){
return 0;
}
}
return 1;
}
int main()
{
int x;
scanf("%d",&x);
if(isPrime(x)){
printf("%d is prime\n",x);
}
else{
printf("%d is not prime\n",x);
}
return 0;
}
(2)用数学的方法判断素数
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int isPrime(int x)
{
int i;
for(i=2;i<=sqrt(x);i++){
if(x % i == 0){
return 0;
}
}
return 1;
}
int main()
{
int x;
scanf("%d",&x);
if(isPrime(x)){
printf("%d is prime\n",x);
}
else{
printf("%d is not prime\n",x);
}
return 0;
}
(3)
从键盘任意输入一个整数n,编程计算并输出1~n之间的所有素数之和
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int isPrime(int x)
{
int i;
for(i=2;i<=sqrt(x);i++){
if(x % i == 0){
return 0;
}
}
return 1;
}
int main()
{
int n,i,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
if(isPrime(i)){
sum += i;
printf("%d\n",i);
}
}
printf("sum=%d\n",sum);
return 0;
}
(4)
从键盘任意输入一个整数m,若m不是素数,则计算并输出其所有因子。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int isPrime(int x)
{
int i;
for(i=2;i<=sqrt(x);i++){
if(x % i == 0){
return 0;
}
}
return 1;
}
int main()
{
int n,i,j,sum=0;
scanf("%d",&n);
if(isPrime(n)){
printf("No division!%d is a prime number\n",i);
}
else{
for(j=2;j<n;j++){
if(n%j==0){
printf("%d\t",j);
}
}
}
return 0;
}
(5)
判断是否是完美数
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int isPrime(int x)
{
int i;
for(i=2;i<=sqrt(x);i++){
if(x % i == 0){
return 0;
}
}
return 1;
}
int isPerfect(int x)
{
int sum=0,i;
for(i=1;i<x;i++){
if(x % i == 0){
sum += i;
}
}
if(sum == x){
return 1;
}
return 0;
}
int main()
{
int n,i,j,sum=0;
scanf("%d",&n);
if(isPerfect(n)){
printf("%d is a perfect number\n",n);
}
else{
printf("%d is not a perfect number\n",n);
}
return 0;
}
(6)
分解质因数
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int isPrime(int x)
{
int i;
for(i=2;i<=sqrt(x);i++){
if(x % i == 0){
return 0;
}
}
return 1;
}
int main()
{
int n,i,j=2,sum=0,flag=0;
scanf("%d",&n);
if(isPrime(n)){
printf("%d is a prime number\n",n);
}
else{
while(n!=1){
if(n % j == 0){
n = n / j;
printf("%d\t",j);
}
else{
j++;
}
}
}
return 0;
}