itgle.com

下列函数调用是()作函数参数? main(){ struct st stu[3]; p=stu;input(stu[i]);} input(struct st p){ ....}A.结构体类型变量作函数参数B.结构体类型数组作函数参数C.结构体类型变量指针作函数参数D.结构体类型数组指针作函数参数

题目

下列函数调用是()作函数参数? main(){ struct st stu[3]; p=stu;input(stu[i]);} input(struct st p){ ....}

A.结构体类型变量作函数参数

B.结构体类型数组作函数参数

C.结构体类型变量指针作函数参数

D.结构体类型数组指针作函数参数


相似考题
参考答案和解析
结构体类型数组作函数参数
更多“下列函数调用是()作函数参数? main(){ struct st stu[3]; p=stu;input(stu[i]);} input(struct st p){ ....}”相关问题
  • 第1题:

    若有下列说明和语句,则对结构体变量st中成员i的引用方式不正确的是( )。

    Struct stu

    {inti;

    intname;

    }st,*#p;

    p=&St;

    A.st.i

    B.*p.i

    C.(*p).i

    D.p->i


    正确答案:B
    解析: 本题主要考查结构指针:p=&st,访问结构体的成员,可以通过结构变量访问,即st.i,也可以用等价的指针形式即(*p).i和p->i。

  • 第2题:

    有以下程序:

    #include<

    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",1 8}}

    fun(students+2); }

    输出的结果是( )。

    A.Zhang

    B.Zhao

    C.Wang

    D.18


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

  • 第3题:

    若有以下定义的语句: struct student { int age; int num;}; struct student stu[3]={{1001,20},{1002,19},{1003,21}}; main() { struct student *p; p=stu; …} 则以下不正确的引用是( )。

    A.(p++)->num

    B.p++

    C.(*p).num

    D.P=&stu.age.


    正确答案:D
    解析:结构体成员的引用可以用“结构体变量名.成员名”或者“结构体变量指针->成员名”两种方式来引用。注意:结构体类型的变量、数组和指针变量的定义。

  • 第4题:

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

  • 第5题:

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

     

  • 第6题:

    若有下列说明和语句,则对结构体变量st中成员i的引用方式不正确的是( )。 Struct stu { int i; int name; }st,*p; p=&st;

    A.st.i

    B.*p.i

    C.(*p).i

    D.p->i


    正确答案:B
    解析: 本题主要考查结构指针:p=&st,访问结构体的成员,可以通过结构变量访问,即st.i,也可以用等价的指针形式,即(*p).i和p->i。

  • 第7题:

    有以下说明和定义语句:struct student{int age; char num[8] ;};struct student stu [3] = { { 20, "200401" } , {21, "200402" } , {19, "200403" } };stract student * p = stu;以下选项中引用结构体变量成员的表达错误的是( )。

    A.(p++) ->num

    B.p- >num

    C.( *p).num

    D.stu[3].age


    正确答案:D
    解析:结构体变量的引用有三种形式:结构体变量.成员名;(*p).成员名;P->,成员名。所以选项A),B),C)都是正确的。

  • 第8题:

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

  • 第9题:

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

  • 第10题:

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

  • 第11题:

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

  • 第12题:

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

  • 第13题:

    c语言 这个编程有什么问题? 怎么不能运行

    void CreateList(struct stu *head){ struct stu=NULL; struct stu *temp=head; int i=1; printf("请输入5位学生的成绩;"); while(i<=5) { struct stu *newNode=(struct stu*)malloc(sizeof(struct stu)); newNode->next=NULL; newNode->index=i++; scanf("%f",&newNode->score); temp->next=newNode; temp->newNode; }}void (){ struct stu *head; head=(struct stu*)malloc(sizeof(struct stu)); head->next=NULL; CreateList(head);}void Insert(struct stu *head){ int index; float score; struct stu *NewNode=(struct stu *)malloc(sizeof(struct stu)); struct stu *p= head; printf("请输入要插入的学生编号;"); scanf("%d",&index); printf("请输入要插入的学生成绩:"); scanf("%f",&score); NewNode->index=index; NewNode->score=score; NewNode->next=NULL; printf("请输入要插入的位置;"); scanf("%d",&index); while(index>1&&p!=NULL) { p=p->next; index--; } NewNode->next=P->next; p->next=NewNode;}


    /*缺少下面两行include 文件*/ #include <stdio.h> #include <stdlib.h> /*少了下面的学生结构体定义*/ struct stu{ int index; float score; struct stu *next; }; void CreateList(struct stu *head) { /*下面这行错误+没有用*/ // stu=NULL; struct stu *temp=head; int i=1; printf("请输入5位学生的成绩;"); while(i<=5) { struct stu *newNode=(struct stu*)malloc(sizeof(struct stu)); newNode->next=NULL; newNode->index=i++; scanf("%f",&newNode->score); temp->next=newNode; /*下面这行错误*/ //temp->newNode; temp=newNode; } } /*下面第一行是你原来的,少了入口函数main*/ //void () int main() { struct stu *head; head=(struct stu*)malloc(sizeof(struct stu)); head->next=NULL; CreateList(head); /*下面这行是我添的,main函数需要返回值*/ return 0; } void Insert(struct stu *head) { int index; float score; struct stu *NewNode=(struct stu *)malloc(sizeof(struct stu)); struct stu *p= head; printf("请输入要插入的学生编号;"); scanf("%d",&index); printf("请输入要插入的学生成绩:"); scanf("%f",&score); NewNode->index=index; NewNode->score=score; NewNode->next=NULL; printf("请输入要插入的位置;"); scanf("%d",&index); while(index>1&&p!=NULL) { p=p->next; index--; } NewNode->next=p->next; p->next=NewNode; } 直接拷贝上面的代码,可以运行.

  • 第14题:

    有以下程序 struct STU { char name[10]; int num; float TotalScore; }; vold f(struct STU *p) { struct STU s[2]={{"SunDan",20044,550),{"Penghua".20045,537}},*q=s ++p; ++q; *p=*q; } main() { struct SrU 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.USiGuo 20042 580

    D.SunDan 20041 703


    正确答案:B
    解析:在主函数中,首先声明了一个结构体数组s[3],然后用数组名调用函数f,而数组名是数组首地址的指针,因此,传递给函数的是指向上函数中s[0]的指针。在函数中,将参数指针往后移动了一位++p;,所以该指针现在指向主函数中的s[1],函数中也声明?一个结构体数组s[2]和一个结构体指针q,q虽然初始化指向函数中的结构数组s[2]的首地址,但也被往后移动了一位,所以函数调用的结果是将函数中的s[1]赋给了主函数中的s[1],故最终输出为:Penghua20045537,应该选择B。

  • 第15题:

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

  • 第16题:

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

  • 第17题:

    有以下程序

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

  • 第18题:

    有以下说明和定义语句struct student{ int age; char num[8];};struct student stu[3]={{20,"200401"},{21,"200402"},{10\9,"200403"}};struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是A.(p++)->num B.p->num C.(*p).num D.stu[3].age


    正确答案:D
    引用形式有以下三种:①结构体变量.成员名;②(*p).成员名;③p→成员名。所以A、B、C答案都是正确的。故本题答案为D。

  • 第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={"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符合题意。

  • 第20题:

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

  • 第21题:

    以下程序的输出结果是______。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

  • 第22题:

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

  • 第23题:

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

  • 第24题:

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