有以下程序struct STU{char name[10];int num;};void f1(struct STU C){ struct STU b={"LiSiGuo

题目

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

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

有以下说明和定义语句 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[0].age


正确答案:C

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

下列语句段中,正确的是( )。

A.struct{int x;float y;int a[2];unsigned b[3];char name[10];};

B.struct stu{unsigned a[3];unsigned b[4];}x;int*p=&x.a;

C.struct stu{int a;float x[4];}y={1,1.0};float data=y.x;

D.struct nd{int a,b;unsigned c[2]=5;};


正确答案:A
解析: 本题主要考查的知识点是结构类型的概念和定义,结构定义的一般形式:
struct结构类型名称
{ 数据类型 成员名1;
数据类型 成员名2;

数据类型 成员名n;
};
struct为关键字,是结构的标识符;{}中包围的是组成该结构的成员项;每个成员的数据类型既可以是简单的数据类型,也可以是复杂的数据类型。整个定义作为一个完整的语句,用分号结束。结构类型名称是可以省略的,此时定义的结构称为无名结构。

第4题:

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

第5题:

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

第6题:

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; } 直接拷贝上面的代码,可以运行.

第7题:

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

第8题:

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

A.(p++)->num

B.p->num

C.(*p).num

D.stu[3].age


正确答案:D
解析:结构体变量也有地址,因此可以把它的地址赋值给一个指针变量,然后通过该指针变量来引用结构体的成员,选项A和选项B就是通过指针变量来引用结构体的成员,也可以通过结构体数组元素的成员引用,而在选项D中stu[3].age不正确,因为结构体数组stu共有三个元素,其下标应该为0,1,2。

第9题:

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

第10题:

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

更多相关问题