当前位置:   article > 正文

c题目3:从键盘读入一个3位数,判断该数是否水仙花数_从键盘输入一个三位数,判断是否是

从键盘输入一个三位数,判断是否是

每日小语:

还是再睡一会儿,把这一切晦气事统统忘掉吧。——《变形记》

1.自己写代码

经过前两次作业的完成,都是通过chatgpt完成的,这次的作业打算自己敲一下,看看自己是否能够独立完成。

题目: 从键盘读入一个3位数,判断该数是否水仙花数

(1)解析题目

水仙花数是什么?

水仙花数,也被称为自恋数、阿姆斯特朗数,是一个特殊的三位数。它是指一个三位数,它的每个位上的数字的立方和等于它本身。简单来说,一个三位数的个位、十位和百位数字的立方和等于该三位数本身。

例如,153是一个水仙花数,因为 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153。

在三位数范围内,水仙花数共有4个:153、370、371和407

(2)敲写代码

疑问1:如何挨个读取每一位的数?

这个问题其实在isbn中出现过,但我确在此遗忘,只依稀记得是for(;;){}loop,然后还有什么

疑问2:incompatible implicit declaration of built-in function 'strlen'

缺少包含该函数的头文件#include <string.h>

疑问3:明明153是水仙花数,为什么不对
疑问4:passing argument 1 of 'strlen' from incompatible pointer type

"passing argument 1 of 'strlen' from incompatible pointer type" 错误通常在将不兼容的指针类型作为参数传递给 `strlen` 函数时发生。在 C 语言中,`strlen` 函数接受一个指向以空字符结尾的字符串的指针作为参数。如果将一个不兼容的指针类型传递给 `strlen` 函数,编译器会发出上述错误消息。

疑问5:passing argument 1 of 'strlen' from incompatible pointer type

"传递给 'strlen' 的参数类型不兼容" 错误通常在将不兼容的指针类型作为参数传递给 `strlen` 函数时发生。

在 C 语言中,`strlen` 函数的参数应该是一个指向以空字符 `\0` 结尾的字符数组的指针。如果将一个不兼容的指针类型传递给 `strlen` 函数,编译器会发出这个错误提示。

注意1:ASCII码中的符号'^'不用于表示立方,需要使用'*'符号代替。此外,还需要将字符型数组中的字符转化为对应的整数进行计算。
注意2:在使用函数 atoi 之前,需要包含头文件 <stdlib.h> 以进行函数的声明。atoi 是一个标准库函数,用于将字符串转换为整数。

嘿嘿,忘记了阿巴阿巴

(3)代码结果

  1. #include <stdio.h>
  2. #include <string.h>
  3. // 从键盘读入一个3位数,判断该数是否水仙花数
  4. int main()
  5. {
  6. //读入
  7. char num[4];
  8. int i,sum=0;
  9. printf("输入一个数:");
  10. scanf("%s",num);
  11. //判断
  12. //num的位数不等于3
  13. if (strlen(num)!=3)
  14. {
  15. printf("输入位数不等于3");
  16. return 0;
  17. }
  18. if (strlen(num)==3)
  19. {
  20. sum=num[0]**3+num[1]**3+num[2]**3;
  21. if (sum==num)
  22. {
  23. printf("该数为水仙花数");
  24. }
  25. else
  26. {
  27. printf("该数不是水仙花数");
  28. }
  29. return 0;
  30. }
  31. return 0;
  32. }

目前搞出来是这样的,可惜结果并不合我的意思。

然后又用gpt帮我改了一下,这是结果

  1. #include <stdio.h>
  2. #include <string.h>
  3. // 从键盘读入一个3位数,判断该数是否水仙花数
  4. int main()
  5. {
  6. // 读入
  7. char num[4];
  8. int i, sum = 0;
  9. printf("输入一个数:");
  10. scanf("%s", num);
  11. // 判断
  12. // num的位数不等于3
  13. if (strlen(num) != 3)
  14. {
  15. printf("输入位数不等于3\n");
  16. return 0;
  17. }
  18. sum = (num[0] - '0') * (num[0] - '0') * (num[0] - '0') +
  19. (num[1] - '0') * (num[1] - '0') * (num[1] - '0') +
  20. (num[2] - '0') * (num[2] - '0') * (num[2] - '0');
  21. if (sum == atoi(num))
  22. {
  23. printf("该数为水仙花数\n");
  24. }
  25. else
  26. {
  27. printf("该数不是水仙花数\n");
  28. }
  29. return 0;
  30. }

gpt真厉害,次次对。。。

疑问1:atoi是什么?

`atoi` 是 C 语言中的一个标准库函数,用于将字符串转换为整数(ASCII to integer)。

在 C 语言中,整数数据类型和字符数据类型是不同的,如果需要将字符串表示的数字转换为整数类型,可以使用 `atoi` 函数。

请注意,如果字符串无法转换为整数,`atoi` 函数将返回 0,并不会产生错误或警告。因此,在使用 `atoi` 函数时,需要确保传递的字符串确实可以转换为整数,以避免不准确的结果。

疑问2:
  1. sum = (num[0] - '0') * (num[0] - '0') * (num[0] - '0') +
  2. (num[1] - '0') * (num[1] - '0') * (num[1] - '0') +
  3. (num[2] - '0') * (num[2] - '0') * (num[2] - '0');

看来平方还是得老老实实两个数相乘。gpt思考半天了,它也想不出来。。。

那今天这道题就算完美结束啦,撒花撒花!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/269320
推荐阅读
相关标签
  

闽ICP备14008679号