学编程必须动手敲代码,所以刷题是硬道理。

题目来源:菜鸟教程 C语言实例

对某些题目做了一些小改动,并加入了自己的学习笔记和理解,代码不是原教程中的代码,是我自己作为练习写的,每块代码都测试了,应该是没有问题,但不足之处仍无可避免,如有问题,还请各位大佬批评指正。


输出 “Hello, World!”

使用 scanf() 来接收输入,使用 printf() 输出 “Hello, World!”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

int main(void)
{
printf("Hello World!\n");

return 0;
}
//#是一个引用的标志
//include是英语引用的意思
//<stdio.h>是库函数中的一个函数
//格式化输入输出函数,standard+input+output缩写而成.h是头文件后缀
//int main void)的意思是main函数的返回值类型为int,参数为空
//printf();函数是格式化打印的意思,print是打印的意思
//printf中的f有的地方说是format格式化的意思,也有的地方说是function函数的意思
//\n是转义字符,表示换行
//return 0表示函数返回值为0
1
Hello World!

输出整数

使用 scanf() 来接收输入,使用 printf()%d 格式化输出整数。

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

int main(void)
{
int number = 0;//定义一个整型变量a,并初始化为0\

scanf("%d", &number);//格式化输入函数,取number的地址存放用户输入的数值

printf("%d\n", number);//%d格式化打印整型参数,传递参数a

return 0;
}
1
2
1
1

输出单个字符

使用 scanf() 来接收输入,使用 printf()%c格式化输出一个字符。

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

int main(void)
{
char ch = 0;//定义一个字符型变量ch,并初始化为0\

scanf("%c", &ch);//格式化输入函数,取ch的地址存放用户输入的字符

printf("%c\n", ch);//%d格式化打印字符,传递参数ch

return 0;
}
1
2
a
a

输出浮点数

使用 scanf() 来接收输入,使用 printf()%f 输出浮点数。

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

int main(void)
{
float number = 0;//定义一个单精度浮点型变量number,并初始化为0\

scanf("%f", &number);//格式化输入函数,取number的地址存放用户输入的字符

printf("%f\n", number);//%f格式化打印浮点型数据,传递参数number

return 0;
}
1
2
1
1.000000

两个整数相加

使用 scanf() 来接收输入, printf()%d 格式化输出整数。

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

int main(void)
{
int a, b;//定义两个整形变量,用来存放两个整数

printf("请输入两个整数,我来计算两个数的和:\n");
scanf("%d%d", &a, &b);//取ab的两个地址来存放用户输入的数据
printf("您输入的两个整数的和为%d\n", a + b);//传递的参数为a+b

return 0;
}
1
2
3
请输入两个整数,我来计算两个数的和:
520 521
您输入的两个整数的和为1041

两个浮点数相乘

输入两个浮点数,计算乘积,结果保留两位小数。

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

int main(void)
{
float a, b;

printf("请输入两个数,我来计算两个数的乘积:\n");
scanf("%f%f", &a, &b);
printf("您输入的两个数的积为%.2f\n", a * b);

return 0;
}
1
2
3
请输入两个数,我来计算两个数的乘积:
520 521.1415926
您输入的两个数的积为270993.63

字符转 ASCII 码

ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符
0 NUT 32 (space) 64 @ 96
1 SOH 33 ! 65 A 97 a
2 STX 34 66 B 98 b
3 ETX 35 # 67 C 99 c
4 EOT 36 $ 68 D 100 d
5 ENQ 37 % 69 E 101 e
6 ACK 38 & 70 F 102 f
7 BEL 39 71 G 103 g
8 BS 40 ( 72 H 104 h
9 HT 41 ) 73 I 105 i
10 LF 42 * 74 J 106 j
11 VT 43 + 75 K 107 k
12 FF 44 , 76 L 108 l
13 CR 45 - 77 M 109 m
14 SO 46 . 78 N 110 n
15 SI 47 / 79 O 111 o
16 DLE 48 0 80 P 112 p
17 DCI 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
19 DC3 51 3 83 S 115 s
20 DC4 52 4 84 T 116 t
21 NAK 53 5 85 U 117 u
22 SYN 54 6 86 V 118 v
23 TB 55 7 87 W 119 w
24 CAN 56 8 88 X 120 x
25 EM 57 9 89 Y 121 y
26 SUB 58 : 90 Z 122 z
27 ESC 59 ; 91 [ 123 {
28 FS 60 < 92 / 124 |
29 GS 61 = 93 ] 125 }
30 RS 62 > 94 ^ 126 `
31 US 63 ? 95 _ 127 DEL
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

int main(void)
{
char ch = 0;

printf("请输入一个字符:\n");
scanf("%c", &ch);
printf("%d", ch);

return 0;
}
1
2
3
请输入一个字符:
A
65

多组输入两整数相除,如果有余数,输出余数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>

int main(void)
{
int a, b;

printf("请输入了两个整数:\n");

while (~scanf("%d%d", &a, &b))//多次输入判断条件,也可以写成scanf("%d%d", &a, &b)!=EOF
{
if (a % b == 0)
{
printf("您输入的两个数的商为%d\n", a / b);
}
else
{
printf("您输入的两个数的商为%d,余数为%d\n", a / b, a % b);
}
}

return 0;
}
1
2
3
4
5
6
7
请输入了两个整数:
9 3
您输入的两个数的商为3
9 5
您输入的两个数的商为1,余数为4
2021 66
您输入的两个数的商为30,余数为41

比较两个数的大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main(void)
{
int a, b;//这里以整型为例,声明两个整形变量用来存放两个数。

printf("请输入了两个整数:\n");
scanf("%d%d", &a, &b);

if (a > b)
{
printf("%d>%d", a, b);
}
else if(b<a)
{
printf("%d>%d", b, a);
}
else
{
printf("%d=%d", a, b);
}

return 0;
}
1
2
3
请输入了两个整数:
55 58
58>55

比较三个数的大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>

int main() {
int a, b, c;//声明三个整型变量

printf("请输入三个整数\n");
scanf("%d%d%d", &a, &b, &c);//如果直接比较应该有10种大小关系,这里只比较谁最大或者是否存在相等。

if (a > b && a > c)
{
printf("%d最大", a);
}
else if (b > a && b > c)
{
printf("%d最大", b);
}
else if (c > a && c > b)
{
printf("%d最大", c);
}
else
{
printf("有两个或三个数值相等");
}

return 0;
}
1
2
3
请输入三个整数
45 99 98
99最大

计算 int, float, double 和 char 字节大小

使用 sizeof 操作符计算int, float, doublechar四种变量字节大小。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main()
{
int a = 0;
float b = 0;
double c = 0;
char d = 0;

printf("int所占字节大小为%d\n", sizeof(int));//sizeof只是个运算符,类似于+-*/不是个函数
printf("float所占字节大小为%d\n", sizeof(float));
printf("double所占字节大小为%d\n", sizeof(double));
printf("char所占字节大小为%d\n", sizeof(char));

return 0;
}
1
2
3
4
int所占字节大小为4
float所占字节大小为4
double所占字节大小为8
char所占字节大小为1

交换两个数的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main()
{
int a, b;
int temp;//临时变量

printf("请输入两个整数a,b的值:\n");
scanf("%d%d", &a, &b);
printf("a=%d,b=%d\n", a, b);

temp = a;
a = b;
b = temp;

printf("交换后a=%d,b=%d\n", a, b);

return 0;
}
1
2
3
4
请输入两个整数a,b的值:
520 521
a=520,b=521
交换后a=521,b=520

多组输入,判断奇数/偶数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>

int main()
{
int a = 0;

printf("请输入一个整数:\n");

while (~scanf("%d", &a))
{
if (a % 2 == 0)
{
printf("您输入的数是偶数\n");
}
else if (a % 2 != 0)
{
printf("您输入的数是奇数\n");
}
}

return 0;
}
1
2
3
4
5
请输入一个整数:
2020
您输入的数是偶数
2021
您输入的数是奇数

循环区间范围内的奇数/偶数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

int main()
{
int n1, n2;
int i = 0;

printf("您输入您要输出的区间范围\n(例如(输入0 100表示输出0到100之间的所有偶数))\n请选择:>>>");
scanf("%d%d", &n1, &n2);

for (i = n1; i >= n1 && i <= n2; i++)
{
if (i % 2 == 0)
{
printf("%d ", i);
}
}

return 0;
}
1
2
3
4
您输入您要输出的区间范围
(例如(输入0 100表示输出0100之间的所有偶数))
请选择:>>>33 99
34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98

多组输入,判断元音/辅音

  英语有26个字母,元音只包括 a、e、i、o、u 这五个字母,其余的都为辅音。y是半元音、半辅音字母,但在英语中都把他当作辅音。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>

int main()
{
char ch = 0;

printf("请输入多个英文字母\n");
while (~scanf("%c", &ch) && ch != '\n')//多组输入遇到换行停止
{
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' || ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U')
{
printf("您输入的字母是元音\n");
}
else
{
printf("您输入的字母是辅音\n");
}
}

return 0;
}
1
2
3
4
5
6
7
8
9
请输入多个英文字母
abcDEFG
您输入的字母是元音
您输入的字母是辅音
您输入的字母是辅音
您输入的字母是辅音
您输入的字母是元音
您输入的字母是辅音
您输入的字母是辅音

多组输入,求一元二次方程的解

  求一元二次方程:ax 2+bx+c=0 的根。

  输入三个实数a,b,c的值,且a不等于0。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <math.h>//sqrt()需要引用<math.h>库函数头文件

int main()
{
float a, b, c;
float x1, x2;
float det;

printf("请输入a,b,c的值,其中a不等于0。\n");

while (~scanf("%f%f%f", &a, &b, &c))
{
det = b * b - 4 * a * c;//Δ=b*b-4*a*c

if (a != 0 && det > 0)//方程有两个解
{
x1 = (-b - sqrt(det)) / (2 * a);
x2 = (-b + sqrt(det)) / (2 * a);
printf("方程的的根x1=%.2f,x2=%.2f\n", x1, x2);
}
else if (a != 0 && det == 0)//方程有两个相同的解
{
x1 = (-b - sqrt(det)) / (2 * a);
x2 = (-b + sqrt(det)) / (2 * a);
printf("方程的的根x1=x2=%.2f\n", x1);
}
else if (a != 0 && det < 0)//方程无实数解
{
printf("方程无实数解\n");
}

if (a == 0)//a等于0
{
printf("a等于0的话原式不再是一元二次方程,请重新输入。\n");
break;
}
}

return 0;
}
1
2
3
4
5
6
7
8
9
请输入a,b,c的值,其中a不等于0
5 12 13
方程无实数解
1 -2 1
方程的的根x1=x2=1.00
1 5 1
方程的的根x1=-4.79,x2=-0.21
0 1 2
a等于0的话原式不再是一元二次方程,请重新输入。

多组输入,判断闰年

  闰年是公历中的名词。闰年分为普通闰年和世纪闰年。

  普通闰年:公历年份是4的倍数的,且不是100的倍数,为普通闰年(如2004年、2020年就是闰年)。

  世纪闰年:公历年份是整百数的,必须是400的倍数才是世纪闰年(如1900年不是世纪闰年,2000年是世纪闰年)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>

int main()
{
int year = 0;

printf("请输入几个年份:\n");

while (~scanf("%d", &year))
{
if (year % 4 == 0)
{
if (year % 100 == 0)
{
printf("此年份是世纪闰年。\n");
}
else
{
printf("此年份是普通闰年。\n");
}
}
else
{
printf("此年份不是闰年。\n");
}
}

return 0;
}
1
2
3
4
5
6
请输入几个年份:
2000 2008 2020 2021
此年份是世纪闰年。
此年份是普通闰年。
此年份是普通闰年。
此年份不是闰年。

多组输入,判断正数/负数

  用户输入一个数字,判断该数字是正数还是负数或是零。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>

int main()
{
int number;

printf("请输入几个整数: \n");

while (~scanf("%d", &number))
{
if (number > 0)
{
printf("你输入的是正数\n");
}
else if (number <0)
{
printf("你输入的是负数\n");
}
else
{
printf("你输入的数是0\n");
}
}

return 0;
}
1
2
3
4
5
请输入几个整数:
-1 0 1
你输入的是负数
你输入的数是0
你输入的是正数

多组输入,判断字母

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>

int main()
{
char ch = 0;

printf("请输入一串字符:\n");

while (~scanf("%c", &ch) && ch != '\n')
{
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
{
printf("您输入的字符是字母\n");
}
else
{
printf("您输入的字符不是字母\n");
}
}

return 0;
}
1
2
3
4
5
6
请输入一串字符:
a@1A
您输入的字符是字母
您输入的字符不是字母
您输入的字符不是字母
您输入的字符是字母

计算自然数的和

  自然数是指表示物体个数的数,即由0开始,0,1,2,3,4,……一个接一个,组成一个无穷的集体,即指非负整数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main()
{
int i = 0, n = 0, sum = 0;

printf("您需要计算多少个自然数的和\n请输入:");
scanf("%d", &n);

for (i = 0; i < n; i++)
{
sum += i;
}

printf("自然数0-%d的和为%d\n", n - 1, sum);

return 0;
}
1
2
3
您需要计算多少个自然数的和
请输入:10
自然数0-9的和为45

九九乘法表

  对于此类的题,类似于打印特殊三角形的题,我找到了近似通法的方法,详情可见我的另外一篇博客,点我进入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int main()
{
int i, j;

for (i = 1; i <= 9; i++)//这个所有的都是从1开始,注意
{
for (j = 1; j <= i; j++)//因为这里是递增的想1 2 3 4这样所以肯定有i来控制
//i起初为1,打印效果第一行也为1个,所以这里应该是就<=i
{
printf("%d*%d=%d ", j, i, i * j);
}

printf("\n");//打印最外层循环换行
}

return 0;
}
1
2
3
4
5
6
7
8
9
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

斐波那契数列

  斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368……..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>

int main()
{
int i, n;//i用来控制循环,n用来控制用户输入菲波那切数列的项数。
int t1 = 1, t2 = 1, next = 0;//很显然t1+t2=next的规律,后面就是循环就好了

printf("您要输出几项菲波那切数列的项数呢?\n请输入:");
scanf("%d", &n);

for (i = 0; i < n; i++)
{
printf("%d ", t1);

next = t1 + t2;
t1 = t2;//往右挪一个,t1的值变成了t2,t2的值变成了next,以此类推。
t2 = next;
}

return 0;
}
1
2
3
您要输出几项菲波那切数列的项数呢?
请输入:9
1 1 2 3 5 8 13 21 34

求两数的最大公约数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>

int main()
{
int a, b;
int i = 0;
int gy = 0;

printf("请输入两个整数:\n");
scanf("%d%d", &a, &b);

for (i = 1; i <= a && i <= b; i++)//注意i要从1开始,因为0不能做除数
{
if ((a % i == 0) && (b % i == 0))
{
gy = i;
}
}

printf("您输入的两个整数的最大公约数为%d", gy);
return 0;
}
1
2
3
请输入两个整数:
25 5
您输入的两个整数的最大公约数为5

求两数的最小公倍数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h>

int main()
{
int a, b;
int i = 0;
int gb = 0;
//这个变量是核心,最小公倍数的求法,就是先找到这两个数中的最大值,
//如果满足这个最大值刚好可以被这两个数整除,那么该数就是这两个数的最小公倍数,如果不是那就+1

printf("请输入两个整数:\n");
scanf("%d%d", &a, &b);

//先将两个数的最大值找出来
if (a >= b)
{
gb = a;
}
else
{
gb = b;
}

//开始判断
while (1)
{
if (gb % a == 0 && gb % b == 0)
{
printf("您输入的两个整数的最大公约数为%d", gb);
break;
}
else
{
gb++;
}
}

return 0;
}
1
2
3
请输入两个整数:
25 5
您输入的两个整数的最大公约数为25

计算阶乘

  一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。

  n!=1×2×3×…×n

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>

int main()
{
int n = 0;
int i = 0;
int jc = 1;

printf("请输入多个自然数:\n");
while (~scanf("%d", &n))
{
jc = 1;//第二组数据输入后jc要归1

if (n < 0)
{
printf("非法输入\n");
}
else if (n == 0)
{
printf("0!=1\n");
}
else if (n > 0)
{
for (i = 1; i <= n; i++)
{
jc *= i;
}
printf("%d!=%d\n", n, jc);
}
}

return 0;
}
1
2
3
4
5
6
7
8
9
请输入多个自然数:
-1 0 1 2 3 4 5
非法输入
0!=1
1!=1
2!=2
3!=6
4!=24
5!=120

输出26个英文字母

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>

int main(void)
{
char ch = 0;

printf("输入d显示大写字母,输入x显示小写字母: ");
scanf("%c", &ch);

if (ch == 'd')
{
for (ch = 'A'; ch <= 'Z'; ch++)
{
printf("%c ", ch);
}
}
else if (ch == 'x')
{
for (ch = 'a'; ch <= 'z'; ch++)
{
printf("%c ", ch);
}
}
else
{
printf("非法输入\n");
}

return 0;
}
1
2
输入d显示大写字母,输入x显示小写字母: d
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

判断用户输入的数据为几位数

  用户输入数据,判断该数字是几位数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

int main(void)
{
int number = 0; //用来存放用户输入的数值
int count = 0;//用来记录我们猜测的数值位数。

printf("请输入一个数,我来判断你输入的是几位数:\n");
scanf("%d", &number);

while (number != 0)//当number/10等于0时
{
number = number / 10;//更新number
count++;//先更新在记录,先记录在更新的话记录的是前一次数值的位数。
}

printf("您所输入的数是%d位数", count);

return 0;
}
1
2
3
请输入一个数,我来判断你输入的是几位数:
123456756
您所输入的数是9位数

计算一个数的 n 次方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>

int main(void)
{
int x, y;
int result = 1;
int flag = 0;

printf("请输入底数:");
scanf("%d", &x);

printf("请输入指数:");
scanf("%d", &y);

flag = y;
while (flag != 0)
{
result *= x;
flag--;
}

printf("%d的%d次方是%d\n", x, y, result);
}
1
2
3
请输入底数:2
请输入指数:10
210次方是1024

判断素数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#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
2
3
4
5
6
7
8
9
输入一个正整数:
1
1 不是素数。
输入一个正整数:
2
2是素数。
输入一个正整数:
67
67是素数。

输出水仙花数

  水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>

int main(void)
{
int number;
int a, b, c;//分别存放个位数,十位数,百位数。

printf("所有的水仙花数:\n");

for (number = 100; number < 999; number++)
{
a = number % 10;
b = number / 10 % 10;
c = number / 100;

if (number == (a * a * a + b * b * b + c * c * c))
{
printf("%d ", number);
}
}

return 0;
}
1
2
所有的水仙花数:
153 370 371 407

判断回文数

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

这个题我之前也有一篇博客中写到了,比较详细,可以康康,点我进入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>

int main(void)
{
int number = 0;
int n_number = 0;
int last_number = 0;
int flag = 0;

printf("请输入一个数:\n");
scanf("%d", &number);
flag = number;

number = flag;
while (number != 0)
{
last_number = number % 10;
n_number = n_number * 10 + last_number;
number = number / 10;
}

number = flag;
if (n_number == number)
{
printf("您输入的数是回文数。\n");
}
else
{
printf("您输入的数不是回文数。\n");
}

return 0;
}
1
2
3
4
5
6
请输入一个数:
1234321
您输入的数是回文数。
请输入一个数:
123
您输入的数不是回文数。

求一个数的所有因数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main(void)
{
int number = 0;
int i = 0;

printf("请输入一个整数\n");
scanf("%d", &number);

for (i = 1; i <= number; i++)//0不可做除数从1开始
{
if (number % i == 0)
{
printf("%d ", i);
}
}

return 0;
}
1
2
3
请输入一个整数
24
1 2 3 4 6 8 12 24

创建各类三角形图案

  这类题有个近似的通法,我之前的博客有写到,而且比这个全一点,博客点我进入


正直角三角形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>

int main(void)
{
int n;
int i, j;

printf("请输入您要输出的直角三角形的边数:\n");
scanf("%d", &n);

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

return 0;
}
1
2
3
4
5
6
7
请输入您要输出的直角三角形的边数:
5
*
* *
* * *
* * * *
* * * * *

翻转直角三角形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main(void)
{
int n;
int i, j;

printf("请输入您要输出的翻转直角三角形的边数:\n");
scanf("%d", &n);

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

return 0;
}
1
2
3
4
5
6
7
请输入您要输出的翻转直角三角形的边数:
5
* * * * *
* * * *
* * *
* *
*

正数字直角三角形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>

int main(void)
{
int n;
int i, j;

printf("请输入您要输出的数字直角三角形的边数:\n");
scanf("%d", &n);

for (i = 0; i < n; i++)
{
for (j = 0; j < i + 1 ; j++)
{
printf("%d ",j);
}
printf("\n");
}

return 0;
}
1
2
3
4
5
6
7
请输入您要输出的数字直角三角形的边数:
5
0
0 1
0 1 2
0 1 2 3
0 1 2 3 4

翻转数字直角三角形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>

int main(void)
{
int n;
int i, j;

printf("请输入您要输出的翻转数字直角三角形的边数:\n");
scanf("%d", &n);

for (i = 0; i < n; i++)
{
for (j = 0; j < n - i ; j++)
{
printf("%d ",j);
}
printf("\n");
}

return 0;
}
1
2
3
4
5
6
7
请输入您要输出的翻转数字直角三角形的边数:
5
0 1 2 3 4
0 1 2 3
0 1 2
0 1
0

正字母直角三角形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>

int main(void)
{
int n;
int i, j;

printf("请输入您要输出的字母直角三角形的边数:\n");
scanf("%d", &n);

for (i = 0; i < n; i++)
{
for (j = 0; j < i + 1 ; j++)
{
printf("%c ",j + 65);
}
printf("\n");
}

return 0;
}
1
2
3
4
5
6
7
请输入您要输出的字母直角三角形的边数:
5
A
A B
A B C
A B C D
A B C D E

翻转字母直角三角形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>

int main(void)
{
int n;
int i, j;

printf("请输入您要输出的翻转字母直角三角形的边数:\n");
scanf("%d", &n);

for (i = 0; i < n; i++)
{
for (j = 0; j < n - i ; j++)
{
printf("%c ",j + 65);
}
printf("\n");
}

return 0;
}
1
2
3
4
5
6
7
请输入您要输出的翻转字母直角三角形的边数:
5
A B C D E
A B C D
A B C
A B
A

正金字塔三角形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>

int main(void)
{
int n;
int i, j;

printf("请输入您要输出的金字塔三角形的行数:\n");
scanf("%d", &n);

for (i = 0; i < n; i++)
{
for (j = 0; j < n - i ; j++)
{
printf(" ");
}
for (j = 0; j < i + 1; j++)
{
printf("* ");
}
printf("\n");
}

return 0;
}
1
2
3
4
5
6
7
请输入您要输出的金字塔三角形的行数:
5
*
* *
* * *
* * * *
* * * * *

翻转金字塔三角形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>

int main(void)
{
int n;
int i, j;

printf("请输入您要输出的翻转金字塔三角形的行数:\n");
scanf("%d", &n);

for (i = 0; i < n; i++)
{
for (j = 0; j < i + 1; j++)
{
printf(" ");
}
for (j = 0; j < n - i; j++)
{
printf("* ");
}

printf("\n");
}

return 0;
}
1
2
3
4
5
6
7
请输入您要输出的翻转金字塔三角形的行数:
5
* * * * *
* * * *
* * *
* *
*

菱形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
int main(void)
{
int n = 0;
int i = 0, j = 0;

while (~scanf("%d", &n))
{
for (i = 0; i < n; i++)
{
for (j = 0; j < i; j++)
{
printf(" ");
}
for (j = 0; j < n - i; j++)
{
printf("* ");
}
printf("\n");
}
}

return 0;
}
1
2
3
4
5
6
7
8
3
*
* *
* * *
* * * *
* * *
* *
*

杨辉三角

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>

int main()
{
int rows = 0;//行数
int number = 1;//数字值
int space = 0;//空格
int i, j = 0;//控制循环

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)
number = 1;
else
number = number * (i - j + 1) / j;

printf("%4d", number);
}
printf("\n");
}

return 0;
}
1
2
3
4
5
6
7
8
9
行数: 8
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1

弗洛伊德三角形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h> 

int main()
{
int i, j, l;
int n;

printf("您要输出几行\n请输入:");
scanf("%d", &n);

for (i = 0, l = 1; i < n; i++)//新增一个变量l
{
for (j = 0; j < i + 1; j++, l++)//让l在内层循环后加1,第二行的话就成了2开头了
{
printf("%4d", l);
}
printf("\n");
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
您要输出几行
请输入:8
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36

表格形式输出数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h> 

int main()
{
int i, j, l;
int n;

printf("您要输出几行\n请输入:");
scanf("%d", &n);

for (i = 0, l = 1; i < n; i++)
{
for (j = 0; j < 10; j++, l++)
{
printf("%4d", l);
}
printf("\n");
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
您要输出几行
请输入:10
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100

实现简单的计算器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# include <stdio.h>

int main()
{

char ch;
double n1, n2;

printf("输入操作符 (+, -, *, \\):\n ");
scanf("%c", &ch);

printf("输入两个数字: ");
scanf("%lf %lf", &n1, &n2);

switch (ch)
{
case '+':
printf("%.2lf + %.2lf = %.2lf", n1, n2, n1 + n2);
break;

case '-':
printf("%.2lf - %.2lf = %.2lf", n1, n2, n1 - n2);
break;

case '*':
printf("%.2lf * %.2lf = %.2lf", n1, n2, n1 * n2);
break;

case '/':
printf("%.2lf / %.1lf = %.2lf", n1, n2, n1 / n2);
break;

default:
printf("非法输入\n");
}

return 0;
}
1
2
3
4
输入操作符 (+, -, *, \):
+
输入两个数字: 2020 2021
2020.00 + 2021.00 = 4041.00