itgle.com
参考答案和解析
正确答案:7
本题属于递归调用。主函数中调用sub函数流程如下:
sub(*x,8,1)-sub(*x,4,2)-sub(*x,2,4)-x=x+k=4,然后是4+2=6,最后是 6+1=7 
由此可知,输出结果为7。
更多“以下程序的输出结果是main(){ int x=0; sub(&x,8,1); printf("%d\n",x);}sub(int *a,int n,i ”相关问题
  • 第1题:

    以下程序的输出结果是______。includevoid prt(int*x,int*y,int*z){printf("%d,%d,%d\n

    以下程序的输出结果是______。 #include<stdio.h> void prt(int*x,int*y,int*z) { printf("%d,%d,%d\n",++*x,++*y,*(z++));} int a=10,b=40,c=20; main() { prt(&a,&b&c) prt(&a,&b,&c); }

    A.11,42,31 12,22,41

    B.11,41,20 12,42,20

    C.11,21,40 11,21,41

    D.11,41,21 12,42,22


    正确答案:B
    解析:由于实参传送的是变量的地址,所以对形参指针所指向的单元内容的改变,即对实参内容的改变。

  • 第2题:

    有以下程序:includedefine N 8void fun(int*x,int i){*x=*(x+i)+1;}main(){int a[N]=

    有以下程序: #include<stdio.h> #define N 8 void fun(int*x,int i) {*x=*(x+i)+1;} main() {int a[N]={1,2,3,4,5,6,7,8},i; fun(a,2); for(i=0;i<N/2;i++) {printf("%d",a[i]);} printf("\n"); } 程序运行后的输出结果是( )。

    A.1 3 1 3

    B.3 2 3 4

    C.4 2 3 4

    D.1 2 3 4


    正确答案:C
    解析:函数fun(int*x,int i)的功能是把数组元素x[i]的值加1赋给x[0]。所以在主函数中执行fun(a,2)后,数组元数a[0]的值等于4。然后在for循环语句中,输出数组a中的前4个元素的值,分别是4,2,3,4。

  • 第3题:

    有以下程序: #include<stdio.h> #define N 8 void fun(int*x,int i) {*x=*(x+i);) main( ) { int a[N]={1,2,3,4,5,6,7,8},i; fun(a,2); for(i=0;i<N/2;i++) {printf("Ha",a[i]);} printf("\n"); } 程序运行后的输出结果是( )。

    A.1313

    B.2234

    C.3234

    D.1234


    正确答案:C
    本题考查了宏定义与局部变量的区别,宏定义的作用范围为整个程序,而变量的作用范围只在定义它的函数体的部分,因此,主函数中定义的i与fun中的i互不相干。

  • 第4题:

    以下程序的输出结果是()。includevoid prt(int*x,int*y,int*z){printf("%d,%d,%d\n",++

    以下程序的输出结果是( )。 #include<stdio.h> void prt(int *x,int *y,int *z) { printf("%d,%d,%d\n",++ *x,++ *y,*(z++));} main() { int a=10,b=40,c=20; prt(&a,&b,&c); prt(&a,&b,&c); }

    A.11,42,31 12,22,41

    B.11,41,20 12,42,20

    C.11,21,40 11,21,21

    D.11,41,21 12,42,22


    正确答案:B
    解析:C程序可以通过传递指针的值(变量的地址)来达到修改实参变量值的目的,这是本题主要说明的问题。这里要注意表达式,(z++)的值是*z,其后的z++在程序中无实际作用。函数调用时,由于x,y和z分别指向a,b和c,因此,*x,*y和*z就是a,b和c的值。第一次调用函数时,*x=a=10,*y=b=40,*z=c=20,输出结果为11,41,20,至此,已经可以肯定选项B)是正确的。第二次输出为:12,42,20。

  • 第5题:

    以下程序的输出结果是()。includevoid prt(int *x,int *y,int *z){printf("%d,%d,%d\n"

    以下程序的输出结果是( )。 #include<stdio.h> void prt(int *x,int *y,int *z) {printf("%d,%d,%d\n",++*x,++*y,*(z++));} main() {inta=10,b=40,c=20; prt(&a,&b,&C); prt(&a,&b,&C);}

    A.11,42,31 12,22,41

    B.11,41,20 1,42,20

    C.11,21,40 11,21,21

    D.11,41,21 12,42,22


    正确答案:B