1.华氏温度、摄氏温度相互转换

输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9 输出要求有文字说明,取位2小数。

代码如下:

#include <stdio.h>
int main()
{
    double c, f;
    scanf("%lf", &f);
    c = 5 * (f - 32) / 9;
    printf("c=%.2lf", c);
    return 0;
}

运行结果如下图:

运行结果

2.计算国民生产总值

假如我国国民生产总值增长率为10%,请计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为:p=(1+r)n,其中:r为年增长率,n为年数,p为与现在相比的倍数。

代码如下:

#include <stdio.h>
#include <math.h>
int main()
{
    double p, r = 0.1;
    int n = 10;
    p = pow(1 + r, n);
    printf("%lf", p);
    return 0;
}

运行结果如下图:

运行结果

3.大小写转换

从键盘输入1个小写字母,输出相应的大写字母

代码如下:

#include <stdio.h>
int main()
{
    char a, b;
    a = getchar();
    b = a - 32;
    printf("%c", b);
    return 0;
}

运行结果如下图:

运行结果

4.计算铅球质量

已知某种铅密度为11340kg/m3 ,输入球的直径(cm),求铅球有多少kg。

代码如下:

#include <stdio.h>
int main()
{
    double r, v, m, pi = 3.1415926;
    scanf("%lf", &r);
    r = r / 2;
    v = (4.0 / 3) * pi * r * r * r / 1000000;
    m = v * 11340;
    printf("%lf", m);
    return 0;
}

运行结果如下图:

运行结果

5.输入一个三位数,将它反向输出。

输入一个三位数,将它反向输出。

代码如下:

#include <stdio.h>
int main()
{
    int a, b, c, d, e;
    scanf("%d", &a);
    b = a / 100;
    c = (a % 100) / 10;
    d = a % 10;
    e = d * 100 + c * 10 + b;
    printf("%d", e);
    return 0;
}

运行结果如下图:

运行结果

6.分割整数的各数字

读入一个5位数,分割该数各个数位上的数字并将分割的数字以间隔3个空格的形式依此打印输出

代码如下:

#include <stdio.h>
int main()
{
    int a, b, c, d, e, f;//34567
    scanf("%d", &a);
    b = a / 10000;
    c = (a / 1000) % 10;
    d = (a / 100) % 10;
    e = (a / 10) % 10;
    f = a % 10;
    printf("%d   %d   %d   %d   %d", b, c, d, e, f);
    return 0;
}

运行结果如下图:

运行结果

7.求一元二次方程ax2+bx+c=0的根。

求一元二次方程ax2+bx+c=0的根。a、b、c为任意实数。

说明:
(1)如果a为0且b为0,则输出 "Not an equation"(N大写,单词间一个空格)。
(2)如果a为0,退化一次方程,则只输出一个根的值既可以。
(3)如果a不为0,则按以下格式输出方程的根x1和x2(x1和x2之间有一个空格):
若x1和x2为实根,则以x1>=x2输出。
若方程是共轭复根,则x1=m+ni,x2=m-ni,其中n>0。
其中x1、x2、m、n均保留2位小数。

代码如下:

#include <stdio.h>
#include <math.h>
int main()
{
    double a, b, c, p, q, x1, x2, m, n;
    scanf("%lf%lf%lf", &a, &b, &c);
    p = (b * b - 4 * a * c);
    if (a == 0 && b == 0)
        printf("Not an equation");
    else {

        if (a == 0)
            printf("%.2lf", -c / b);
        else
        {

            if (a != 0)
            {
                if (p >= 0)
                {
                    q = sqrt(p);
                    x1 = (-b + q) / (2 * a);
                    x2 = (-b - q) / (2 * a);
                    (x1 >= x2) ? (printf("%.2lf %.2lf", x1, x2)) : (printf("%.2lf %.2lf", x2, x1));
                }
                else
                {
                    m = -b / (2 * a);
                    n = sqrt(fabs(p)) / (2 * fabs(a));
                    printf("%.2lf+%.2lfi %.2lf-%.2lfi", m, n, m, n);
                }
            }
        }
    }
    return 0;
}

运行结果如下图:

运行结果

8.出租车计价问题

根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:

  1. 起步里程为3公里,起步费10元;
  2. 超起步里程后10公里内,每公里2元;
  3. 超过起步里程10公里以上的部分加收50%的回空补贴费,即每公里3元;
  4. 营运过程中,因路阻及乘客要求临时停车等待的,按每5分钟2元计收(不足5分钟则不收费);
    里程不足1公里,按照1公里计;等待时间超过5分钟后,不足按5分钟计。

代码如下:

#include <stdio.h>
#include <math.h>
int main()
{
    int t, z;
    double l, x = 0, y = 0;
    scanf("%lf%d", &l, &t);
    //里程计费 
    if (l <= 3)
        x = 10;
    else if (l < 13)
        x = 10 + ceil(l - 3) * 2;
    else
        x = 10 + 10 * 2 + ceil(l - 13) * 3;
    //时间计费 
    if (t < 5)
        y = 0;
    else
        y = ceil(t / 5.0) * 2;
    z = (int)(x + y + 0.5);    //四舍五入 
    printf("%d", z);
    return 0;
}

运行结果如下图:

运行结果

9.水仙花数

水仙花数是指一个n位数,每一位数字的n次幂的和正好等于这个数本身。要求打印出所有三位数的水仙花数。

代码如下:

#include <stdio.h>
int main()
{
    int i, a, b, c, d;
    for (i = 100; i < 1000; i++)
    {
        a = i / 100;
        b = (i / 10) % 10;
        c = i % 10;
        d = a * a * a + b * b * b + c * c * c;
        if (i == d)
            printf("%d\n", i);
    }
    return 0;
}

运行结果如下图:

运行结果

10.计算 1+1/2-1/3+1/4-1/5+1/6-……+1/n。

代码如下:

#include <stdio.h>
int main()
{
    int i, n, flag = 0;
    double output = 1;
    scanf("%d", &n);
    if (n == 1)
        printf("1.000");
    else
    {
        for (i = 2; i <= n; i++)
        {
            if (flag % 2 == 0)
            {
                output = output + 1.0 / i;
                flag = flag + 1;
            }
            else
            {
                output = output - 1.0 / i;
                flag = flag + 1;
            }
        }
        printf("%.3lf", output);
    }
    return 0;
}

运行结果如下图:

运行结果

11.奇偶归一猜想

奇偶归一猜想——对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。输入正整数n,求这个n归一过程中的最大值。

代码如下:

#include <stdio.h>
int main()
{
    int i, n, count = 1, max, a[10000];
    scanf("%d", &n);
    a[0] = n;
    while (n != 1)
    {
        for (i = 1;; i++)
        {
            if (n % 2 != 0)
                n = n * 3 + 1;
            else
                n = n / 2;
            a[i] = n;
            count++;
            if (n == 1)
                break;
        }
    }
    max = a[0];
    for (i = 0; i < count; i++)
    {
        if (a[i] > max)
            max = a[i];
    }
    printf("%d", max);
    return 0;
}

运行结果如下图:

运行结果

12.计算2/1, 3/2, 5/3, 8/5, 13/8, 21/13 ......的前n项和。

代码如下:

#include <stdio.h>
int main()
{
    int n, i;
    double a = 1, b = 2, sum = 0, temp;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        sum = sum + b / a;
        temp = b;
        b = a + b;
        a = temp;
    }
    printf("%.2lf", sum);
    return 0;
}

运行结果如下图:

运行结果

13.求多位数的位数及各位数之和

输入一个正整数,求它的位数以及各位数字之和。

代码如下:

#include <stdio.h>
int main()
{
    int n, count = 0, sum = 0;
    scanf("%d", &n);
    do
    {
        sum = sum + n % 10;
        n = n / 10;
        count++;
    } while (n > 0);
    printf("count=%d\nsum=%d", count, sum);
    return 0;
}

运行结果如下图:

运行结果

14.素数判断

输入一个数,判断其是否为素数。

代码如下:

#include <stdio.h>
#include <math.h>
int main()
{
    int i, m, n, flag = 0;
    scanf("%d", &n);
    if (n == 1)
        flag = 0;
    else if (n == 2)
        flag = 1;
    else
    {
        m = (int)sqrt((double)n);
        for (i = 2; i <= m; i++)
        {
            if (n % i == 0)
            {
                flag = 0;
                break;
            }
            else
                flag = 1;
        }
    }
    if (flag == 0)
        printf("n");
    else
        printf("y");
    return 0;
}

运行结果如下图:

运行结果

15.百钱买百鸡

百钱买百鸡:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,问公鸡,母鸡,小鸡各要买多少只刚好100文钱?

代码如下:

#include <stdio.h>
int main()
{
    int a, b, c;
    for (a = 0; a <= 100; a++)
    {
        for (b = 0; b <= 100 - a; b++)
        {
            for (c = 0; c <= 100 - a - b; c++)
            {
                if (5 * a + 3 * b + c / 3 == 100 && c % 3 == 0 && a + b + c == 100)
                    printf("%d %d %d\n", a, b, c);
            }
        }
    }
    return 0;
}

运行结果如下图:

运行结果

16.同构数问题

找出1~99之间的所有同构数。同构数是这样的数,它出现在它平方数的右边,例如:5出现在25的右边,25出现在625右边。

代码如下:

#include <stdio.h>
int main()
{
    int i;
    for (i = 1; i < 100; i++)
    {
        if (i == (i < 10 ? (i * i) % 10 : (i * i) % 100))
            printf("%d\n", i);
    }
    return 0;
}

运行结果如下图:

运行结果

17.小球落地问题

一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。它在第N次落地时反弹多高?共经过多少米?

代码如下:

#include <stdio.h>
int main()
{
    int i, n;
    double m, h, t, sum = 0;
    scanf("%lf%d", &m, &n);
    for (i = 1; i <= n; i++)
    {
        h = m / 2;
        sum = sum + h + m;
        m = h;
    }
    sum = sum - h;
    printf("%.2lf %.2lf", h, sum);
    return 0;
}

运行结果如下图:

运行结果

18.打印K字图案

要求根据输入的最多行的*数,形成*的K字点阵。

代码如下:

#include <stdio.h>
int main()
{
    int i, j, n;
    scanf("%d", &n);
    //上半部分 
    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= n + 1 - i; j++)
            printf("*");
        printf("\n");
    }
    //下半部分
    for (i = 1; i < n; i++)
    {
        for (j = 1; j <= i + 1; j++)
            printf("*");
        printf("\n");
    }
    return 0;
}

运行结果如下图:

运行结果

19.计算1! + 2! + 3! + …… + 20!

代码如下:

#include <stdio.h>
int main()
{
    int function(long int);
    int i;
    long int sum = 0;
    for (i = 1; i <= 20; i++)
        sum = sum + function(i);
    printf("%ld", sum);
    return 0;
}

int function(long int a)
{
    int j;
    for (j = a - 1; j > 0; j--)
        a = a * j;
    return a;
}

运行结果如下图:

运行结果

20.找出绝对值最小的数

输入10个数,找出其中绝对值最小的数。

代码如下:

#include <stdio.h>
#include <math.h>
int main()
{
    int i, flag = 0, a[10], min;
    for (i = 0; i < 10; i++)
        scanf("%d", &a[i]);
    min = abs(a[0]);
    for (i = 1; i < 10; i++)
    {
        if (abs(a[i]) < min)
        {
            min = abs(a[i]);
            flag = i;
        }
    }
    printf("%d", a[flag]);
    return 0;
}

运行结果如下图:

运行结果

21.求大于平均值的数的个数

输入10个数,求它们的平均值,并输出大于平均值的数据的个数。

代码如下:

#include <stdio.h>
int main()
{
    int i, average, sum = 0, count = 0;
    double a[10];
    for (i = 0; i < 10; i++)
    {
        scanf("%lf", &a[i]);
        sum += a[i];
    }
    average = sum / 10.0;
    for (i = 0; i < 10; i++)
        if (a[i] > average)
            count++;
    printf("%d", count);
    return 0;
}

运行结果如下图:

运行结果

22.从大到小排序

任意输入10个数,从小到大进行排序并输出。

代码如下:

#include <stdio.h>
int main()
{
    int i, j, t, a[10];
    for (i = 0; i < 10; i++)
        scanf("%d", &a[i]);
    //排序 
    for (i = 0; i < 10; i++)
    {
        for (j = i + 1; j < 10; j++)
        {
            if (a[i] > a[j])
            {
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
    }
    for (i = 0; i < 10; i++)
        printf("%d ", a[i]);
    return 0;
}

运行结果如下图:

运行结果

23.二维数组元素互换

将一个两行三列的数组行列元素互换,存入另一个二维数组中。

代码如下:

#include <stdio.h>
int main()
{
    int i, j, a[2][3], b[3][2];
    for (i = 0; i < 2; i++)
        for (j = 0; j < 3; j++)
            scanf("%d", &a[i][j]);
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 2; j++)
        {
            b[i][j] = a[j][i];
        }
    }
    printf("\n"); 
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 2; j++)
            printf("%d  ", b[i][j]);
        printf("\n");
    }
    return 0;
}

运行结果如下图:

运行结果

24.输入20个整数,找出这些整数中被其他整数整除的数。

代码如下:

#include <stdio.h>
int main()
{
    int i, j, a[20];
    for (i = 0; i < 20; i++)
        scanf("%d", &a[i]);
    for (i = 0; i < 20; i++)
    {
        for (j = 0; j < 20; j++)
            if (a[i] % a[j] == 0 && i != j)
            {
                printf("%d ", a[i]);
                break;
            }
    }
    return 0;
}

运行结果如下图:

运行结果

25.最大公约数、最小公倍数

输入两个正整数m和n,求其最大公约数和最小公倍数。
提示:最大公约数和最小公倍数的乘积等于这两个数的乘积。

代码如下:

#include <stdio.h>
int main()
{
    int i, m, n, t;
    scanf("%d%d", &m, &n);
    if (m < n)
    {
        t = m;
        m = n;
        n = t;
    }
    for (i = n; i > 0; i--)
    {
        if ((m % i == 0) && (n % i == 0))
        {
            printf("%d %d", i, m * n / i);
            break;
        }
    }
    return 0;
}

运行结果如下图:

运行结果

26.输出a,b之间的素数个数

输入两个正整数a和b,输出a,b之间的素数个数

代码如下:

#include <stdio.h>
#include <math.h>
int main()
{ 
    int i,j,t,m,n,q,count=0,flag=1;
    scanf("%d%d",&m,&n);
    if(m>n)
    {
        t=m;
        m=n;
        n=t;
    }
    for(i=m;i<=n;i++)
    {
        q=(int)sqrt((double) i);
        for(j=2;j<=q;j++)
        {
            if(i%j==0)
                {
                    flag=0;
                    break;
                }
            else
                flag=1;
        }
        if(flag==1)
            count++;
    }
    if(m==1)
        count--;
    printf("%d",count);
    return 0;
}

运行结果如下图:

运行结果

以上内容仅用于记录C语言程序设计练习,不保证上述内容为最优算法。

最后修改:2020 年 10 月 30 日 09 : 32 PM