统计正整数中指定数字的个数

题目

统计正整数中指定数字的个数


相似考题
更多“统计正整数中指定数字的个数”相关问题
  • 第1题:

    已知在文件IN.dat中存有若干个(少于200个)四位数字的正整数,函数ReadDat()读取这若干个正整数并存入数组number中。请编写函数CalValue(),其功能要求是:①求出文件中共有的正整数个数totNum;②求这些数右移1位后,产生的新数是奇数的数的个数totCnt以及满足此条件的这些数(右移前的值)的算术平均值totAve。最后调用函数writeDat()把所求的结果输出到OUT.dat文件中。

    注意:部分源程序已经给出。请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。

    include <stdio.h>

    include <conio. h>

    define MAXNUM 200

    int number [MAXNUM];

    int totNum = 0; /* 文件IN.dst 中共有的正整数个数*/

    int totCnt = 0; /* 符合条件的正整数的个数*/

    double totAve = 0.0; /* 平均值 */

    int ReadDat (void);

    void writeDat(void);

    void CalValue(void)

    {

    }

    void main ()

    { int i;

    for (i=0; i<MAXNUM; i++)

    number [i] = 0;

    if (ReadDat())

    { printf (" 数据文件 IN.dst 不能打开! \007\n");

    return;

    }

    CalValue ();

    printf(" 文件 IN.dst 中共有的正整数个数=%d个\n", totNum);

    printf (" 符合条件的正整数的个数 =%d个\n", totCnt);

    printf("平均值=%.2f\n", totAve);

    writeDat ();

    }

    int ReadDat (void)

    { FILE *fp;

    int i = 0;

    if ((fp = fopen("IN.dat", "r")) == NULL)

    return 1;

    while (!feof(fp))

    fscanf(fp, "%d,", &number [i++]);

    fclose (fp);

    return 0;

    }

    void writeDat (void)

    { FILE *fp;

    fp = fopen("OUT.dat", "w");

    fprintf(fp, "%d\n%d\n%6.2f\n", totNum, totCnt, totAve);

    fclose (fp);

    }


    正确答案:void CalValue(void) { int i data; for (i=0; iMAXNUM; i++) { if (!number[i]) break; if (number[i] > 0) totNum++; data = number[i]>>1; if (data%2) { totCnt++; totAve += number[i]; } } totAve /= totCnt; } [解题思路] 在for循环语句中自变量i从0递增到MAXNUM对数组number中的每个数进行判断如果number[i]的值大于0说明number[i]的值为正整数统计正整数个数的变量totNum加1;然后number[i]右移1位得到data的值;再对data的值除2求余数如果其值为1则统计变量totCnt加1同时把number[i]的值加到totAve上得到这些数的和。退出循环后用totAve的值除以totCnt就得到了这些数的算术平均值totAve。
    void CalValue(void) { int i, data; for (i=0; iMAXNUM; i++) { if (!number[i]) break; if (number[i] > 0) totNum++; data = number[i]>>1; if (data%2) { totCnt++; totAve += number[i]; } } totAve /= totCnt; } [解题思路] 在for循环语句中,自变量i从0递增到MAXNUM对数组number中的每个数进行判断,如果number[i]的值大于0,说明number[i]的值为正整数,统计正整数个数的变量totNum加1;然后number[i]右移1位得到data的值;再对data的值除2求余数,如果其值为1,则统计变量totCnt加1,同时把number[i]的值加到totAve上,得到这些数的和。退出循环后,用totAve的值除以totCnt,就得到了这些数的算术平均值totAve。

  • 第2题:

    在文件in.dat中存有若干个(个数<200)四位数字的正整数,函数ReadDat读取这若干个正整数并存入数组XX中。请编制函数CalValue,其功能要求:1.求出该文件中共有多少个正整数totNum;2.求出这些正整数中的各位数字之和是偶数的数的个数totCnt,以及满足此条件的这些正整数的算术平均值totPjz。最后main函数调用函数WriteDat把所求的结果输出到0ut.dat文件中。 注意:部分源程序存放在test.c文件中。 请勿改动数据文件in.dat中的任何数据,主函数main、读函数ReadDat和输出函数WriteDat的内容。


    正确答案:
    【审题关键句】读取正数,统计个数,各位数字之和为偶数的数的个数及平均值。
    【解题思路】 定义整型循环变量i、j,表示各位数字之和的长整型变量he以及存储一个四位数的字符数组num[5]。
    ②循环变量i从0开始,依次递增到4,对字符数组num[5]的每个元素赋初值0。
    ③循环变量i从0开始,依次递增到MAXNUM.1,对每个数组元素xx[i]进行判断,如果xx[i]的值非零,则变量totNum加1,退出循环时,totNm的值就是文件in.dat中存有的四位正整数的个数。
    ④循环变量i从0开始,依次递增到totNum-1,对于每个数组元素xx[i]调用库函数sprintf以4个字符宽度形式输出到字符数组num中,用字符数组num中的每个元素减去0的ASCII码48,就分别得到XX[i]这个四位数每位上的数字,并把这四个数字相加赋给变量j。再对变量j对2求余数进行判断其值是否等于0,如果等于0,则说明j是偶数,变量totCnt加1,并把xx[i]的值累加到变量he。
    ⑤退出循环后,把变量he的类型转换成双精度型再除以totCnt得到符合条件的数的算术平均值totPjz。
    【参考答案】

  • 第3题:

    阅读以下说明和流程图,回答问题。

    [说明]

    从键盘输入一个高精度正整数n,去掉其中s个数字后按原左右次序再组成一个新的正整数。对给定的n,要寻找一种方案,使得余下的数字组成的新数最小。

    算法分析:

    每次删除一个数字,选择一个使余下的数最小的数字作为删除对象。当s=1时,在n中删除哪一个数字能达到最小的目的?从左到右每相邻的两个数字比较:若出现减,郎左边大于右边,则删除左边的大数字;若不出现减,即所有数字全部升序,则删除最右边的大数字。当s>l(当然小于n的位数),按上述操作一个一个删除,删除一个达到最小后,再从头即从串首开始,删除第2个,依此分解为s次完成。若删除不到s个后已无左边大于右边的减序,则停止删除操作,打印余下串的左边L-s个数字即可。(x为统计删除数字的个数,m=1表示脱离循环,L为n的长度)。

    [流程图]

    [问题]

    将流程图中的(1)~(5)处补充完整。


    正确答案:(1)s>x&&m=0 (2)1-x-L (3)a(i)=a(k+1) (4)m=1 (5)for(i=li1-s;i++)
    (1)s>x&&m=0 (2)1-x-L (3)a(i)=a(k+1) (4)m=1 (5)for(i=li1-s;i++)

  • 第4题:

    在小于1000的正整数中,不含数字2的正整数的个数是( )

    A.640
    B.700
    C.720
    D.728
    E.729

    答案:D
    解析:

  • 第5题:

    每一个确定的正整数a,都有一个确定的后继数a’,a’也是正整数(一个数的后继数就是紧接在这个数后面的数,例如,1的后继数是2,2的后继数是3等等).那么1()任何正整数的后继数。


    正确答案:不是

  • 第6题:

    Count:统计数字单元格的个数


    正确答案:正确

  • 第7题:

    自然数、正整数和整数这三个数概念中,()的范围最大。

    • A、自然数
    • B、正整数
    • C、整数

    正确答案:C

  • 第8题:

    Countif在EXCEL中作用是()

    • A、统计非空单元格的个数
    • B、单条件计数
    • C、多条件计数
    • D、统计数字单元格的个数

    正确答案:B

  • 第9题:

    单选题
    将一个正整数n表示成一系列正整数之和,n=n1+n2+…+nk(其中,n1≥n2≥…≥nk≥1,k≥1)正整数n的一个这种表示称为正整数n的一个划分。正整数n的不同的划分个数总和称为正整数n的划分数,记作p(n);另外,在正整数n的所有不同划分中,将最大加数n1不大于m的划分个数记作q(n,m)。则当n=10时,p(n)=()。
    A

    q(8,8)

    B

    1+q(9,9)

    C

    2+q(10,8)

    D

    ABC都正确


    正确答案: A
    解析: 暂无解析

  • 第10题:

    多选题
    下列对函数描述错误的是()
    A

    Count是统计个数的函数

    B

    Count单条件计数

    C

    Count可以统计非空单元格

    D

    Count只能统计数字单元格


    正确答案: B,C
    解析: 暂无解析

  • 第11题:

    问答题
    一个数字,去掉第一个数字是15,去掉最后一个数字是30,请问这个数字是多少?

    正确答案: 35。读音“三十五”,去掉“三”为“十五”,去掉“五”为“三十”。
    解析: 暂无解析

  • 第12题:

    单选题
    Count:统计()的个数
    A

    非空单元格

    B

    文本单元格

    C

    数字单元格

    D

    单元格


    正确答案: B
    解析: 暂无解析

  • 第13题:

    已知在in.dat中存有若干个(个数<200)四位十进制数字组成的正整数,函数ReadDat读取这若干个正整数并存入数组 xx中。请编制函数CalValue,其功能要求:1.求出该文件中共有多少个正整数totNum;2.求这些正整数右移1位二进制位后,产生的新数是偶数的数的个数totCnt,以及满足此条件的这些正整数(右移前的值)的算术平均值totPjz。最后main函数调用函数WriteDat把所求的结果输出到out.dat文件中。 注意:部分源程序存放在test.c文件中。 请勿改动数据文件in.dat中的任何数据,主函数main、读函数ReadDat和输出函数WriteDat的内容。


    正确答案:
    【审题关键句】读取正数,统计个数,右移后为偶数的个数及平均值。
    【解题思路】
    ①定义整型变量i、j和长整型he,并把其初始值设置为0。
    ②用for循环语句对数组xx进行扫描,如果当前数组元素xx[i]非零,则全局变量totNum加1。
    ③在for循环语句中,循环变量i从0开始递增到totNum.1,对数组xX中的每个元素xx[i]右移一位,把这个值赋给整型变量j,再对j的值对2求余数,如果余数等于0,则变量totCnt加1,并把数组元素xx[i]累加到变量he。
    ④退出循环时,把变量he的数据类型转换成双精度型再除以变量totCnt的值,就得到算术平均值totPjz。
    【参考答案】

  • 第14题:

    给定程序MODll.C中函数fun的功能是:统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数;并把该整数中各位上最大的数字值作为函数值返回。例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字值最大的是8。

    请改正函数fun中指定部位的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!


    正确答案:(1)if(t==0) (2)*zero=count;
    (1)if(t==0) (2)*zero=count; 解析:本题中函数的功能是统计一个无符号整数中各位数字值为0的个数。对无符号数进行截取,然后对每个数字进行判断并统计。

  • 第15题:

    从1.2.3.4.5.6.7.8.9这九个数字中,随机取出一个数字,这个数字是奇数的概率是()


    答案:B
    解析:

  • 第16题:

    通过键盘输入一个高精度的正整数n(n的有效位数≤240),去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小。 【样例输入】 178543 S=4 【样例输出】 13


    正确答案: 为了尽可能地逼近目标,我们选取的贪心策略为:每一步总是选择一个使剩下的数最小的数字删去,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字,否则删除第一个递减区间的首字符。然后回到串首,按上述规则再删除下一个数字。重复以上过程s次,剩下的数字串便是问题的解了。
    具体算法如下:
    输入s,n;
    while(s>0)
    {i=1; //从串首开始找
    while(i
    {i++;}
    delete(n,i,1); //删除字符串n的第i个字符
    s--;
    }
    while(length(n)>1)&&(n[1]=‘0’)
    delete(n,1,1); //删去串首可能产生的无用零
    输出n;

  • 第17题:

    Count:统计()的个数

    • A、非空单元格
    • B、文本单元格
    • C、数字单元格
    • D、单元格

    正确答案:C

  • 第18题:

    两个数相除,如果商不是整数和有限小数,那么就一定是循环小数;那是因为()。

    • A、每次除得的余数(不看计数单位),都必须是小于除数的正整数
    • B、小于正整数的个数是有限的
    • C、每次除得的余数(不看计数单位),都必须是小于除数的正整数,而小于正整数的个数是有限的

    正确答案:C

  • 第19题:

    下列对函数描述错误的是()

    • A、Count是统计个数的函数
    • B、Count单条件计数
    • C、Count可以统计非空单元格
    • D、Count只能统计数字单元格

    正确答案:B,C

  • 第20题:

    判断题
    Count:统计数字单元格的个数
    A

    B


    正确答案:
    解析: 暂无解析

  • 第21题:

    单选题
    两个数相除,如果商不是整数和有限小数,那么就一定是循环小数;那是因为()。
    A

    每次除得的余数(不看计数单位),都必须是小于除数的正整数

    B

    小于正整数的个数是有限的

    C

    每次除得的余数(不看计数单位),都必须是小于除数的正整数,而小于正整数的个数是有限的


    正确答案: B
    解析: 暂无解析

  • 第22题:

    单选题
    自然数、正整数和整数这三个数概念中,()的范围最大。
    A

    自然数

    B

    正整数

    C

    整数


    正确答案: C
    解析: 暂无解析

  • 第23题:

    问答题
    通过键盘输入一个高精度的正整数n(n的有效位数≤240),去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小。 【样例输入】 178543 S=4 【样例输出】 13

    正确答案: 为了尽可能地逼近目标,我们选取的贪心策略为:每一步总是选择一个使剩下的数最小的数字删去,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字,否则删除第一个递减区间的首字符。然后回到串首,按上述规则再删除下一个数字。重复以上过程s次,剩下的数字串便是问题的解了。
    具体算法如下:
    输入s,n;
    while(s>0)
    {i=1; //从串首开始找
    while(i
    {i++;}
    delete(n,i,1); //删除字符串n的第i个字符
    s--;
    }
    while(length(n)>1)&&(n[1]=‘0’)
    delete(n,1,1); //删去串首可能产生的无用零
    输出n;
    解析: 暂无解析

  • 第24题:

    单选题
    Countif在EXCEL中作用是()
    A

    统计非空单元格的个数

    B

    单条件计数

    C

    多条件计数

    D

    统计数字单元格的个数


    正确答案: A
    解析: 暂无解析