鱼C论坛

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

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

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

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

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

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<<时后面的每个变量(数量不限)的之间都要加上<<

对于
using namespace std
如果不写这句话,输出就要改为
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;
        
}

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-29 20:54:12 | 显示全部楼层
不错!
还有
辛苦啦!~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-30 15:24:17 | 显示全部楼层
非常感谢,MARK
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-4 15:28:03 | 显示全部楼层
感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-5 00:17:50 | 显示全部楼层
辛苦了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 04:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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