引言:
在学习C语言的过程中:我们通常会犯一定的错误,在此我将大家普遍会犯的错误分享给大家,以供大家参考!以下题为参考:
【问题描述】依次输入一个整型数组的元素值,然后将该数组前n个元素中的值按逆序重新存放。例如,输入值的顺序为8,6,5,4,1,2,逆序存放后的顺序为2,1,4,5,6,8的顺序存放(注意是逆序存放而不是逆序输出)。
【输入形式】第一行输入数组的元素个数,第二行输入依次输入元素值,用空格分开
【输出形式】逆序存放后的输入元素,用空格分开
【样例输入】
5
12 23 8 76 10
【样例输出】10 76 8 23 12
【样例说明】输入中的第一行的5表示对数组的前5个元素进行逆序存放,第二行依次为前5个元素的值;输出结果为逆序存放后数组的前n个元素值。
开始题解:
#include <stdio.h>
int main()
{
int a[999], j,i,k,b;
scanf ("%d",&j);
for (i = 0;i < j; i++)
{
scanf ("%d",&a[i]);
}
for (i = 0 ;i < (j / 2);i++)
{
b = a[i];
a[i] = a[j -1 - k];
a[j -1 - k] =b;
k++;
}
for (i = 0;i < j ; i++)
{
printf("%d ",a[i]);
}
return 0;
}
这算是正确的题解:但是我们会发现这个程序不会输出任何东西!
然后我们调试, 就会发现它的k的值是这样的:
这样的情况一般就是k值的初始化问题!在开始之处加上k = 0就能完美解决问题:
【思考】:我们这时候就想,对于变量的值是否是必要进行初始化呢?是不是所有的变量都需要初始化呢?
回过来看平时所做的题(一下想不到什么例子,就在这给你们写一下总结):
【解决思考】:
1.首先对于 所有变量在需要直接调用的情况下需要初始化:尤其是对于运算符的右边的量要进行操作的时候,尤其容易犯错!当然对于'<' 和'>' ‘||’ ‘&&’等等运算符的情况下一般不会出什么错误。但是对于循环操作数组的下标时容易犯错!没有对其进行初始化,结果出现错误!
2.然后是对于自加,‘ += ’ ‘ *= ’ ‘ /= ’ ‘ -= ’这一类运算符贼容易犯错!
【总结】:
首先,我们发现,对于必需要初始化的数值,一般都会是需要出现在左边的情况下以及使用这类‘+=’运算符时容易犯错! 比如 x += y;也就是 x = x + y;这时候需要x 具有初始化值才能对其正确的运算;
还有以及 需要进行直接使用的情况下需要进行初始化等等;
##这里差不多结束了,欢迎大家补充,和大佬纠正,谢谢;
##在这里分享一下关于递归的学习点击就可以访问:递归折半算法的简单实现