niusouti.com

有以下程序: #include<stdio.h> #include<string.h> typedef struct{char name[9];char sex;int score[2];}STU; STU f(STU a) { STU b={"Zha0","m",85,90}; int i; strcpy(a.name,b.name); sex=b.sex; for(i=o;i<2;i++)a.score[i]=b.score[i]; return a; } main( ) { STU c={"Qian

题目

有以下程序: #include<stdio.h> #include<string.h> typedef struct{char name[9];char sex;int score[2];}STU; STU f(STU a) { STU b={"Zha0","m",85,90}; int i; strcpy(a.name,b.name); sex=b.sex; for(i=o;i<2;i++)a.score[i]=b.score[i]; return a; } main( ) { STU c={"Qian",f,95,92),d; d=f(c); printf("%S,%C,%d,%d,",d.name,d.sex,d.score[0],d.score[l]); printf("%s,%c,%d,%d\n",C.name,C.sex,c.score[0],C.score[1]); } 程序运行后的输出结果是( )。

A.Zhao,m,85,90,Qian,f,95,92

B.Zhao,m,85,90,Zhao,m,85m90

C.Qian,f,95,92,Qian,f,95,92

D.Qian,f,95,92,zhan,m,85,90


相似考题
更多“有以下程序: #include&lt;stdio.h&gt; #include&lt;string.h&gt; typedef struct{char name[9 ”相关问题
  • 第1题:

    有如下程序: include using namespace std; class Pet{ char name[10]; public: Pet(c

    有如下程序:

    include<iostream>

    using namespace std;

    class Pet{

    char name[10];

    public:

    Pet(char*name){strcpy(this->name,name);}

    const char*getName()const {return name;}

    virtual void call()const=0;

    };

    class Dog:public Pet{

    public:

    Dog(char*name):Pet(name){}

    void call()const{cout<<"汪汪叫":}

    };

    class Cat:public Pet{

    public:

    Cat(char*name):Pet(name){}

    void call()const{cout<<"喵喵叫";}

    };

    int main(){

    Pet*pet1=new Dog("哈克"),*pet2=new Cat("吉米");

    cout<<pet1->getName();pet1->call();cout<<end1;

    cout<<pet2->getName();pet2->call();cout<<end1;

    return 0;

    }

    程序的输出结果是______。


    正确答案:哈克汪汪叫 吉米喵喵叫
    哈克汪汪叫 吉米喵喵叫 解析:此题考查的是虚函数与多态性。在成员函数的声明前面加上virual关键字,即可把函数声明为虚函数;在C++中,一个基类指针可以用于指向它的派生类对象,而且通过这样的指针调用虚函数时,被调用的是该指针实际所指向的对象类的那个重定义版本。即若基类和派生类中存在一模一样的成员函数,通过该基类指针调用这样的成员函数时,若这个成员函数被定义成虚函数,那么就调用派生类中的;否则就调用基类中的。本题中,在f()函数中,此题中,void call()在基类中被声明为虚函数,在主函数中,语句Pet*pet1=new Dog("哈克"),*pet2=new Cat("吉米");定义了基类的指针per1和pet2,并让它们分别指向派生类对象Dog和Cat。所以通过该指针调用call()时运行的是派生类的版本,分别输出哈克和吉米;而通过该指针调用 getName()运行的是基类的版本,分别输出汪汪叫和喵喵叫。

  • 第2题:

    有以下程序: #include 〈iostream〉 #include 〈string〉 using namespace std; class visited { private: int number; char *name; public: static int glob; void set mes(char *a); }; void visited::set mes(char *a) { name=new char[strlen(A) +1]; strcpy(name,A) ; number=++glob; } int visited::glob-O; int main() { visited person[10]; int i; char str[8]; for(i=0;i<5;i++) { cin>>str; person[i] .set mes(str); } cout<

    A.5

    B.4

    C.3

    D.2


    正确答案:A
    解析:本题考核静态数据成员的应用。分析程序:①类visited中,定义了两个私有成员:整型变量number和指针变量name。两个公有成员:静态数据变量glob和函数setmes()。②在函数setmes中,把传入的字符串保存在类的私有成员name中,并把静态数据成员glob自加,同时赋值给私有成员number。通过以上分析可知,函数setmes()用来记录输入的名字(即来访者的姓名),静态数据变量glob用来记录有多少来访者。在主函数中,输入5个字符串(即5个来访者的姓名)后,用来记录来访者数目的静态数据成员glob的值变成5。所以程序最后的输出结果是5。

  • 第3题:

    有如下程序: #include<iostream> usingnamespacestd; className{ charname[20]; public: Name( ){ strcpy(name,"");cout<<'?'; } Name(char*fname){ strcpy(name,fname);cout<<'?'; } }; intmain( ){ Namenames[3]={Name(”张三”),Name(”李四”)); return0; } 运行此程序输出符号?的个数是( )。

    A.O

    B.1

    C.2

    D.3


    正确答案:D
    D。【解析】对有参与无参构造函数的调用。当names[2]为空时调无参构造函数,而names[0],names[1]调用有参构造函数,即输出3个“?”。

  • 第4题:

    有以下程序段

    char.name[20];int num;

    scanf(“name=%s num=%d”,name,&num);

    当执行上述程序段,并从键盘输入:name=Lili num=1001<回车>后,name的值为

    A.Lill

    B.name=Lili

    C.Lili.num=

    D.name=Lili num—1001


    正确答案:A
    解析:scanf函数巾的格式控制字符串是为了输入数据用的.尤论其中有什么字符.也不会输出到屏幕上。输入数据时要按照一一对应的位置原样输入这些字符,包括字符的大小写、字符间的间隔等必须与scanf巾的完全一致。故执行程序后name的值为Lli。

  • 第5题:

    有如下程序: #include<iostream> usingnamespacestd; className{ charname[20]; public: Name( ){ strcpy(name,"");cout<<?; } Name(char*fname){ strcpy(name,fname);cout<<?; } }; intmain( ){ Namenames[3]={Name(”张三”),Name(”李四”)); return0; } 运行此程序输出符号?的个数是( )。

    A.O

    B.1

    C.2

    D.3


    正确答案:D
    D。【解析】对有参与无参构造函数的调用。当names[2]为空时调无参构造函数,而names[0],names[1]调用有参构造函数,即输出3个“?”。

  • 第6题:

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