问题 多项选择题

【说明】
如图6-13所示的程序流程图描述了对8位二进制整数求补的算法。该算法的计算过程如下:从二进制数的低位(最右位)开始,依次向高位逐位查看,直到首次遇到“1”时,停止查看。然后,对该“1”位左面的更高位(如果存在的话),逐位求反,所得的结果就是对原二进制数求补的结果。例如:对二进制整数10010110求补的结果时01101010。
设8位二进制整数中的各位,从低位到高位,依次存放在整型数组BIT的BIT[1]~BIT[8]中。例如,二进制整数10010110存放在数组BIT后,则有BIT[1]=0,BIT[2]=1,…,BIT[7]=0,BIT[8]=1。若流程图中存在空操作,则用NOP表示。


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

答案

参考答案:第C行,变量num没有初始化,应将其初始值设为0
第G行,scanf函数参数错,应将语句“scanf("%Ad",n);”中的n修改为“&n”,或者在n之前加取地址符号
第AC行,循环条件错,应将语句中“n>=O”修改为“n>0”

解析:[要点解析]
本问题考查程序检错和排错能力。程序错误一般分成语法错误和语义错误两种类型,其中语法错误是形式上的错误,语义错误是含义上的错误,编译程序能够发现程序中的所有语法错误。语义错误又可分为静态语义错误和动态语义错误,静态语义错误编译时检查,而动态语义错误在程序运行时表现。
在C程序中,常见的错误有:①使用的变量没有定义;②变量没有赋值初就直接使用;③输入输出的数据类型与所用格式说明符不一致;④超出数据范围;⑤输入时数据的组织方式与要求不符;⑥误把“=”作为关系运算符“等于”;⑦语句的分号缺少或放置错误;⑧缺少花括号“{

单项选择题
单项选择题