目录😋
任务描述
本关任务:编写函数求区间[100,500]中所有的回文数,要求每行打印10个数。
相关知识
为了完成本关任务,你需要掌握:
- 循环控制 / 跳转语句的使用
- 算术运算字符(% / * +)
- 回文数的概念
一、循环控制 / 跳转语句的使用
1. 循环控制语句(for 循环)
- 基本原理:
for
循环是一种常用的循环结构,它允许您指定一个初始化表达式、一个循环条件和一个更新表达式。语法格式为for(初始化表达式; 循环条件; 更新表达式)
。初始化表达式在循环开始时执行一次,用于初始化循环变量。循环条件在每次循环迭代开始时进行检查,如果为真,则执行循环体中的代码。更新表达式在每次循环体执行完后执行,用于更新循环变量。- 示例代码
int main() { // 打印1到10的数字 for (int i = 1; i <= 10; i++) { printf("%d ", i); } printf("\n"); return 0; }
2. 循环控制语句(while 循环)
- 基本原理:
while
循环在循环开始时检查循环条件。只要条件为真,就会执行循环体中的代码。语法格式为while(循环条件)
。循环条件是一个表达式,它返回一个布尔值(真或假)。在循环体中,通常需要包含一些能够改变循环条件的语句,否则可能会导致无限循环。- 示例代码
int main() { int i = 1; while (i <= 10) { printf("%d ", i); i++; } printf("\n"); return 0; }
3. 跳转语句(break 语句)
- 基本原理:
break
语句用于立即跳出当前循环(for
、while
、do - while
)或switch
语句。当程序执行到break
语句时,循环或switch
语句会立即终止,程序控制流将跳转到循环或switch
语句后的下一条语句。- 示例代码(在循环中使用 break)
int main() { for (int i = 1; i <= 10; i++) { if (i == 5) { break; } printf("%d ", i); } printf("\n"); return 0; }
4. 跳转语句(continue 语句)
- 基本原理:
continue
语句用于跳过当前循环迭代的剩余部分,直接开始下一次循环迭代。当程序执行到continue
语句时,循环体中continue
语句之后的代码将不会被执行,而是直接跳转到循环的更新表达式(对于for
循环)或循环条件检查(对于while
和do - while
循环)。- 示例代码(在循环中使用 continue)
int main() { for (int i = 1; i <= 10; i++) { if (i == 5) { continue; } printf("%d ", i); } printf("\n"); return 0; }
二、算术运算字符(% / * +)
算术运算于 C 语言仿若精密 “齿轮组”,驱动着数值处理流程。以回文数判断代码片段为例:
while(i > 0){ j = j*10 + i%10; i /= 10; }
1. 算术运算符(%)
(1)基本概念
- 在 C 语言中,
%
是取余运算符,也称为模运算符。它用于计算两个整数相除后的余数。例如,表达式a % b
的结果是a
除以b
后的余数。余数的取值范围是从 0 到b - 1
(假设b
是正数)。- 例如,
7 % 3
的结果是 1,因为 7 除以 3 商为 2,余数为 1;9 % 3
的结果是 0,因为 9 能被 3 整除,余数为 0。(2)运算规则
取余运算要求两个操作数必须是整数类型,包括
char
、short
、int
、long
等基本整数类型。如果操作数是浮点数,在 C 语言中是不允许直接进行%
运算的。运算结果的符号与被除数(
%
左边的数)相同。例如,-7 % 3
的结果是 -1,因为 -7 除以 3 商为 -2,余数为 -1;7 % -3
的结果是 1,因为 7 除以 -3 商为 -2,余数为 1。2. 整除运算(/)
(1)基本运算功能
- 在 C 语言中,“/” 是除法运算符。它用于计算两个操作数相除的商。例如,“int a = 10; int b = 2; int c=a /b;”,这里变量 a 的值为 10,b 的值为 2,a 除以 b 的商是 5,这个结果被赋给变量 c。
- 操作数可以是整数类型(如 int、long 等)和浮点数类型(如 float、double)。当操作数都是整数时,执行整数除法,得到的结果也是整数。例如,“int x = 7; int y = 3; int z = x /y;”,此时 z 的值为 2,因为整数除法会舍去小数部分。
- 当操作数中有浮点数时,执行浮点数除法,会得到带有小数部分的结果。例如,“float a = 7.0; float b = 3.0; float c = a /b;”,此时 c 的值约为 2.333333(具体精度取决于编译器和数据类型)。
(2)运算符优先级
- 除法运算符 “/” 的优先级和乘法运算符 “*” 相同。在表达式中,它们的运算优先级高于加法 “+” 和减法 “-”。例如,在表达式 “int result = 2 + 8 / 4;” 中,先计算除法 8/4 = 2,然后再计算加法 2 + 2 = 4。
- 同样,“/” 的优先级低于括号 “()”。如果表达式为 “int result=(2 + 8)/4;”,则先计算括号内的加法 2 + 8 = 10,然后再进行除法 10/4 = 2(整数除法)。
(3)特殊情况:除数为零
- 当除数为零时,在整数除法和浮点数除法中会出现不同的情况。
- 在整数除法中,除数为零是一种未定义行为。例如,“int a = 5; int b = 0; int c=a /b;”,这样的代码可能会导致程序崩溃或者出现不可预测的结果。
- 在浮点数除法中,C 语言的标准规定,除数为零会产生特殊的值。对于 IEEE 754 标准的浮点数(C 语言中的 float 和 double 通常遵循此标准),当用一个非零的浮点数除以零,结果是正无穷或负无穷。例如,“float a = 5.0; float b = 0.0; float c = a /b;”,此时 c 的值可能是正无穷(如果 a 是正数)或者负无穷(如果 a 是负数),具体取决于编译器和浮点数的表示方式。
(4)应用场景和示例
- 在计算平均值、比例等情况时经常会用到除法运算符。例如,计算一个班级学生的平均成绩。假设有 5 个学生的成绩分别存储在数组 scores 中,代码如下:
int scores[5] = {80, 90, 75, 85, 95}; int sum = 0; for(int i = 0; i < 5; i++){ sum += scores[i]; } float average = (float)sum / 5;
- 在这个示例中,首先通过循环计算成绩总和 sum,然后将总和 sum 转换为浮点数(通过
(float)sum
这种类型转换),再除以学生人数 5,得到平均成绩 average。这里如果不进行类型转换,就会执行整数除法,得到不准确的结果。3. 乘法运算(*)
(1)基本运算规则
- 在 C 语言中,乘法运算符(*)用于计算两个操作数的乘积。操作数可以是整数(如
int
、long
等)、浮点数(float
、double
)或者字符型(char
)数据。例如:
- 整数乘法:
int a = 3; int b = 4; int c = a * b;
,这里a
和b
是整数,c
的值为 12,这是简单的整数乘法运算。- 浮点数乘法:
float x = 2.5; float y = 3.0; float z = x * y;
,此时z
的值为 7.5,展示了浮点数的乘法运算。- 字符型数据乘法(实际上是字符对应的 ASCII 码值的乘法):
char ch1 = 'A'; char ch2 = 2; char result = ch1 * ch2;
,字符'A'
对应的 ASCII 码值是 65,所以result
对应的 ASCII 码值为 130。
(2)运算符优先级
- 乘法运算符(*)的优先级高于加法运算符(+)。在一个表达式中,如果同时出现乘法和加法,乘法会先进行运算。例如:
int val = 2 + 3 * 4;
,先计算3 * 4 = 12
,然后再计算2+12 = 14
。- 但乘法运算符(*)的优先级低于括号(())。例如:
int another_val=(2 + 3) * 4;
,会先计算括号内的加法2 + 3 = 5
,然后再进行乘法5 * 4 = 20
。(3)应用场景
- 在计算几何图形的面积和体积时经常会用到乘法运算。例如,计算矩形的面积,设矩形的长为
length
,宽为width
,面积area = length * width
。- 在处理数据的缩放或者倍数关系时也很有用。比如,将一个数组中的所有元素的值放大两倍,可以使用
for
循环结合乘法运算来实现:
int array[5] = {1, 2, 3, 4, 5}; for(int i = 0; i < 5; i++){ array[i] *= 2; }
4. 加法运算(+)
(1)基本运算规则
- 加法运算符(+)用于计算两个操作数的和。操作数的类型可以是整数、浮点数、字符型等。例如:
- 整数加法:
int num1 = 3; int num2 = 4; int sum = num1 + num2;
,sum
的值为 7。- 浮点数加法:
float f1 = 2.5; float f2 = 3.5; float result_f = f1 + f2;
,result_f
的值为 6.0。- 字符型加法(实际上是字符对应的 ASCII 码值的加法):
char ch3 = 'A'; char ch4 = 1; char final_ch = ch3 + ch4;
,因为'A'
的 ASCII 码值是 65,所以final_ch
对应的 ASCII 码值为 66,即字符'B'
。
(2)运算符优先级
- 加法运算符(+)和减法运算符(-)优先级相同,在没有括号的情况下,按照从左到右的顺序进行计算。例如:
int value = 3 + 4 - 2;
,先计算3 + 4 = 7
,然后再计算7 - 2 = 5
。- 加法运算符(+)的优先级低于乘法运算符(*)和除法运算符(/)。例如:
int complex_val = 2 * 3 + 4;
,先计算2 * 3 = 6
,然后再计算6 + 4 = 10
。(3)应用场景
- 在计算总和时经常使用加法运算。比如计算一系列数字的总和,使用循环和加法运算符可以实现:
int numbers[5] = {1, 2, 3, 4, 5}; int total = 0; for(int i = 0; i < 5; i++){ total += numbers[i]; }
- 在处理字符串拼接(在 C 语言中通过字符数组来模拟字符串)时,也会用到加法的概念。例如,将两个字符数组中的字符串拼接在一起(假设字符数组足够大来容纳拼接后的字符串):
char str1[10] = "Hello"; char str2[10] = "World"; char str3[20]; int i, j; for(i = 0; str1[i]!= '\0'; i++){ str3[i] = str1[i]; } for(j = 0; str2[j]!= '\0'; j++){ str3[i + j] = str2[j]; } str3[i + j]='\0';
三、回文数的概念
1. 定义
- 回文数是指一个数字从左向右读和从右向左读是一样的,例如 121、1331 等。简单来说,它具有对称的数字结构。
2. 举例说明
- 一位数的回文数有 0、1、2、3、4、5、6、7、8、9。因为这些数从左往右和从右往左读都是一样的。
- 两位数的回文数有 11、22、33、44、55、66、77、88、99。比如 11,从左边读是十一,从右边读也是十一。
- 三位数的回文数如 101、111、121、131 等。以 121 为例,从左往右读是一百二十一,从右往左读也是一百二十一。
- 四位数的回文数像 1001、1111、1221 等。拿 1001 来说,从左到右和从右到左的读法相同,都是一千零一。
3. 在数学中的应用及意义
- 数学趣味问题:回文数常出现在一些数学趣味谜题或者数学竞赛题目中。例如,寻找某个范围内的回文数,或者通过特定运算得到回文数等。比如:一个两位数,个位和十位数字相同,这个数一定是回文数,设这个数的十位数字是( 编辑是整数且 编辑),那么这个数可以表示为 编辑,这就将回文数和代数式联系起来了。
- 数字规律研究:研究回文数有助于发现数字的一些特殊规律。在数论领域,数学家会研究回文数的性质,例如回文素数(既是回文数又是素数的数,如 11、101 等)。通过研究这些特殊的回文数,可以深入了解数的整除性、因数分解等数论问题。
编程要求
根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。
测试说明
平台会对你编写的代码进行测试:
预期输出:注意:每一个数据输出格式为 printf("%4d", i);
101 111 121 131 141 151 161 171 181 191 202 212 222 232 242 252 262 272 282 292 303 313 323 333 343 353 363 373 383 393 404 414 424 434 444 454 464 474 484 494
开始你的任务吧,祝你成功!
通关代码
int convert(int n)//判断是否是一个回文数 { int i, j = 0; i = n; //请在此添加代码 /*********Begin*********/ while(i > 0){ j = j*10 + i%10; i /= 10; } return n == j; /********* End *********/ } int main() { int i,k=0; // k统计每行打印个数 //请在此添加代码 /*********Begin*********/ for (int i = 100;i <= 500;i++){ if(convert(i)){ printf("%4d",i); k++; if(k == 10){ printf("\n"); k = 0; } } return 0; //printf("%4d", i); 打印时用格式 %4d /********* End *********/ }
测试结果