等比数列的第一项a=1, 公比q=2, 下面程序段计算前n项和小于100的最大n。程序划线处应填 int main (void){ int a, q, n, sum; a=1; q=2; for (n=sum=0; sum<100; n++) { sum += a; a *= q; } ____________; printf ("n=%dn", n); return 0; }A.空行B.n -= 2;C.n--;D.n++;

题目

等比数列的第一项a=1, 公比q=2, 下面程序段计算前n项和小于100的最大n。程序划线处应填 int main (void){ int a, q, n, sum; a=1; q=2; for (n=sum=0; sum<100; n++) { sum += a; a *= q; } ____________; printf ("n=%dn", n); return 0; }

A.空行

B.n -= 2;

C.n--;

D.n++;


相似考题
参考答案和解析
根据等比数列的通项公式a n =a 1 q n-1 得到a 3 =a 1 q 2 =3×(-2) 2 =12 故选C.
更多“等比数列的第一项a=1, 公比q=2, 下面程序段计算前n项和小于100的最大n。程序划线处应填 int main (void){ int a, q, n, sum; a=1; q=2; for (n=sum=0; sum<100; n++) { sum += a; a *= q; } ____________; printf ("n=%dn", n); return 0; }”相关问题
  • 第1题:

    有以下程序

    int fun(int x[],int n)

    {static int sum=0,i;

    for(i=0;i<n;i++) sum+=x[i];

    return sum;

    }

    main()

    {int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0;

    s=fun(a,5)+fun(b,4);printf("%d\n",s);

    }

    程序执行后的输出结果是

    A.45

    B.50

    C.60

    D.55


    正确答案:C
    解析:内部静态变量是始终存在的,当函数被调用退出后,内部静态变量会保存数据,再次调用该函数时,以前调用时的数值仍然保留着。Fun(a,5)的值是15,再次调用后sum=15,所以Fun(b,4)=45,s=45+15=60。

  • 第2题:

    下面程序的输出结果是( )。 public class Sun { public static void main(String args[ ]) { int n=4 ,sum=0; while (n>0) { sum+=n; n--; } System.out.println("sum is "+sum); } }

    A.sum is 10

    B.sum is 4

    C.10

    D.4


    正确答案:A
    解析:该题考查对while语句的理解。该程序是从1~4的累加并输出结果。C、D显然是错的,没有sumis,B没有累加。故本题答案是A。

  • 第3题:

    下面程序段的输出结果是 public class Test{ public static void main(String args[]){ int n=5,sum=O; while(n>0){ sum+=n; --n; } System.out.println("sum is "+Sum); } }

    A.sum is 14

    B.sum is 15

    C.sum is 10

    D.sum is 5


    正确答案:B
    解析:本题考查while语句的用法。while循环,又称为“当型”循环,题目程序是从5~1逐渐累加并输出结果,考生需要注意不要增加或减少循环次数。还要注意对自减运算符的理解。--n表示对操作数先减1,然后再取值,而 n--表示先取值,然后再对n进行减1。所以最后结果是5+4+3+2+1=15。

  • 第4题:

    下面程序段的输出结果是 public class Test{ public static void main(String args[]){ int n=5,sum=0; while(n>0){ sum+=n; --n; } System.out.println("sum is"+sum); } }

    A.sum is 14

    B.sum is 15

    C.sum is 10

    D.sum is 5


    正确答案:B
    解析:本题考查while语句的用法。while循环,又称为“当型”循环,题目程序是从5-1逐渐累加并输出结果,考生需要注意不要增加或减少循环次数。还要注意对自减运算符的理解。--n表示对操作数先减1,然后再取值,而n--表示先取值,然后再对n进行减1。所以最后结果是5+4+3+2+1=15。

  • 第5题:

    有以下程序: inClude structNODE{ int num; structNODE*next; }; main() {StructN00E

    有以下程序:

    #inClude <stdlib.h>

    struct NODE{

    int num;

    struct NODE *next;

    };

    main()

    { Struct N00E *p,*q,*r;

    int sum;0;

    p=(struct NODE *)malloc(sizeof(struct NODE));

    q=(struct NODE *)malloc(sizeof(struct NODE));

    r=(struct NODE *)malloc(Sizeof(struct NODE));

    p->num=1;q->num=2;r->num=3;

    p->next=q;q->next=r;r->next=NULL;

    sum+=q->next->num;sum+=p->num;

    printf("%d\n",sum);

    }

    执行后的输出结果是

    A.3

    B.4

    C.5

    D.6


    正确答案:B
    解析:本题中定义了一个结点structNODE,在主函数中定义了三个结点变量指针p、q和r,接着通过malloc函数分配了三个结点并让p、q和r分别指向他们,再接着给p、q和r所指向的结点的hum域赋值为1、2、3,然后让结点p指向q,让q指向r,r指向NULL。显然q->next->num的值为指针r所指向结点的num域的值为3,p->num的值为指针p所指向结点的num域的值为1,故最后输出s的值为3+1=4。所以,4个选项中选项B符合题意。

  • 第6题:

    阅读以下说明和C语言程序,将应填入(n)处的字句写在对应栏内。

    【说明】

    计算n的合数。一个整数n可以有多种划分,使其划分的一列整数之和为n。例如,整数5的划分为:

    5

    4 1

    3 2

    3 1 1

    2 2 1

    2 1 1 1

    1 1 1 1 1

    共有7种划分。这种划分的程序如下所示。

    【程序】

    include <stdio.h>

    int n[1000],m,k;

    void output sum()

    {

    int j;

    for(j=0;n[j]!=0;j++)

    printf("%d\t",n[j]);

    printf("\n");

    }

    void sum(int i)

    if(m-n[i]<n[i])

    { m=m-n[i];

    (1)

    i++;

    n[i+1]=0;

    }

    else

    {

    (2)

    m-=n[i];

    i++;

    }

    if(m!=n[i])

    sum(i);

    else

    output_sum();

    if(n[i]>1)

    {

    n[i]--;

    (3)

    }

    else

    {

    while((n[i]==1)&&(i>O))

    {

    i--;

    (4)

    }

    if(i!=0)

    {

    (5)

    sum(i);

    }

    }

    }

    void main()

    {

    int i;

    scanf("%d",&n[0]);

    m=k=n[0];

    for(i=1;i<=k;i++)

    n[i]=0;

    while(n[0]!=1)

    {

    n[0]--;

    i=0;

    sum(0);

    m=k;

    }

    }


    正确答案:(1)n[i+1]=m; (2)n[i+1]=n[i]; (3)sum(i); (4) m+=n[i]; (5)n[i]--;
    (1)n[i+1]=m; (2)n[i+1]=n[i]; (3)sum(i); (4) m+=n[i]; (5)n[i]--; 解析:本题考查C语言中计算n合数方法的实现。
    题目要求计算n的合数,我们首先来了解一下什么是n的合数。在正整数n的所有不同的划分中,将最大加数n1不大于m的划分个数记作q(n,m)。可以建立q(n,m)的如下递推关系。
    (1)q(n,1)=1,n1
    当最大数n1不大于1时,任何正整数只有一种划分形式,就是全1。
    (2)q(n,m)=q(n,n),mn
    最大加数n1实际上不能大于n。因此,q(1,m)=1。
    (3)q(n,n)=1+q(n,n-1)
    正整数n的划分由n1=n的划分和n1≤n-1的划分组成。
    (4)q(n,m)=q(n,m-1)+q(n-m,m),n>m>1
    正整数n的最大加数n1不大于m的划分由n1=m的划分和n1≤m-1的划分组成。要想求出所有解,只有递归到最底层即全为1为止。
    知道了上述特性,下面我们来看代码。在代码中首先声明一个数组和两个全局变量 k,m。结合程序可以看出,其中数组n[i]中存放的是当前划分的最大加数,而m中存放的是当前被划分的数。程序代码中有三个函数,一个是主函数、一个output_sum()函数和一个sum()函数,函数output_sum()的功能很简单,就是输出一次划分结果,在sum()函数中被调用。
    经过分析不难发现,函数sum()的作用是实现整数的划分。在函数体中,首先是一个条件判断语句,其作用是判断当前被划分的数m是否小于当前最大加数的两倍,如果条件成立,说明数被划分为两个数后,其最大加数大于另一个数,而另一个数应该存放在数组中。此时执行语句m=m-n[i]来求出另一个数,接下来应该是保存这个数到数组中的下个位置,第(1)空就用来完成这个任务,因此,答案为n[i+1]=m。
    第(2)空所在的位置是条件不成立的情况下运行的语句,条件不成立,说明数被划分为两个数后,其最大加数小于另一个数,数可以有更大的最大加数,因此,将当前的最大加数保存到数组中的下个位置,此空答案为n[i+1]=n[i]。
    第(3)空也在一个条件选择语句下面,此条件语句用于判断当前最大加数是否大于1,如果大于1,则需要接着划分,因此要调用函数sum(),其参数是i,所以此空答案为sum(i)。
    第(4)空是条件不成立即当前最大加数为1的情况下执行的语句,当最大加数为1时,说明递归到了最底层,此时,递归应该往回走了,这需要还原当前最大划分数m(为这个数的其他划分做准备),因此,这个空的答案为m+=n[i]。
    第(5)空是在条件i!=0为真的情况下执行的语句,如果条件为真,说明递归还没有回到最上层,应该求当前被划分数在当前最大加数变小后的其他划分情况,因此,此空答案为n[i]--。

  • 第7题:

    以下程序运行后的输出结果是【 】。

    struct NODE

    {int num;struct NODE *next;

    };

    main()

    {struct NODE s[3]={{1,'\0'},{2,'\0'},{3,'0'}},*p,*q,*r;

    int sum=0;

    s[0].next=s+1;s[1].next=s+2;s[2].next=s;

    p=s; q=p->next; r=q->next;

    sum+=q->next->num; sum+=r->next->next->num;

    printf("%d\n",sum);

    }


    正确答案:5
    5 解析:程序通过语句“s[0].next=s+1;s[1].next=s+2;s[2].next=s;”将结构体变量s中各结点链接成了一个循环链表,即最后一个结点的指针域指向了头结点(s[2].next=s;),整个链表形成一个环,并通过语句“p=s;q=p->next;r=q->next;”将结构体指针变量p、q、r指向了各结点,具体结构如下图:

    故本题输出的sum=3+2=5。

  • 第8题:

    有以下程序includevoid f(int *p,int *q);main(){ int m=1,n=2,*r=&m;f(r, &n

    有以下程序 #include<stdio.h> void f(int *p,int *q); main() { int m=1,n=2,*r=&m; f(r, &n); printf("%d,%d",m,n); } void f(int*p,int*q) {p=p+1; *q=*q+1;) 程序运行后的输出结果是______。

    A.1,3

    B.2,3

    C.1,4

    D.1,2


    正确答案:A
    解析:本题主要考查函数实参和形参之间的传递,C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只能由实参传绐形参,而不能由形参传回来给实参。f(r&n)把n的地址传递给q,通过地址传递的函数可以有返回值,因此,n的值为q的返回值3,又因为p是形参变量没有返回值,所以m的值没有改变,因此,选项A是正确的。

  • 第9题:

    有以下程序include<stdio.h>int*f(int*p,int*q);main( ){int m=1,n=2,*r=&m;r=f(r,&am

    有以下程序

    include<stdio.h>

    int*f(int*p,int*q);

    main( )

    {int m=1,n=2,*r=&m;

    r=f(r,&n);printf(”%d\n”,*r);

    }

    int-f(int*P,int*q)

    (return(*p>*q)?p:q;)

    程序运行后的输出结果是______。


    正确答案:2
    2 解析:函数f的返回值的类型是int*,作用是返回两个int*型指针所指变量中值大的那个指针的。本题中定义了一个int*型指针r并置初值&m,即指针r指向m。r=f(r,&n),由于m的值小于n值,所以f函数返回值为&n,所以输出为2,即n值。

  • 第10题:

    下面的程序中定义了两个方法求自然数1~100的和。具体如下:int suml(int n);利用循环求1~n的和,int sum2(int n);利用递归方法求和1~n的和;在main()方法中调用这两个方法求1~100的和并显示。在程序的每条横线处填写一个适当的语句,使程序的功能完整。

    public class Sum{

    public static void main(String args[])

    {

    //1.调用suml(int n),求1~100的和

    System.out.println("1~100的和:"+sum1(100));

    //2,调用sum2(int n),求1~100的和

    System.out.println("1~100的和:"+sum2(100));

    }

    static int suml(int n)

    {

    int result=0;

    for(int i=1;i<=n;i++)

    ________________

    retrun result;

    }

    static int sum2(int n)

    {

    if(______________)

    return 1;

    else

    _____________

    }

    }


    正确答案:result+=i; n==1 return n+sum2(n-1);
    result+=i; n==1 return n+sum2(n-1); 解析:本题主要考查递归调用的算法及for循环语句的使用。解答本题的关键是热练掌握递归调用的算法及for循环语句的使用.在本题中,result+=i;语句的功能是累加求和,if(n==1)语句的功能是判断当n==1时,累加和为1,return n+sum2(n-1);语句的功能是递归调用sum2(int n)方法求和。

  • 第11题:

    下列程序的功能是:找出所有100以内(含100)满足I,I+4,I+10都是素数的整数重(I+10也是在100以内)的个数cnt,以及这些I之和sum。请编制函数countValue()实现程序要求,最后调用函数writeDAT()把结果cnt和sum输出到文件out64.dat中(数值1不是素数)。

    注意:部分源程序已给出。

    请勿改动主函数main()和输出数据函数writeDAT()的内容。

    试题程序:

    include<stdio.h>

    int cnt,sum;

    int isPrime (int number)

    {

    int i,tag=l;

    if (number== 1 )

    return 0;

    for(i=2;tag && i<=number/2;i++)

    if (number%i==0) tag=0;

    return tag;

    }

    void countValue ( )

    {

    }

    void main ( )

    {

    cnt=sum=0;

    countValue ( );

    printf ("满足条件的整数的个数=%d\n", cnt);

    printf ("满足条件的整数的和值=%d\n", sum);

    writeDAT ( );

    }

    writeDAT ( )

    {

    FILE *fp;

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

    fprintf (fp, "%d\n%d\n", cnt, sum);

    fclose (fp);

    }


    正确答案:void countValue ( ) { int icount=0xx[30]; int j k m; cnt=0; sum=0; for (i=2; i90; i++) /*找数的范围为100以内*/ if (isPrime (i)) /*如果该数为素数则将它存入数组xx中并统计个数*/ { xx [ count ]=i; count++; } for (i=0; icount; i++) /*如果数组xx中的素数加4和加10得到的数仍为素数*/ if (isPrime (xx [i] +4) &&isPrime (xx [i] +10) ) { cnt ++; /*统计满足条件的数的个数*/ sum+=xx [i]; /*将满足条件的数组xx中的数求和*/ ) }
    void countValue ( ) { int i,count=0,xx[30]; int j, k, m; cnt=0; sum=0; for (i=2; i90; i++) /*找数的范围为100以内*/ if (isPrime (i)) /*如果该数为素数,则将它存入数组xx中,并统计个数*/ { xx [ count ]=i; count++; } for (i=0; icount; i++) /*如果数组xx中的素数加4和加10得到的数仍为素数*/ if (isPrime (xx [i] +4) &&isPrime (xx [i] +10) ) { cnt ++; /*统计满足条件的数的个数*/ sum+=xx [i]; /*将满足条件的数组xx中的数求和*/ ) } 解析:本题考查的知识点如下:
    (1)循环结构与判断结构的嵌套使用。
    (2)判断结构中多个条件的布尔运算。
    题中要求判断在100以内,i,i+4,i+10都是素数的个数。因为i+10也必须在100以内,1不是素数,我们可以从2开始判断到89即可(90是偶数,明显不是素数)。可以先找出2到89之间素数的个数,再判断这些素数加4和加10后是否还是素数。加4是素数与加10是素数必须同时满足,所以两个条件间用“与”运算。

  • 第12题:

    有以下程序 inGlude struct NODE { int num; struct NODE *next; } main() {struct N

    有以下程序

    #inGlude<stdlib.h>

    struct NODE {

    int num;

    struct NODE *next;

    }

    main()

    { struct NODE *p,*q,*r;

    int sum=0;

    p=(struct NODE*)malloc(sizeof(struct NODE));

    q=(struct NODE*)malloc(sizeof(struct NODE));

    r=(stnlct NODE*)malloc(sizeof(struct NODE));

    p->num=1;q->num=2;r->num=3;

    p->next=q;q->next;r;r->next=NULL;

    sum+=q->next->Num,sum+=p->num;

    printf("%d\n",sum);

    }

    执行后输出结果是

    A.3

    B.4

    C.5

    D.6


    正确答案:B
    解析:本题中定义了一个结点struct NODE,在主函数中定义了三个结点变量指针p、q和r,接着通过malloc函数分配了三个结点并让p、q和r分别指向他们,再接着给p、q和r所指向的结点的num域赋值为1、2、3,然后让结点p指向q,让q指向r,r指向NULL。显然q->next->num的值为指针r所指向结点的num域的值为3,p->hum的值为指针P所指向结点的num域的值为1,故最后输出s的值为3+1=4。

  • 第13题:

    ( 9 )下面的函数利用递归实现了求 1+2+3+ …… +n 的功能:

    int sum ( int n ) {

    if ( n==0 )

    return 0;

    else

    return n+sum ( n-1 ) ;

    }

    在执行 sum ( 10 )的过程中,递归调用 sum 函数的次数是【 9 】 。


    正确答案:

  • 第14题:

    ●下列程序运行后输出的数据是(51)。

    int sum(int n)

    {

    int p=1;

    int s=0;

    int i=0;

    for(i=1;i﹤=n;i++) s+=(p*=i);

    retum s;

    }

    main()

    {

    printf((“sum(5)=%d\n”,sum(5));

    }

    (51) A.sum(5)=151

    B.sum(5)=152

    C.sum(5)=153

    D.sum(5)=155


    正确答案:C

  • 第15题:

    以下程序计算1+1/3+1/5+…+1/(2N+1),直至1/(2N+1)小于0.00001,横线处应补充的程序是( )。 public class Sun{ public static void main(String args[]){ int n=1: double term,sum=1.0: do{ n=__; term=1.0/n; sum=sum+term; } while(term>=0.00001); System.out.println(n); System.out.println(sum); } }

    A.2n

    B.2n+1

    C.2*n

    D.2*n+1


    正确答案:D
    D。【解析】本题考查do-while循环的用法。题目中没有给出累加次数,故不能使用for循环,在do循环中,由累加项term的值作为退出循环的条件。根据题目要求,应该填写2*n+1。本题的关键是while(term>=0.00001)语句,题目要求计算直至1/(2N+1)小于0.00001,所以terml/(2N+1),因此n=2*n+1。

  • 第16题:

    请编写一个函数inline long sum(int n),用递归函数完成运算:sum(n)=1*1+2*2+…n*n,递归表达式为 sum(n)=sum(n-1)+n2。

    注意:部分源程序已存在文件test10_2.cpp中。

    请勿修改主函数main和其他函数中的任何内容,仅在函数sum的花括号中填写若干语句。

    文件test10_2.cpp的内容如下:

    include<iostream.h>

    inline long sum(int n)

    {

    }

    void main()

    {

    int n;

    cout<<"输入n:";

    cin>>n;

    cout<<"结果为:"<<sum(n)<<endl;

    }


    正确答案:inline long sum(int n) { if(n==1) return 1; else return n*n+sum(n-1); }
    inline long sum(int n) { if(n==1) return 1; else return n*n+sum(n-1); } 解析:本题考查的是考生对递归函数掌握的熟练程度。递归的终止条件为n=1时,值为1。

  • 第17题:

    以下C程序的运行结果为______。main(){ int i=1,sum=0; loop:if(i<=10) { sum+=i; i++; goto loop; } printf("sum=%d\n",sum);}

    A.sum=10

    B.sum=55

    C.sum=100

    D.sum=88


    正确答案:B

  • 第18题:

    在C语言中,下面这段代码输出值为( )。 main( ) { int n, sum=0; for(n=1;n<=100;n++) sum+=n; printf("sum=%d\n",sum); }

    A.0

    B.100

    C.5050

    D.5151


    正确答案:C

  • 第19题:

    下列程序的功能是:找出所有100以内(含100)满足I,I+4,I+10都是素数的整数I(1+10也是在100以内)的个数cnt,以及这些I之和sum。请编制函数countValue()实现程序要求,最后调用函数writeDAT()把结果cnt和sum输出到文件out64.dat中(数值1不是素数)。

    注意:部分源程序已给出。

    请勿改动主函数main()和输出数据函数writeDAT()的内容。

    试题程序:

    include<stdio.h>

    int cnt, sum;

    int isPrime(int number)

    {

    int i,tag=1;

    if (number==1)

    return 0;

    for(i=2;tag && i<=number/2;i++)

    if(number%i==0) tag=0;

    return tag;

    }

    void countValue ( )

    {

    }

    void main( )

    {

    cnt=sum=0;

    countValue ( );

    printf ( "满足条件的整数的个数=%d\n", cnt);

    printf ( "满足条件的整数的和值=%d\n", sum);

    writeDAT ( );

    }

    writeDAT ( )

    {

    FILE *fp;

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

    fprintf(fp,"%d\n%d\n",cnt,sum);

    fclose(fp);

    }


    正确答案:void countValue() { int icount=0xx[30]; int jkm; cnt=0; sum=0; for(i=2;i90;i++) /*找数的范围为100以内*/ if(isPrime(i)) /*如果该数为素数则将它存入数组xx中并统计个数*/ { xx[count]=i; count++; } for(i=0;icount;i++) /*如果数组xx中的素数加4和加10得到的数仍为素数*/ if(isPrime(xx[i]+4)&&isPrime(xx[i]+10)) { cnt++; /*统计满足条件的数的个数*/ sum+=xx[i]; /*将满足条件的数组xx中的数求和*/ } }
    void countValue() { int i,count=0,xx[30]; int j,k,m; cnt=0; sum=0; for(i=2;i90;i++) /*找数的范围为100以内*/ if(isPrime(i)) /*如果该数为素数,则将它存入数组xx中,并统计个数*/ { xx[count]=i; count++; } for(i=0;icount;i++) /*如果数组xx中的素数加4和加10得到的数仍为素数*/ if(isPrime(xx[i]+4)&&isPrime(xx[i]+10)) { cnt++; /*统计满足条件的数的个数*/ sum+=xx[i]; /*将满足条件的数组xx中的数求和*/ } } 解析:本题考查的知识点如下:
    (1)循环结构与判断结构的嵌套使用。
    (2)判断结构中多个条件的布尔运算。
    题中要求判断在100以内,i,i+4,i+10都是素数的个数。因为i+10也必须在100以内,1不是素数,我们可以从2开始判断到89即可(90是偶数,明显不是素数)。可以先找出2到89之间素数的个数,再判断这些素数加4和加10后是否还是素数。加4是素数与加10是素数必须同时满足,所以两个条件间用“与”运算。

  • 第20题:

    下列程序的输出结果是( )。 public class Test { public static void main (String[] args) { int n=5,sum=0; while (n>0) { sum+=n; --n; } System.out.println("Sum is"+sum); } }

    A.sum is 14

    B.sum is 15

    C.sum is 10

    D.sum is 5


    正确答案:B
    解析:本题目实际上是利用循环求1到n的和,n为5,所以结果为15。

  • 第21题:

    以下程序通过函数sunFun求。这里f(x)=x2+1

    main( )

    { printf("The sum=%d\n",SunFun(10)); }

    SunFun(int n)

    { int x,s=0;

    for(x=0;x<=n;x++) s+=F(【 】);

    return s;

    }

    F( int x)

    { return 【 】);}


    正确答案:x*x+1
    x*x+1 解析:本题中F(  )函数实现表达示f(x) =x2+1,SunFun(  )函数实现循环累加F(0)...F(10)的值因此[14]填x,[15]填x*x+1。

  • 第22题:

    下列程序的输出结果是______。 #define A 100 main() { int i=0,sum=0; do{ if(i==(i/2)*2) continue; sum+=i; }while(++i<A) ; printf("%d\n",sum);

    A.2500

    B.2050

    C.4

    D.0


    正确答案:A
    解析:本题程序的功能是求1到99之间(包括1和99)所有奇数之和。程序中的while循环的终止条件为++i=100,在while循环体内,如果i是偶数,则执行continue,跳过这依次循环,执行下一次循环,否则求和。最后输出的值是1到99之间(包括1和99)所有奇数之和(1+99)*50/2=2500。

  • 第23题:

    有以下程序:include int fun(int x[], int n){ static int sum =0,i;for(i=0;i

    有以下程序: #include <stdio.h> int fun(int x[], int n) { static int sum =0,i; for(i=0;i<n;i ++ )sum + =x[i]; return sum;{ int a[] ={1,2,3,4,5},b[]={6,7,8,9},s=0; s = fun(a,5) + fun(b,4) ;printf( "%d \n",s);程序执行后的输出结果是( )。

    A.45

    B.50

    C.60

    D.55


    正确答案:C
    解析:静态变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值,以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。在main函数中调用fun(a,5),执行for循环得到sum=0+a[0]+a[1]+a[2]+a[3]+a[4]=15;然后调用fun(b,4),因为sum为静态变量,再次调用时sum保留上次函数调用结束时的值,所以sum:15+b[0]+b[1]+b[2]+b[3]=45;返回sum的值,main函数中输出的s=15+45=60。

  • 第24题:

    试题1

    下列程序的功能是:找出所有100以内(含100)满足i,i+4,i+10都是素数的整数i(i+10也在100以内)的个数cnt以及这些i之和sum。请编写函数countvalue()实现程序要求,最后调用函数writeDat()把结果cnt和sum输出到文件out.dat中。

    注意:部分源程序已给出。

    请勿改动主函数main()和函数writeDAT()的内容。

    试题程序:

    #include <stdio.h>

    int cnt, sum;

    int isPrime(int number)

    {

    int i, tag = 1;

    for (i=2; tag && i<=number/2; i++)

    if (number%i == 0)

    tag = 0;

    return tag;

    }

    void countValue()

    {

    }

    void writeDat()

    {

    FILE *fp;

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

    fprintf(fp, "%d\n%d\n", cnt, sum);

    fclose(fp);

    }

    void main()

    {

    cnt = sum = 0;

    countValue();

    printf("满足条件的整数的个数=%d\n", cnt);

    printf("满足条件的整数的和值=%d\n", sum);

    writeDat();


    正确答案:

    试题1答案:
    void countvalue()
    {
    int i;
    for(i=2;i<=90;i++)
    if(isPrime(i) && isPrime(i+4) && isPrime(i+10))
    {
    cnt++;
    sum+=i;
    }
    } }
    试题1分析:
    该程序属于按条件查找数字的题目,考核的知识点为:(1)素数的判定;(2)统计个数并求和。
    本题的解题思路是:题目要求的筛选范围是“所有100以内(含100)满足i、i+4、i+10都是素数的整数i(i+10也在100以内)”,由于最小的素数是2,且i+10要在100以内(含100),所以筛选的范围是2~90。
    题目要求的筛选条件是“满足i、i+4、i+10都是素数的整数i”。在答题之前,应先通读题目已给出的源程序,在我们要实现的函数countvalue()之前给出一个在题目中从未提及的函数isPrime()。仔细分析这个函数的代码不难发现,它实现了从2~number/2内寻找能整除number的数,如果找到就使变量tag为0,此时循环条件将不成了,最终返回0,如果找不到,变量tag为1,返回1.这段代码实现的是判断一个数是够是素数。所以在函数中对筛选条件可以简化为if(isPrime(i) && isPrime(i+4) && isPrime(i+10))。
    程序的流程是:调用countvalue()函数对数据进行处理,最后由writeDAT()函数将结果写入文件out.dat中。
    在countvalue()函数中,For循环的功能是判断i、i+4、i+10是否都为素数,若在素数则将i累加到sum中,同时个数cnt加1,函数结束。