已知数列Xn的前两项为2和3,其后继项根据当前最后两项的乘积按下列规则生成;(1)若乘积为1位数。则该乘积为数列的后继项;(2)若乘积为2位数,则该乘积的十位数字和个位数字依次作为数列的两个后继项。 请编写函数void produceX(int n

admin2021-04-30  48

问题 已知数列Xn的前两项为2和3,其后继项根据当前最后两项的乘积按下列规则生成;(1)若乘积为1位数。则该乘积为数列的后继项;(2)若乘积为2位数,则该乘积的十位数字和个位数字依次作为数列的两个后继项。
    请编写函数void produceX(int n),生成该数列的前n项(n<100),并把它保存在数组outBuf中,再把这前100项的和保存在整型变量sum中。readWriteData()函数负责将n值从IN.DAT文件中读出,并将结果outBuf输出到文件OUT.DAT中。
    注意:部分源程序已经给出。
    请勿改动主函数main()和输出函数readWriteData()的内容。
    试题程序:
    #include
    int outBuf[200],sum=0;
    void readWriteData();
    void produceX(int n)
    {
    }
    void main()
    {
    int n,i;
    printf(“please input the amounts n:”);
    scanf(“%d”,&n);
    produceX(n);
    for(i=0;i    printf(“%d,”,outBuf);
    readWriteData();
    }
    void readWriteData()
    {
    FILE*wf,*rf;
    char str[5];
    int i,len;
    rf=fopen(“IN.DAT”,“r”);
    wf=fopen(“OUT.DAT”,“w”);
    fgets(str,4,rf);
    len=(str[0]—’0’)*10+str[1]—’0’;
    produceX(1en);
    for(i=0,i    fprintf(wf,“%d,”,outBuf);
    fprintf(wf,“ks”);
    fclose(wf);
    tclose(rf);
    }

选项

答案void produceX(int n) { int i,X; outBuf[0]=2;outBuf[1]=3; for(i=2;i10) //如果是两位数 { outBuf[i]=x/10;//求出十位上的值 sum+=outBuf[i]; //将该数计入总和 i++; //将数组下标右移一位 outBuf[i]=X%10;//求出个位上的值 sum+=outBuf[i]; //将该数计入总和 } else//如果是一位数 { outBuffi]=X; sum+=outBuf[i]; //将该数计人总和 } } }

解析 本题主要考查数列问题。按照指定的运算规则,如果得到的乘积是两位数,则将两位数的十住和个位作为新的后两位,注意此时循环量应谊多加1。如果得到的是1位数,直接作为新值即可。
转载请注明原文地址:https://kaotiyun.com/show/VDOZ777K
0

最新回复(0)