C语言-经典实例

2019-06-25  本文已影响0人  程序员的自我救赎

1、根据输入年份判断是否为闰年
闰年:四年一闰,百年不闰,四百年在闰

int a;
printf("输入年份:");
scanf("%d",&a);
if ((a%4==0 && a%100 !=0) || a%400 == 0){
  printf("%d 是闰年",a);
}else{
  printf("%d 不是闰年",a);
}

2、判断输入字符是否为字母
字母:a-z或者A-Z

char c;
printf("输入一个字符: ");
scanf("%c",&c);
if( (c>='a' && c<='z') || (c>='A' && c<='Z'))
    printf("%c 是字母",c);
else
    printf("%c 不是字母",c);

3、输出9x9乘法表
乘法表:每两个乘法之间空格,每行输出玩换行

for(int i=1;i<=9;i++){
    for(int j=1;j<=i;j++){
        printf("%d*%d=%d\t",j,i,j*i);
    }
    printf("\n");
}

4、输出指定数量的斐波那契数列
斐波那契数列:数列从第三项开始,每个数都等于前两个数之和

int n;
printf("输出几项:");
scanf("%d",&n);
int t0=0,t1=1;
int temp;
for (int i=0;i<n;i++){
  printf("%d ",t1);
  temp = t0+t1;
  t0 = t1;
  t1 = temp;
}

5、求两数最大公约数
公约数:同时可以整除两个数的最大数

int a,b,temp;
printf("输入两个数:");
scanf("%d,%d",&a,&b);
if  (a>b){
    temp = b
}else{
    temp = a;
}
for(int i=temp;i>1;i--){
  if (a%i==0 && b%i==0){
    // 是公约数
    printf("%d,%d的最大公约数为%d:",a,b,i);
    break;
  }
}
最小公倍数=(a*b)/最大公约数

6、求输入一个数的阶乘
一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。
n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

    int n, i;
    int factorial = 1;
    
    printf("输入一个整数: ");
    scanf("%d",&n);
    
    // 如果输入是负数,显示错误
    if (n < 0)
        printf("Error! 负数没有阶乘jiechen");
    
    else
    {
        for(i=1; i<=n; ++i)
        {
            factorial *= i;              // factorial = factorial*i;
        }
        printf("%d! = %d", n, factorial);
    }

7、输出26个字母

    char c;
    for(c = 'A'; c <= 'Z'; ++c)
       printf("%c ", c);

8、计算一个数的n次方

    int base, exponent;
 
    long long result = 1;
 
    printf("基数: ");
    scanf("%d", &base);
 
    printf("指数: ");
    scanf("%d", &exponent);
 
    while (exponent != 0)
    {
        result *= base;
        --exponent;
    }
    printf("结果:%lld", result);

也可以使用pow()函数,需要引入math.h头文件

9、判断回文数
回文数:设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数;

    char n[10];
    printf("输入字符串数字: ");
    scanf("%s", n);
    // 获取字符串长度
    int len = strlen(n);
    char nn[10];
    for (int i=0; i<len; i++) {
        nn[len-1-i] = n[i];
    }
    printf("%s",nn);

10、判断素数
素数:质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数

    int n, i, flag = 0;
 
    printf("输入一个正整数: ");
    scanf("%d",&n);
 
    for(i=2; i<=n/2; ++i)
    {
        // 符合该条件不是素数
        if(n%i==0)
        {
            flag=1;
            break;
        }
    }
 
    if (flag==0)
        printf("%d 是素数",n);
    else
        printf("%d 不是素数",n);

11、判断一个数是否为两个素数的和

int checkPrime(int n);
int main()
{
    int n, i, flag = 0;
 
    printf("输入正整数: ");
    scanf("%d", &n);
 
    for(i = 2; i <= n/2; ++i)
    {
        // 检测判断
        if (checkPrime(i) == 1)
        {
            if (checkPrime(n-i) == 1)
            {
                printf("%d = %d + %d\n", n, i, n - i);
                flag = 1;
            }
 
        }
    }
 
    if (flag == 0)
        printf("%d 不能分解为两个素数。", n);
 
    return 0;
}
 
// 判断素数
int checkPrime(int n)
{
    int i, isPrime = 1;
 
    for(i = 2; i <= n/2; ++i)
    {
        if(n % i == 0)
        {
            isPrime = 0;
            break;
        }  
    }
 
    return isPrime;
}

12、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。

    int i,j,k;
    for(i=1;i<5;i++) { // 以下为三重循环
        for(j=1;j<5;j++) {
            for (k=1;k<5;k++) { // 确保i、j、k三位互不相同
                if (i!=k&&i!=j&&j!=k) { 
                    printf("%d,%d,%d\n",i,j,k);
                }
            }
        }
    }

13、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
分析:利用while语句,条件为输入的字符不为'\n'。

    char c;
    int letters=0,spaces=0,digits=0,others=0;
    printf("请输入一些字母:\n");
    while((c=getchar())!='\n')
    {
        if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
            letters++;
        else if(c>='0'&&c<='9')
            digits++;
        else if(c==' ')
            spaces++;
        else
            others++;
    }
    printf("字母=%d,数字=%d,空格=%d,其他=%d\n",letters,digits,spaces,others);

14、编程找出1000以内的所有完数。
分析:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3

    int i,j,k,n,sum;
    int a[256];
    for(i=2;i<=N;i++)
    {
        sum=a[0]=1;
        k=0;
        for(j=2;j<=(i/2);j++)
        {
            if(i%j==0)
            {
                sum+=j;
                a[++k]=j;
            }
            
        }
        if(i==sum)
        {
            printf("%d=%d",i,a[0]);
            for(n=1;n<=k;n++)
                printf("+%d",a[n]);
            printf("\n");
        }
        
    }
上一篇 下一篇

猜你喜欢

热点阅读