问题 问答题

【说明】 下面待修改的C程序完成的功能是:对于给定的一个长正整数,从其个位数开始,每隔一位取一个数字(即取其个位、百位、万位等数字),形成一个新的整数并输出。例如,将该程序修改正确后,运行时若输入“14251382”,则输出的整数为“4532”。 下面给出的C程序代码中有五个错误,请指出所有的错误。【C程序代码】01 #include <stdio.h>0203 int main()04 {05 long n, num;06 int i;0708 do {09 printf("请输入一个正整数:");10 scanf("%ld", n);11 }while(n <= 0);12 k = 1;13 for (i = 1; n >= 0; i++) {14if (i % 2 = 1) {15 num= num+ (n % 10) * k;16k = k * 10;17}18n = n / 10;19 }20 printf("新数据为: %d \n",num);21 return 0;22 }

答案

参考答案:

错误1:变量k没有声明(或定义)。

错误2:变量num没有初始化,或者num应初始化为0。

错误3:第10行scanf函数参数错,或者“scanf("%1d",n);”中的n应该为“&n”;或者n之前应加取地址符号。

错误4:第13行循环条件错,或改为“n>0”。

错误5:第14行if语句条件错,将“=”改为“==”;或者将“1%2=1”改为“i% 2==1 ”

解析:

[分析]: 本题考查程序检错和排错能力。 程序错误一般分成语法错误和语义错误两种类型,其中语法错误是形式上的错误,语义错误是含义上的错误,编译程序能够发现程序中的所有语法错误。 语义错误又可分为静态语义错误和动态语义错误,静态语义错误编译时检查,而动态语义错误在程序运行时表现。 C程序中,常见的错误有:使用的变量没有定义、变量没有赋值初就直接使用、输入输出的数据类型与所用格式说明符不一致、超出数据范围、输入时数据的组织方式与要求不符、误把“=”作为关系运算符“等于”、语句的分号缺少或放置错误、缺少“{}”、符号引用错误,“(、)、[、]”括号不配对、引用数组元素超界等。 在本题的程序中,使用变量num的语句为“num=num+(n%10)*k;”。由于变量 num没有赋初值,该语句运行的结果导致num的值是不确定的。 在本题给出的程序中,出现了如下错误。 (1)使用的变量k没有定义(语法错误,编译程序报告:k是未定义的标识符)。 (2)变量num没有赋初始值就直接使用(动态语义错误),应将其初始值设为0。由于num是局部变量,使用变量num的语句为“num=num+(n%10)*k”,系统不保证对其进行初始化,导致程序的运行结果不确定。 (3)第14行,误把“=”作为关系运算符“等于”(语法错误), (4)第10行,输入变量时忘记使用地址符号(动态语义错误),运行时变量n不能正确接收输入的数据。 (5)第13行,循环条件错误,导致无穷循环。 考生应多上机调试程序,这样就可以熟悉常见的程序错误,从而提高编程水平和效率。

单项选择题 A1/A2型题
单项选择题