如何用VS写出更好的代码

1.调试

1.1调试中数组传参时如何观察数组

一维数组传参也是同理,数组名后面加逗号

1.2用调试的方法,来具体看看strcpy函数的使用

strcpy函数在使用之前两个数组中的元素

strcpy函数调用之后数组中的元素变化

2.如何写出更好的的代码

1.使用assert

2.使用const

assert可以对代码进行很好的限制,如用在指针当中

const可以对变量指针等进行限制,以保证其存储的值不会被改变

2.1关于assert的使用

assert是断言部分,当()内表达式值为0是就会出现弹窗报错

assert是库函数,在使用前要加上头文件<saaert.h>

 

当传递空指针时,会直接报错

2.2const修饰指针和变量

2.21const修饰变量

当const修饰变量时变量依旧是变量,不是常量

只是这种变量不能被修改,这一点在vs编译器中可以用变长数组来验证

有const修饰时无法直接对变量进行修改,编译器会报错

但是可以通过解引用的方式对变量进行修改

这样就会显得const在修饰的时候有些无用,接下来就会涉及到const修饰指针

2.22const修饰指针时的情况

const在*左边时

const在左边时,const修饰的是*p即const *p,

这样其实限制的就是*p所指向的变量,此时指针变量p是可变的

const在*右边时

const在*右边时,const限制的是指针变量p,也就是说p变量中的地址不可变,

但是此时*p是可变的,也就可以同过解引用来该变p所存储地址所指向变量的值

练习1模拟实现strcpy函数

先来观察一下strcpy函数

我们可以看到strcpy函数的返回类型是char*,两个形参的类型是char*,

其中传递字符串的数组是const char*,用来限制对字符串的改变

//练习1模拟实现strcpy函数

#include<assert.h>
char* My_strcpy(char* p1, const char* p2)
{
	char* rst = p1;
	assert(p1 != NULL);
	assert(p2 != NULL);//保证传第过来的不是空指针
	
	while (*p1++ = *p2++)//到最后*p2为'\0'时,'\0'allsc值为0,退出循环
	{
		;
	}
	return rst;
}

int main()
{
	char arr1[20] = { "******************" };
	char arr2[] = { "hello world" };
	printf("%s\n", My_strcpy(arr1, arr2));
	return 0;
}

练习2模拟实现strlen函数

先来观察一下strlen函数

我们可以看到strlen函数的返回类型是size_t,即无符号整型,形参是用const修饰的char*

//练习二,模拟实现strlen函数
#include<assert.h>
size_t My_strlen(const char* str)//保证arr数组中的字符串不会被改变
{
	assert(str != NULL);//在函数中用到函数解引用时最好断言
	size_t len = 0;      //保证指针的有效性
	while (*str != '\0')
	{
		len++;
		str++;
	}
	return len;
}

int main()
{
	char arr[] = { "abcdefg" };
	size_t len = My_strlen(arr);
	printf("%zd\n", len);
	return 0;
}

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个更详细的基于ARIMA模型的汽车销量预测的Python代码示例: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from statsmodels.tsa.arima_model import ARIMA from sklearn.metrics import mean_squared_error # 读取数据 data = pd.read_csv('car_sales.csv', index_col='Month', parse_dates=True) # 数据预处理 data_diff = data.diff().dropna() # 一阶差分 train_data = data_diff[:'2018-12-01'] test_data = data_diff['2019-01-01':] # 模型训练与预测 model = ARIMA(train_data, order=(1, 1, 1)) result = model.fit(disp=False) forecast = result.forecast(steps=len(test_data))[0] # 预测结果还原 forecast_recover = [] last_sales = data.iloc[-1][0] for i in range(len(forecast)): predict_sales = forecast[i] + last_sales forecast_recover.append(predict_sales) last_sales = predict_sales forecast_recover = pd.Series(forecast_recover, index=test_data.index) # 评估预测效果 mse = mean_squared_error(test_data, forecast_recover) rmse = np.sqrt(mse) # 绘制预测结果 plt.plot(data, label='Actual') plt.plot(forecast_recover, label='Forecast') plt.legend() plt.show() print('ARIMA模型预测汽车销量的RMSE为:', round(rmse, 2)) ``` 在这个示例代码中,我们首先读取了一个名为`car_sales.csv`的数据集,该数据集包含了过去几年的汽车销售数据。接下来,我们进行了一阶差分的数据预处理,以便进行时间序列建模。然后,我们将数据集划分为训练集和测试集,其中训练集包括2014年1月到2018年12月的数据,测试集包括2019年1月到2020年1月的数据。 接下来,我们使用ARIMA模型进行训练,其中`(1, 1, 1)`是ARIMA模型的参数,表示采用1阶差分和1阶自回归项和1阶移动平均项。然后,我们使用拟合好的模型进行未来12个月的销量预测,并将预测结果和实际销量数据一起绘制在同一张图中进行比较。 在模型预测结束后,我们将预测结果还原回原始数据集的单位,并使用均方根误差(RMSE)作为模型预测效果的评估指标。最后,我们将预测结果和实际销量数据一起绘制在同一张图中进行比较,并输出RMSE评估结果。 请注意,这只是示例代码,实际上,对于预测汽车销量这样的问题,可能需要更多的数据清洗和特征工程处理,以及更复杂的时间序列模型和参数调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值