有以下程序includestruct STU{char name[10];int num;};void f(char*name, intnum){s有以下程序 #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].

题目
有以下程序includestruct STU{char name[10];int num;};void f(char*name, intnum){s

有以下程序 #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]={{"YangSan",20041},{"LiSiGuo",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


相似考题
更多“有以下程序includestruct STU{char name[10];int num;};void f(char*name, intnum){s 有以下程序 #include <string.h> struct STU { char name[10]; int num; }; void f(char *name, int num) { struct STU s[2]={{"Su”相关问题
  • 第1题:

    有以下程序: 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值发生了变化。

  • 第2题:

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

  • 第3题:

    有以下程序

    #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”。

  • 第4题:

    有以下程序: #include<stdio.h> struct stu { int num;char name[l0];int age;}; void fun(struct stu*p) { printf("%s\n",p->name);} main( ) { struct stu x[3]={{01,"Zhang",20),{02,"Wang",l9},{03,"Zha0",l8}}; fun(x+2); } 程序运行后的输出结果是( )。

    A.Zhang

    B.Zhao

    C.Wang

    D.19


    正确答案:B
    fun(x+2)表示的是结构体数组中的第3个元素即{03,"Zhao",l8),而输出的是name元素,所以答案为B。

  • 第5题:

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

    有以下程序: #include <stdio.h> struct STU { char name[10]; int num; int Score; }; main() { struct STU s[5]={{"YangSan",20041,703},{"LiSiGuo",20042,580}, {"WangYin",20043,680},{"SunDan",20044,550}, {"Penghua",20045,537}}, *p[5],*t; int i,j; for(i=0;i<5;i++) p[i]=&s[i]; for(i=0;i<4;i++) for(j=i+1;j<5;j++) if(p[i]->Score>p[j]->Score) { t=p[i];p[i]=p[j];p[j]=t;} printf("%d%d\n",s[1].Score,p[1]->Score); } 执行后的输出结果是( )。

    A.550 550

    B.680 680

    C.580 550

    D.580 680


    正确答案:C
    解析:本题是按成员变量Score的值进行由小到大的排序,程序执行后p[5]中各元素分别为:{{"Penghua",20045,537},{"SunDan",20044,550},{"LiSiGuo",20042,580},{"WangYin",20043,680},{"YangSan",20041,703}},所以P[1]->Score=550,s[1].Score=580。

  • 第6题:

    有以下程序: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值并未改变。

  • 第7题:

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

  • 第8题:

    有以下程序:includeincludetypedef struct{char name[9];char sex;float s

    有以下程序: #include <stdio.h> #include <string.h> typedef struct{char name[9];char sex;float score[2]}STU; STU f(STU A) {STU b={"Zhao",'m',85.0,90.0}; int i; strcpy(a.name,b.namC) ; a.sex=b.sex; for(i=0;i<2;i++) a.score[i]=b.score[i]; return a; } main() {STU c={"Qian",'f',95.0,92.0},d; d=f(C) ; pintf("%s,%c,%2.of.%2.of\n",d.name,d.sex,d.score[0],&score[1]); } 程序的运行结果是( )。

    A.Qian,f,95,92

    B.Qian,m,85,90

    C.Zhao,m,85,90

    D.Zhao,C95,92


    正确答案:C
    解析:本题的f()函数中,首先定义了一个STU结构体变量b并初始化为{"Zhao",'m',85.0,90.0},然后分别通过strcpy()库函数、赋值语句和for循环,将b中所有成员分别赋给形参a的相应成员,最后返回a。所以,无论传递给函数fun()的参数是什么,结果返回的都会是函数中定义的STU结构体b的内容{"Zhao",'m',85.0,90.0}。故最终输出结果为:Zhao,m,85,90;应该选择C。

  • 第9题:

    单选题
    有以下函数:#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选项。

  • 第10题:

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

  • 第11题:

    单选题
    有以下程序:#include typedef struct stu{ char name[10]; char gender; int score; } STU;void f(STU *a, STU *b){ *b = *a; printf(%s,%c,%d,, b->name, b->gender, b->score);}main(){ STU a={Zhao, 'm', 290}, b={Qian, 'f', 350}; f(&a,&b); printf(%s,%c,%d, b.name, b.gender, b.score);}程序的运行结果是(  )。
    A

    Zhao,m,290,Zhao,m,290

    B

    Zhao,in,290,Qian,f,350

    C

    Qian,f,350,Qian,f,350

    D

    Qian,f,350,Zhao,m,290


    正确答案: A
    解析:
    调用函数时,若采用传引用的方式,那么对形参进行操作,实参也会产生相应的变化。程序执行过程为:调用f函数,将结构体a与b的地址作为参数传入函数,函数中指针a指向结构体a,指针b指向结构体b,将指针a指向的结构体a赋给指针b指向的结构体b,结构体b内容被修改。输出b指向的结构体b的元素Zhao,m,290。调用函数结束实参b的成员值也发生改变,输出结构体b的元素Zhao,m,290。答案选择A选项。

  • 第12题:

    单选题
    有以下程序:#include #include typedef struct stu{ char name[10]; char gender; int score;}STU;void f(STU *c){ strcpy(c->name,Qian); c->gender='f'; c->score=350;}main(){ STU a={Zhao,'m',290},b; b=a; f(&b); printf(%s,%c,%d,, a.name, a.gender, a.score); printf(%s,%c,%d, b.name, b.gender, b.score);}程序运行后的输出结果是(  )。
    A

    Zhao,m,290,Qian,f,350

    B

    Zhao,m,290,Qian,m,290

    C

    Zhao,m,290,Zhao,m,290

    D

    Zhao,m,290,Qian,m,350


    正确答案: D
    解析:
    main函数中,首先定义两个结构体STU类型的变量a,b,并对a完成初始化,然后将a赋值给b,使得结构体a,b的值都是{"Zhao", 'm', 290},再调用f函数。f函数的功能是将形参结构体指针c指向的结构体赋值为{"Qian", 'f', 350},由于形参是指针,C指向的结构体就是b,所以实参b的值被修改为{"Qian", 'f', 350},而a的值不变,答案选择A选项。

  • 第13题:

    有以下程序:include struet STU{charname[10]; int num; float TotalSeore; };void f(

    有以下程序:#include <stdio.h>struet STU{ charname[10]; int num; float TotalSeore; };void f(struet STU * p){ struet 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.Of\n" ,s [1]. name, s [1]. num ,s [1]. TotalScore);}程序运行后的输出结果是( )。

    A.SunDan 20044 550

    B.Penghua 20045 537

    C.LiSiGuo 20042 580

    D.SunDan 20041 703


    正确答案:B
    解析:main函数将结构体数组,的首地址传递给了f函数的结构体指针变量P,并在函数f中改变了指针变量p所指向的第二个结构体中的成员变量,这也就是改变了main函数中s[1]的成员度量,故程序输出的值为Penghua20045537。

  • 第14题:

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

  • 第15题:

    有以下程序: 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符合题意。

  • 第16题:

    有以下程序: #include<<stdio.h> struct stu { int num; char name[10]: int age;} void fun(struct stu*p) {printf("%s\n",(*p).name);} the main { struct stu students[3]={{9801,"Zhang".20}, {9802,"Wang",19},{9803,"Zhao",1 8}} fun(students+2); } 输出的结果是( )。

    A. Zhang

    B.Zhao

    C.Wang

    D.18


    正确答案:B
    从实参传递过去的是结构体系数组的第3个元素,所以输出的name为Zhao。

  • 第17题:

    以下程序的输出结果是______。includestruct stu{int num; char name[10]; int age;};v

    以下程序的输出结果是______。#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 students[3]={ {9801,"Zhang",20}, { 9802,"Wang",19}, { 9803,"Zhao",18} }; fun(students+2);}

    A.Zhang

    B.Zhao

    C.Wang

    D.18


    正确答案:B

  • 第18题:

    有以下程序 include struct STU { char num[10]; float score[3];}; void ma

    有以下程序 #include<iostream.h> struct STU { char num[10]; float score[3];}; void main( ) { struct STU s[3]={ { "20021",90,95,85 }, {"20022",95,80,75 }, {"20023",100,95,90 } },* p=s; int i; float sum=0; for(i=0;i<

    A.260

    B.270

    C.280

    D.285


    正确答案:B
    解析::C++语言规定数组名代表数组的首地址,也就是第0号元素的地址,在本题中s就是s[0]的地址,指针变量P指向s,也就是指向s[0],所以在for循环累加的是s[0]的score成员值。注意:注意结构体与类的区别。

  • 第19题:

    有以下程序 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。

  • 第20题:

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

  • 第21题:

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

  • 第22题:

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

    Zhao,m,290,Qian,m,290

    B

    Zhao,m,290,Zhao,m,290

    C

    Zhao,m,290,Qian,m,350

    D

    Zhao,m,290,Qian,f,350


    正确答案: B
    解析:
    程序执行过程为:将a赋给b,调用f函数,将b中name地址与gender和score的值传进函数,执行函数体,strcpy函数改变b中name值,但由于后两个成员gender和score为值传递,不能改变b中gender和score值。调用函数结束后,结构体a= {"Zhao", 'm', 290},b= {"Qian', 'm', 290}。答案选择A选项。

  • 第23题:

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