失去兴趣的人终将是去奋斗的价值观。
——本人
大家好,这一篇文章和大家分享一下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:努力进大厂的新青年