更多“单选题有以下程序:#include struct S{ int a,b;}data[2]={10,100,20,200};main(){ struct S p=data[1]; printf(%d,++(p.a));}程序运行后的输出结果是(  )。A 10B 11C 20D 21”相关问题
  • 第1题:

    有以下程序: include struct STU {int num; float TotalScore;

    有以下程序: #include <strino.h> struct STU {int num; float TotalScore; }; void f(struct STU p) {struct STU s[2]={{20044,550},{20045,537}}; p.num=s[1].num;p.TotalScore=s[1].TotalScore; } main() {struct STU s[2]={{20041,703},{20042,580}}; f(s[0]); printf("%d%3.0t\n",s[0].num,s[0].TotalScore); } 程序运行后的输出结果是 ______。

    A.20045 537

    B.20044 550

    C.20042 580

    D.20041 703


    正确答案:D
    解析:本题定义了结构体类型的变量P作为形参,并将结构体变量s[0]中的值传递给了形参变量p,在函数f中,又对p中的内容作了改变,但这种改变对工函数中s[0]的值并不产生影响,所以主函数中输出s[0]的数据依然是在主函数中初始化时的数据。

  • 第2题:

    有以下程序 include struct st { int x,y;} data[2]={1,10,2,20}; main(

    有以下程序 #include <stdio.h> struct st { int x,y;} data[2]={1,10,2,20}; main() { struct st *p=data; printf("%d,",p->y); printf("%d\n",(++p)->x); } 程序的运行结果是______。

    A.10,1

    B.20,1

    C.10,2

    D.20,2


    正确答案:C
    解析:本题定义了一个包含两个元素(data[0]、data[1])的结构体数组data,其中data[0].x=1;data[0].y=10;data[1].x=2; data[1].y=20。在主函数中,定义了一个指向结构体数组的结构体指针变量p,使得p指向结构体数组的首地址,所以p->y访问的是第一个鲒构体数组元素的第二个值,即data[0].y;(++p)->x访问的是第二个结构体数组元素的第一个值,即 data[1].x,所以程序输出结果为10,2。

  • 第3题:

    有以下程序#include <stdio.h>struct st{ int x, y, z;} data[2]={3,10,2,20,15,7};main(){ struct st *p=data; printf("%d,", p->y); printf("%d\n",(++p)->x); }程序的运行结果是A.10,3 B.20,3 C.10,20 D.20,2


    正确答案:C
    本题考查结构体数组的相关操作。结构体数组的定义方法与结构体变量的定义方法一样,只不过将变量变为数组。数组内的各元素在内存中是连续存放的。题目中给出了一个结构体st,该结构体有三个整型成员x,y,z。结构体数组data元素的个数为2,并对数组进行初始化,data[0]={3,10,2},data[1]={20,15,7}。主函数main中定义了一个指针p指向数组data,第一个printf函数是输出p->y,即data[0].y,该值等于10。第二个printf函数是输出(++p)->x,++p使得指针p指向data[1],输出的目标为data[1].x,该值等于20。故输出结果为10,20。

  • 第4题:

    以下程序的输出结果是( )。include struct s { int x,y; } a[2]={10,100,20,200}; main() { struct s *p=data; printf("%d\n",++(p->x)); }

    A、10

    B、11

    C、20

    D、21


    正确答案:B

  • 第5题:

    有以下程序:includeinclude struct STU {char name[10];int hum;};void f(

    有以下程序:#include <stdio.h>#include <strine.h> struct STU { char name[10]; int hum;};void f(char * name,iht num){ struct STU s[2] = {{ "SunDan" ,20044} , {" Penghua" ,20045}}; num= s[0]. nnm; strepy(name,s[0], name);}main( ){ struct STU s[2] = {{"YangSan" ,20041 }, { "LiSiGao" ,20042}}, * P; p = &s[1]; f(p->name,p->hum); printf("% s %d \n" ,p-> name,p->num);}程序运行后的输出结果是( )。

    A.SunDan 20042

    B.SunDan 20044

    C.LiSiGuo 20042

    D.YangSan 20041


    正确答案:A
    解析:main函数中将定义的结构体类型指针变量p指向结构体类型数组s[1],通过调用函数f改变了指针变量p所指向的结构体中成员变量name的值,但并未改变其num的值。这是因为函数f中的形参name是一个字符型指针变量,它指向了main函数中指针变量p所指向的结构体的成员变量name,所以对函数f中的形参*name的改变也就对main函数中p->name的改变,而函数f中对形参num的改变不会影响main函数中p-?num的值,因为此时传递给num的是一个值,而不是地址。

  • 第6题:

    有以下程序

    #include<stdio.h>

    struct S

    {int a,b;} data[2]={10,100,20,200};

    main()

    {struet S p=data[l];

    printf(“%d\n”,++(P.a)):

    }

    程序运行后的输出结果是

    A.10

    B.11

    C.20

    D.21


    正确答案:D

  • 第7题:

    以下C语言程序的输出结果是( )。struct s{int x,y;}data[2]={10,100,20,200};main( ){struct s*p=data;p++;printf(“%d\n”,++(p->x));}

    A.10
    B.11
    C.20
    D.21

    答案:D
    解析:
    data是s类型的数组,即结构体数组,用{10,100,20,200}赋值,可知:data[0].x=10data[0].y=100data[1].x=20data[1].y=200struct s*p,p是data数组的指针。指向数组的第一个元素,*p即为data[0]。p++之后,即地址向后移动,此时p指向数组的第二个元素,*p即为data[1].p->x和(*p).x是一样的,p->x和data[1].x等价。所以在++(p->x)之后,data[0].x的值变为21。输出21。

  • 第8题:

    单选题
    有以下程序:#include struct S{ int x,y;};main(){ struct S data[3] = {4,3,2,0,8,1}; int i; for(i=0;i<3;i++)  printf(%d%d;,data[i].x, data[i].y>>1); printf();}程序运行后的输出结果是(  )。
    A

    41;20;80;

    B

    41;22;64;

    C

    40;21;80;

    D

    43;20;81;


    正确答案: A
    解析:
    “>>”右移运算符,右移一位等价于除以2后取整。程序中定义结构体数组data并完成初始化,data[0].x=4,data[0].y=3,data[1].x=2,data[1].y=0,data[2].x=8,data[2].y=1。在for循环中,对3个结构体元素y值转换成2进制数后向右移一位,再对此时x,y值依次进行输出,答案选择A选项。

  • 第9题:

    单选题
    有如下程序:#include #include struct S{ char name[10];};void change(struct S *data,int value){ strcpy(data->name, ****); value=13;}main(){ struct S input; int num = 4; strcpy(input.name, THIS); change(&input,num); printf(%s,%d,input.name,num);}程序运行后的输出结果是(  )。
    A

    ****,4

    B

    ****,13

    C

    THIS,4

    D

    THIS,13


    正确答案: A
    解析:
    程序执行过程为:定义结构体变量input,调用strcpy(input.name, "THIS"),使input.name = "THIS",调用函数change(&input,4),将结构体地址传入函数,执行函数体,调用strcpy(data->name, "****")使input.name = "****",而4是值传递,并没有改变num的值。答案选择A选项。

  • 第10题:

    单选题
    有以下程序#include #include struct S{ char name[10];};void change(struct S *data, int value){ strcpy(data->name, #); value = 6;}main(){ struct S input;  int num = 3; strcpy(input.name, OK); change(&input, num); printf(%s,%d, input.name, num);}程序运行后的输出结果是(  )。
    A

    OK,6

    B

    #,6

    C

    OK,3

    D

    #,3


    正确答案: B
    解析:
    考察结构体成员的引用规则。声明结构类型S中有一个字符数组name,在main函数中,定义了一个结构变量input,为input中成员name初始化“OK”后,调用change函数。chang函数执行功能是把“#”赋值给name,由于change函数的形参为结构体指针,因此change函数改变形参指针data指向的name值的同时,也改变了实参input的成员name值;而形参value为整型变量,是num的一个副本,修改了nnm的副本,对num本身不产生影响,所以输出为#,3。答案选择D选项。

  • 第11题:

    单选题
    有如下程序:#include struct S{ int x,y;};main(){ struct S data[2] = {4,3,1,9}; int i; for(i=0;i<2;i++)  printf(%d,%d;,data[i].x, data[i].y>>1);}程序运行后的输出结果是(  )。
    A

    4,1;1,4;

    B

    4,1;2,4;

    C

    4,3;1,9;

    D

    4,3;2,3;


    正确答案: A
    解析:
    “>>”右移运算符。程序执行过程为:定义结构体数组data,并且初始化,则data[0].x=4,data[0].y=3,data[1].x=1,data[1].y=9。for循环依次输出结构体变量的成员与经过位运算之后的结果。3=11B,9=1001B,data[0].y>>1=1,data[1].y>>1=4。答案选择A选项。

  • 第12题:

    单选题
    有以下程序:#include main(){ struct node {  int n;  struct node *next; } *p; struct node x[3] = {{2,x+1},{4,x+2},{6,NULL}}; p=x; printf(%d,,p->n); printf(%d,p->next->n);}程序运行后的输出结果是(  )。
    A

    2,3

    B

    2,4

    C

    3,4

    D

    4,6


    正确答案: C
    解析:
    序中定义了一个含有三个结构体node元素的数组,数组中元素的next指针分别指向后一个元素,最后一个元素的next指针置为NULL。p指针最初指向x[0],因此p->n=x[0].n=2;即第一次输出2,p->next指向x[1],则p->next->n=x[1].n=4。答案选择B选项。

  • 第13题:

    有以下程序: include struct STU (char name[10]; int num; };

    有以下程序: #include <string.h> struct STU (char name[10]; int num; }; void f(char *name, int num) {struct STU s[2]={{"SunDan",20044}.{"Penghua",20045}}; num=s[0].num; strcpy(name,s[0].name); } main() {struct STU s[2]={{"YangSall",20041},{"LiSiGao",20042}},*p;p=&s[1]; f(p->name,p->num); printf("%s%d\n",p->name,p->num); } 程序运行后的输出结果是 ______。

    A.SunDan 20042

    B.SunDan 20044

    C.LiSiGuo 20042

    D.YangSan 20041


    正确答案:A
    解析:本题主函数中定义了结构体类型的指针变量p,并使其指向了结构体类型的数组s[1],并通过调用函数f改变了指针变量p所指向的结构体中成员变量name的值,但并未改变其num的值。这是因为函数f中的形参name是一个字符型指针变量,它指向了主函数中指针变量p所指向的结构体的成员变量name,所以对函数f中的形参*name的改变也就是刘主函数中p->name的改变,而函数f中对形参num的改变并不会影响主函数中p->num的值,因为此时传递给num的是一个值,而不是地址。

  • 第14题:

    有以下程序

    #include <stdio.h>

    struct stu

    { int num; char name [10];int age;};

    Void fun(struct stu *p)

    { printf("%s\n,p->name);}

    main( )

    { struct stu x[3]={ {01,”Zhang”,20},{02, ” Wang”,19},{03, ”zhao”,18} };

    fun(x+2);

    }

    程序运行后的输出结果是

    A)Zhang

    B)Zhao

    C)Wang

    D)19


    正确答案:B
    【答案】B
    【知识点】结构体数组与函数调用
    【解析】函数调用中 “x+2”即为结构体变量x[2]的地址,所以形参变量p指向x[2]的地址,所以打印输出成员name的值“zhao”。

  • 第15题:

    有以下程序:

    #include<stdio.h>

    struct S

    {int a,b;)data[2]=10,100,20,200);

    main( )

    {struct S p=data[l];

    printf("%d\n",++(p.a));

    }

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

    A.10

    B.11

    C.20

    D.21


    正确答案:D
    考查结构体的应用,答案为21。

  • 第16题:

    有以下程序:include include struet STU{ int nam;float TotalSeore;};v

    有以下程序:#include <stdio, h>#include <string, h>struet STU{ int nam; float TotalSeore;};void f( strnct STU p){ struct STU s[2] = { {20044,550} ,{20045,537} }; p.num = s [1]. num; p.TotalScore = s [1]. TotalScore;main( ){ struct STU s[2] = {{20041,703} ,{20042,580}}; f(s[0] ); printf( "%d %3.Of\n" ,s[0].num,s[0].TotalSeore); }程序运行后的输出结果是( )。

    A.20045 537

    B.20044 550

    C.20042 580

    D.20041 703


    正确答案:D
    解析:函数f中定义了结构体类型的变量P作为形参,在main函数中,将结构体变量s[0]中的值传给了形参变量P,在函数f中,虽然改变了p中的内容,但其改变对main函数中s[0]的值不产生影响,所以main函数中输出s[0]的数据仍然是main函数中初始化时的数据。

  • 第17题:

    有以下程序 struct s { int x,y; } data[2]={10,100,20,200}; main() struct s *p=data; printf("%d\n",++(p->x)); 程序运行后的输出结果是

    A.10

    B.11

    C.20

    D.21


    正确答案:B
    解析:本题中定义了一个结构体数组data[2]并初始化,主函数中定义了一个结构体类型指针变量并让它指向data的首地址,由于p指向第一个元素的地址,所以p->x相当于data[0].x即为10,所以++(p->x)后的值为11.所以,4个选项中选项B符合题意。

  • 第18题:

    (38)有以下程序

    #include <stdio.h>

    struct S

    { int a,b;}data[2]={10,100,20,200};

    main()

    { struct S p=data[1];

    printf("%d\n",++(p.a));

    }

    程序运行后的输出结果是

    A)10

    B)11

    C)20

    D)21


    正确答案:D

  • 第19题:

    单选题
    有以下程序:#include struct STU{ int num; float TotalScore;};void f(struct STU p){ struct STU s[2] = {{20044,550}, {20045,537}}; p.num = s[1].num; p.TotalScore = s[1].TotalScore;}main(){ struct STU s[2] = {{20041,703}, {20042,580}}; f(s[0]); printf(%d %3.0f, s[0].num, s[0].TotalScore);}程序运行后的输出结果是(  )。
    A

    20045 537

    B

    20044 550

    C

    20042 580

    D

    20041 703


    正确答案: A
    解析:
    把结构体变量作为一个参数传递给函数时,传递的是实参结构体变量的值,改变形参变量的内容对实参不会有任何影响。因此本题的函数f对结构体s[0]没做改动,结果还是20041 703。答案选择D选项。

  • 第20题:

    单选题
    有以下函数:#include struct stu{ int num; char name[10]; int age;};void fun(struct stu *p){ printf(%s, p->name);}main(){ struct stu x[3] = {{01,Zhang,20}, {02,Wang,19}, {03,Zhao,18}}; fun(x+2);}程序运行后的输出结果是(  )。
    A

    Zhang

    B

    Zhao

    C

    Wang

    D

    19


    正确答案: A
    解析:
    程序定义了结构体stu和结构体数组x,其中x就是数组首地址,即&x[0],x+2代表了指向第三个元素的指针,即&x[2],所以输出p->name为Zhao。答案选择B选项。

  • 第21题:

    单选题
    有以下程序:#include struct st{ int x,y;} data[2]={1,10,2,20};main(){ struct st *p=data; printf(%d,,p->y); printf(%d,(++p)->x);}程序运行的结果是(  )。
    A

    10,1

    B

    20,1

    C

    10,2

    D

    20,2


    正确答案: C
    解析:
    题目在定义结构体st的同时便定义了结构体数组data。可知data[0]={1,10},data[1]={2,20}。结构体指针p指向数组的首地址,指向data[0],++p则指向data[1],所以输出p->y,(++p)->x即输出data[0].y和data[1].x。从初始化列表中可以看出,这两个值分别是10和2。答案选择C选项。

  • 第22题:

    单选题
    有以下程序:#include #include struct S{ char name[10];};main(){ struct S s1,s2; strcpy(s1.name,12345); strcpy(s2.name,ABC); s1=s2; printf(%s,s1.name);}程序运行后的输出结果是(  )。
    A

    ABC12

    B

    ABC45

    C

    12345

    D

    ABC


    正确答案: C
    解析:
    主函数首先定义两个结构体变量s1,s2,分别使用字符串拷贝函数strcpy为s1和s2的成员name赋值,再将s2中的成员信息赋值给s1,因此输出为“ABC”,答案选择D选项。

  • 第23题:

    单选题
    有以下程序:#include #include struct S{ char name[10];};main(){ struct S s1,s2; strcpy(s1.name,XXX); strcpy(s2.name,=); s1=s2; printf(%s,s1.name);}程序运行后的输出结果是(  )。
    A

    =

    B

    XXX

    C

    =XX

    D

    X=


    正确答案: B
    解析:
    主函数首先定义两个结构体变量s1,s2,分别使用字符串拷贝函数strcpy为s1和s2的成员name赋值,再将s2中的成员信息赋值给s1,因此输出为“=”,答案选择A选项。