|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 一叶枫残 于 2021-2-8 17:58 编辑
对于小甲鱼的数组求和代码的深入探究
源代码如下
- #include <iostream>
- using namespace std;
- int addArray( int *array, int n);
- int main()
- {
- int array[]={0,1,2,3,4,5,6,7,8,9};
- int size;
-
- size = sizeof(array) / sizeof(array[0]);
- cout << "输出结果为:" << addArray(array, size) << endl;
-
- return 0;
- }
- int addArray( int *array , int n)
- {
- int sum = 0;
- int i;
-
- for( i = 0; i < n; i++ )
- {
- sum+=*array++;
- }
-
- return sum;
- }
复制代码
问题注意:
对于下行代码
- size = sizeof(array) / sizeof(array[0]);
复制代码
不能够写成下面形式
- size = array / sizeof(array[0]);
复制代码- 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
这个错误信息一般是数组越界、死循环或者对空容器进行某些操作导致,而导致这个原因是用整形除以一个地址,只要发现并改正就好
对于
- cout << "输出结果为:" << addArray(array, size) << endl;
复制代码
后面的<<endl的作用是换行,去掉不会报错以及影响输出结果(只是少了段换行)
但夹在"输出结果为"与addArray(array, size)中间的<<要写,否则报错,所以使用cout<<时后面的每个变量(数量不限)的之间都要加上<<
对于
如果不写这句话,输出就要改为
- std::cout << "输出结果为:" <<addArray(array, size) << std::endl;
复制代码
课后思考作业
要求:编写一个程序,要求用户输入一串整数和任意数目的空格,这些整数必须位于同一行中,但允许出现在该行中的任何位置。当用户按下键盘上的
“Enter”键时,数据输入结束,程序自动对所有的整数进行求和并打印出结果。
- #include <iostream>
- #include <string.h>
- using namespace std;
- int Sum_stringint(char charstr[]);
- int function_addarray_weight(int *getarray);
- int function_index(int ind, int j);
- int main()
- {
- char charstr[100];
- gets(charstr);
- cout << Sum_stringint(charstr) << endl;
-
- return 0;
- }
- int Sum_stringint(char charstr[])
- {
- int i, j=0 , sum = 0;
- int array[100];
- int getarray[10]={0};
-
- for(i=0; charstr[i]!='\0';i++)
- {
- if(charstr[i]==' ')
- {
- j=0;
- sum+=function_addarray_weight(getarray);
- memset(getarray, 0, sizeof(int)*10);
- }
- else
- {
- getarray[j]=int(charstr[i])-48;
- j++;
- }
- }
- sum+=function_addarray_weight(getarray);
-
- return sum;
- }
- int function_index(int ind, int j)
- {
- int i;
- int sum=1;
- for(i=0; i<j; i++)
- {
- sum*=ind;
- }
- return sum;
- }
- int function_addarray_weight(int *getarray)
- {
- int i, len=0,sum=0;
- int *p = getarray;
- for(i = 0; *p!=0; i++)
- {
- *p++;
- len++;
- }
- for(i = len-1; i>=0; i--)
- {
- sum+=(*getarray) * function_index(10,i);
- *getarray++;
- }
-
- return sum;
-
- }
复制代码
|
|