更多“单选题有以下程序#include main (){ int a[5] = {2,4,6,8,10},*p,**k; p = a; k = p; printf(%d,*(p++)); printf(%d,**k);}程序运行后的输出结果是(  )。A 24B 44C 22D 46”相关问题
  • 第1题:

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

    struct NODE

    {int k;

    struct NODE *link;

    };

    main()

    {structNODEm[5],*p=m,*q=m+4;

    int i=0;

    while(p!=q){

    p->k=++i;p++;

    q->k=i++;q-;

    }

    q->k=i;

    for(i=0;i<5;i++)printf("%d",m[i].k);

    printf("\n");

    }


    正确答案:13431
    13431 解析:程序执行过程如下:
    p=m,q=m+4,条件9!=q成立,执行p->k=++i;,由于是“前加”,所以m[0].k=1,执行p++后p=m+1;执行q->k=i++;,由于是“后加”,所以m[4].k=1,然后使得i加上1,即i=2,q-后,q=m+3: p=m+1,q=m+3,条件p!=q成立,执行p->k=++i;,由于是“前加”,所以i=3,m[0].k=3,执行p++后p=m+2:执行 p->k=++i;,由于是“后加”,所以m[4].k=3,i=4,q-后,q=m+2; p=m+2,q=m+2,条件p!=q不成立,则执行p->k=i;即m[2].k-4;故输出的值为13431。

  • 第2题:

    有以下程序:include main() {int a[] = {2,4,6,8,10} ,y =0,x, * p;p =&a[1];for(

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

    A.10

    B.11

    C.14

    D.15


    正确答案:C
    解析:本程序通过语句p=&a[1];将指针变量p指向存储单元a[1],使得p[0]的值为4,通过for循环,使y的值丸P[1]与p[2]之和,即y=6+8,所以输出的y值为14。

  • 第3题:

    有下列程序main(){ int a[5]={2,4,6,8,10},*p,**k; p=a; k=&p; printf("%d",*(p++)); printf("%d\n",**k);}运行该程序,其输出结果是A.4 B.22C.24 D.46


    正确答案:C
    在本题中,程序首先定义了一个一维数组a,赋其初值,并定义一个同类型的指针变量p和一个指向指针的指针变量k,然后让指针变量p指向数组的首地址,接着将指针变量p的地址值赋给指向指针的指针变量k。
    在第一条输出语句中,首先我们需要弄清楚*(p++)的作用,它是先调用指针变量p的值,然后使其自加,输出效果等价于*p,因此,最后输出的结果是数组中的第一个元素。
    在第二条输出语句中,我们需要弄明白**k的作用,指向指针的指针变量类似于指针变量,如果用**k表示一个数值,可以确定这条输出语句的输出结果是一个数值,而非地址,从表达式k=&p可以看出,k的值是指针变量p的地址值,p的值改变后,k能实时得到改变,那么在第一条输出语句对p的改变,在第二条输出语句中得到了体现。因此,**k输出的是数组中的第二个元素,即4。
    综合上面的分析,可以知道程序最终的输出结果是24。

  • 第4题:

    以下程序的输出结果是______。includemain(){int k=4,m=1,p; p=func(k,m); printf("%d,

    以下程序的输出结果是______。 #include<stdio.h> main() { int k=4,m=1,p; p=func(k,m); printf("%d,",p); p=func(k,m); printf("%d\n",p); } func(a,b) int a,b; { static int m=0,i=2; i+=m+1;m=i+a+b;return(m); }

    A.8,17

    B.8,16

    C.8,20

    D.8,8


    正确答案:A

  • 第5题:

    有以下程序includemain(){int*p,j; p=NULL p=fun(); for(j=0;j<4;j+){printf("%d",*p)

    有以下程序 #include<stdio.h> main() { int *p,j; p=NULL p=fun(); for(j=0;j<4;j+){printf("%d",*p);p++;} } int*fun() { int a[4],k; for(k=0;k<4;k++)a[k]=k; return(A) ; } 程序运行后的输出结果是( )

    A.程序有错不能运行

    B.输出4个NULL

    C.输出0 1 2 3

    D.输出1 1 1 1


    正确答案:A

  • 第6题:

    下面程序的功能是输出数组s中最大元素的下标,请填空。main(){ int k, p,s[]={1, -9, 7, 2, -10, 3}; for(p =0, k =p; p< 6; p++) if(s[p]>s[k]) ; printf("%d\n", k);}


    正确答案:k=p
    在本题中,题目给出了程序段的功能是输出数组s中最大元素的下标。要输出最大元素的下标,肯定需要先找出最大的元素。
    在程序中,首先定义两个整型变量k和p,然后定义了一个一维数组s并初始化。接着执行for循环,循环变量的初值为0,且循环结束的条件为循环变量小于6,即数组s元素的个数,每循环一次,循环变量自加1,循环体中,首先是条件判断语句if(s[p]>s[k]),根据上面对题目的分析可知,要找出最大元素的下标,需先找出最大元素,而条件语句刚好是对两个元素进行比较,两个元素的下标分别为p和k,变量p是循环变量,用来取数组中的各个元素。从程序最后的输出语句可以看出,变量k中保存的是最大元素的下标,那么s[k]中保存的肯定就是最大的元素。如果条件结果为真,说明取到的当前数组元素值大于当前最大值,那么需要使s[k]表示s[p]值,对比这两种差别可以知道,空缺处需要填写的内容是k=p。

  • 第7题:

    以下程序运行后的输出结果是______。 main() { char a[]="ABCDEFGH",b[]="abCDefGh"; char*p1,*p2;int k; p1=a;p2=b; for(k=0;k<=7;k++) if*(p1+k)==*(p2+k))printf("%c",*(p1+k)); printf("\n"); }

    A.ABCDEFG

    B.CDG

    C.abcdefgh

    D.abCDefGh


    正确答案:B

  • 第8题:

    下列程序的输出结果是()。ineludemain(){int a[5]={2,4,6,8,10},*p,**k; p=a;k=&p;

    下列程序的输出结果是( )。 #inelude <stdio.h> main() { int a[5]={2,4,6,8,10},*p,**k; p=a; k=&p; printf("%d",*(p++)); printf("%d\n",**k); }

    A.4

    B.22

    C.24

    D.46


    正确答案:C
    解析:指针变量p指向数组a的首地址,并把指针变量p的地址赋给指向指针的指针变量k。第一个printf函数输出2,第二个printf函数输出4。

  • 第9题:

    单选题
    有以下程序:#include main(){ int a[10]={1,3,5,7,11,13,17},*p=a;  printf(%d,,*(p++)); printf(%d,*(++p)); }程序运行后的输出结果是(  )。
    A

    3,7

    B

    3,5

    C

    1,5

    D

    1,3


    正确答案: D
    解析:
    程序执行过程:指针p指向数组第一个元素;*(p++)先取p,输出p指向的元素1,之后p移动1个存储空间,指向数组第二个元素;*(++p),指针p移动1个存储空间指向数组第三个元素,之后输出所指元素5。答案选择C选项。

  • 第10题:

    单选题
    若有以下程序 #include  void sp(int *a) {  int b=2;  a=&b;  *a=*a*2;  printf("%d,",*a); } main() {  int k=3,*p=&k;   sp(p);   printf("%d,%d",k,*p);  } 则程序的输出结果是(  )。
    A

    4,3,4

    B

    4,3,3

    C

    6,3,6

    D

    6,6,6


    正确答案: B
    解析:
    函数sp(p)调用前,p指向k;调用后,a=&b语句表示指针a指向变量b的地址,*a=*a*2等价于b=b*2,最后在sp函数内部输出4;sp函数没有改变指针p指向的内存单元,k和*p仍然是3。答案选择B选项。

  • 第11题:

    单选题
    有以下程序:#include main(){ int password; char *p,old_str[10]=wind; scanf(%d,&password); p = old_str; while(*p) {  printf(#%c,*p+password);  p++; }}程序运行时,从键盘输入2<回车>,输出结果是(  )。
    A

    #y#k#p#f

    B

    #wi#nd#

    C

    xj#oe

    D

    #2222#


    正确答案: C
    解析:
    首先定义了一个指针p,使其指向数组的首地址,在while语句中,如果当前指针指向地址单元的字符不等于空字符'\0',则输出'#'和指针对应地址元素的值在ASCII码加2后变换的字符常量,答案选择A选项。

  • 第12题:

    单选题
    有以下程序:#include int fun(int a,int b){ static int m=0,i=2; i+=m+1; m=i+a+b; return m;}main(){ int k=4,m=1,p; p=fun(k,m); printf(%d,,p); p=fun(k,m); printf(%d,p);}程序运行后的输出结果是(  )。
    A

    8,17

    B

    8,16

    C

    8,8

    D

    8,20


    正确答案: D
    解析:
    static变量编译时,将其分配在内存的静态存储区中,在整个程序运行期间都不释放这些存储单元,即使退出函数,下次再进入该函数时,静态局部变量仍使用原来的存储单元,值是上一次函数调用结束时的值。程序执行过程为:调用函数,m=0,i=2,i=i+m+1=3,m=8,返回p=8,再次调用函数,m=8,i=3,i=i+m+1=12,m=12+4+1=17,返回p=17。答案选择A选项。

  • 第13题:

    下述程序的输出结果是()。includevoid main(){ int a[5]={2,4,6,8,10};int*p=a,**q=&am

    下述程序的输出结果是( )。 #include<stdio.h> void main() { int a[5]={2,4,6,8,10}; int *p=a,**q=&p; printf("%d,",*(p++)); printf("%d",* *q);}

    A.4,4

    B.2,2

    C.4,5

    D.2,4


    正确答案:D
    解析:通过赋值,指针p和q都指向了数组a的首地址,*(p++)先引用数组元素,然后p++,所以输出结果为2,**q指向的数组元素为4。注意:通过建立一个指针数组来引用二维数组元素。

  • 第14题:

    有以下程序: include main( ) {char s[ ] ="159" , * p;p=s;printf( "% c", * p + +

    有以下程序: #include <stdio.h> main( ) { char s[ ] ="159" , * p; p=s; printf( "% c", * p + + ); printf("%~", * p++);}程序运行后的输出结果是( )。

    A.15

    B.16

    C.12

    D.59


    正确答案:A
    解析:语句p=s将指针变量p指向字符数组s,第一次输出时,由于++和*为同一优先级,而结合方向为自右向左,所以,*p++相于*(p++)。但又因为“++”在p的右侧,所以,先输出*p,得到s[0]的值,然后P++,P指向s[1],故第二次输出时,输出s[1]的值,所以输出结果为15。

  • 第15题:

    下列程序舶输出结果是【 】。include main() {int a[5]={2,4,6,8,10},*p;p=a;p++;printf("

    下列程序舶输出结果是【 】。

    include <stdio.h>

    main()

    {

    int a[5]={2,4,6,8,10},*p;

    p=a;p++;

    printf("%d",*p);

    }


    正确答案:4
    4 解析:题目中定义了一个数组和指针,接着将数组的首地址给了指针,即指针p指向数组a的第一个元素,通过p++,p指向了数组a的第二个元素,所以输出结果为4。

  • 第16题:

    下列程序的运行结果是()。 include main() {static char a[]="Languagef",b[]="program

    下列程序的运行结果是( )。

    #include<stdio.h>

    main()

    { static char a[]="Languagef",b[]="programe";

    Char*p1,*p2;int k;

    p1=a;p2=b;

    for(k=0;k<=8;k++)

    if(*(p1+k)==*(p2+k))printf("%c",*(p1+k));

    }

    A.gae

    B.ang

    C.program

    D.有语法错


    正确答案:A
    解析:本题考查指针的用法,if(*(p1+k)==*(p2+k))语句的功能是判断两个数组中的字符是否相同,如果相同则输出。

  • 第17题:

    下面程序的运行结果是#include "stdio.h" void fun(int k,int *p) { int a,b; if(k==1|| k==2) *p=1; else { fun(k-1,&a); fun(k-2,&b); *p=a+b; } }main(){ int x; fun(6,&x); printf("%d\n",x);}


    正确答案:8
    本题主要考查函数的递归调用。在本题中,程序首先定义了一个无返回类型的fun函数,该函数带有一个整型变量的形参和一个指针型的变量形参。从函数体中我们可以看出,该递归函数的出口是形参k的值等于1或2,如果运行到函数出口,则指针变量形参p的值等1。
    在主函数中,首先定义了一个整型变量x,然后调用fun函数,传递的实参分别为6和变量x的地址,然后程序运行fun函数,在fun函数中,首先定义了两个整型变量a和b,然后判断形参变量k的值是否到达函数出口,这时,k的值为6,没有到达出口,然后程序分别递归执行fun(5,&a)和fun(4,&b)。从程序中可以看出,p的值为分别调用两个函数的p值的和。
    首先执行fun(5,&a)时,k=5,没有到达出口,又进行一次递归,分别执行fun(4,&a)和fun(3,&b),由于都没达到出口,分别执行fun(3,&a)和fun(2,&b),fun(2,&a)和fun(1,&b),由于fun(2,&a)和fun(1,&b)返回的p值都为1,那么fun(3,&a)返回p的值为2,fun(4,&a)返回的p值就等于fun(3,&a)和fun(2,&b)之和,为3,同理可以得出fun(5,&a)返回的p值为5,fun(6,&a)返回的p值为8。因此,最后题目要求输出的结果为8。

  • 第18题:

    以下程序运行后,输出结果是()includess(char*s){char*p=s; while(*p)p++ return(p-s);

    以下程序运行后,输出结果是( ) #include<stdio.h> ss(char *s) { char*p=s; while(*p) p++ return(p-s); } main() { char *a="abded" int i; i=ss(a) ; printf("%d\n",i); }

    A.8

    B.7

    C.6

    D.5


    正确答案:D

  • 第19题:

    下列程序的输出结果是( )。 int a[5]={2,4,6,8,10},*P,* *k; p=a; k=&p; printf("%d",*(p++)); printf("%d\n",* *k);

    A.4 4

    B.2 2

    C.2 4

    D.4 6


    正确答案:C

  • 第20题:

    对于以下程序,   main( )  { int a[5],*p;    int k;    for(k=0,p=a;k<5;k++,p++)     scanf(“%d”,p);    for(;k>0;k--)     printf(“%d”,*(--p));  }  若输入为:1 2 3 4 5(注:表示回车),则输出结果是多少?


    正确答案:输出结果是54321

  • 第21题:

    单选题
    有以下程序#include main (){ int a[5] = {2,4,6,8,10},*p,**k; p = a; k = &p; printf(%d,*(p++)); printf(%d,**k);}程序运行后的输出结果是(  )。
    A

    24

    B

    44

    C

    22

    D

    46


    正确答案: C
    解析:
    p是int类型的指针,指向数组a的首元素;k的int *类型的指针,指向p的地址,即k指针和p指针都指向元素2的位置。*(p++),先使用p的值,输出该地址对应的存储空间的值,即输出2,再执行p++,p指向a中第二个元素;k指针始终指向p的地址,那么*k的值就是p本身的值,即a[1]的地址,**k的值就是a[1],输出4。答案选择A选项。

  • 第22题:

    单选题
    有以下程序:#include main(){ char s1[]=programe,s2[]=Language; char *p1=s1,*p2=s2; int k; for(k=0;k<8;k++)  if(*(p1+k)==*(p2+k))   printf(%s ,(p1+k));}程序的运行结果是(  )。
    A

    grame ame e

    B

    g a e

    C

    programe

    D

    无输出字符


    正确答案: D
    解析:
    定义两个指针变量p1、p2,分别指向数组s1、s2首地址,在for循环中,比较两个指针对应地址的元素是否相等,如果相等,则输出当前指针指向地址的字符串,当k=3时,*(p1+k)和*(p2+k)相等都为'g',输出p1+k对应的字符串,即"grame";当k=5时,输出"ame";当k=7时,输出"e"。答案选择A选项。

  • 第23题:

    问答题
    对于以下程序,   main( )  { int a[5],*p;    int k;    for(k=0,p=a;k0;k--)     printf(“%d”,*(--p));  }  若输入为:1 2 3 4 5(注:表示回车),则输出结果是多少?

    正确答案: 输出结果是54321
    解析: 暂无解析

  • 第24题:

    单选题
    有以下程序:#include void fun(int *s,int t,int *k){ int p; for(p=0,*k=p;p  if(s[p]>s[*k])*k=p;}main(){ int a[10]={11,12,13,14,15,16,20,18,19,10},k; fun(a,10,&k); printf("%d,%d",k,a[k]);}程序运行后的输出结果是(  )。
    A

    6,20

    B

    10,9

    C

    7,20

    D

    10,10


    正确答案: A
    解析:
    调用函数fun,将数组的地址、数组长度、变量k的地址传入函数。for函数实现查找数组中最大值,将其下标值存入变量k标志的内存单元。输出k=6,a[6]=20。答案选择A选项。