失去兴趣的人终将是去奋斗的价值观。
——本人
大家好,这一篇文章和大家分享一下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);
}
输出结果如下:
输入一个整数: 2345
数字是 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类型防止数据过大溢出
输出结果如下:
基数: 2
指数: 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;
}
输出结果如下:
基数: 2
指数: 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;
}
输出结果如下:
输入一个整数: 12321
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;
}
输出结果如下:
输入一个正整数: 29
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;
}
输出结果如下:
输入一个整数: 60
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;
}
输出结果如下:
*
* *
* * *
* * * *
* * * * *
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
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;
}
输出结果如下:
A
B B
C C C
D D D D
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;
}
输出结果如下:
输入操作符 (+, -, *,): *
输入两个数字: 4 5
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:努力进大厂的新青年