1、编程打印如下金字塔
#include <stdio.h>
void main()
{
int i,j;
for(i=1;i<=5;i++)
{
for(j=1;j<=5-i;j++)
printf(" ");
for(j=1;j<=i;j++)
printf("* ");
printf("\n");
}
}
2、任意输入一个数,求解n!
分析:n!可以分成两种情况:
- n!=1 (n=0,1)
- n!=n(n-1)! (n>1)
#include <stdio.h>
long fun(int n)
{
long f;
if(n<0) printf("input error!");
else if(n==0||n==1) f=1;
else f=n*fun(n-1);
return f;
}
void main()
{
int n;
long f;
printf("input a integer number:");
scanf("%d",&n);
f=fun(n);
printf("%d!=%ld\n",n,f);
}
3、写一函数,计算1+1/2!+1/3!+……+1/n!,其中n的值由用户指定
#include <stdio.h>
long fun(int n)
{
long f;
if(n<0) printf("input error");
else if)(n==0||n==1) f=1;
else f=n*fun(n-1);
return f;
}
void main()
{
int i,n;
float s=0.0;
printf("input n:");
scanf("%d",&n);
for(i=1;i<=n;i++)
s+=1.0/fun(i);
printf("s=%f",s);
}
4、杨辉三角
分析:
#include<stdio.h>
#define M 10
void main()
{
int a[M][M],i,j,row;
printf("请输入行数<%d:",M);
scanf("%d",&row);
for(i=0;i<row;i++)
for(j=0;j<=i;j++)
{
if(j==0||j==i)
a[i][j]=1;
else
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
printf("\n杨辉三角的前%d行是:\n",row);
for(i=0;i<row;i++)
{for(j=0;j<=i;j++)
printf("%-6d",a[i][j]);
printf("\n");
}
}
5、求两个数的最大公约数和最小公倍数
注意:最小公倍数等于两个数值的乘积除以这两个数值的最大公约数
#include<stdio.h>
//求a和b最大公约数:
int yue(int a,int b)
{
int i, k=1;
int t=a>b?b:a;//t取a和b中的较小数
for(i=1;i<=t;i++)
{
if((a%i==0)&&(b%i==0))
k=i;
else continue;
}
return k;//返回最大公约数
}
//求a和b的最小公倍数,参数c传递的是a和b的最大公约数
int bei(int a,int b,int c)
{
return (a*b)/c;
}
void main()
{
int a,b;
printf("请输入2个要求值的数\n");
scanf("%d%d",&a,&b);
printf("两个数的最大公约数是%d\n",yue(a,b));
printf("两个数的最小公倍数是%d\n",bei(a,b,yue(a,b)));
}
法二:
辗转相除法的核心就是不断的让两个数做除法运算。其原理基于两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。
假设两数为 x,y。
先令 z = x % y ;
之后 y 赋给 x 即令 x = y ;
再将 z 赋给 y 即令 y = z;
辗转相减,其终止条件为:y 等于0时。
#include<stdio.h>
void main()
{
int x, y, z, m, n;
printf("请输入两个数:");
scanf("%d%d", &x, &y);
m = x, n = y;
while (y != 0)
{
z = x%y;
x = y;
y = z;
}
printf("最大公约数是: %d\n", x);
printf("最小公倍数是: %d\n", m*n / x);
}
法三:
辗转相减法即通过对两数的不断减法运算。
假设两数为 x, y。
当 x > y 时,令 x = x - y;
反之,则令 y = y - x;
之后一直辗转相减,直至 x = y 时,终止。
#include<stdio.h>
void main()
{
int x, y, m, n;
printf("请输入两个数:");
scanf("%d%d", &x, &y);
m = x, n = y;
while (x!=y)
{
if (x>y)
x = x-y;
else
y = y-x;
}
printf("最大公约数是: %d\n", x);
printf("最小公倍数是: %d\n", m*n / x);
}