Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【C语言程序设计——函数】回文数判定(头歌实践教学平台习题)【合集】

【C语言程序设计——函数】回文数判定(头歌实践教学平台习题)【合集】

作者头像
Rossy Yan
发布于 2025-01-13 00:19:33
发布于 2025-01-13 00:19:33
12700
代码可运行
举报
运行总次数:0
代码可运行

任务描述

本关任务:编写函数求区间[100,500]中所有的回文数,要求每行打印10个数。


相关知识

为了完成本关任务,你需要掌握:

  1. 循环控制 / 跳转语句的使用
  2. 算术运算字符(% / * +)
  3. 回文数的概念
一、循环控制 / 跳转语句的使用
1. 循环控制语句(for 循环)

基本原理for循环是一种常用的循环结构,它允许您指定一个初始化表达式、一个循环条件和一个更新表达式。语法格式为for(初始化表达式; 循环条件; 更新表达式)。初始化表达式在循环开始时执行一次,用于初始化循环变量。循环条件在每次循环迭代开始时进行检查,如果为真,则执行循环体中的代码。更新表达式在每次循环体执行完后执行,用于更新循环变量。

示例代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
int main() {
    // 打印1到10的数字
    for (int i = 1; i <= 10; i++) {
        printf("%d ", i);
    }
    printf("\n");
    return 0;
}
2. 循环控制语句(while 循环)

基本原理while循环在循环开始时检查循环条件。只要条件为真,就会执行循环体中的代码。语法格式为while(循环条件)。循环条件是一个表达式,它返回一个布尔值(真或假)。在循环体中,通常需要包含一些能够改变循环条件的语句,否则可能会导致无限循环。

示例代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
int main() {
    int i = 1;
    while (i <= 10) {
        printf("%d ", i);
        i++;
    }
    printf("\n");
    return 0;
}
3. 跳转语句(break 语句)

基本原理break语句用于立即跳出当前循环(forwhiledo - while)或switch语句。当程序执行到break语句时,循环或switch语句会立即终止,程序控制流将跳转到循环或switch语句后的下一条语句。

示例代码(在循环中使用 break)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
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循环)或循环条件检查(对于whiledo - while循环)。

示例代码(在循环中使用 continue)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            continue;
        }
        printf("%d ", i);
    }
    printf("\n");
    return 0;
}

二、算术运算字符(% / * +)

算术运算于 C 语言仿若精密 “齿轮组”,驱动着数值处理流程。以回文数判断代码片段为例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)运算规则

取余运算要求两个操作数必须是整数类型,包括charshortintlong等基本整数类型。如果操作数是浮点数,在 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 中,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 语言中,乘法运算符(*)用于计算两个操作数的乘积。操作数可以是整数(如intlong等)、浮点数(floatdouble)或者字符型(char)数据。例如:
    • 整数乘法:int a = 3; int b = 4; int c = a * b;,这里ab是整数,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循环结合乘法运算来实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)应用场景

在计算总和时经常使用加法运算。比如计算一系列数字的总和,使用循环和加法运算符可以实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int numbers[5] = {1, 2, 3, 4, 5};
int total = 0;
for(int i = 0; i < 5; i++){
  total += numbers[i];
}

在处理字符串拼接(在 C 语言中通过字符数组来模拟字符串)时,也会用到加法的概念。例如,将两个字符数组中的字符串拼接在一起(假设字符数组足够大来容纳拼接后的字符串):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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. 在数学中的应用及意义

  • 数学趣味问题:回文数常出现在一些数学趣味谜题或者数学竞赛题目中。例如,寻找某个范围内的回文数,或者通过特定运算得到回文数等。比如:一个两位数,个位和十位数字相同,这个数一定是回文数,设这个数的十位数字是(
a
a

是整数且

1\leq a\leq 9
1\leq a\leq 9

),那么这个数可以表示为

10a + a = 11a
10a + a = 11a

,这就将回文数和代数式联系起来了。

  • 数字规律研究:研究回文数有助于发现数字的一些特殊规律。在数论领域,数学家会研究回文数的性质,例如回文素数(既是回文数又是素数的数,如 11、101 等)。通过研究这些特殊的回文数,可以深入了解数的整除性、因数分解等数论问题。

编程要求

根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。


测试说明

平台会对你编写的代码进行测试:

预期输出:注意:每一个数据输出格式为 printf("%4d", i);

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 

开始你的任务吧,祝你成功!


通关代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<stdio.h>
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 *********/
}

测试结果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java网络编程——NIO三大组件Buffer、Channel、Selector
Java NIO(Java Non-Blocking IO)也就是非阻塞IO,说是非阻塞IO,其实NIO也支持阻塞IO模型(默认就是),相对于BIO来说,NIO最大的特点是支持IO多路复用模式,可以通过一个线程监控多个IO流(Socket)的状态,来同时管理多个客户端,极大提高了服务器的吞吐能力。
DannyHoo
2022/08/04
3690
Java网络编程——NIO三大组件Buffer、Channel、Selector
Java网络编程--NIO非阻塞网络编程
从Java1.4开始,为了替代Java IO和网络相关的API,提高程序的运行速度,Java提供了新的IO操作非阻塞的API即Java NIO。NIO中有三大核心组件:Buffer(缓冲区),Channel(通道),Selector(选择器)。NIO基于Channel(通道)和Buffer(缓冲区))进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中,而Selector(选择器)主要用于监听多个通道的事件,实现单个线程可以监听多个数据通道。
CodingDiray
2019/09/25
9380
Java网络编程--NIO非阻塞网络编程
NIO~~
NIO 有三大核心部分:Channel( 通道) ,Buffer( 缓冲区), Selector( 选择器)
大忽悠爱学习
2022/05/06
9150
NIO~~
012. NIO 非阻塞网络编程
1. Java NIO ---- 始于 Java1.4,提供了新的 JAVA IO 操作非阻塞 API。用意是替代 Java IO 和 Java Networking 相关的 API。 三个核心组件 Buffer 缓冲区 Channel 通道 Selector 选择器 2. Buffer 缓冲区 ---- 1. 介绍 缓冲区本质上是一个可以写入数据的内存块(类似数组),然后可以再次读取。此内存块包含在 NIO Buffer 对象中,该对象提供了一组方法,可以更轻松地使用内存块。 相比较直接对数组的操
山海散人
2021/03/03
4090
012. NIO 非阻塞网络编程
NIO非阻塞网络编程三大核心理念
1.capacity 容量:作为一个内存块,Buffer具有一定的固定大小,也称为【容量】。 2.position 位置:写入模式时代表写数据的位置。读取模式时代表读取数据的位置。 3.limit 限制:写入模式,限制等于buffer的容量,读取模式下,limit等于写入的数据量。
IT架构圈
2020/12/02
4010
NIO非阻塞网络编程三大核心理念
JDK10都发布了,nio你了解多少?
前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 本来我预想是先来回顾一下传统的IO模式的,将传统的IO模式的相关类理清楚(因为IO的类很多)。 但是,发现在整理
Java3y
2018/06/11
6220
03-Java NIO 编程 入门
缓冲区(Buffer) : 缓冲区本质上是一个可以读写数据的内存块, 可以理解成是一个容器对象(含数组), 该对象提供了一组方法,可以更轻松的使用内存块,缓冲区内置了一些机制,能够跟踪和记录缓冲区的状态变化情况,Channel提供了从文件,网络读取数据的渠道,但是读取或写入的数据必须经由Buffer, 如图: [后面举例说明]
彼岸舞
2022/02/18
3940
03-Java NIO 编程 入门
你对Java网络编程了解的如何?Java NIO 网络编程 | Netty前期知识(二)
在 Java 1.4 中引入了 NIO 框架(java.nio 包),提供了 Channel、Selector、Buffer 等新的抽象,可以构建多路复用的、同步非阻塞 IO 程序,同时提供了更接近操作系统底层的高性能数据操作方式
宁在春
2022/10/31
3310
你对Java网络编程了解的如何?Java NIO 网络编程 | Netty前期知识(二)
解开BIO、NIO、AIO神秘的面纱
本文内容涉及同步与异步, 阻塞与非阻塞, BIO、NIO、AIO等概念, 这块内容本身比较复杂, 很难用三言两语说明白. 而书上的定义更不容易理解是什么意思. 下面跟着我一起解开它们神秘的面纱。
yukong
2018/09/03
9020
解开BIO、NIO、AIO神秘的面纱
Java知识点——NIO和BIO
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jvUiQgVM-1584882587306)(img/NIO图例.png)]
用户7073689
2020/03/24
3880
面试官:BIO、NIO、AIO之间有什么区别?
在讲解 BIO、NIO、AIO 之前,我们先来回顾一下这几个概念:同步与异步,阻塞与非阻塞。
Java极客技术
2023/09/14
1.6K0
面试官:BIO、NIO、AIO之间有什么区别?
NIO详解
NIO (New lO)也有人称之为java non-blocking lO是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java lO API。
冬天vs不冷
2025/01/21
1870
NIO详解
java架构之路-(netty专题)初步认识BIO、NIO、AIO
  本次我们主要来说一下我们的IO阻塞模型,只是不多,但是一定要理解,对于后面理解netty很重要的
小菜的不能再菜
2020/02/21
4570
拔刀吧!BIO,NIO
也许你或多或少的会在平时接触到IO,也许你平时最经常接触到的就是文件IO流读写,也可能听过这两种IO的区别,所以今儿咱来聊一下这个东西。
Liusy
2020/09/01
8710
拔刀吧!BIO,NIO
NIO从入门到踹门
java.nio全称java non-blocking IO,是指JDK1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络(来源于百度百科)。
java技术爱好者
2020/09/22
9680
NIO从入门到踹门
Java IO(3)非阻塞式输入输出(NIO)
  在上篇《Java IO(2)阻塞式输入输出(BIO)》的末尾谈到了什么是阻塞式输入输出,通过Socket编程对其有了大致了解。现在再重新回顾梳理一下,对于只有一个“客户端”和一个“服务器端”来讲,服务器端需要阻塞式接收客户端的请求,这里的阻塞式表示服务器端的应用代码会被挂起直到客户端有请求过来,在高并发的应用场景有多个客户端发起连接下非阻塞式IO(NIO)是不二之选(且只需要在服务器端使用1个线程来管理,并不需要多个线程来处理多个连接)。在现实情况下,Tomcat、Jetty等很多Web服务器均使用了N
用户1148394
2018/01/09
1K0
Java IO(3)非阻塞式输入输出(NIO)
Java IO 模型之 BIO,NIO,AIO
应用场景:BIO 适合用于连接数比较小且固定的架构,这种方式对服务器资源要求比较高,但程序简单易理解。
Se7en258
2021/05/18
6740
Java IO 模型之 BIO,NIO,AIO
Java NIO?看这一篇就够了!
✎前言 现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能。在前面2篇文
方志朋
2019/06/21
1.1K0
Java NIO?看这一篇就够了!
NIO面试题
摘自【https://mp.weixin.qq.com/s/YIcXaH7AWLJbPjnTUwnlyQ】
红目香薰
2022/11/28
2000
BIO、NIO、AIO原理及总结
同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。
用户5325874
2020/04/13
8410
相关推荐
Java网络编程——NIO三大组件Buffer、Channel、Selector
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验