xzh莫小痕 发表于 2023-7-29 21:39:35

帮帮忙,谢谢啦

大家好,小白想问一下就是从16行代码开始,是在表达什么,c语言小白,实在是看不懂,想请教一下,谢谢啦

isdkz 发表于 2023-7-29 21:39:40

你好!没问题,我会尽力解释给你听。请把那16行代码贴出来,这样我才能帮你理解它表达的含义。同时,如果你能告诉我代码所属的上下文和用途,我也会更好地帮助你理解。期待你的代码和更多信息!

Mike_python小 发表于 2023-7-29 21:40:17

关于 C/C++ 代码的解析

以下是对您提供的 C/C++ 代码进行解析的说明:


#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int a;
    for (int i = 0; i < n; i++) {
      cin >> a;
    }
    for (int i = 0; i < n - 1; i++) {
      for (int j = 0; j < n - i - 1; j++) {
            if (a > a) {
                int temp = a;
                a = a;
                a = temp;
            }
      }
    }
    for (int i = 0; i < n; i++) {
      cout << a << " ";
    }
    return 0;
}


1. 引入头文件和命名空间:

#include <iostream>
using namespace std;

这段代码引入了iostream头文件,使我们可以使用标准输入输出流(如cin和cout)。using namespace std;语句是为了省略后续使用std::前缀的必要性,使得我们可以直接使用cin和cout。

2. 主函数:

int main() {
    // ...
    return 0;
}

这是程序的入口点,所有的代码都将在此函数中执行。函数返回一个整数值表示程序的退出状态。

3. 变量声明和输入:

int n;
cin >> n;
int a;

这段代码声明了一个整数变量n,并通过标准输入流cin获取一个整数值赋给n。接着,声明了一个大小为n的整数数组a。

4. 冒泡排序算法:

for (int i = 0; i < n - 1; i++) {
    for (int j = 0; j < n - i - 1; j++) {
      if (a > a) {
            int temp = a;
            a = a;
            a = temp;
      }
    }
}

这是冒泡排序算法的实现部分。通过两层嵌套的循环,依次比较相邻的两个元素,如果顺序错误,则交换它们的位置。

5. 输出结果:

for (int i = 0; i < n; i++) {
    cout << a << " ";
}

这段代码使用循环遍历排序后的数组a,并通过标准输出流cout输出每个元素,元素之间用空格分隔。

6. 返回状态码:

return 0;

这行代码表示程序正常退出,并返回状态码0,表示成功执行。

希望以上解答对您有所帮助。如果还有其他问题,请随时提问!

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

xzh莫小痕 发表于 2023-7-29 21:44:02

我主要看不懂16行代码
num=10*num+(ch-'0');

liuhongrun2022 发表于 2023-7-29 21:44:27

我给你人工讲一下吧,稍等哈

xzh莫小痕 发表于 2023-7-29 21:44:53

我主要看不懂16行代码
num=10*num+(ch-'0');

xzh莫小痕 发表于 2023-7-29 21:45:31

liuhongrun2022 发表于 2023-7-29 21:44
我给你人工讲一下吧,稍等哈

好的,谢谢啦

liuhongrun2022 发表于 2023-7-29 21:47:19

我先讲一下14行。
每一个字符都可以转换为固定的ASCII码
这句判断就能只有为这些('0' '1' '2' '3' '4' '5' '6' '7' '8' '9')中字符的可以通过

香蕉那个不拿拿 发表于 2023-7-29 21:49:56

根据ASCLL码,CH这一个变量减去0这个字符,得到的就是CH所代表的数字

liuhongrun2022 发表于 2023-7-29 21:50:44

本帖最后由 liuhongrun2022 于 2023-7-29 21:51 编辑

xzh莫小痕 发表于 2023-7-29 21:45
好的,谢谢啦

num*10相当于进了一位
如:1->10,2->20,17->170

ch-'0'很好解释
ch刚刚和你说了,就是那十个字符
'1'-'0'就可以转换为数字1,'2'-'0'就可以转换为数字2,

两者相加就相当于往num的末尾又加了一位数

给个最佳答案吧,我可辛苦的打了这么多字呢!{:10_254:}

香蕉那个不拿拿 发表于 2023-7-29 21:51:45

故而num = num*10 +(ch-‘0’)
就是将CH这一个字符所代表的数字添加到num变量的末尾

香蕉那个不拿拿 发表于 2023-7-29 21:52:43

本帖最后由 香蕉那个不拿拿 于 2023-7-29 22:00 编辑

故而
这一串代码可以将一串字符中的数字提取出来输出

liuhongrun2022 发表于 2023-7-29 21:53:23

这整个代码相当于将一个字符型的数,不管几位,转换为整数型

香蕉那个不拿拿 发表于 2023-7-29 21:54:16

其中,do while语句的只要检测到换行,“\n”就会退出

tommyyu 发表于 2023-7-29 21:58:32

本帖最后由 tommyyu 于 2023-7-29 22:04 编辑

C语言中,部分字符(包括数字字符)可以与 ASCII 码互相转换。'0' 的 ASCII 码是 48,'1' 的是 49 ,以此类推,'9' 的是 57 。
所以,ch - '0'将 ch 的 ASCII 值与 '0' 的ASCII值相减。当 ch = '0' 时,原式 = '0' - '0' = 48 - 48 = 0;当 ch = '9' 时,原式 = '9' - '0' = 57 - 48 = 9。
故 ch - '0' 可以将 字符ch 转变为 一个数字,即从 '0' 变成 0,'1' 变成 1。

而 num = 10 * num + (ch - '0') 是在对 num 进行增加位数的操作:
我们先假设读入了 123。
第 1 轮循环,num 原有的值是 0,此时 ch 的值是 '1',操作过后 num = 10 * 0 + 1 = 1
第 2 轮循环,num 原有的值是 1,此时 ch 的值是 '2',操作过后 num = 10 * 1 + 2 = 12
第 3 轮循环,num 原有的值是 12,此时 ch 的值是 '3',操作过后 num = 10 * 12 + 3 = 123

因此,这一句代码实现了在读入一个数字后将其添加到 num 原有数字后面的操作。

香蕉那个不拿拿 发表于 2023-7-29 21:58:37

代码流程如下
输入转换字符
循环{
若该字符ASCLL码在0到9之间
{
      将该字符所代表的数字加到num的末尾
}
若检测到换行
{
       退出循环   
}
}
输出转换完了的num

xzh莫小痕 发表于 2023-7-29 22:08:05

各位大佬,我好像没看懂,我以我自己有限的知识,说一下我的理解就是,ch=getchar(),指的就是我输入的字符串通过ASC码赋值给ch,
if(ch>='0'&&ch<='9'),指的是在字符串中寻找0-9的数字,我看了各位的评论,我还是没懂16行有啥作用

香蕉那个不拿拿 发表于 2023-7-29 22:16:13

好比现在有123这一个字符串
循环一: 16行的num = 10*num +(ch-“0”)即为num = 0 + 1(ch) = 1
循环二      num = 10*num + (ch - “0”) 即为 num = 10 * 1 +2(ch) = 10 + 2 = 12
循环三   num = 10*num + (ch - “0”) 即为 num = 10 * 12 + 3(ch) = 120 + 3 = 123

xzh莫小痕 发表于 2023-7-29 22:16:14

tommyyu 发表于 2023-7-29 21:58
C语言中,部分字符(包括数字字符)可以与 ASCII 码互相转换。'0' 的 ASCII 码是 48,'1' 的是 49 ,以此类 ...

大佬,我想问一下,ch的ACSII码由getchar()赋值给的,getchar()是有我输入的字符和字符串提供的,如果假设我输入的是有数字有字母的字符串,getchar()ASCII码怎么转化出来的,我比较好奇一个字母的ASCII码是容易转化的,但是字符串是怎么转化的,谢谢啦

liuhongrun2022 发表于 2023-7-29 22:16:37

本帖最后由 liuhongrun2022 于 2023-7-29 22:20 编辑

xzh莫小痕 发表于 2023-7-29 22:08
各位大佬,我好像没看懂,我以我自己有限的知识,说一下我的理解就是,ch=getchar(),指的就是我输入的字符 ...

ch=getchar(),指是接受一个字符
if(ch>='0'&&ch<='9')指的是如果ch为字符型的0-9,那么就执行第16行
第16行的作用,我局个例子
我输入了1234
第一回:收到'1',num = 0*10+1 = 1
第二回:收到'2',num = 1*10+2 = 12
第三回:收到'2',num = 12*10+3 = 123
第三回:收到'2',num = 123*10+4 = 1234

第16行会将num末尾插入新输入的那个数字!!!


给个最佳答案呗{:10_254:}

ASCII码对照表:
https://pic3.zhimg.com/v2-99d2c2240b51e0dc2772927113111992_b.webp?consumer=ZHI_MENG
页: [1] 2
查看完整版本: 帮帮忙,谢谢啦