itgle.com

阅读以下说明和C程序代码,将程序补充完整。[说明]下面C程序代码的功能是:对于输入的一个正整数n(100≤n<1000),先判断其是否是回文数(正读反读都一样的数)。若不是,则将n与其反序数相加,再判断得到的和数是否为回文数,若还不是,再将该和数与其反序数相加并进行判断,依此类推,直到得到一个回文数为止。例如,278不是回文数,其反序数为872,相加后得到的1150还不是回文数,再将1150与其反序数511相加,得到的1661是回文数。函数int isPalm(long m)的功能是:将正整数m的各位数字

题目

阅读以下说明和C程序代码,将程序补充完整。

[说明]

下面C程序代码的功能是:对于输入的一个正整数n(100≤n<1000),先判断其是否是回文数(正读反读都一样的数)。若不是,则将n与其反序数相加,再判断得到的和数是否为回文数,若还不是,再将该和数与其反序数相加并进行判断,依此类推,直到得到一个回文数为止。例如,278不是回文数,其反序数为872,相加后得到的1150还不是回文数,再将1150与其反序数511相加,得到的1661是回文数。

函数int isPalm(long m)的功能是:将正整数m的各位数字取出存入数组中,然后判断其是否为回文数。若m是回文数则返回1,否则返回0。

[C程序代码]

include<stdio.h>

include<stdlib.h>

int isPalm(long m)

{

int i=0, k=0;

char str[32];

while(m>0) {

str[k++]= _______ +'0';

m=m/10;

}

for(i=0; i<k/2; i++)

if(str[i]!=str _______ )return 0;

return 1;

}

int main( )

{

long n, a, t;

printf("input a positive integer: "); scanf("%ld", &n);

if(n<100||n>=1000)return -1;

while( _______ ) {

printf("%id->", n);

for(a=0, t=n; t>0; ){

a= _______ *10+t%10; t=t/10;

n= _______ ;

printf("%id\n", n);

system("pause"); return 0;


相似考题
更多“阅读以下说明和C程序代码,将程序补充完整。[说明] 下面C程序代码的功能是:对于输入的一个正整数n( ”相关问题
  • 第1题:

    阅读以下说明和流程图,回答问题1-2,将解答填入对应的解答栏内。

    [说明]

    下面的流程图采用欧几里得算法,实现了计算两正整数最大公约数的功能。给定正整数m和 n,假定m大于等于n,算法的主要步骤为:

    (1)以n除m并令r为所得的余数;

    (2)若r等于0,算法结束;n即为所求;

    (3)将n和r分别赋给m和n,返回步骤(1)。

    [流程图]

    [问题1] 将流程图中的(1)~(4)处补充完整。

    [问题2] 若输入的m和n分别为27和21,则A中循环体被执行的次数是(5)。


    正确答案:[问题1] (1) n>m或nm或其它等效形式 (2) m←t (3) n←r (4) m%n [问题2] (5) 1
    [问题1] (1) n>m或nm或其它等效形式 (2) m←t (3) n←r (4) m%n [问题2] (5) 1 解析:(1)~(2)当n的值大于(等于)m时,应交换两者的值,再使用欧几里得算法;
    (3)~(4)略;
    (5)m,n和r在执行循环A前后的值分别为:

  • 第2题:

    阅读以下说明和C语言函数,将解答填入对应栏内。

    【说明】

    下面待修改的C程序完成的功能是:对于给定的一个长正整数,从其个位数开始,每隔一位取一个数字(即取其个位、百位、万位等数字),形成一个新的整数并输出。例如,将该程序修改正确后,运行时若输入“14251382”,则输出的整数为“4532”。

    下面给出的C程序代码中有五个错误,请指出所有的错误。

    【C程序代码】

    01 include <stdio.h>

    02

    03 int main()

    04 {

    05 long n, num;

    06 int i;

    07

    08 do {

    09 printf("请输入一个正整数:");

    10 scanf("%ld", n);

    11 }while(n <= 0);

    12 k = 1;

    13 for (i = 1; n >= 0; i++) {

    14 if (i % 2 = 1) {

    15 num= num+ (n % 10) * k;

    16 k = k * 10;

    17 }

    18 n = 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 ”
    错误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行,循环条件错误,导致无穷循环。
    考生应多上机调试程序,这样就可以熟悉常见的程序错误,从而提高编程水平和效率。

  • 第3题:

    从键盘输入一个3位数的正整数,将其反向输出(如输入123,输出321)。 提交要求: (1)把程序代码和运行结果并排显示,进行截图直接提交到“答案区”。 (2)把程序代码保存到一个文本文件中(如: 1.txt),并上传附件。


    Practice1.java

  • 第4题:

    下面的程序代码执行之后,输出如下结果,请填写空白处将程序补充完整:


    正确答案:
    i>=j i<j Print
    【解析】观察题目中要求的图形,再接合程序段中第1个双重for循环的作用是给x二维数组的元素赋值,可以看出当数组下标i<j时,数组元素赋给-1;当数组下标i>=j时,数组元素赋给1。第3个空显然是使用Print语句实现换行。

  • 第5题:

    阅读以下说明和Java程序代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    在下面的Java程序代码中,类SalesTicket能够完成打印票据正文的功能,类 HeadDecorator与FootDecorator分别能够完成打印票据的台头和脚注的功能。

    已知该程序运行后的输出结果如下所示,请填补该程序代码中的空缺。

    这是票据的台头!

    这是票据正文!

    -------------------

    这是票据的脚注!

    这是票据的台头!

    这是票据的脚注!

    【tava程序代码】

    public class SalesTicket {

    public void printTicket() {

    System. out. println ( "这是票据正文 ! ");

    }

    }

    public class Decorator extends SalesTicket{

    SalesTicket ticket;

    public Decorator(SalesTicket t) {

    ticket = t;

    }

    public void printTicket(){

    if(ticket != null)

    ticket.printTicket();

    }

    public class HeadDecorator extends Decorator{

    public HeadDecorator(SalesTicket t) {

    (1)

    }

    public void printTicket() {

    System. out.println("这是票据的台头! ");

    super.printTicket();

    }

    }

    public class FootDecorator extends Decorator{

    public FootDecorator(SalesTicket t) {

    (2);

    }

    public void printTicket() {

    super, printTicket ();

    System. out.println ("这是票据的脚注!");

    }

    }

    public class Main {

    public static void main(String[] args) {

    T = new HeadDecorator( (3));

    T=(4);

    System.out.println("------------------------------------");

    T = new FootDecorator((5));

    T.printTicket ();

    }

    }


    正确答案:(1)super(t) (2)super(t) (3)new FootDecorator(new SalesTicket()) (4)printTicket() (5)new HeadDecorator(null)
    (1)super(t) (2)super(t) (3)new FootDecorator(new SalesTicket()) (4)printTicket() (5)new HeadDecorator(null) 解析:本题中的类HeadDecorator和FootDecorator都继承了Decortator类,因此在构造函数中需要对Decorator类进行初始化,所以空(1)和(2)处应该为super(t)。类Main中空(3)和(4)处程序代码的输出为“这是票据的台头!这是票据正文!这是票据的脚注!”,由于T是一个headDecorator类的实例,因此空(4)处一定是printTicket方法的调用,类headDecorator将输出“这是票据的台头!”后调用其父类的printTicket方法,而仅仅只有FootDecorator类可以输出“这是票据的脚注!”,因此,当前父类的具体实例对象应该为FootDecorator的实例,所以空(3)处应该为new(FootDecorator(new SalesTicket))。空(5)同空(3)原理相同,但由于不需要输出票据的正文,因此在构造HeadDecorator对象的时候其参数为null即可。