( 37 )有以下程序#include <stdio.h>#include <string.h>struct A{ int a; char b[10]; double c;};void f ( struct A t ) ;main (){ struct A a={1001, " ZhangDa " ,1098.0};f ( a ) ; printf ( " %d,%s,%6.1f\n " ,a.a,a.b,a.c ) ;}void f ( struct A t ){ t.a=1002; strcpy (

题目

( 37 )有以下程序

#include <stdio.h>

#include <string.h>

struct A

{ int a; char b[10]; double c;};

void f ( struct A t ) ;

main ()

{ struct A a={1001, " ZhangDa " ,1098.0};

f ( a ) ; printf ( " %d,%s,%6.1f\n " ,a.a,a.b,a.c ) ;

}

void f ( struct A t )

{ t.a=1002; strcpy ( t.b, " ChangRong " ) ;t.c=1202.0;}

程序运行后的输出结果是

A ) 1001,zhangDa,1098.0

B ) 1002,changRong,1202.0

C ) 1001,ehangRong,1098.O

D ) 1002,ZhangDa,1202.0


相似考题
参考答案和解析
正确答案:A
更多“( 37 )有以下程序#include stdio.h#include string.hstruct A{ int a; char b[10]; double c;};void f ( struct A t ) ;main (){ struct A a={1001, " ZhangDa " ,1098.0};f ( a ) ; printf ( " %d,%s,%6.1f\n " ,a.a,a.b,a.c ) ;}void f ( struct A t ){ t.a=1002; strcpy ( t.b,”相关问题
  • 第1题:

    有以下程序 struc t STU{ char name [10] int num; void f1(struct STU c) { struct STU b={"LiSiGuo",2042}; c=b; } void f2(struct STU *c) { struct STU b={"SunDan",2044); *c=b; } main ( ) { struct STU a={"YangSan",2041},b={"WangYin",2043}; f1 (a); f2 (&b); printf ( "%d %d\n" ,a.num,b.num); } 执行后输出结果是

    A.2041 2044

    B.2041 2043

    C.2042 2044

    D.2042 2043


    正确答案:A
    解析:本题考核的知识点是结构体类型的综合应用。本题中首先定义了一个结构体类型STU,它由一个字符数组和一个整形变量num组成。然后定义两个函数n和n。其中n是值传递的,n是地址传递的。主函数中定义两个结构体变量a和b并分别赋初值,接着调用函数f1(a),由于函数f1是值传递,故执行该函数后并没有改变a的值,在接着调用函数f2(&b),由于该函数是地址传递,执行该函数后将使变量b的值为{“SunDan”,2044},故函数最后输出的a.num和b.num的值为2041和2044。所以,4个选项中选项A符合题意。

  • 第2题:

    有以下程序

    #inculde <stdio.h>

    #inculde <string.h>

    strtict A

    { int a;char B[10];douBle c;};

    void F (struct A t);

    main()

    { struct A a ={1001,”zhangDa”,1098.0};

    F(a);printF(“%d,%s,%6.1F\n”,a.,a.B,a.c);

    void F(struct A t)

    { t.a=1002;strcpy(t.B,”ChangRong”);t.c=1202.0;}

    程序运行后的输出结果是

    A.1001,zhangDa,1098.0

    B.1002,ChangRong,1202.0

    C.1001,ChangRong,10980

    D.1002,zhangDa,1202.0


    正确答案:A
    解析:该函数的调用为传值调用,故不会改变任何值。

  • 第3题:

    有以下程序: 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的是一个值,而不是地址。

  • 第4题:

    有以下程序#include <string.h>struct STU{ int num; float TotalScore; };void f(struct STU p){ struct STU s[2]={{1047,530},{1048,531}}; p.num = s[1].num; p.TotalScore = s[1].TotalScore;}main(){ struct STU s[2]={{2041,730},{2042,731}}; f(s[0]); printf("%d,%3.0f\n",s[0].num,s[0].TotalScore);}程序的运行结果是A.1047,530 B.1048,531C.2041,730 D.2042,731


    正确答案:C
    本题中,程序首先定义了一个结构体,该结构体包含一个整型和一个浮点型成员变量。然后定义了一个函数f,该函数无返回类型,函数的形参是已定义的结构体变量。在该函数中,首先定义了一个结构体数组s,并赋了初值,然后试题用结构体数组中各对应成员的值替代形参结构体变量中各成员的值,这里关键的问题还是参数的传递问题,由于结构体成员值的传递方式采用的是传值传递,是单向传递,即形参值的改变不影响实参的结果。
    在主函数中,同样定义了一个结构体数组s,并赋了初值,然后调用函数f,将s[0]作为函数的参数,输出s[0]中两成员的值,此时实参的值并没有得到改变。因此,最后输出的结果是2041,730。

     

  • 第5题:

    有以下程序

    #include<stdio.h>

    #include<string.h>

    struet A

    {int a;char b[10];double c;};

    struct A f(struct A t);

    main( )

    {struct A a={1001,“ZhangDa”,1098.0);

    a=f(A);prinff(“%d,%S,%6.1f\n”,a.a,a.b,a.e);

    }

    struct A f(struct A t)

    {t.a=1002;strepy(t.b,“changRong”);t.c=1202.O;return t;}

    程序运行后的输出结果是

    A.1001,ZhangDa,1098.0

    B.1002,ZhangDa,1202.0

    C.1001,ChangRong,1098.0

    D.1002,ChangRong,1202.0


    正确答案:D
    解析:在主函数中,通过a=f(a)实现幽数调用,所以输出的结构体变量相应变为1002,ChangRong,1202.0。

  • 第6题:

    有以下程序: #include<stdio.h> #include<string.h> struct A {int a;char b[10];double C;); struct A f(struct A t): main( ) {struct A a={1001,"ZhangDa",l098.0}; a=f(a);printf("%d,%S,%6.1f\n",a.a,a.b,a.c); } struct A f(struct A t) {t.a= 1002;strcpy(t.b,"ChangRon9");t.c=1202.0;return t;} 程序运行后的输出结果是( )。

    A.1001,ZhangDa,1098.0

    B.1002,ZhangDa,1202.0

    C.1001,ChangRong,1098.0

    D.1002,ChangRong,1202.0


    正确答案:D
    本题考查了结构体函数的调用。定义了结构体A,A含有三个参数分别是整型,字符型和双精度型。主函数中调用了fun,转到structAf(structAt)函数中,内容分别变成了{1002,Chan-gRong,1202.2),函数调用后,格式仍为structAa={1001,"ZhangDa",l098.0);的格式。所以D选项为正确答案。

  • 第7题:

    有以下程序:struct S{int n;int a[20];};void f(struct S*P){int i,j,t;for(i=0;in-1;i++)fo

    有以下程序: struct S{int n;int a[20];}; void f(struct S*P) { int i,j,t; for(i=0;i<P->n-1;i++) for(j=j+1;j<P->n-1;j++) if(p->a[i]>p->a[j]) {t=P->a[i];p->a[i]=P->a[j];p->a[j]=t} } main() {int i;struct S s{10,{2,3,1,6,8,7,5,4,10,9}}; f(&s); for(i=0;i<s.n;i++)printf("%d",s.a[i]);} 程序运行后的输出结果是( )。

    A.3

    B.4

    C.5

    D.6


    正确答案:A
    解析:在主函数main()中定义了一个整型变量i和一个结构体变量s。f()函数中,定义了一个结构体指针类型的指针p,外层循环变量i表示数组的第i个元素,内层循环j表示数组的第i+1个元素,调用f()函数,通过指针变量p来引用结构体成员,并把它们进行从小到大排序,最后输出。

  • 第8题:

    有以下程序:include struct STU{char name[10]; int num;};void f1(struct STU c){ st

    有以下程序: #include <stdio.h> struct STU { char name[10]; int num; }; void f1(struct STU c) { struct STU b={"LiSiGuo",2042}; c=b; } void f2(struct STU *c) { struct STU b={"SanDan",2044}; *c=b; } main() { struct STU a={"YangSan",2041}, b={"WangYin",2043}; f1(a); f2(&b); printf("%d%d\n",a.num,b.hum); } 执行后的输出结果是( )。

    A.2041 2044

    B.2041 2043

    C.2042 2044

    D.2042 2043


    正确答案:A
    解析:f2函数传递的是变量的地址,可以实现数据的交换,而f1函数传递的是值,调用完f1函数后,c的值改变了,但main函数中的a值并未改变。

  • 第9题:

    有以下程序 struct STU{ char name[10]; int num; }; void f1(struct STU C) { struct STU b={"LiSiGuo",2042}; c=b; } void f2(struct STU*C) { struct STU b={"SunDan",2044}; *c=b; } main() { struct STU a={"YangSan",2041},b={"Wang Yin",2043}; f1(a) ;f2(&b) ; printf("%d%d\n",a.num,b.num); } 执行后输出结果是

    A.2041 2044

    B.2041 2043

    C.2042 2044

    D.2042 2043


    正确答案:A
    解析:本题中首先定义了一个结构体类型STU,它由一个字符数组和一个整型变量num组成。然后定义两个函数f1和f2。其中f1是值传递的,f2是地址传递的。主函数中定义两个结构体变量a和b并分别赋初值,接着调用函数f1(a) ,由于函数f1是值传递,故执行该函数后并没有改变a的值,在接着调用函数f2(&b) ,由于该函数是地址传递,执行该函数后将使变量b的值为{“SunDan”,2044},故函数最后输出的a.num和b. num的值为2041和2044。

  • 第10题:

    单选题
    有以下程序:#include #include typedef struct{ char name[10]; char sex; int age;}STU;void fun(STU t){ strcpy(t.name,Tong); t.age++;}main(){ STU s[2] = {Hua, 'm', 18, Qin, 'f', 19}; fun(s[1]); printf(%s,%d,%s,%d, s[0].name, s[0].age, s[1].name, s[1].age);}程序运行后的输出结果是(  )。
    A

    Hua,19,Tong,19

    B

    Hua,18,Tong,20

    C

    Tong,19,Qin,19

    D

    Hua,19,Tong,19


    正确答案: A
    解析:
    程序执行过程为:定义STU类型数组,长度为2,并为其初始化。调用函数fun(s[1])将变量s[1]值传入函数,则t.name= "Qin",t.sex= 'f',t.age = 19。调用函数strcpy使t.name = "Tong",t.age = 20,函数调用结束。注意值传递时对形参的操作不会改变实参的值,结构体数组中元素并没有发生改变,答案选择D选项。

  • 第11题:

    单选题
    若有以下程序#include #include #include typedef struct stu{ char *name,gender; int score;}STU;void f(char *p){ p=(char *)malloc(10); strcpy(p,Qian);}main(){ STU a={NULL,'m',290},b; a.name=(char *)malloc(10); strcpy(a.name,Zhao); b=a; f(b.name); b.gender='f'; b.score=350; printf(%s,%c,%d,, a.name, a.gender, a.score); printf(%s,%c,%d, b.name, b.gender, b.score);}则程序的输出结果是(  )。
    A

    Qian,m,290,Qian,f,350

    B

    Zhao,m,290,Qian,f,350

    C

    Qian,f,350,Qian,t,350

    D

    Zhao,m,290,Zhao,f,350


    正确答案: D
    解析:
    初始化时,struct a中的数据:a.name:Zhao,a.gender:m,a.score:290。执行b=a,则b中的数据:b.name:Zhao,b.gender:m,b.score:290,struct在赋值过程中实现的是浅拷贝,a.name和b.name指向同一块内存空间。执行f(b.name),函数f中形参p和b.name指向同一块内存空间,在f函数内部,p又重新指向另外一块分配的内存空间,而b.name的指向没有变化,指向的内存空间的值也没有发生变化,函数f返回后,b.name中的值依然是Zhao。答案选择D选项。

  • 第12题:

    单选题
    有以下程序#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选项。

  • 第13题:

    有以下程序: struct STU { char name[10]; int num; float TotalScore; }; void f(struct STU *p) { struct STU s[2]={{"SunDan", 20044, 550}, {"Penghua", 20045, 537}}, *q=s; ++p; ++q; *p=*q; } main() { struct STU s[3]={{"YangSan", 20041, 703}, {"LiSiGuo", 20042, 580}}; f(s); printf(" % s % d % 3.0f\n", s[1]. name, s[1]. num, s[1]. TotalScore); } 程序运行后的输出结果是______。

    A.SunDan 20044 580

    B.Penghua 20045 537

    C.LiSiGUO 20042 580

    D.SunDan 20041 703


    正确答案:B
    解析:f函数用了显式传地址的方式,因此主函数中的s值发生了变化。

  • 第14题:

    有以下程序: 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]的数据依然是在主函数中初始化时的数据。

  • 第15题:

    下列程序的运行结果为【】。 include include {int a; char b[10]; double c;};

    下列程序的运行结果为【 】。

    include<stdio.h>

    include<string.h>

    { int a; char b[10]; double c; };

    void f (struct A *t);

    main()

    { struct A a={1001,"ZhangDa",1098.0};

    f(&a) ; printf("%d,%s,%6.lf\n",a.a,a.b,a.C);

    }

    void f(struct A*t)

    { strcpy(t->b, "ChangRong");}


    正确答案:1001ChangRong1098.0
    1001,ChangRong,1098.0 解析:本题主要考查结构体变量赋初值,刚一开始给a赋值1001,b数组什"zhangDa",c赋值1098.0,由于被调函数中引用了结构体成员b,因此在使用strcpy时,strcpy(字符数组1,字符串2),作用是将字符串2复制到字符数组1中, b数组变成了"ChangRong",所以在最后输出时,结果为:1001,ChangRong,1098.0。

  • 第16题:

    有以下程序

    struc STU {

    char name[10];

    int num; };

    void f1(struct STU c)

    { struct STU b={“LiSiGuo”,2042};

    c=b; }

    void f2(struct STU *c)

    { struct STU b={“SunDan”,2044};

    *c=b; }

    main( )

    { struct STU a={“YangSan”,2041},b={“WangYin”,2043 };

    f1(a);f2(&b);

    printf(“%d %d\n”,a.num,b.num); }

    执行后的输出结果是( )

    A.2041 2044

    B.2041 2043

    C.2042 2044

    D.2042 2043


    正确答案:A
    解析:经过函数调用,n()没有改变实参早的值,f2()改变了实参b的值。

  • 第17题:

    有以下程序: #include<stdi0.h> #include<string.h> struct A {int a;char b[10];double C;); void f(struct A t); main( ) {struct A a={"1001,"ZhangDa",l098,0}; f(a);printf("%d,%S,%6.1f\n",a.a,a.b,a.c);} void f(struct A t) {t.a=1002;strcpy(t.b,"ChangRon9");t.c=1202.0;} 程序运行后的输出结果是( )。

    A.1001,ZhangDa,1098.0

    B.1002,ChangRong,1202.0

    C.1001,ChangRong,1098.0

    D.1002,ZhangDa,1202.0


    正确答案:A
    将结构变量作为形参,通过函数间形参与实参相结合的方式将整个结构传递给函数,这种传递方式是值传递。在被调用函数中,对结构形参变量值进行的任何修改都不会影啊到调凋函数中的结构变量。

  • 第18题:

    有以下程序: struct STU{ char name[10]; int num; }; void f1(struct STU c) { struct STU b={"LiSiGuo",2042); c=b; } void f2(struct STU *c) { struct STU b={"SunDan",2044); *c=b; } main() {struct STU a={"YangSan",2041},b={"WangYin",2043); f1(a);f2(&b); printf("%d %d\n",a.num,b.num); } 执行后输出结果是( )。

    A.2041 2044

    B.2041 2043

    C.2042 2044

    D.2042 2043


    正确答案:A
    解析:本题中首先定义了一个结构体类型STU,它由一个字符数组和一个整形变量hum组成。然后定义两个函数f1和f2。其中f1是值传递的,f2是地址传递的。主函数中定义两个结构体变量a和b并分别赋初值,接着调用函数f1(a),由于函数n是值传递,故执行该函数后并没有改变a的值,再接着调用函数f2(&b),由于该函数是地址传递,执行该函数后将使变量b的值为{"SunDan",2044},故函数最后输出a.num和b.num的值为2041和2044。所以,4个选项中选项A符合题意。

  • 第19题:

    有以下程序: include include void f(char * s,char*t){char k; k=*s;*s=*

    有以下程序: #include <stdio.h>#include <string.h>void f(char * s,char*t){ char k; k=*s; *s=*t; *t=k; s++; t--; if( * s) f(s,t);}main( ){ char str[10] :"abedefg", * p; p = str + strlen(str)/2+1; f(p,p -2); printf( "% s \n" ,str);程序运行后的输出结果是( )。

    A.abcdefg

    B.gfedcba

    C.gbcdefa

    D.abedcfg


    正确答案:B
    解析:本程序的作用是将字符串str倒序。语句p=str+strlen(str)/2+1;将指针变量p指向字符'e'所在的存储单元,P-2指向字符,'c'所在的存储单元,在函数f中将这两个存储单元的内容交换,然后将f函数中指向字符'e'的指针变量s加1,指向字符'c'的指针变量t减1,继续将s和t指向的存储单元的内容进行交换,直到s指向的存储单元的内容为空为止。所以本题程序输出的结果是字符串"abcdefe”的倒序形式"gfedcba"。

  • 第20题:

    有以下程序: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的是一个值,而不是地址。

  • 第21题:

    ( 37 )有以下程序

    #include <stdio.h>

    #include <string.h>

    struct A

    { int a; char b[10]; double c;};

    void f ( struct A t ) ;

    main ()

    { struct A a={1001, " ZhangDa " ,1098.0};

    f ( a ) ; printf ( " %d,%s,%6.1f\n " ,a.a,a.b,a.c ) ;

    }

    void f ( struct A t )

    { t.a=1002; strcpy ( t.b, " ChangRong " ) ;t.c=1202.0;}

    程序运行后的输出结果是

    A ) 1001,zhangDa,1098.0

    B ) 1002,changRong,1202.0

    C ) 1001,ehangRong,1098.O

    D ) 1002,ZhangDa,1202.0


    正确答案:A

  • 第22题:

    单选题
    有如下程序:#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选项。

  • 第23题:

    单选题
    有以下程序:#include #include struct A{ int a; char b[10]; double c;};struct A f(struct A t);main(){ struct A a={1001,ZhangDa,1098.0}; a=f(a); printf(%d,%s,%6.1f,a.a,a.b,a.c);}struct A f(struct A t){ t.a=1002; strcpy(t.b,ChangRong); t.c=1202.0; return t;}程序运行后的输出结果是(  )。
    A

    1001,ZhangDa,1098.0

    B

    1002,ZhangDa,1202.0

    C

    1001,ChangRong,1098.0

    D

    1002,ChangRong,1202.0


    正确答案: A
    解析:
    函数f对结构体成员进行修改,并返回新的结构体;main函数先定义了一个结构体变量a并为它赋初值,然后调用函数f修改结构体变量的成员值,最后输出新的结构体变量成员值。答案选择D选项。

  • 第24题:

    单选题
    有以下程序:#include #include struct A{ int a; char b[10]; double c;};void f(struct A t);main(){ struct A a={1001,ZhangDa,1098.0}; f(a); printf(%d,%s,%6.1f,a.a,a.b,a.c);}void f(struct A t){ t.a=1002; strcpy(t.b,ChangRong); t.c=1202.0; return t;}程序运行后的输出结果是(  )。
    A

    1001,ZhangDa,1098.0

    B

    1002,ChangRong,1202.0

    C

    1001,ChangRong,1098.0

    D

    1002,ZhangDa,1202.0


    正确答案: A
    解析:
    当把结构体变量中的数据作为一个整体传送给相应的形参时,传递的是实参结构体变量中的值,系统将为结构体类型形参开辟相应的存储单元,并将实参中各成员的值一一对应赋给形参中的成员。函数体内对形参结构体变量中任何成员的操作,都不会影响对应实参中成员的值,从而保证了调用函数中数据的安全,但这也限制了将运算结果返回给调用函数。函数f中的结构体变量t是一个形参,在函数中对其值的改变只在函数体内有效,不影响实参。即,主函数中调用函数f以后,结构体变量a的值没有改变。答案选择A选项。