niusouti.com

有以下程序main(){ char *p[]={"3697","2584"};int i,j; long num=0;for(i=0;i<2;i++){j=0;while(p[i][j]!='\0'){ if((p[i][j]-'0') % 2)num=10*num+p[i][j]-'0';j+=2;}}printf(" % d\n",num);}程序执行后的输出结果是A)35B)37C)39D)3975

题目

有以下程序

main()

{ char *p[]={"3697","2584"};

int i,j; long num=0;

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

{j=0;

while(p[i][j]!='\0')

{ if((p[i][j]-'0') % 2)num=10*num+p[i][j]-'0';

j+=2;

}

}

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

}

程序执行后的输出结果是

A)35

B)37

C)39

D)3975


相似考题
参考答案和解析
正确答案:C

(42)C) 解析 : while(p[i][j]!='\0') 表示 p[i][j] 不等于 '\0' 时 , 继续执行 while 中的语句。 if 语句表示(p[i][j]-'\0') 除 2 的余数不为 0 时 , 执行后面的语句。最后执行的结果是 39 。

 

更多“有以下程序main(){ char *p[]={"3697","2584"};int i,j; long num=0;for(i=0;i&lt;2;i++){j ”相关问题
  • 第1题:

    有以下程序: main() {char*p[]={"3697","2584"}; int i,j;long num=0; for(i=0;i<2;i++) {j=0; while(p[i][j]!='\0') {if((p[i][j]-'0')%2)num=10*num+p[i][j]-'0'; j+=2; } } printf("%d\n",num); } 程序执行后的输出结果是( )。

    A.35

    B.37

    C.39

    D.3975


    正确答案:C
    解析:通过赋值表达式指针数组*p[]等价于数组p[2][4];表达式“p[i][j]-'0'”可用来表示该字符数组元素的数值,故表达式“(p[i][j]-'0')%2”为判断该字符数组元素的数值的奇偶性,表达式“num=10*num+p[i][j]-'0'”中的数值运算表示直接加该字符数组元素的数值。

  • 第2题:

    有下列程序: main { char*p[]={"3697","2584"}; int i,j;long num=0; for(i=0;i<2:i++) { j=0; while(p[i][j]!=\0) { if((p[i][j]-\0 )%2)num=1O*num+p [j][j]-0; j+=2; } } printf("%d\n",num); } 程序执行后的输m结果是( )。

    A.35

    B.37

    C.39

    D.3975


    正确答案:D
    执行第一次for循环时,用表达式p[i][j]!=\0来判断字符串数组指针P是否到达字符串的结尾,如果没有到达,继续执行while中的语句。if语句表示(p[i][j]-\0)除2的余数不为0时,即字符串所有奇数,执行后面的语句。所以退出第1次for的循环体时,输出为397,执行第2次循环体。对字符串“2584”进行处理,输出结果为5,因而最后输出结果为3975。

  • 第3题:

    有下列程序:

    main

    { char*p[]={"3697","2584"};

    int i,j;long num=0;

    for(i=0;i<2:i++)

    { j=0;

    while(p[i][j]!='\0')

    { if((p[i][j]-'\0 ')%2)num=1O*num+p

    [j][j]-'0';

    j+=2;

    }

    }

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

    }

    程序执行后的输m结果是( )。

    A.35

    B.37

    C.39

    D.3975


    正确答案:D
    执行第一次for循环时,用表达式p[i][j]!='\0'来判断字符串数组指针P是否到达字符串的结尾,如果没有到达,继续执行while中的语句。if语句表示(p[i][j]-'\0')除2的余数不为0时,即字符串所有奇数,执行后面的语句。所以退出第1次for的循环体时,输出为397,执行第2次循环体。对字符串“2584”进行处理,输出结果为5,因而最后输出结果为3975。

  • 第4题:

    以下程序输出正确的是_______ amovep(int *p,int (*a)[3],int n) { int i,j; for(i=0;i<n;i++) for(j=0;j<n;j++){ *p=a[i][j];p++;} } main() {int *p,a[3][3]={{1,3,5}, {2,4,6}}; p=(int*)mallox(100) amovep)p,a,3); printf("%d%d\n",p[2],p[5]);free(p) }

    A.56

    B.25

    C.34

    D.程序错误


    正确答案:A
    解析:本题main函数中定义了指针p和二维数组a,通过函数amovep将数组的值存入指针p所指向的存储单元中,a的各元素分别:a[0][0]=1,a[0][1]=3,a[0][1]=3,a[0][2]=5,a[1][2]=2,a[1][1]=4,a[1][2]=6,a[2][0]=0,a[2][1]=0,a[2][2]=0。通过malloc()函数给指针分配内存空间,free()函数用于释放指针变量所用内存空间。在主函数中通过amovep(p,a,3)调用函数amovep,使得实参p与形参P,实参数组a与形参中指向数组的指针变量共用同一存储空间。最后输出p[2],p[5]为56。

  • 第5题:

    有以下程序:main(){ char *p[]={"3697","2584"}; int i, j; long num=0; for(i=0;i<2;i++) {j=0; while(p[i][j]!='\0') { if((p[il[j] -'0')%2) num=10*num+ p[i][j] -'0'; j+=2; } printf("%d\n", num);}程序执行后的输出结果是( )。

    A.35

    B.37

    C.39

    D.3975


    正确答案:C
    解析:本题首先定义了一个字符指针数组p,然后使用一个两重循环遍历数组p。因为内循环的循环变量j每次会加2,所以只能遍历到数组p每行中列下标为偶数的字符,它们是‘3’、‘9’、‘2’、‘8’。然后,将它们通过p[i][j]-‘0’表达式转换为对应的整数3、9、2、8,并用%2来判断该整数是否为奇数。所以最终能执行到num=10*num+p[i][j]-‘0’,语句的只有‘3’和‘9’两个字符。此时已不难算出,运行后num中的值为39。故应该选择C。