在第五次编程作业中发现同学们最多的错误是输出格式问题,请同学们注意,下面对各个题的情况进行总结。
7-24
格式错误:输出多了多余的空格,输出格式不对,比如题目要求空格分隔开数字,结果有同学用\t分隔。
输入格式错误:输入long类型使用scanf("%d",n),应该使用scanf("%ld", n)。
逻辑错误:在本题中有同学逻辑错误,体现为循环条件错误,导致如:1001只会输出11,跳过中间的0;循环条件未控制好,导致运行超时(死循环);题目要求顺序输出数字的各个位,通过对10求余,并且将数更新为这个数除以10,得到的为逆序输出的结果,题目要求的顺序,请注意审题;这个题目有同学直接将输入以字符的格式来进行读入,然后用字符数组存储,然后进行输出操作,使用这种做法的同学希望也思考一下读入一个数字的情况。
编译错误:语法错误,请同学们注意语法错误问题,这个问题希望可以在提交前使用本地编译器进行检查并改正,或者使用oj网站的测试用例来进行错误的发现。
7-25
输出格式错误:请同学们仔细查看题目的输出格式要求,注意输出格式这个问题。
逻辑错误:循环条件编写错误,判断特殊情况的判断条件书写错误。题目要求将数字逆序,有同学直接将数字顺序输出,与题目不符,导致错误。
逻辑错误:这道题要考虑特殊情况,应该使用if else双分支结构,有同学使用if单分支结构导致错误;if else结构使用不当,输出语句位置放置不当,printf函数使用错误,printf输出变量的值不需要取地址符号 &(注意不要和scanf的用法混淆),int越界问题。
编译错误:书写代码时,中英符号混用,语法错误。
7-26
逻辑错误:循环条件编写错误,循环条件书写错误导致循环进入死循环; if语句条件书写错误导致考虑情况不周全;循环遍历时,循环遍历每一个数时,计算这个数的各个数位的平方之和时,忘记将求和变量sum清0;内外层循环对同一循环变量进行操作导致循环陷入死循环或答案错误;输出顺序错误,题目要求从小到大输出;条件判断语句错写为赋值语句(注意==与=的区别); 循环范围书写错误导致遗漏情况
编译错误:变量未定义就使用;中英文符号混合使用
段错误: 数组元素访问越界,在c语言中对数组的中元素的访问要特别注意越界问题。
7-27
逻辑错误:%错写为/,最后应该是平方数对一个10的次方数求余;
部分错误:很多错误都是用平方数来直接对10求余,用得出的值来和原数进行比较,这样只能是部分正确。首先要确定的是原数的位数i,然后用平方数对10^i次方求余,然后再比较;
逻辑错误:判断位数的循环条件写错;
编译错误:字符未定义就使用;
7-28
部分错误:循环条件应该是<=,而不是<,缺失了一种全是一种动物的情况;
答案错误:鸡、兔、蜻蜓的数量再循环中应该是从零开始逐渐加一,而不是逐渐减小的循环;
条件错误:在判断是否符合鸡、兔、蜻蜓的数量的条件是脚的数量满足并且头的数量满足,缺一不可;
编译错误:乘法是*,不可以省略,例如2*a,不能写出2a,不能是数学里的写法;
编译错误:括号不匹配,多出了一边括号;
7-29
部分错误:条件语句中判断的条件是<=的时候写出<,导致缺失一种情况;也不能直接写出==,因为做两道题,三道题,四道题的人数加起来可以小于总人数,剩下的人都是只做出一道题的;
运行超时:因为这道题只要求出做两道,三道,四道的人数,所以只需要三重循环,而从做一道的人数开始用四重循环虽然最后也能求出来,但是会导致运行超时无法通过;
这道题的思路其实和鸡兔蜻蜓那道题一样,都是一个遍历,只是判断条件的改变;
练习五的前4个题都涉及的操作是将一个数的数位分离开,这个操作可以通过如下代码来比较简洁的实现。

最后两个题目使用的是枚举算法,也就是枚举每一种可能的情况,对该情况进行判断。