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

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

前言

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

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

方法一:

#include <stdio.h>
#define NUM 17
int main()
{
    int i = 0;
    for(i = 100; 0 != i % NUM; i--)
    {
    ;
    }
  printf("100之内自然数中最大能被17整除的数为:%d\n", i);
    return 0;
}

方法二:

int main()
{
  printf("%d\n", 100 / 17 * 17);
  return 0;
}


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

#include <stdio.h>
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;
}


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

#include <stdio.h>
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 <stdio.h>
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 <stdio.h>
#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 <stdio.h>
#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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
#include <stdlib.h>
#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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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;
}


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

#include <stdio.h>
#include <limits.h>
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;
}


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

#include <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <ctype.h>
#include <stdio.h>
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;
}


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

#include <stdio.h>
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;
}


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

#include <stdio.h>
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 <stdio.h>
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 <stdio.h>
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;
}

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

#include <stdio.h>
#include <stdbool.h>
#include <ctype.h>
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、编写程序,使用循环结构输出下列图形:

#include <stdio.h>
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;
}


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

#include <stdio.h>
#include <string.h>
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;
}


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

#include <stdio.h>
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;
}


目录
相关文章
|
8天前
|
算法 C语言 容器
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣(上)
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣
20 0
|
14天前
|
C语言
C语言指针——练习
C语言指针——练习
|
16天前
|
编译器 C语言
C语言进阶⑪(指针上)(知识点和对应练习)回调函数模拟实现qsort。(下)
C语言进阶⑪(指针上)(知识点和对应练习)回调函数模拟实现qsort。
20 0
|
16天前
|
C语言 数据安全/隐私保护
C语言初阶②(分支语句和循环语句)编程练习
C语言初阶②(分支语句和循环语句)编程练习
29 1
|
8天前
|
存储 前端开发 算法
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣(下)
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣
5 0
|
8天前
|
存储 C语言
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣(中)
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣
18 0
|
8天前
|
C语言
C语言递归练习
C语言递归练习
|
15天前
|
编译器 C语言 C++
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(下)
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题
26 2
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(下)
|
15天前
|
编译器 C语言 C++
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(中)
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题
23 1
|
15天前
|
算法 编译器 C语言
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(上)
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题
26 3