C语言练手题(52个小练习)

目录

      • 前言
      • 1、求100之内自然数中最大的能被17整除的数。
      • 2、已知a,b,c都是1位整数,求当三位整数abc、cba的和为1333时a、b、c的值。
      • 3、计算并输出200-400之间不能被3整除的整数的和 [200, 400)
      • 4、从键盘输入10个数,统计非负数的个数,并计算非负数的和
      • 5、求125之内自然数中偶数之和。
      • 6、输入5个数,求和并输出。要求编写求和的函数。
      • 7、编程计算1 * 2 * 3+3 * 4 * 5+5 * 6 * 7+...+99 * 100 * 101的值。
      • 8、编写程序,将用户输入的字符串中所有的字符a用*代替,然后输出。
      • 9、编写程序,将一个一维数组的元素逆序存放并输出。例如,原顺序为1,2,3,4,5,逆序后为5,4,3,2,1。
      • 10、求3行3列矩阵a[3][3]={1,2,3,4,5,6,7,8,9}非对角线上元素之和。
      • 11、编程判断输入的整数的正负性和奇偶性。如果为正数,输出z;如果为负数,输出f;如果为偶数,输出o;如果为奇数,输出j
      • 12、计算并输出1-200之间不能被5整除的整数的和。
      • 13、从键盘输入n和a的值,计算a+aa+aaa+...+aa...a(n个a)的值。
      • 14、输入5个数,求它们中最大值和平均值并输出。
      • 15、输出所有200-400之间能被3整除且个位数字为6的整数。
      • 16、编写程序,将用户输入的字符串中所有的字符a去掉,然后输出剩余的字符。
      • 17、计算并输出200-400之间不能被7整除的整数的和。
      • 18、计算并输出200-400之间不能被5整除的整数的和。
      • 19、从键盘输入10个数,统计非正数的个数,并计算非正数的和。
      • 20、输入一串字符,将其中的大写字母变成对应的小写字母并输出。
      • 21、打印所有的水仙花数。所谓水仙花数是指一个三位数,其各位数字的立方和等于该数。例如,153就是一个水仙花数,因为153=1*1*1+5*5*5+3*3*3。
      • 22、一个皮球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求当它第10次落地时,共经过了多少米,第10次反弹多高?
      • 23、输出所有0-200之间能被3整除且个位数字为6的整数。
      • 24、输入一个正整数,输出它的阶乘。
      • 25、编写程序,判断从键盘输入的字符中数字字符的个数、大写字母的个数、小写字母的个数及其它字符的个数,以*作为字符输入结束标志。
      • 26、编写程序,使用循环结构输出下列图形:
      • 27、输入一串字符,逆序输出。要求使用数组实现。
      • 28、求1-1/2+1/3-1/4+...+1/99-1/100的值。
      • 29、输入3个学生4门课的成绩{(60,70,65,75),(75,80,75,90),(95,75,90,65)},计算每个学生的总分和平均成绩并输出,结果保留一位小数。
      • 30、求两个正整数的最大公约数。
      • 31、求100之内自然数中奇数之和。
      • 32、输出所有200-400之间能被3整除且个位数字为7的整数
      • 33、编程计算1 * 2 * 3+4 * 5 * 6+...+97 * 98 * 99的值
      • 34、输入n的值,计算并输出1 * 1+2 * 2+3 * 3+4 * 4+5 * 5+...+n * n的值。要求编写函数f求平方。
      • 35、计算并输出1-200之间不能被3整除的整数的和。
      • 36、输入一个华氏温度,输出摄氏温度,计算公式为c=5/9*(F-32)。要求结果保留两位小数。
      • 37、输入任意三个数,按从大到小的顺序输出
      • 38、用1元人民币兑换5分、2分、1分的硬币共50枚,每种硬币至少一枚,问共有多少种兑换方案?输出每一种方案中三种硬币的数量
      • 39、从键盘输入圆的半径,计算并输出圆面积与周长,要求结果保留两位小数。
      • 40、从键盘输入一个字符串,再输入两个正整数m和n,输出字符串中从m开始,连续n个字符。例如,输入abcdefg,2,3,输出bcd。
      • 41、输入一个不多于5位的正整数,判断它是几位数,并逆序输出各位数字
      • 42、输出Fibonacci数列的前40项
      • 43、判断某一年是否是闰年
      • 44、起泡法(选择法)对十个数排序
      • 45、判断某个数是否为素数.
      • 46、编程计算1!+2!+3!+…+10的值。
      • 47、求以下数列前十五项的和:2/1,3/2,5/3,8/5,13/8,21/13…。
      • 48、从键盘输入圆柱体高与底面半径,计算并输出圆柱体表面积与体积,要求结果保留两位小数。
      • 49、从键盘输入一个十进制整型数据,计算并输出其各位上数字之和(忽略正负号)。例如,输入1234,输出10;输入-1234,输出10。
      • 50、已知银行定期存款利率为r=2.25%,输入存款本金x、存款年数n,输出本利之和y=x(1+r)(1+r)...(1+r),共n个(1+r)。
      • 51、编程判断输入的字符串是否为“回文”。所谓“回文”是指顺读和倒读都一样,如abcba。
      • 52、编写程序,将用户输入的字符串中删除所有的数字,然后输出剩余的字符

前言

总题数量52道,其中有很多相似的题目,用于前期学习练手还是挺不错的哦。我提供的解法不一定是最优的,只是提供一种解法,不提供解法思路。如有错误请私聊或者评论联系我进行更正!

1、求100之内自然数中最大的能被17整除的数。

#include 

#define NUM 17

int main()
{
    int i = 0;

    for(i = 100; 0 != i % NUM; i--)
    {
		;
    }
	printf("100之内自然数中最大能被17整除的数为:%d\n", i);
    return 0;
}

在这里插入图片描述

2、已知a,b,c都是1位整数,求当三位整数abc、cba的和为1333时a、b、c的值。

#include 
int main()
{
    int i = 0;//循环体的计数器
    int j = 0;
    int k = 0;
    
    for(i = 0; i < 10; i++)
    {
        for(j = 0; j < 10; j++)
        {
            for(k = 0; k < 10; k++)
            {
                if(1333 == i * 100 + j * 10 + k + k * 100 + j * 10 + i)
                {
                    printf("a = %d, b = %d, c = %d\n", i, j, k);
                }
            }
        }
    }
    return 0;
}

C语言练手题(52个小练习)_第1张图片

3、计算并输出200-400之间不能被3整除的整数的和 [200, 400)

#include 

int main()
{
    int sum = 0;
    int i = 0;

    for (i = 200; i < 400; i++)
    {
        if (0 != i % 3)
        {
            sum += i;
            //printf("i = %d\n", i);
        }
    }
    printf("[200,400)之间不能被3整除的整数之和为:%d\n", sum);
    return 0;
}

在这里插入图片描述

4、从键盘输入10个数,统计非负数的个数,并计算非负数的和

#include 
int main()
{
    int number = 0;
    int count = 0;
    int sum = 0;
    int i = 0;

    printf("请输入十个整型数字:");
    for (i = 0; i < 10; i++)
    {
        scanf("%d", &number);
        if (number > 0)
        {
            count++;
            sum += number;
        }
    }

    printf("非负数的个数为:%d, 非负数的和为:%d\n", count, sum);
    return 0;
}

在这里插入图片描述

5、求125之内自然数中偶数之和。

#include 
#define NUM 125
int main()
{
    int i = 0;
    int sum = 0;
    for (i = 1; i < NUM; i++)
    {
        if (0 == i % 2)
        {
            //printf("i = %d\n", i);
            sum += i;
        }
    }
    printf("125之内的偶数之和为:%d\n", sum);
    return 0;
}

在这里插入图片描述

6、输入5个数,求和并输出。要求编写求和的函数。

#include 
#define COUNT 5
int sum();

int main()
{
    int num = sum();
    printf("和为:%d\n", num);
    return 0;
}

int sum()
{
    int number = 0;
    int i = 0;
    int s = 0;

    for (i = 0; i < COUNT; i++)
    {
        scanf("%d", &number);
        s += number;
    }
    return s;
}

在这里插入图片描述

7、编程计算1 * 2 * 3+3 * 4 * 5+5 * 6 * 7+…+99 * 100 * 101的值。

#include 

int main()
{
    int sum = 0;
    int i = 0;

    for (i = 1; i < 100; i += 2)
    {
        sum += i * (i + 1) * (i + 2);
    }
    printf("和为:%d\n", sum);
    return 0;
}

在这里插入图片描述

8、编写程序,将用户输入的字符串中所有的字符a用*代替,然后输出。

#include 
int main()
{
    char ch = ' ';

    scanf("%c", &ch);
    while('\n' != ch)
    {
        if('a' == ch)
        {
            ch = '*';
        }
        printf("%c", ch);
        scanf("%c", &ch);
    }
    printf("\n");
    return 0;
}

在这里插入图片描述

9、编写程序,将一个一维数组的元素逆序存放并输出。例如,原顺序为1,2,3,4,5,逆序后为5,4,3,2,1。

#include 
#include 
#define SIZEMAX 5

int main()
{
    int* n = (int*)malloc(sizeof(int) * SIZEMAX);
    int i = 0;

    for (i = 0; i < SIZEMAX; i++)
    {
        n[i] = i + 1;
    }
    //输出数组原始内容
    printf("数组原始内容:");
    for (i = 0; i < SIZEMAX; i++)
    {
        printf("%d ", n[i]);
    }


    //交换
    for (i = 0; i < SIZEMAX / 2; i++)
    {
        int tmp = n[i];
        n[i] = n[SIZEMAX - i - 1];
        n[SIZEMAX - i - 1] = tmp;
    }

    //循环输出
    printf("\n数组被修改后的内容:");
    for (i = 0; i < SIZEMAX; i++)
    {
        printf("%d ", n[i]);
    }
    printf("\n");
    return 0;
}

在这里插入图片描述

10、求3行3列矩阵a[3][3]={1,2,3,4,5,6,7,8,9}非对角线上元素之和。

#include 

int main()
{
    int a[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };

    int sum = 0;
    int i = 0;
    int j = 0;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            if (i != j && 3 != i + j + 1)
            {
                sum += a[i][j];
            }
        }
    }
    printf("非对角线之和为:%d\n", sum);
    return 0;
}

在这里插入图片描述

11、编程判断输入的整数的正负性和奇偶性。如果为正数,输出z;如果为负数,输出f;如果为偶数,输出o;如果为奇数,输出j

#include 

int main()
{
    int n = 0;

    scanf("%d", &n);

    if(n > 0)
    {
        printf("z");
    }
    else
    {
        printf("f");
    }

    if(0 == n % 2)
    {
        printf("o");
    }
    else
    {
        printf("j");
    }
    
    printf("\n");
    return 0;
}

在这里插入图片描述

12、计算并输出1-200之间不能被5整除的整数的和。

#include 

int main()
{
    int sum = 0;
    int i = 0;

    for (i = 1; i < 200; i++)
    {
        if (0 != i % 5)
        {
            sum += i;
        }
    }

    printf("和为:%d\n", sum);
    return 0;
}

在这里插入图片描述

13、从键盘输入n和a的值,计算a+aa+aaa+…+aa…a(n个a)的值。

#include 

int main()
{
    int n = 0;
    int a = 0;
    long int sum = 0;
    int i = 0;
    long int tmp = 0;

    printf("请输入n的值:");
    scanf("%d", &n);
    printf("请输入a的值:");
    scanf("%d", &a);

    tmp = a;
    for(i = 0; i < n; i++)
    {
        //printf("%d\n", tmp);
        sum += tmp;
        tmp = tmp * 10 + a;
    }
    printf("结果为:%ld\n", sum);
    return 0;
}

C语言练手题(52个小练习)_第2张图片

14、输入5个数,求它们中最大值和平均值并输出。

#include 
#include 
int main()
{
    int max = INT_MIN;
    double avg = 0;
    int n[5];
    int i = 0;
    int sum = 0;

    for (i = 0; i < 5; i++)
    {
        scanf("%d", &n[i]);
        sum += n[i];
        if (n[i] > max)
        {
            max = n[i];
        }
    }

    avg = sum / 5.0;
    printf("最大值为:%d,平均值为:%.2lf\n", max, avg);
    return 0;
}

C语言练手题(52个小练习)_第3张图片

15、输出所有200-400之间能被3整除且个位数字为6的整数。

#include 

int main()
{
    int i = 0;

    printf("能被3整除且尾数为6的数字有如下:\n");
    for (i = 200; i < 400; i++)
    {
        if (0 == i % 3 && 6 == i % 10)
        {
            printf("%d ", i);
        }
    }
    printf("\n");

    return 0;
}

在这里插入图片描述

16、编写程序,将用户输入的字符串中所有的字符a去掉,然后输出剩余的字符。

#include 

int main()
{
    char str[100];
    char tmp[100];
    int i = 0;
    int j = 0;
    fgets(str, 100, stdin);

    while (str[i] != '\n')
    {
        if ('a' != str[i])
        {
            tmp[j++] = str[i];
        }
        i++;
    }
    tmp[j] = '\0';
    fputs(tmp, stdout);
    printf("\n");
    return 0;
}

在这里插入图片描述

17、计算并输出200-400之间不能被7整除的整数的和。

#include 
int main()
{
    int i = 0;
    int sum = 0;
    for (i = 200; i < 400; i++)
    {
        if (0 != i % 7)
        {
            sum += i;
        }
    }
    printf("和为:%d\n", sum);
    return 0;
}

在这里插入图片描述

18、计算并输出200-400之间不能被5整除的整数的和。

#include 

int main()
{
    int i = 0;
    int sum = 0;

    for (i = 200; i < 400; i++)
    {
        if (0 != i % 5)
        {
            sum += i;
        }
    }
    printf("和为:%d\n", sum);
    return 0;
}

在这里插入图片描述

19、从键盘输入10个数,统计非正数的个数,并计算非正数的和。

#include 
int main()
{
    int count = 0;
    int sum = 0;
    int number = 0;
    int i = 0;

    while (i < 10)
    {
        scanf("%d", &number);
        if (number <= 0)
        {
            count++;
            sum += number;
        }
        i++;
    }
    printf("非正数的和为:%d,个数为:%d\n", sum, count);
    return 0;
}

在这里插入图片描述

20、输入一串字符,将其中的大写字母变成对应的小写字母并输出。

#include 
#include 
int main()
{
    char str[100];
    int i = 0;
    fgets(str, 100, stdin);

    for (i = 0; str[i] != '\n'; i++)
    {
        putchar(tolower(str[i]));
    }
    printf("\n");
    return 0;
}

C语言练手题(52个小练习)_第4张图片

21、打印所有的水仙花数。所谓水仙花数是指一个三位数,其各位数字的立方和等于该数。例如,153就是一个水仙花数,因为153=111+555+333。

#include 

int main()
{
    int i = 0;
    int j = 0;
    int k = 0;
    printf("水仙花数:\n");
    for (i = 1; i < 9; i++)
    {
        for (j = 0; j < 9; j++)
        {
            for (k = 0; k < 9; k++)
            {
                if (i * 100 + j * 10 + k == i * i * i + j * j * j + k * k * k)
                {
                    printf("%d\n", i * 100 + j * 10 + k);
                }
            }
        }
    }
    return 0;
}

C语言练手题(52个小练习)_第5张图片

22、一个皮球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求当它第10次落地时,共经过了多少米,第10次反弹多高?

#include 
int main()
{
    double len = 100;
    int i = 0;
    double height = 0;
    for (i = 0; i < 10; i++)
    {
        height += len;
        len = len / 2.0;
    }
    printf("共经过了%.2lfm\n", height);
    printf("第10次反弹的高度为:%.2lfm\n", len);
    return 0;
}

在这里插入图片描述

23、输出所有0-200之间能被3整除且个位数字为6的整数。

#include 
int main()
{
    int i = 0;

    printf("符合要求的有:");
    for (i = 0; i < 200; i++)
    {
        if (0 == i % 3 && 6 == i % 10)
        {
            printf("%d ", i);
        }
    }
    printf("\n");
    return 0;
}

在这里插入图片描述

24、输入一个正整数,输出它的阶乘。

#include 

int main()
{
    int num = 0;
    int factorial = 1;
    int i = 1;
    printf("请输入一个正整数:");
    if (scanf("%d", &num) && num <= 0)
    {
        printf("输入非法数据\n");
        return -1;
    }

    for (i = 2; i < num + 1; i++)
    {
        factorial *= i;
    }
    printf("%d的阶乘为%d\n", num, factorial);
    return 0;
}

C语言练手题(52个小练习)_第6张图片

25、编写程序,判断从键盘输入的字符中数字字符的个数、大写字母的个数、小写字母的个数及其它字符的个数,以*作为字符输入结束标志。

#include 
#include 
#include 

int main()
{
    int dcount = 0;//数字
    int ccount = 0;//大写字母
    int lcount = 0;//小写字母
    int rcount = 0;//其他字母
    int i = 0;

    char ch = ' ';

    while (scanf("%c", &ch) && ch != '*')
    {
        if (isdigit(ch))
        {
            dcount++;
        }
        else if (isupper(ch))
        {
            ccount++;
        }
        else if (islower(ch))
        {
            lcount++;
        }
        else
        {
            rcount++;
        }
        i++;

    }
    printf("数字个数:%d,大写字母个数:%d,小写字母个数:%d,其他字符个数:%d\n",
        dcount, ccount, lcount, rcount);
    return 0;
}

在这里插入图片描述

26、编写程序,使用循环结构输出下列图形:

C语言练手题(52个小练习)_第7张图片

#include 

int main()
{
    int i = 0;
    int j = 0;

    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 4; j++)
        {
            printf("* ");
        }
        printf("\n\n");
    }
    return 0;
}

C语言练手题(52个小练习)_第8张图片

27、输入一串字符,逆序输出。要求使用数组实现。

#include 
#include 
int main()
{
    char str[100];
    fgets(str, 100, stdin);
    int len = strlen(str) - 1;
    
    while(len >= 0)
    {
        putchar(str[len]);
        len--;
    }
    printf("\n");
    return 0;
}

C语言练手题(52个小练习)_第9张图片

28、求1-1/2+1/3-1/4+…+1/99-1/100的值。

#include 

int main()
{
    int sign = -1;
    int i = 0;
    double sum = 0;

    for (i = 1; i <= 100; i++)
    {
        sign *= -1;
        sum += 1.0 / (i * sign);
    }

    printf("sum = %lf\n", sum);
    return 0;
}

在这里插入图片描述

29、输入3个学生4门课的成绩{(60,70,65,75),(75,80,75,90),(95,75,90,65)},计算每个学生的总分和平均成绩并输出,结果保留一位小数。

#include 
int main()
{
    int student[3][4];
    int i = 0;
    int j = 0;
    double result[3][2];//三个同学的总分和平均分
    double sum = 0;
    double avg = 0;

    for (i = 0; i < 3; i++)
    {
        sum = 0;
        printf("请输入第%d个同学的四门成绩(中间用空格分隔):", i + 1);
        for (j = 0; j < 4; j++)
        {
            scanf("%d", &student[i][j]);
            sum += student[i][j];
        }
        result[i][0] = sum;
        result[i][1] = sum / 4.0;

    }

    for (i = 0; i < 3; i++)
    {
        printf("第%d位同学的总分为:%.1lf,平均分为:%.1lf\n",
            i + 1, result[i][0], result[i][1]);
    }
    return 0;
}

C语言练手题(52个小练习)_第10张图片

30、求两个正整数的最大公约数。

#include 

int main()
{
    int a = 0;
    int b = 0;
    int tmp = 0;

    printf("请输入俩个正整数:");

    if (!(scanf("%d %d", &a, &b) && a > 0 && b > 0))
    {
        printf("输入数据非法!\n");
        return -1;
    }

    if (a < b)
    {
        tmp = a;
        a = b;
        b = tmp;
    }

    while (a % b != 0)
    {
        tmp = a % b;
        a = b;
        b = tmp;
    }
    printf("最大公约数为:%d\n", b);
    return 0;
}

在这里插入图片描述

31、求100之内自然数中奇数之和。

#include 

int main()
{
    int i = 0;
    int sum = 0;

    for (i = 0; i < 100; i++)
    {
        if (1 == i % 2)
        {
            sum += i;
        }
    }
    printf("100之内的奇数之和为:%d\n", sum);
    return 0;
}

在这里插入图片描述**加粗样式**

32、输出所有200-400之间能被3整除且个位数字为7的整数

#include 

int main()
{
    int i = 0;

    for (i = 200; i < 400; i++)
    {
        if (0 == i % 3 && 7 == i % 10)
        {
            printf("%d ", i);
        }
    }
    printf("\n");
    return 0;
}

在这里插入图片描述

33、编程计算1 * 2 * 3+4 * 5 * 6+…+97 * 98 * 99的值

#include 

int main()
{
    int i = 0;
    int sum = 0;

    for (i = 1; i < 98; i += 3)
    {
        sum += i * (i + 1) * (i + 2);
    }
    printf("sum = %d\n", sum);
    return 0;
}

在这里插入图片描述

34、输入n的值,计算并输出1 * 1+2 * 2+3 * 3+4 * 4+5 * 5+…+n * n的值。要求编写函数f求平方。

#include 
int f(int num);
int main()
{
    int n = 0;
    int i = 0;
    int sum = 0;
    printf("请输入n:");
    scanf("%d", &n);
    for (i = 0; i <= n; i++)
    {
        sum += f(i);
    }
    printf("sum = %d\n", sum);

    return 0;
}

int f(int num)
{
    return num * num;
}

在这里插入图片描述

35、计算并输出1-200之间不能被3整除的整数的和。

#include 

int main()
{
    int i = 0;
    int sum = 0;

    for (i = 1; i < 200; i++)
    {
        if (0 != i % 3)
        {
            sum += i;
        }
    }

    printf("sum = %d\n", sum);
    return 0;
}

在这里插入图片描述

36、输入一个华氏温度,输出摄氏温度,计算公式为c=5/9*(F-32)。要求结果保留两位小数。

#include 
int main()
{
    double fahrenheit = 0;
    double degree_celsius = 0;
    printf("请输入一个华氏温度:");
    scanf("%lf", &fahrenheit);
    degree_celsius = 5.0 / 9 * (fahrenheit - 32);
    printf("转换为摄氏温度为:%.2lf\n", degree_celsius);

    return 0;
}

在这里插入图片描述

37、输入任意三个数,按从大到小的顺序输出

#include 

int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	
	scanf("%d%d%d", &a, &b, &c);

	if(a > b)
	{
		int temp = a;
		a = b;
		b = temp;
	}

	if(b > c)
	{
		int temp = b;
		b = c;
		c = temp;
	}

	if(a > b)
	{
		int temp = a;
		a = b;
		b = temp;
	}
	printf("%d %d %d\n", a, b, c);

	return 0;
}

C语言练手题(52个小练习)_第11张图片

38、用1元人民币兑换5分、2分、1分的硬币共50枚,每种硬币至少一枚,问共有多少种兑换方案?输出每一种方案中三种硬币的数量

#include 
int main()
{
    int i = 0;
    int j = 0;
    int k = 0;

    printf("有如下几种情况:\n");
    for (i = 1; i < 20; i++)
    {
        for (j = 1; j < 50; j++)
        {
            for (k = 1; k < 100; k++)
            {
                if ((100 == i * 5 + j * 2 + k) && (50 == i + j + k))
                {
                    printf("5分的%d个,2分的%d个,1分的%d个\n", i, j, k);
                }
            }
        }
    }

    return 0;
}

C语言练手题(52个小练习)_第12张图片

39、从键盘输入圆的半径,计算并输出圆面积与周长,要求结果保留两位小数。

#include 
#define PI 3.1415926
int main()
{
    double r = 0;
    double per = 0;
    double area = 0;

    printf("请输入圆的半径:");
    scanf("%lf", &r);

    per = 2 * PI * r;
    area = PI * r * r;

    printf("周长为:%.2lf,面积为:%.2lf\n", per, area);
    return 0;
}

在这里插入图片描述

40、从键盘输入一个字符串,再输入两个正整数m和n,输出字符串中从m开始,连续n个字符。例如,输入abcdefg,2,3,输出bcd。


#include 
int main()
{
    char str[100];
    int m = 0;
    int n = 0;
    printf("请输入一段字符:");
    fgets(str, 100, stdin);
    printf("请依次输入m和n的值:");
    scanf("%d %d", &m, &n);
    if (m > n)
    {
        printf("输入数据非法!");
        return -1;
    }
    int i = 0;
    for (i = m - 1; i <= n; i++)
    {
        putchar(str[i]);
    }
    printf("\n");
    return 0;
}

C语言练手题(52个小练习)_第13张图片

41、输入一个不多于5位的正整数,判断它是几位数,并逆序输出各位数字

#include 

int main()
{
    int oldnum = 0;
    int newnum = 0;
    int len = 0;
    int tmp = 0;

    printf("请输入一个不多于五位的正整数:");
    scanf("%d", &oldnum);

    tmp = oldnum;
    while (tmp != 0)
    {
        tmp /= 10;
        len++;
    }

    tmp = oldnum;
    while (tmp != 0)
    {
        newnum = newnum * 10 + tmp % 10;
        tmp = tmp / 10;
    }
    printf("这是个%d位数,逆序后为:%d\n", len, newnum);
    return 0;
}

在这里插入图片描述

42、输出Fibonacci数列的前40项

#include 

int main()
{
    long long num1 = 0;
    long long num2 = 1;
    long long tmp = 0;
    int i = 0;

    printf("%lld,", num1);
    for (i = 2; i < 40; i++)
    {
        tmp = num1 + num2;
        num1 = num2;
        num2 = tmp;
        printf("%lld,", num1);
    }
    printf("\n");
    return 0;
}

在这里插入图片描述

43、判断某一年是否是闰年

#include 

int main()
{
    int year = 0;
    printf("请输入一个年份:");
    scanf("%d", &year);

    if ((0 == year % 4 && 0 != year % 100) || (0 == year % 400))
    {
        printf("是闰年!");
    }
    else
    {
        printf("不是闰年!");
    }
    printf("\n");
    return 0;
}

在这里插入图片描述

44、起泡法(选择法)对十个数排序

#include 

int main()
{
    int n[10] = { 3, 2, 5, 6, 7, 67, 14, 1, 8, 13 };
    int i = 0;
    int j = 0;

    for (i = 0; i < 10 - 1; i++)
    {
        for (j = 0; j < 10 - 1 - i; j++)
        {
            if (n[j] > n[j + 1])
            {
                int tmp = n[j];
                n[j] = n[j + 1];
                n[j + 1] = tmp;
            }
        }
    }

    printf("排序后的结果:\n");
    for (i = 0; i < 10; i++)
    {
        printf("%d ", n[i]);
    }
    printf("\n");
    return 0;
}

在这里插入图片描述

45、判断某个数是否为素数.

#include 
int main()
{
    int n = 0;
    int i = 0;
    printf("请输入一个数字:");
    scanf("%d", &n);

    for (i = 2; i < n; i++)
    {
        if (0 == n % i)
        {
            printf("不是素数!\n");
            return 0;
        }
    }
    printf("是素数!\n");
    return 0;
}

在这里插入图片描述

46、编程计算1!+2!+3!+…+10的值。

#include 

int main()
{
    int i = 0;
    int sum = 0;
    int tmp = 1;
    for (i = 1; i <= 10; i++)
    {
        tmp = tmp * i;
        sum += tmp;
    }
    printf("sum = %d\n", sum);
    return 0;
}

在这里插入图片描述

47、求以下数列前十五项的和:2/1,3/2,5/3,8/5,13/8,21/13…。

#include 
int main()
{
    int a1 = 1;
    int a2 = 1;
    int b1 = 0;
    int b2 = 1;
    int i = 0;
    double sum = 0;

    for (i = 0; i < 15; i++)
    {
        int tmp = a2;
        a2 = a1 + a2;
        a1 = tmp;
        tmp = b2;
        b2 = b1 + b2;
        b1 = tmp;
        sum += a2 / (double)b2;
        //printf("%lf\n", sum);
    }
    printf("sum = %.2lf\n", sum);
    return 0;
}

在这里插入图片描述

48、从键盘输入圆柱体高与底面半径,计算并输出圆柱体表面积与体积,要求结果保留两位小数。

#include 
#define PI 3.1415926
int main()
{
    double high = 0;
    double r = 0;
    double area = 0;
    double volume = 0;

    printf("依次输入圆柱体高和地面半径:");
    scanf("%lf %lf", &high, &r);

    //area = 2πr2 + 2πrh
    area = 2 * PI * r * r + 2 * PI * r * high;

    // 圆柱体的体积=底面积×高=(V=πr²h)
    volume = PI * r * r * high;

    printf("圆柱体表面积为:%.2lf, 体积:%.2lf\n", area, volume);
    return 0;
}

在这里插入图片描述

49、从键盘输入一个十进制整型数据,计算并输出其各位上数字之和(忽略正负号)。例如,输入1234,输出10;输入-1234,输出10。

#include 
int main()
{
    int num = 0;
    int n = 0;

    printf("请输入一个数字:");
    scanf("%d", &num);

    if (num < 0)
    {
        num *= -1;
    }

    while (num != 0)
    {
        n += num % 10;
        num /= 10;
    }

    printf("输出:%d\n", n);
    return 0;
}

在这里插入图片描述

50、已知银行定期存款利率为r=2.25%,输入存款本金x、存款年数n,输出本利之和y=x(1+r)(1+r)…(1+r),共n个(1+r)。

#include 
#include 
int main()
{
    double rate = 0.0225;
    int x = 0;
    int n = 0;
    double sum = 1;
    int i = 0;

    printf("请输入存款本金和存款年数:");
    scanf("%d %d", &x, &n);

    for (i = 0; i < n; i++)
    {
        sum *= (1 + rate);
    }
    sum = x * sum;
    printf("本息和为:%.2lf\n", sum);
    return 0;
}

在这里插入图片描述

51、编程判断输入的字符串是否为“回文”。所谓“回文”是指顺读和倒读都一样,如abcba。

#include 
#include 
int main()
{
    char str[100];
    fgets(str, 100, stdin);

    int len = strlen(str) - 1;
    int i = 0;
    for (i = 0; i < len / 2; i++)
    {
        if (str[i] != str[len - 1 - i])
        {
            break;
        }
    }

    if (i != len / 2)
    {
        printf("不是回文!\n");
    }
    else
    {
        printf("是回文!\n");
    }
    return 0;
}

在这里插入图片描述

52、编写程序,将用户输入的字符串中删除所有的数字,然后输出剩余的字符

#include 
#include 
int main()
{
    char str[100];
    char ch = ' ';
    int i = 0;

    while (scanf("%c", &ch) && ch != '\n')
    {
        if (!isdigit(ch))
        {
            str[i++] = ch;
        }
    }
    str[i] = '\0';
    fputs(str, stdout);
    printf("\n");
    return 0;
}

在这里插入图片描述

本章完!由于匆忙可能存在一些错误。感谢理解。

你可能感兴趣的:(习题解析,c语言)