人民邮电出版社出版的c语言程序设计中的错误有哪些

Python010

人民邮电出版社出版的c语言程序设计中的错误有哪些,第1张

1. 书写标识符时,忽略了大小写字母的区别。

int main( void )

{

int a = 5

printf( "%d", A )

return 0

}

编译器认为 a 和 A 是两个不同的变量名,而显示出错信息。C 语言规定大写字母和小写字母是不同的字符;而有些编程语言是不分大小写的。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。

2. 忽略了变量的类型,进行了不合法的运算。

int main( void )

{

float a, b

printf( "%d", a % b )

return 0

}

% 是求余运算符,a % b 的结果是 a 除以 b 的余数。只有 % 左右两边的操作数都是整型时,才可以进行求余运算。故而上面的程序是错误的,因为 a 和 b 是浮点型变量。

3. 将字符常量与字符串常量混淆。

char c

c = "a"

这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C 语言规定以 \0

作字符串常量的结束标志,它是由系统自动加上的,所以 "a" 实际上包含两个字符:'a' 和 '\0'。所以把 "a" 赋给字符变量是不行的。

4. 忽略了“=”与“==”的区别。

许多高级语言都使用“=”符号作为关系运算符的“等于”。如 BASIC 程序中可以写:

if ( a = 3 ) then …

但 C 语言中,“=”是赋值运算符,“==”才是关系运算符。如:

if (a == 3)

a = b

a == 3 是比较 a 是否等于 3;而 a = b表示把 b 的值赋给 a。初学者往往会把 a == 3 错写成 a = 3,这样写是符合语法的,但是不符合我们的期望。如果错写成了 a = 3,有些编译器会给出警告。

5. 忘记加分号

分号是 C 语句中不可缺少的一部分,语句末尾必须有分号。

a = 1

b = 2

编译时,编译器发现“a = 1”后面没有分号,就会报错。改错时,如果在编译器所说的有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。

6. 多加分号。

{

z = x + y

t = z / 100

printf( "%f", t )

}

上面代码中,大括号 } 后面的分号()是毫无必要的!因为单独一个 也是合法的 C 语言语句,所以 } 后面写了 也是合法的,但是毫无必要!又如:

if ( a % 3 == 0 )

i++

程序员的本意是如果 3 整除 a,则 i 加 1。但由于 if ( a % 3 == 0 ) 后加了分号,则 if 语句到此结束。不论 3 是否整除 a,程序都会执行 i++语句。再如:

for ( i = 0i <5i++ )

{

scanf( "%d", &x )

printf( "%d", x )

}

程序员的本意是先后输入 5 个数,每输入一个数后再将它输出。但由于for () 后加了一个分号,循环体变为空语句 。空语句 执行 5 次后,下面的程序块才开始执行,导致的结果是只能输入一个数并输出它。

7. 使用 scanf 函数时忘记加取址运算符“&”。

int a, b

scanf( "%d %d", a, b )

这样写是错误的!应该改成 scanf( "%d %d", &a, &b )

8. 输入数据的方式与要求不符。

scanf( "%d %d", &a, &b )

输入时,不能用逗号作两个数据间的分隔符。例如:3, 4 。而要使用空格、回车或者 tab 键作为分隔符。例如:3 4 。如果我们想用逗号(,)来做分隔符,可以这样写:

scanf( "%d,%d", &a, &b )

此时不用逗号而用空格或其它字符是不对的。例如:3:4 。又如:

scanf("a=%d,b=%d",&a,&b)

输入应如以下形式:

a=3,b=4

9. 输出的数据类型与所用格式说明符不一致。

例如,a 定义为整型,b 定义为浮点型

int a = 3

float b = 4.5

printf( "%f%d\n", a, b )

编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。应该改成:

printf( "%d%f\n", a, b )

10. 输入数据时,企图规定精度。

scanf( "%7.2f", &a )

这样做是不合法的,输入数据时不能规定精度。

11. switch 语句中漏写 break 语句。

例如:根据考试成绩的等级打印出百分制数段。

switch ( grade ) {

case 'A':

printf( "85~100\n" )

case 'B':

printf( "70~84\n" )

case 'C':

printf( "60~69\n" )

case 'D':

printf( "<60\n" )

default:

printf( "error\n" )

由于漏写了 break 语句,当 grade 值为 A 时,printf 函数在执行完第一个语句后会接着执行第二、三、四、五个 printf 函数语句。正确写法应在每个分支后再加上“break”。例如:

case 'A':

printf( "85~100\n" )

break

12. 忽视了 while 和 do-while 语句在细节上的区别。

(1) int main( void )

{

int a = 0, i

scanf( "%d", &i )

while ( i <= 10 ) {

a += i

++i

}

printf( "%d", a )

return 0

}

(2) int main( void )

{

int a = 0, i

scanf( "%d", &i )

do {

a += i

++i

} while ( i <= 10 )

printf( "%d", a )

return 0

}

可以看到,当输入 i 的值小于或等于 10 时,二者得到的结果相同。而当 i>10 时,二者结果就不同了。因为 while

循环是先判断后执行,而 do-while 循环是先执行后判断。对于大于 10 的数 while 循环的循环体一次也不执行,而 do-while

语句则要执行一次。

13. 定义数组时误用变量。

int n = 6

int a[n]

C99 以前,数组名后用方括号括起来必须是常量,包括常量表达式。但是在最新的 C99 标准中,上面的代码是正确无误的。如果您的编译器不支持 C99 ,那么上面的代码不能通过编译。

14. 在定义数组时,将定义的“元素个数”误认为是可使的最大下标值。

int main( void )

{

int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }

printf( "%d", a[10] )

return 0

}

C 语言规定:定义时如果用 a[10],则表示数组 a 有 10 个元素,其下标值范围为0到9。a[10]不属于上面定义的数组中。对 a[10] 进行赋值可能导致程序崩溃!

15. 在不应加地址运算符 &的位置加了地址运算符。

char s[100]

scanf( "%99s", &s )

C 语言中,数组名代表该数组的起始地址。因此上面的代码中,s 本身就已经是一个地址了,我们不需要再对它进行取址运算。正确的写法应该是:scanf( "%99s", s )

MSDN 技术资源库是为使用微软工具、产品和技术的开发人员提供的精华资源。它包含丰富的技术编程信息,包括示例代码、文档、技术文章和参考指南。

它有独立的安装文件,

大概1-2G左右的空间。

VC++6.0自己按步骤安装即可。挺简单的。

这么多教材只看过谭浩强的,但是很多人很讨厌谭浩强的书, 里面有不少错误,还有很多人推荐《C primer plus》。但我觉得作为教材不需要在意是哪个版本的,其实内容都差不多。多思考,多写代码才是学习语言的最快的方法。