鱼C论坛

 找回密码
 立即注册
查看: 2874|回复: 4

[技术交流] C++(1st)

[复制链接]
发表于 2021-1-29 20:17:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一叶枫残 于 2021-2-8 17:58 编辑

对于小甲鱼的数组求和代码的深入探究
源代码如下
  1. #include <iostream>

  2. using namespace std;

  3. int addArray( int *array, int n);

  4. int main()
  5. {
  6.         int array[]={0,1,2,3,4,5,6,7,8,9};
  7.         int size;
  8.        
  9.         size = sizeof(array) / sizeof(array[0]);
  10.         cout << "输出结果为:" << addArray(array, size) << endl;
  11.        
  12.         return 0;
  13. }

  14. int addArray( int *array , int n)
  15. {
  16.         int sum = 0;
  17.         int i;
  18.        
  19.         for( i = 0; i < n; i++ )
  20.         {
  21.                 sum+=*array++;
  22.         }
  23.        
  24.         return sum;
  25. }
复制代码


问题注意:
对于下行代码
  1. size = sizeof(array) / sizeof(array[0]);
复制代码

不能够写成下面形式
  1. size = array / sizeof(array[0]);
复制代码
  1. size = sizeof(array) / array[0];
复制代码

对于前者,编译器会进行报错,报错信息如下(作者使用的编译器是dev-c++):[Error] invalid operands of types 'int [10]' and 'long long unsigned int' to binary 'operator/'
意思是int [10]和long long unsigned int是操作符%的无效的操作数
原因是无法用一个地址除以一个整形这类错误
因为编译器会报错,所以很容易被发现

但是对于后者,大多数编译器并不会报错,但输出结果是空白
对于这类错误的解决方案很简单,设置断点调试,再运行到这段错误语句是编译器会弹出报错信息:program received signal SIGFPE,arithmetic exception
这个错误信息一般是数组越界、死循环或者对空容器进行某些操作导致,而导致这个原因是用整形除以一个地址,只要发现并改正就好

对于
  1. cout << "输出结果为:" << addArray(array, size) << endl;
复制代码

后面的<<endl的作用是换行,去掉不会报错以及影响输出结果(只是少了段换行)
但夹在"输出结果为"与addArray(array, size)中间的<<要写,否则报错,所以使用cout<<时后面的每个变量(数量不限)的之间都要加上<<

对于
  1. using namespace std
复制代码

如果不写这句话,输出就要改为
  1. std::cout << "输出结果为:" <<addArray(array, size) << std::endl;
复制代码


课后思考作业
要求:编写一个程序,要求用户输入一串整数和任意数目的空格,这些整数必须位于同一行中,但允许出现在该行中的任何位置。当用户按下键盘上的
“Enter”键时,数据输入结束,程序自动对所有的整数进行求和并打印出结果。
  1. #include <iostream>
  2. #include <string.h>
  3. using namespace std;

  4. int Sum_stringint(char charstr[]);
  5. int function_addarray_weight(int *getarray);
  6. int function_index(int ind, int j);

  7. int main()
  8. {
  9.         char charstr[100];
  10.         gets(charstr);
  11.         cout << Sum_stringint(charstr) << endl;
  12.        
  13.         return 0;
  14. }

  15. int Sum_stringint(char charstr[])
  16. {
  17.         int i, j=0 , sum = 0;
  18.         int array[100];
  19.         int getarray[10]={0};
  20.        
  21.         for(i=0; charstr[i]!='\0';i++)
  22.         {
  23.                 if(charstr[i]==' ')
  24.                 {                       
  25.                         j=0;
  26.                         sum+=function_addarray_weight(getarray);
  27.                         memset(getarray, 0, sizeof(int)*10);
  28.                 }
  29.                 else
  30.                 {
  31.                         getarray[j]=int(charstr[i])-48;
  32.                         j++;
  33.                 }
  34.         }
  35.         sum+=function_addarray_weight(getarray);
  36.        
  37.         return sum;
  38. }

  39. int function_index(int ind, int j)
  40. {
  41.         int i;
  42.         int sum=1;
  43.         for(i=0; i<j; i++)
  44.         {
  45.                 sum*=ind;
  46.         }
  47.         return sum;
  48. }

  49. int function_addarray_weight(int *getarray)
  50. {
  51.         int i, len=0,sum=0;
  52.         int *p = getarray;
  53.         for(i = 0; *p!=0; i++)
  54.         {
  55.                 *p++;
  56.                 len++;
  57.         }
  58.         for(i = len-1; i>=0; i--)
  59.         {
  60.                 sum+=(*getarray) *  function_index(10,i);
  61.                 *getarray++;
  62.         }
  63.        
  64.         return sum;
  65.        
  66. }
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-1-29 20:54:12 | 显示全部楼层
不错!
还有
辛苦啦!~~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-30 15:24:17 | 显示全部楼层
非常感谢,MARK
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-4 15:28:03 | 显示全部楼层
感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-5 00:17:50 | 显示全部楼层
辛苦了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-1 06:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表