如果一个正整数从高位到低位上的数字依次递减,则称其为降序数(如:9632是降序数,而8516则不是降序数)。现编写如下程序,判断输入的正整数是否为降序数。 Private Sub Command1 Click( ) Dim n As Long Dim flag As Boolean n=InputBox("输入一个正整数") S=Trim(Str(n)) For i=2 To Len(s) If Mid(s,i-1,1)<Mid(S,i,1)Then Exit For Next i If i=Len(S)

题目

如果一个正整数从高位到低位上的数字依次递减,则称其为降序数(如:9632是降序数,而8516则不是降序数)。现编写如下程序,判断输入的正整数是否为降序数。 Private Sub Command1 Click( ) Dim n As Long Dim flag As Boolean n=InputBox("输入一个正整数") S=Trim(Str(n)) For i=2 To Len(s) If Mid(s,i-1,1)<Mid(S,i,1)Then Exit For Next i If i=Len(S)Then flag=True Else flag=False If flag Then Print n;"是降序数" Else Print n;"不是降序数" End If End Sub 运行以上程序,发现有错误,需要对给flag变量赋值的If语句进行修改。以下正确的修改是( )。

A.If i=Len(s)+1 Then flag=False Else flag=True

B.If i=Len(s)+1 Then flag=True Else flag=False

C.If i=Len(s)-1 Then flag=False Else flag=True

D.If i=Len(s)-1 Then flag=True Else flag=False


相似考题

2.试题二(共 15 分)阅读以下说明和 C 程序代码,将应填入 (n) 处的字句写在答题纸的对应栏内。[说明]下面 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){ /*判断 m是否为回文数*/int i = 0, k = 0;char str[32];while (m > 0) { /*从个位数开始逐个取出 m的各位数字并存入字符数组 str*/str[k++] = (1) + '0';m = m / 10;}for(i = 0; i < k/2; i++) /*判断 str中的 k 个数字字符序列是否是回文*/if ( str[i] != str[ (2) ] ) 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( (3) ) { /*n 不是回文数时执行循环*/printf("%ld -> ", n);for(a = 0, t = n; t > 0; ) { /*计算 n 的反序数并存入 a*/a = (4) *10 + t % 10; t = t / 10;} /*end of for*/n = (5) ; /*与反序数求和*/} /*end of while*/printf("%ld\n",n);system("pause"); return 0;}

4.阅读以下说明和C程序代码,将应填入(n)处的字句写在对应栏内。【说明】下面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){ /*判断m是否为回文数*/int i = 0, k = 0;char str[32];while (m > 0) { /*从个位数开始逐个取出m的各位数字并存入字符数组str*/str[k++] =(1)+ '0';m = m / 10;}for(i = 0; i < k/2; i++) /*判断str中的k个数字字符序列是否是回文*/if ( str[i] != str[(2)] ) 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((3)) { /*n不是回文数时执行循环*/printf("%ld-> ", n);for(a = 0, t = n; t > 0; ) { /*计算n的反序数并存入a*/a =(4)*10 + t % 10; t = t / 10;} /*end of for*/n =(5); /*与反序数求和*/} /*end of while*/printf ("%id\n",n);system("pause"); return 0;}

参考答案和解析
正确答案:B
B。【解析】此题的考查点在for循环,当最后一次执行完Next的时候,i会越界。越界后是len(s)+1,已经比i的长度要长了。因此要对越界进行判断。
更多“如果一个正整数从高位到低位上的数字依次递减,则称其为降序数(如:9632是降序数,而8516则不是降序 ”相关问题
  • 第1题:

    阿拉伯数字在书写时,书写的顺序是由高位到低位,从左到右依次写出()数字。(五级、四级)

    A个位数

    B各数位

    C各种数

    D个数位


    B

  • 第2题:

    2、学号、时间和摄氏温度这三个变量的数据类型分别属于

    A.称名数据、顺序数据、等距数据

    B.称名数据、顺序数据、等比数据

    C.顺序数据、称名数据、等比数据

    D.顺序数据、称名数据、等距数据


    称 名数据、顺序数据、等距数据

  • 第3题:

    编写一个函数Prime(n),从键盘中输入一个正整数n,判断该数是否为素数,如果是素数则输出“该数是素数”,如果不是,则输出“该数不是素数”。所谓素数是指一个正整数只能被1和自己整除,不能被其他任何整数整除。


    '%s'str1%cstr2 '%s',str1%cstr2 解析:第一空:本题考查对标准输入函数scanf()的调用格式,当输入字符串时,格式控制字符串为“%s”,题目要求输入的字符串保存在str1中,所以地址表列应为字符串的首地址,即为str1。第二空:本题考查对标准输出函数printf()的调用格式,当输出为字符型变量时,格式控制字符串为“%c”。第三空:题目要求将str1中下标为偶数的字符保存在字符串str2中并输出,所以ptintf()函数的输出表列是str2。

  • 第4题:

    如果一个正整数的所有因子之和等于该正整数,则称这个正整数为完全数。编写程序读入n,输出不超过n的全部完全数。如6=1+2+3 28=1+2+4+7+14。


    程序代码如下:CLEARSET TALK OFFgs=0FOR i=5 to 500 yzh=0 FOR j=1 to INT (i/2) IF i&j=0 yzh= yzh+j ENDIF ENDFOR IF yzh=i gs=gs+1 ENDIF ENDPOR? Gs 程序代码如下:CLEARSET TALK OFFgs=0FOR i=5 to 500 yzh=0 FOR j=1 to INT (i/2) IF i&j=0 yzh= yzh+j ENDIF ENDFOR IF yzh=i gs=gs+1 ENDIF ENDPOR? Gs

  • 第5题:

    一个n位的10进制正整数,使得删除k位(k<n)后剩余数字组成的正整数最小,用贪心算法实现该算法, 问该问题的贪心策略是什么?也就是每次要删除哪个数字?

    A.每次从整数中删去数字最大者

    B.每次从整数中找包含最高位的从左至右的一个最长的非递减序列,将该序列的最后一位删除

    C.每次删除该整数的最高位数字

    D.贪心算法不能有效解决该问题


    每次从整数中找包含最高位的从左至右的一个最长的非递减序列,将该序列的最后一位删除