C语言经典题目(二)

简介: C语言经典题目(二)

失去兴趣的人终将是去奋斗的价值观。

——本人


大家好,这一篇文章和大家分享一下C语言经典习题第二章,这些思想挺重要的,是打江山的基础。值得大家看一看。


一.判断一个数是几位数


用户输入一个数,然后用代码实现这个数的位数:

#include <stdio.h>
int main()
{
    long long n;
    int count = 0;
    printf("输入一个整数: ");
    scanf("%lld", &n);
    while(n != 0)
    {
        // n = n/10
        n /= 10;
        ++count;
    }
    printf("数字是 %d 位数。", count);
}


输出结果如下:


1. 输入一个整数: 2345
2. 数字是 4 位数


二.计算一个数的n次方

  • 例如计算2的三次方,2^3=8

1.使用while循环


#include <stdio.h>
int main()
{
    int base, exponent;
    long long result = 1;
    printf("基数: ");
    scanf("%d", &base);
    printf("指数: ");
    scanf("%d", &exponent);
    while (exponent != 0)
    {
        result *= base;
        --exponent;
    }
    printf("结果:%lld", result);
    return 0;
}//因为是n次方,怕数据过大,使用long long类型防止数据过大溢出

输出结果如下:

1. 基数: 2
2. 指数: 3
3. 结果:8


2.使用pow函数(函数库自带)

#include <stdio.h>
#include <math.h>
int main()
{
    double base, exponent, result;
    printf("基数: ");
    scanf("%lf", &base);
    printf("指数: ");
    scanf("%lf", &exponent);
    // 计算结果
    result = pow(base, exponent);
    printf("%.1lf^%.1lf = %.2lf", base, exponent, result);
    return 0;
}

输出结果如下:

1. 基数: 2
2. 指数: 3
3. 2.0^3.0 = 8.00


3.使用递归


#include <stdio.h>
int power(int n1, int n2);
int main()
{
    int base, powerRaised, result;
    printf("基数: ");
    scanf("%d",&base);
    printf("指数(正整数): ");
    scanf("%d",&powerRaised);
    result = power(base, powerRaised);
    printf("%d^%d = %d", base, powerRaised, result);
    return 0;
}
int power(int base, int powerRaised)
{
    if (powerRaised != 0)
        return (base*power(base, powerRaised-1));
    else
        return 1;
}


三.判断是否是回文数


  • 判断一个数是否为回文数。设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数


include <stdio.h>
int main()
{
    int n, reversedInteger = 0, remainder, originalInteger;
    printf("输入一个整数: ");
    scanf("%d", &n);
    originalInteger = n;
    // 翻转
    while( n!=0 )
    {
        remainder = n%10;
        reversedInteger = reversedInteger*10 + remainder;
        n /= 10;
    }
    // 判断
    if (originalInteger == reversedInteger)
        printf("%d 是回文数。", originalInteger);
    else
        printf("%d 不是回文数。", originalInteger);
    return 0;
}


输出结果如下:


1. 输入一个整数: 12321
2. 12321 是回文数


四.判断是否是素数


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


1.是否是素数


#include <stdio.h>
int main()
{
    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);
    return 0;
}


输出结果如下:

1. 输入一个正整数: 29
2. 29 是素数


2.两个数之间的素数(进阶)


#include <stdio.h>
int main()
{
    int low, high, i, flag;
    printf("输入两个整数: ");
    scanf("%d %d", &low, &high);
    printf("%d 与 %d 之间的素数为: ", low, high);
    while (low < high)
    {
        flag = 0;
        for(i = 2; i <= low/2; ++i)
        {
            if(low % i == 0)
            {
                flag = 1;
                break;
            }
        }
        if (flag == 0)
            printf("%d ", low);
        ++low;
    }
    return 0;
}


输出结果如下:

输入两个整数: 100  200
100 与 200 之间的素数为: 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199

四.求一个整数的所有因数


1.一个数的因数


  • 2*512=10,我们称2和512就是1024的因数
#include <stdio.h>
int main()
{
    int number, i;
    printf("输入一个整数: ");
    scanf("%d",&number);
    printf("%d 的因数有: ", number);
    for(i=1; i <= number; ++i)
    {
        if (number%i == 0)
        {
            printf("%d ",i);
        }
    }
    return 0;
}


输出结果如下:

1. 输入一个整数: 60
2. 60 的因数有: 1 2 3 4 5 6 10 12 15 20 30 60


2.两个数的公因数(三目运算符)


#include <stdio.h>
int main()
{
    int num1, num2, i;
    printf("输入两个数,使用空格分隔:");
    scanf("%d %d", &num1, &num2);
    for (i = 1; i <= (num1 > num2 ? num2 : num1) ; ++i)
    {
        if (num1%i == 0 && num2%i == 0)
        {
            printf("%d ", i);
        }
    }
    return 0;
}


五.创建三角形图案


1.使用*打印出三角形


#include <stdio.h>
int main()
{
    int i, j, rows;
    printf("行数: ");
    scanf("%d",&rows);
    for(i=1; i<=rows; ++i)
    {
        for(j=1; j<=i; ++j)
        {
            printf("* ");
        }
        printf("\n");
    }
    return 0;
}


输出结果如下:

1. *
2. * *
3. * * *
4. * * * *
5. * * * * *



2.使用数字输出三角形


#include <stdio.h>
int main()
{
    int i, j, rows;
    printf("行数: ");
    scanf("%d",&rows);
    for(i=1; i<=rows; ++i)
    {
        for(j=1; j<=i; ++j)
        {
            printf("%d ",j);
        }
        printf("\n");
    }
    return 0;
}


输出结果如下:

1. 1
2. 1 2
3. 1 2 3
4. 1 2 3 4
5. 1 2 3 4 5


3.使用字母输出三角形

#include <stdio.h>
int main()
{
    int i, j;
    char input, alphabet = 'A';
    printf("输入大写字母: ");
    scanf("%c",&input);
    for(i=1; i <= (input-'A'+1); ++i)
    {
        for(j=1;j<=i;++j)
        {
            printf("%c", alphabet);
        }
        ++alphabet;
        printf("\n");
    }
    return 0;
}


输出结果如下:

1. A
2. B B
3. C C C
4. D D D D
5. E E E E E


六.输出金字塔


#include <stdio.h>
int main()
{
    int i, space, rows, k=0;
    printf("Enter number of rows: ");
    scanf("%d",&rows);
    for(i=1; i<=rows; ++i, k=0)
    {
        for(space=1; space<=rows-i; ++space)
        {
            printf("  ");
        }
        while(k != 2*i-1)
        {
            printf("* ");
            ++k;
        }
        printf("\n");
    }
    return 0;
}


输出结果如下:


        *
      * * *
    * * * * *
  * * * * * * *
* * * * * * * * *


七.输出倒金字塔


#include<stdio.h>
int main()
{
    int rows, i, j, space;
    printf("行数: ");
    scanf("%d",&rows);
    for(i=rows; i>=1; --i)
    {
        for(space=0; space < rows-i; ++space)
            printf("  ");
        for(j=i; j <= 2*i-1; ++j)
            printf("* ");
        for(j=0; j < i-1; ++j)
            printf("* ");
        printf("\n");
    }
    return 0;
}


输出结果如下:


* * * * * * * * *
  * * * * * * *
    * * * * *
      * * *
        *


八.输出杨辉三角


#include <stdio.h>
int main()
{
    int rows, coef = 1, space, i, j;
    printf("行数: ");
    scanf("%d",&rows);
    for(i=0; i<rows; i++)
    {
        for(space=1; space <= rows-i; space++)
            printf("  ");
        for(j=0; j <= i; j++)
        {
            if (j==0 || i==0)
                coef = 1;
            else
                coef = coef*(i-j+1)/j;
            printf("%4d", coef);
        }
        printf("\n");
    }
    return 0;
}


输出结果如下:


           1
         1   1
       1   2   1
     1   3   3    1
   1  4    6   4   1
 1  5   10   10  5   1 

九.矩阵形式输出数据


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


输出结果如下:


1  11  21  31  41  51  61  71  81  91
2  12  22  32  42  52  62  72  82  92
3  13  23  33  43  53  63  73  83  93
4  14  24  34  44  54  64  74  84  94
5  15  25  35  45  55  65  75  85  95
6  16  26  36  46  56  66  76  86  96
7  17  27  37  47  57  67  77  87  97
8  18  28  38  48  58  68  78  88  98
9  19  29  39  49  59  69  79  89  99
10  20  30  40  50  60  70  80  90 100


十.实现一个简单的计算器

1.普通计算器


# include <stdio.h>
int main() {
    char operator;
    double firstNumber,secondNumber;
    printf("输入操作符 (+, -, *,): ");
    scanf("%c", &operator);
    printf("输入两个数字: ");
    scanf("%lf %lf",&firstNumber, &secondNumber);
    switch(operator)
    {
        case '+':
            printf("%.1lf + %.1lf = %.1lf",firstNumber, secondNumber, firstNumber + secondNumber);
            break;
        case '-':
            printf("%.1lf - %.1lf = %.1lf",firstNumber, secondNumber, firstNumber - secondNumber);
            break;
        case '*':
            printf("%.1lf * %.1lf = %.1lf",firstNumber, secondNumber, firstNumber * secondNumber);
            break;
        case '/':
            printf("%.1lf / %.1lf = %.1lf",firstNumber, secondNumber, firstNumber / secondNumber);
            break;
        // operator doesn't match any case constant (+, -, *, /)
        default:
            printf("Error! operator is not correct");
    }
    return 0;
}

输出结果如下:

1. 输入操作符 (+, -, *,): *
2. 输入两个数字: 4 5
3. 4.0 * 5.0 = 20.0


2.进阶计算器

#include <stdio.h>
int get_option();
void print_result(int num1,int num2,int result,int option);
int main(void)
{
    int done = 0;
    int option,num1,num2,result;
    while(!done)
    {
        option = get_option();
        if(option == 5)
        {
            done = 1;
        }
        else {
            do {
                printf("\n请输入两个数:");
                scanf("%d %d",&num1,&num2);
                if(option == 4 && num2 == 0)
                {
                    printf("\n对不起,除数不能为零");
                } 
                else {
                    switch(option){
                        case 1:
                            result = num1 + num2;
                            break;
                        case 2:
                            result = num1 - num2;
                            break;
                        case 3:
                            result = num1 * num2;
                            break;
                        case 4:
                            result = num1 / num2;
                    }
                    print_result(num1,num2,result,option);
                }
            }while(option == 4 && num2 == 0);
        }
    }
    return 0;
}
int get_option()
{
    int option;
    do
    {
        printf("\n ****************");
        printf("\n *    1.加法    *");
        printf("\n *    2.减法    *");
        printf("\n *    3.乘法    *");
        printf("\n *    4.除法    *");
        printf("\n *    0.退出    *");
        printf("\n ****************");
        printf("\n请输入您需要的功能:");
        scanf("%d",&option);
        if(option <1 || option > 5)
        {
            printf("对不起您输入的数字有误,请重新输入。\n");
        }
    }while(option <1 || option > 5);
        return option;
}
void print_result(int num1,int num2,int result,int option){
    char operator;
    switch(option){
        case 1:
            operator = '+';
            break;
        case 21:
            operator = '-';
            break;
        case 3:
            operator = '*';
            break;
        case 4:
            operator = '/';
            break;
    }
    printf("\n** %d %c %d = %d **\n",num1,operator,num2,result);
}


2023.02.03

From:努力进大厂的新青年

相关文章
|
5月前
|
C语言
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
|
5月前
|
存储 C语言 C++
C语言------------指针笔试题目深度剖析
C语言------------指针笔试题目深度剖析
43 1
|
10月前
2.C语言题目---字符串左旋
2.C语言题目---字符串左旋
73 1
|
10天前
|
程序员 C语言
【C语言】LeetCode(力扣)上经典题目
【C语言】LeetCode(力扣)上经典题目
|
10月前
|
存储
1.C语言题目---指针类(基础)
1.C语言题目---指针类(基础)
57 1
|
2月前
|
存储 编译器 C语言
【C语言】指针练习题目
【C语言】指针练习题目
|
4月前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
42 1
|
5月前
|
算法 编译器 API
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-1
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
4月前
|
C语言
c语言循环题目
c语言循环题目
|
5月前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)