单选题有如下程序: struct person {char name[10];char sex;float weight; }zhangsan, *ptr; ptr=&zhangsan; 若要从键盘读入姓名给结构体变量zhangsan的name成员,输入项错误的是(  )。A scanf(%s,zhangsan->name);B scanf(%s,zhangsan.name);C scanf(%s,ptr->name);D scanf(%s,(*ptr).name);

题目
单选题
有如下程序: struct person {  char name[10];  char sex;  float weight; }zhangsan, *ptr; ptr=&zhangsan; 若要从键盘读入姓名给结构体变量zhangsan的name成员,输入项错误的是(  )。
A

scanf(%s,zhangsan->name);

B

scanf(%s,zhangsan.name);

C

scanf(%s,ptr->name);

D

scanf(%s,(*ptr).name);


相似考题
更多“有如下程序: struct person {  char name[10];  char sex;  float wei”相关问题
  • 第1题:

    设有如下定义 struct ss { char name[10]; int age; char sex; } std[3],* p=std; 下面各输入语句中错误的是

    A.scanf("%d",&(*p).age);

    B.scanf("%s",&std.name);

    C.scanf("%c",&std[0].sex);

    D.scanf("%c",&(p->sex));


    正确答案:B
    解析:程序定义中std为一数组

  • 第2题:

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


    正确答案:A
    解析:题目中定义的函数f()包含两个参数,一个字符指针,—个整型变量。当修改参数指针所指向的内容的时候,实参所指的内容也被修改,即传址调用;但只是修改参数变量的内容,则实奉不受影响,即传值调用。因此,主函数调用f()函数后,第1个参数被修改成函数中s[0]的name成员,第2个参数不受影响,还是主函数中s[1]的num成员。故最终输出SunDan20042。应该选择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题:

    有如下定义: struct person {char name[9];int age;} struct person class[10]={ "John",17, "Paul",19, "Mary",18, "Adam",16}; 能输出字母M的是( )

    A.printf("%c\n",class[3].name);

    B.printf("%c\n",class[3].name[1]);

    C.printf("%c\n",class[2].name[1]);

    D.printf("%c\n",class[2].name[0]);


    正确答案:D

  • 第5题:

    有以下程序 include main() { struct STU{char name[9];char sex;double

    有以下程序 #include <stdio.h> main() { struct STU{char name[9];char sex;double score[2];}; sturt STU a={"Zhao" ,'m',85.0,90.0},b={"Qian" ,'f,95:0,92.0}; b=a; printf("%s,%c,%2.0f,%2.0f\n",b.name,b.sex,b.score[0],b.score[1]); } 程序的运行结果是______。

    A.Qian,f,95,92

    B.Qian,85,90

    C.Zhao,f,95,92

    D.Zhao,m,85,90


    正确答案:D
    解析:本题定义了两个结构体变量a和b,并将结构体变量a的内容赋给了结构体变量b。对于结构体的赋值,意味这将其中的每一个元素都进行赋值,所以输出的结构体变量b中的内容即为结构体变量a中的各项内容。另外本题需要注意的是输出格式的控制,其中“%2.0f”指的是输出的数据共占2列,其中有0位小数。

  • 第6题:

    下面程序的运行结果是typedef union student{ char name[10]; long sno; char sex; float score[4];}STU;main(){ STU a[5]; printf("%d\n",sizeof(a));}


    正确答案:80
    根据共用体变量的特点可知,共用体变量所占的内存长度等于最长的成员的长度,所以变量STU所占的字节数等于其成员score[4]所占的字节数,即为16个字节,最终打印出共用体数组a[5]的长度为16´5=80。

  • 第7题:

    某C语言结构体的定义如下。 struct date { int year, month, day; }; struct worklist { char name[20]; char sex; struct date birthday; }person; 若对变量person的出生年份进行赋值,正确的赋值语句是(33)。

    A.year=1976

    B.birthday. year=1976

    C.person. year=1976

    D.person. birthday. year=1976


    正确答案:D
    解析:本试题考查嵌套定义的结构体成员的引用。首先,直接使用结构体成员而无所属关系是一种典型错误,系统将认为它是普通变量而非结构体成员。其次,不论结构体嵌套的层次多少,只能从最外层开始,逐层用“.”运算符展开,注意展开时必须使用变量名而不是结构体名。事实证明,只有这种展开方式才能清楚地说明成员的所属关系。对于试题,若对变量person的出生年份进行赋值,正确的赋值语句是选项D的“person-birthday.year=1976”。

  • 第8题:

    有以下程序 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成员值。注意:注意结构体与类的区别。

  • 第9题:

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

  • 第10题:

    单选题
    有以下程序#include #include 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.name); 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); printf(%s,%c,%2.0f,%2.0f, d.name, d.sex, d.score[0], d.score[1]);}程序的运行结果是(  )。
    A

    Qian,m,85,90

    B

    Zhao,m,85,90

    C

    Qian,f,95,92

    D

    Zhao,f,95,92


    正确答案: B
    解析:
    struct变量作为形参和返回值时,传递的是结构体类型的值。f函数中,把b变量赋值给a,然后将a返回并赋值给d,所以,d中的数据与b的数据相同。答案选择B选项。

  • 第11题:

    单选题
    若有以下定义:struct tt{char name[10];char sex;} aa={aaaa,'F'},*p=&aa;则错误的语句是(  )。
    A

    scanf(%c,aa.sex);

    B

    aa.sex=getchar();

    C

    printf(%c,(*p).sex);

    D

    printf(%c,p->sex);


    正确答案: A
    解析:
    sex是一个char类型变量,不是地址,A项应为scanf("%c",&aa.sex);。答案选择A选项。

  • 第12题:

    单选题
    有以下程序:#include main(){ struct STU {  char name[9];  char sex;  double score[2]; }; struct STU a = {Zhao,'m',85.0,90.0}, b={Qian,'f',95.0,92.0}; b=a; printf(%s,%c,%2.0f,%2.0f, b.name, b.sex, b.score[0], b.score[1]);}程序运行的结果是(  )。
    A

    Qian,f,95,92

    B

    Qian,f,85,90

    C

    Zhao,f,95,92

    D

    Zhao,m,85,90


    正确答案: C
    解析:
    在C语言中,相同类型的结构体变量可以通过等号直接赋值,它会将对应成员一一对应赋值。所以,本题声明并初始化了两个STU结构体变量a和b,然后将a赋给b,最后逐个输出b的各个成员,其实就是初始化a的内容。答案选择D选项。

  • 第13题:

    有以下程序:includeincludeusingnameSpacestd;classperson{ intage; Char*nam

    有以下程序:

    include <iostream>

    include <string>

    using nameSpace std;

    class person

    {

    int age;

    Char * name;

    public:

    person ( int i, Char * str )

    {

    int j;

    j = strlen( str ) + 1;

    name = new char[ j ];

    strcpy( name, str );

    age = i;

    }

    ~person()

    {

    delete name;

    cout<<"D";

    }

    void display()

    {

    cout<<name<<":"<<age;

    }

    };

    int main()

    {

    person demo( 30,"Smith" );

    demo.display();

    return 0;

    }

    则该程序的输出结果为:【 】。


    正确答案:Smith:30 D
    Smith:30 D 解析:本题考核类与对象的操作。主函数中定义类person的对象 demo,并赋初值(30,"smith")。然后调用成员函数display()输出赋值结果,即Smitch:30。程序结束时demo对象的析构函数被调用,再输出“D”。

  • 第14题:

    下面程序和运行运行结果是【 】。

    typedef union student

    { char name [10];

    long sno;

    char sex;

    float score [4];

    } STU;

    main ( )

    { STU a[5];

    prinff( "% d\n", sizeof(a) );

    }


    正确答案:80
    80

  • 第15题:

    有以下程序 include include typedef struct { cha

    有以下程序 #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.name); a.sex = b.sex; for (i=0; i<2; i++) a.score[i] = b.score[i]; return a; } main() { STU c={"Qian", T, 95.0, 92.0}, d; d=f(c); printf("%s,%c,%2.0f,%2.0f\n", d.name, &sex, &score[O], d.score[1]); } 程序的运行结果是

    A.Qian, f,95,92

    B.Qian,m,85,90

    C.Zhao,m,85,90

    D.Zhao,f,95,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。

  • 第16题:

    以下程序的输出结果是【】。 include main() {struct stru {int a; float b; char d[4]; }

    以下程序的输出结果是【 】。

    include<stdio.h>

    main()

    { struct stru

    { int a;

    float b;

    char d[4];

    };

    printf("%d\n",sizeof(struct stru));

    }


    正确答案:10
    10 解析:结构体变量占用内存空间的字节数是结构体各分量占用内存空间的字节数的总和。int型变量占用2字节,float型变量占用4字节,char型占用1字节,char d[4]是含有4个元素的char型数组,占用4字节。sizeof(struct stru)是计算结构体变量占用内存空间的字节数,2+4+4=10。

  • 第17题:

    若有如下程序: main() { char a[3][5] = {"name","age","sex"},n; for(n=0;n<3;n++) printf("%s\n",a[n]);} 则程序执行后的输出结果是( )。

    A.nameagesex

    B.name

    C.name

    D.name agexex ge age sex x sex


    正确答案:C
    解析:a[3][5]是一个二维数组,它也可以看成是一个有3个元素的一维数组a[0]、a[1]、a[2],同时这3个元素也是一维数组,分别保存字符串“name”、“age”、“sex”。for循环循环3次,输出3个字筘串“name”、“age”、“sex”。所以,C选项为所选。

  • 第18题:

    有以下程序 include include typedef stmct{ char name[9];char sex;flo

    有以下程序

    #include <stdio.h>

    #include <string.h>

    typedef stmct{ char name[9];char sex;float score[2];}STU;

    void f(STU a)

    { STU b={"Zhao",'m',85.0,90.0}; int i;

    strcpy(a.name,b.name) ;

    a.sex=b.sex;

    for(i=0;i<2;i++) a.score[i]=b.score[i];

    main( )

    { STU c={"Qian",'f',95.0,92.0};

    f(c);printf("%s,%c,%2.0f,%2.0f\n",c.name,c.sex,c.score[0],c.score[1]) ;

    }

    程序的运行结果是

    A.Qian,f,95,92

    B.Qian,m,85,90

    C.Zhao,f,95,92

    D.Zhao,m,85,90


    正确答案:A
    解析:本题考查的是函数调用时的参数传递问题。程序在调用函数f时,传给函数f的参数只是结构变量c在栈中的一个副本,函数f的所有操作只是针对这个数据副本进行的修改,这些都不会影响变量c的值。

  • 第19题:

    设有如下定义 struct ss { char name[10]; int age; char sex; }std[3], * p=std; 下面各输入语句中错误的是

    A.cin>>(* p).age);

    B.cin>>std.name);

    C.cin>>std[0].sex);

    D.cin>>(p->.sex));


    正确答案:B
    解析:std是一个数组,其内可以存放三个结构体类型的数据。当std单独使用的时候表示一个指针,指向该数组首地址。因此不能直接用std和点操作符进行配对使用。指针操作符->只能和指针配对使用,点操作符只能和有名对象或变量配对使用。

  • 第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题:

    假设以下代码运行环境为32位系统,其中,__attribute__((packed))的作用是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。代码段1:struct student1{char name[10];long sno;char sex;float score[4];}__attribute__((packed))*p1,a1,b1;代码段2:union student2{char name[10];long sno;char sex;float score[4];}*p2,a2,b2;sizeof(struct student1)、sizeof(union student2)的结果分别是______。

    A.248和128
    B.31和31
    C.31和16
    D.16和16

    答案:C
    解析:
    本题考查程序开发的基础知识。题目中student1是一个结构体,sizeof(struct student1)结果为结构体student1所有元素字节数之和,因此sizeof(struct student1)结果为:10+4+1+16=31字节。题目中student2是个联合,sizeof(union student2)结果是联合student2中最长一个元素的字节数。因此sizeof(union student2)结果为:16字节。

  • 第22题:

    单选题
    有以下程序:#include #include typedef struct{ char name[9]; char sex; float score[2];} STU;void f(STU *A){ strcpy(a->name,Zhao); a->sex='m'; a->score[1]=90.0;}main(){ STU c = {Qian,'f',95.0,92.0},*d=&c; f(d); printf(%s,%c,%2.0f,%2.0f, d->name, c.sex, c.score[0], c.score[1]);}程序的运行结果是(  )。
    A

    Qian,f,95,92

    B

    Zhao,f,95,90

    C

    Zhao,m,95,90

    D

    Zhao,f,95,92


    正确答案: A
    解析:
    f函数调用时,结构体数组名作为实参传给形参指针,结构体指针a指向数组c的首地址。因此,f可以对数组c中的元素赋值,故返回主函数之后,数组c中的成员值已被更新。main函数中有赋值语句“*d=&c;”,指针d指向结构体数组c的首地址,故d->name=c.name,输出结果为Zhao,m,95,90。答案选择C选项。

  • 第23题:

    单选题
    有如下程序:#include struct person{ char name[10]; int age;};main(){ struct person room[4] = {{Zhang,19}, {Li,20}, {Wang,17}, {Zhao,18}}; printf(%s:%d,(room+2)->name, room->age);}程序运行后的输出结果是(  )。
    A

    Wang:19

    B

    Wang:17

    C

    Li:20

    D

    Li:19


    正确答案: B
    解析:
    可用以下3种形式来引用结构体变量中的成员:①结构体变量名.成员名;②指针变量名->成员名;③(*指针变量名).成员名。数组名room是指向数组首地址,也可以当做指向数组的指针来使用。room+2指向数组第三个元素,(room+2)->name为字符串Wang;room指向数组第一个元素,room->age=19。答案选择A选项。

  • 第24题:

    单选题
    有如下程序:#include struct person{ char name[10]; int age;};main(){ struct person room[2] = {{Wang,19},{Li,20}}; printf(%s:%d,(room+1)->name, room->age);}程序运行后的输出结果是(  )。
    A

    Li:19

    B

    Wang:19

    C

    Li:20

    D

    Wang:17


    正确答案: A
    解析:
    room表示数组首地址,首地址+1,指向room数组中第二个元素,并将该元素的name信息进行输出,同理,对第一个元素中的age信息输出。答案选择A选项。