下面是一些被HDOJ玩弄的痛苦教训(低级错误和各种规范)
- 1.scanf(“”,&); &符号不要忘
- 2.输出格式要注意啊!printf里面要跟上\n!!!
- 3.若有多轮,则要注意做完一轮之后所有数据初始化!!!!!
- 4.scanf字符串的时候,直接scanf(“%s”,a); 而不是scanf(“%s”,&a[i]);
-
5.scanf(“%lf”);与scanf(“%.2lf”);不一样,尽量用前者
Q:指针为什么要动态空间?(是因为指针无所指!!)
因为它所指的地址不知道,不能解引用拿来运算,当然也不能拿来scanf,因为根本不知道解什么地址/或者是把输入的值放到哪个地址里面。。。。。
(补充字符串指针:在scanf赋值的时候,要先让指针有所指,或者是malloc()给他开辟一片空间//注意要手动free!!!//)
9.16
- 显示Runtime Error (ACCESS_VIOLATION)错误?原因可能是数组下标越界了,a[n]的n太大而没有定义
9.17
- 冒泡排序模板
int j;int i
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(a[j]<a[j+1])
{
int t;
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
}
}
冒泡排序三个关键点:
1.轮次为元素数-1;(轮次)
2.第一轮和第二轮冒泡有何差别?;(模拟、差异)
※3.冒泡方向(是向着每一轮元素减少的那个方向冒泡的),这关乎是 j++ or j- -(方向)
-
关于数组要不要全部初始化为0?
答:目前看来不需要 -
while(scanf("%d",&n)!=EOF &&n!=0)
和
while(scanf("%d",&n)!=EOF &&scanf("%d",&n)!=0)
两者辨识
要树立一个观念:碰到
scanf()
其实是一个函数,只要碰到它就会要求输入
那么这样看来,前者只要求输入一次,并且直接赋值给n;而后者输入了两次 -
定义数组时非常重要的一点,里面只能是具体数字而不能是字母
例如尽管
n=5
,但是不能
int a[n];
,只能
int a[5];
遇到具体题目的时候怎么办?
题目应该会提供某个变量的范围,够用就行了!
-
关于几个值的输出
做题的时候,怎么样输出才算规范?
for(i=0;i<n-1;i++)
{
printf("%d ",b[i]);
}
printf("%d\n",b[n-1]);
这玩意儿对做题太重要了!