}
test get_score()
{
test pn;
cin>>https://www.doczj.com/doc/cc5946170.html,>>pn.socre;
return pn;
}
void main()
{
结构体指针
C++语言结构体和指针 指针也可以指向一个结构体,定义的形式一般为: struct结构体名*变量名; 下面是一个定义结构体指针的实例: 上述代码已经测试。 注意:定义已经命名的结构体指针的时候必须用已命名结构体类型定义的结构体变量的地址进行初始化。 也可以在定义结构体的同时定义结构体指针: 上述代码已经测试 注意,结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必 pstu赋值只能写作: struct stu *pstu = &stu1; 而不能写作: struct stu *pstu = stu1; 还应该注意,结构体和结构体变量是两个不同的概念:结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。下面的写法是错误的,不可能去取一个结构体名的地址,也不能将它赋值给其他变量: struct stu *pstu = &stu; struct stu *pstu = stu;
获取结构体成员 通过结构体指针可以获取结构体成员,一般形式为: (*pointer).memberName 或者: pointer->memberName 对了。 ,有了它,可以通过结构体指针 直接取得结构体成员;这C语言中的唯一用途。 上面的两种写法是等效的,我们通常采用后面的写法,这样更加直观。
运行结果: Name Num Age Group Score Zhou ping 5 18 C 145.0 Zhang ping 4 19 A 130.5 Liu fang 1 18 A 148.5 Cheng ling 2 17 F 139.0 Wang ming 3 17 B 144.5 结构体指针作为函数参数 结构体变量名代表的是整个集合本身,作为函数参数时传递的整个集合,也就是所有成员,而不是像数组一样被编译器转换成一个指针。如果结构体成员较多,尤其是成员为数组时,传送的时间和空间开销会很大,影响程序的运行效率。所以最好的办法就是使用结构体指针,这时由实参传向形参的只是一个地址,非常快速。 要铭记的一点就是:数组名称始终代表数组的指针指向第一个元素,数组名称加一始终指向下一个数组元素。
C语言程序设计(第7章结构体与共用体)3
C语言程序设计(第7章结构体与共用体)3 7.3 结构体指针的定义和引用 指针变量非常灵活方便,可以指向任一类型的变量,若定义指针变量指向结构体类型变量,则可以通过指针来引用结构体类型变量。 7.3.1 指向结构体类型变量的使用 首先让我们定义结构体: struct stu { char name[20]; long number; float score[4]; } ; 再定义指向结构体类型变量的指针变量: struct stu *p1, *p2 ; 定义指针变量p 1、p 2,分别指向结构体类型变量。引用形式为:指针变量→成员; [例7-2] 对指向结构体类型变量的正确使用。输入一个结构体类型变量的成员,并输出。 #include /*使用malloc( ) 需要*/ struct data /*定义结构体*/ { int day,month,year; }; struct stu /*定义结构体*/ { char name[20]; long num; struct data birthday; /* 嵌套的结构体类型成员*/ } ;
main() /*定义main( ) 函数*/ { struct stu *student; /* 定义结构体类型指针*/ student=malloc(sizeof(struct stu)); /* 为指针变量分配安全的地址* / printf("Input name,number,year,month,day:\n"); scanf("%s",student->name); /* 输入学生姓名、学号、出生年月日*/ scanf("%ld", &student->num); scanf("%d %d %d", &student->birthday.year,&student->birthday.month,&student->birthday.day); printf("\nOutput name,number,year,month,day\n" ); /*打印输出各成员项的值*/ printf("%20s%10ld%10d//%d//%d\n",student->name,student->num,student->birthda y.year,student->birthday.month,student->birthday.day); } 程序中使用结构体类型指针引用结构体变量的成员,需要通过C提供的函数malloc( )来为指针分配安全的地址。函数sizeof( )返回值是计算给定数据类型所占内存的字节数。指针所指各成员形式为: student->name student->num student->birthday.year student->birthday.month student->birthday.day 运行程序: Input name,number,year,month,day: Wangjian 34 1987 5 23 Wangjian 34 1987//5//23 7.3.2 指向结构体类型数组的指针的使用 定义一个结构体类型数组,其数组名是数组的首地址,这一点前面的课程介绍得很清楚。定义结构体类型的指针,既可以指向数组的元素,也可以指向数组,在使用时要加以区分。 [例7-3] 在例7 - 2中定义了结构体类型,根据此类型再定义结构体数组及指向结构体
第十一章结构体的试题
(1)()是关于C语言数据类型的正确叙述。 A) 枚举类型不是基本类型 B) 变量使用前应定义相应的数据类型 C) 不允许使用空类型 D) 数组不是构造类型 (2) 下列()对结构类型变量定义是错误的。 A) struct teacher { int num; int age; }; struct teacher teach1; B) struct { int num; int age; } teach1, teach2; C) struct { int num; int age; } teacher; struct teacher teach1; D) struct teacher { int num; int age; } teach1; (3) 若有定义: char ch; int j,k; enum day {sun, mon, tue, wed, thu, fri, sat}; int a[sat]; 则()对下列语句是否符合语法规则的判断是正确的。 sun=0; /*语句1*/ j=mon+tue; /*语句2*/ if (a[mon]>0) j++; /*语句3*/ A) 语句1、2、3均正确 B) 语句2正确,语句1和语句3错误 C) 语句1错误,语句2和语句3正确 D) 语句1、2、3均错误 (4) 若有定义: struct teacher { int num; char sex;
int age; } teacher1; 则下面叙述错误的是()。 A) teacher1是结构类型名 B) struct teacher是用户定义的结构类型 C) num、sex、age都是结构变量teacher1的成员 D) struct是结构类型的关键字 (5) 下列程序段运行后,表达式()的值为3。 struct point { int x; int y; } *p; struct point a[3]={1,2,3,4,5,6}; p=a; A) p[1].x B) *(p+2) C) p[3].x D) p[2].x (6) 若有定义: typedef int NUM[100]; NUM n; 则()语句是正确的。 A) n[0]=2; B) NUM=2; C) NUM=n; D) n=2; (7) 若有定义int a=1,b=2,t=3; struct data { char a; float b[3]; long c; }d1; 则变量d1的长度是()。 A) 4 B) 17 C) 12 D) 15 (8) 若有定义 struct teacher { int num;
第七章结构体
第七章结构体 一、选择题 1、设有以下说明语句: srruct ex { int x ; int y ; int z ; }example ; 由以下叙述中不正确的是。 A.struct是结构体类型的关键字B.example是结构体类型名 C.x, y, z都是结构体成员名D.struct ex 是结构体类型 2、若有以下结构体定义,则是正确的引用或定义。 struct example { int x ; int y ; } v2 ; A.example.x=10 ;B.example v2.x =10; C.struct v2; v2.x = 10; D.struct example v2 = { 10 }; 3、已知:struct { int i ; char c ; float a ; } ex; 则sizeof( ex )的值是。 A.4 B.5 C.6 D.7 4、以下程序的运行结果是。 main () { struct sample { int x ; int y ; }a[ 2 ] = { 1, 2, 3, 4 }; printf ( "%d\n", a[0].x +a[0].y * a[1].y ); } A.7 B.9 C.13 D.16 5、若有如下定义,则对data中a成员的正确引用是。 struct sk { int a ; float b ; } data, *p = &data ;
A.(*p).data.a B.(*p).a C.p->data.a D.p.data.a 二、编程题 1、利用两个结构体变量求解复数的积:(5 + 3i)*(2 + 6i)
结构体的指针应用
什么是结构体? 简单的来说,结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型,第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以作为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。 定义结构体使用struct修饰符,例如: struct test { float a; int b; }; 上面的代码就定义了一个名为test的结构体,它的数据类型就是test,它包含两个成员a和b,成员a的数据类型为浮点型,成员b的数据类型为整型。由于结构体本身就是自定义的数据类型,定义结构体变量的方法和定义普通变量的方法一样。 test pn1; 这样就定义了一个test结构体数据类型的结构体变量pn1,结构体成员的访问通过点操作符进行,pn1.a=10 就对结构体变量pn1的成员a进行了赋值操作。注意:结构体生命的时候本身不占用任何内存空间,只有当你用你定义的结构体类型定义结构体变量的时候计算机才会分配内存。 结构体,同样是可以定义指针的,那么结构体指针就叫做结构指针。 结构指针通过->符号来访问成员,下面我们就以上所说的看一个完整的例子: #include #include using namespace std; struct test//定义一个名为test的结构体 { int a;//定义结构体成员a int b;//定义结构体成员b }; void main() { test pn1;//定义结构体变量pn1 test pn2;//定义结构体变量pn2 pn2.a=10;//通过成员操作符.给结构体变量pn2中的成员a赋值 pn2.b=3;//通过成员操作符.给结构体变量pn2中的成员b赋值
指针和结构体练习题
第十章指针 一?选择题 1.变量的指针,其含义是指该变量的 _______________ A )值 B )地址 C )名 D )一个标志 2.已有定义int k=2;int *ptr1,*ptr2; 且ptr1和ptr2 均已指向变量 k ,下面不能正确执行 的赋值语句是 。 A ) k=*ptr1+*ptr2 B ) ptr2=k C ) ptr1=ptr2 D ) k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n; 以下程序段正确的是 。 A ) p=&n ; B ) p = &n ; scanf( %d ",&p); scanf( %d ",*p); C ) scanf( %d",&n); D ) p = &n ; *p=n ; *p = m ; 4.已有变量定义和函数调用语句: int a=25;print_value(&a); 下面函数的输出结果 void prin t_value(i nt *x) { printf( %d\n ”++*x); } A) 23 B )24 C ) 25 D )26 5. 若有说明:int *p1, *p2,m=5,n; _____________ 以下均是正确赋值语句的选项是 B) p 仁&m; p2=&n; *p1 =* p2 ; C) p 仁&m; p2=p1 ; D ) p 仁&m; *p 仁*p2 ; 6. 若有语句:int *p,a=4; 和p=&a ;下面均代表地址的一组选项是 _ A) a,p,*&a B )&*a,&a,*p C )*&p,*p,&a D ) &a,&*p,p 7. 下面判断正确的是 ______________ 。 A) char *a= "ch in a ” 等价于 char *a; *a= "ch in a "; B) char str[1O]={ “hina ”;等价于 char str[1O]; str[ ]={ “hina";} C) char *s= "ch in a "; 等价于 char *s; s= "ch in a "; D) char c[4]= "abc ",d[4]= "abc ";等价于 char c[4]=d[4]= "abc "; 8. _______________________________________________ 下面程序段中,for 循环的执行次数是 ______________________________________________________ 。 char *s= "\ta\018bc "; for ( ; *s!= '\0'; s++) printf( *” A) 9 B ) 7 9. 下面能正确进行字符串赋值操作的是 A) char s[5]={ ABCDE ”; C ) char *s ; s= "ABCDE "; 10. 下面程序段的运行结果是 ________ char *s= "abcde"; s+=2 ; printf( %d",s); A) cde B )字符'' C )字符’c'的地址 D )不确定 11. 设pl 和p2是指向同一个字符串的指针变量, c 为字符变量,则以下不能正确执行的赋 值语句是 ________________ 。 A) c=*p1+*p2 B ) p2=c C ) p 仁p2 D ) c=*p1*(*p2) A ) p 仁&m; p2=&p1 ; C ) 6 D ) 5 B ) char s[5]={ A \'\'C','D','E '; D ) char *s; scanf( %s",s);
第14章习题参考答案
第1章 一、简答题 1.关于Linux的版本有两种不同的称呼: 一种是内核版本,一种是发行版本。 2.简述Linux操作系统的特点 3.系统调用、库函数的区别和练习 从用户角度观察,系统调用和库函数都以C函数形式出现,提供给用户一种功能实现的接口,需要用户输入指定的参数,调用结束得到指定的返回值。 从实现者角度观察,库函数是在系统调用上层的函数,库函数一般指程序员可以使用的通用函数。 系统调用由两部分组成: (1)核心函数:是实现系统调用功能的代码,作为操作系统的核心驻留在内存中,是一种共享代码。运行在核心态。 (2)接口函数:是提供给应用程序的API,以库函数的形式存在于Linux的lib.a中,该库中存放了所有系统调用的接口函数的目标代码,用汇编语言书写。其主要功能是把系统调用号,入口参数地址传给相应的核心函数,并使用户态下运行的应用程序陷入核心态。 4.完成如下命令 (1)新建用户tom 和用户组student #useradd tom #passwd tom #groupadd student (2)新建文件file #touch file (3)将文件file 改名为test,然后将test拷贝到/home #mv file test #cp test /home (4)将/home/test文件的拥有着修改为tom,将文件所属组该为student #chown tom:student /home/test 第2章 一、填空题 1.Vi的三中工作模式:插入模式、命令模式、末行模式。 2.Gcc生成可执行文件的四个步骤:预处理、编译、汇编、链接。 3.Makefile 用来描述程序或工程中各个文件之间的相互联系 4.make。命令用来及时makefile文件中的命令 5.库分为静态库和共享库。 二、简答题 1.静态库和共享库的区别 (1)静态库的代码在编译时就已连接到开发人员开发的应用程序中。 (2)共享库只是在程序开始运行时才载入,在编译时,只是简单地指定需要使用的库函数。
指针和结构体练习题.
第十章指针 一.选择题 1.变量的指针,其含义是指该变量的。 A)值 B)地址 C)名 D)一个标志 2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2 3.若有说明:int *p,m=5,n;以下程序段正确的是。 A)p=&n ; B)p = &n ; scanf(“%d”,&p; scanf(“%d”,*p; C)scanf(“%d”,&n; D)p = &n ; *p=n ; *p = m ; 4.已有变量定义和函数调用语句:int a=25;print_value(&a;下面函数的输出结果是。 void print_value(int *x { printf(“%d\n”,++*x; } A)23 B)24 C)25 D)26 5.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7.下面判断正确的是。 A)char *a=”china”; 等价于char *a; *a=”china” ; B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;}
C语言中不同的结构体类型的指针间的强制转换详解
C语言中不同类型的结构体的指针间可以强制转换,很自由,也很危险。只要理解了其内部机制,你会发现C是非常灵活的。 一. 结构体声明如何内存的分布, 结构体指针声明结构体的首地址, 结构体成员声明该成员在结构体中的偏移地址。 变量的值是以二进制形式存储在内存中的,每个内存字节对应一个内存地址,而内存存储的值本身是没有整型,指针,字符等的区别的,区别的存在是因为我们对它们有不同的解读,param的值就是一个32位值,并且存储在某个内存单元中,通过这个32位值就能找到param所指向的结构的起始地址,通过这个起始地址和各个结构所包含变量离起始地址的偏移对这些变量进行引用, param->bIsDisable只是这种引用更易读的写法,只要param是指向 PAINT_PARAM的指针,那么param的值就肯定存在,param存在,偏移量已知,那么param->bIsDisable就肯定存在,只是要记住,param->bIsDisable只是代表了对param一定偏移地址的值。 不是说某个地址有那个结构体你才能引用,即使没有,你也能引用,因为你已经告诉了编译器param变量就是指向一个PAINT_PARAM结构体的变量并且指明了param的值,机器码的眼中是没有数据结构一说的,它只是机械的按照 指令的要求从内存地址取值,那刚才的例子来说,peg->x,peg->y的引用无论 0x30000000是否存在一个eg结构体都是合法的,如果0x30000000开始的8 个字节存在eg结构体,那么引用的就是这个结构体的值,如果这个位置是未定义的值,那么引用的结果就是这8个字节中的未定义值,内存位置总是存在的,而对内存中值的引用就是从这些内存位置对应的内存单元取值。 举个例子: typedefstruct_eg { int x; int y; }eg;
教材课后题答案-第7章
习题7 一 单选题 1.设有如下定义,则表达式sizeof(y)的值是【 】。 struct data {long *ln; char c; struct data *last,*next; }y; A.7 B.9 C.13 D.17 【答案】C 【解析】指针变量在内存中占用4个字节,所以sizeof(y)的值是4+1+4+4=13 2.设有以下程序段,则表达式的值不为100的是【 】。 struct st {int a;int *b;}; void main() {int m1[]={10,100},m2[]={100,200}; struct st *p,x[]={99,m1,100,m2}; p=x; ... } A.*(++p->b) B.(++p)->a C.++p->a D.(++p)->b 【答案】D 【解析】根据题意,p 指向x 数组,x[0]的b 成员指向m1数组,x[1]的b 成员指向m2数组,如图7-1所示。选项A 中p->b 指向m1[0],通过“++”运算p->b 指向m1[1],所以选项A 的表达式的值为100。选项B 中++p 使p 指向x[1],x[1]的a 成员的值是100。选项C 中p 指向x[0],x[0]的a 成员做“++”运算,结果为100。选项D 中++p 使p 指向x[1],x[1]的b 成员的值是指针,所以选择选项D 。 m1m2p 图7-1 3.设有以下定义,且如图7-2所示,指针head 和p 指向链表的第一个结点,指针q 指向新的结点,则不能把新结点插入在第一个结点之前的语句是【 】。
head p q 图7-2 struct node {int a; struct node *next; }*head,*p,*q; A.head=q,q->next=p; B.head=q,q->next=head; C.q->next=head,head=q; D.head=q,head->next=p; 【答案】B 4.设有如下结构体说明和变量定义,且如图7-3所示,指针p指向变量one,指针q指向变量two,则不能将结点two接到结点one之后的语句是【】。 p 图7- 3 struct node {int n; struct node *next; }one,two,*p=&one,*q=&two; A.p.next=&two; B.(*p).next=q; C.one.next=q; D.p->next=&two; 【答案】A 【解析】p是指向结构体的指针,因此选项D是规范的引用方式。 5.设有以下定义,且如图7-4所示建立了链表,指针p、q分别指向相邻的两个结点,下列语句中【】不能将p所指向的结点删除。 head...... 图7- 4 struct node {int a; struct node *link; }*head,*p,*q; A.q->link=p->link; B.p=p->link,q->link=p; C.(*p).link=(*q).link; D.p=(*p).link,(*q).link=p; 【答案】C 6.以下选项中,能正确地将x定义为结构体变量的是【】。
指针与结构体 上机
指针 1.在主函数中输入一个字符串str,调用函数统计字符串中出现的字母(含大 小写)、数字、空格及其他字符出现的次数,在主函数中输出统计结果。要求写三个版本的程序:(1)用指针作参数返回统计结果。(2)用引用做参数返回统计结果(引用做参数效率更高,代码更简单。)(3)用数组做参数返回统计结果(当返回多个同类型结果时用数组做参数更简单)。 1.#include using namespace std; void stat(char *str,int *letters,int *digits,int *others){ char c; for(char *str;*str!='\0';str++) {c=*str; if((c>'a'&&c<'z')||(c>'A'&&c<'Z')) (*letters)++; else if('0'<=c&&c<='9') (*digits)++; else (*others)++; } } void main(){ char str[100]; cin.getline(str,100); int letters=0; int digits=0; int others=0; stat(str,&letters,&digits,&others); cout<<"letters="< #include using namespace std; void stat(char *str,int *a){ char c; for(int i=0;str[i]!='\0';i++) {c=str[i];
第七章 结构体
第七章结构体 一. 单项选择题 1.设有定义 Struct{int x; int y;}d[2]={{1,3},{2,7}}; 则printf(“%d\n”,d[0].y/d[0].x*d[1].x);的输出是() A.0 B.1 C.3 D.6 2.根据下面的定义,能打印出字母M的语句是() struct person {char name[9];int age;}; struct person c[10] = {{“John”,17 },{“Paul”,19 },{“Mary”,18 },{“Adam”,16 }}; A.printf (“%c”,c[3].name); B.printf (“%c”,c[3].name[1] ); C.printf(“%c”,c[2].name[1]); D.printf(“%c”,c[2].name[0] ); 3. 设有如下定义,则对data 中的a 成员的正确引用是() struct sk{int a;float b;} data,*p=& data; A. (*p).data.a B. (*p).a C. p->data.a D. p.data.a 二. 填空题: 1. 设有定义“struct {int a;float b;char c;}abc,*p_abc=&abc;”,则对结构体成员a 的引用方法可以是abc_________a 和p_abc___________a. 2. 若有以下说明和定义语句,假设int类型占内存2个字节,则结构体变量w 在内存中所占的字节数是__________. struct st { int v[3];char w[5];double ave;}w; 3.阅读下列程序,写出程序的运行结果。 main () { struct student { char name[10]; float k1; float k2; } a[2]={ {“zhang”,100,70} ,{“wang”,70,80 } },* p=a; int i; printf(“\nname:%s total=%f”,p ->name,p ->k1+p -> k2); printf(“\nname:%s total=%f”,a[l].name,a[1].k1+a[l].k2); }
函数、指针与结构体练习题_参考答案
函数 (一)选择题 1.以下正确的说法是_________. 建立函数的目的之一是a)提高程序的执行效率 b)提高程序的可读性 c)减少程序的篇幅 d)减少程序文件所占存 2.以下正确的函数原型声明形式是________. a)double fun(int x,int y) b)double fun(int x; int y) c)double fun(int x, int y); d)double fun(int x,y); 3.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式为______. A)地址传递 B)单向值传递 C)由实参传给形参,再由形参传回给实参 D)由用户指定传递方式 4.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是______. a)float b)int c)long d)double 5.已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array 的错误定义方式为________. int a[3][4]; f(a); a)f(int array[][6])
b)f(int array[3][]) c)f(int array[][4]) d)f(int array[2][5]) 6.以下程序的正确运行结果是_________. #include void num() { extern int x,y;int a=15,b=10; x=a-b; y=a+b; } int x,y; main() { int a=7,b=5; x=a+b; y=a-b; num(); printf("%d,%d\n",x,y); } a)12,2 b)不确定c)5,25 d)1,12 7.以下正确的描述是____________. a)C语言的预处理功能是指完成宏替换和包含文件的调用 b)预处理指令只能位于C源程序文件的首部 c)凡是C源程序中行首以"#"标识的控制行都是预处理指令 d)C语言的编译预处理就是对源程序进行初步的语法检查 8.在"文件包含"预处理语句的使用形式中,当#include后面的文件名用< >(尖括号)括起时,找寻被包含文件的方式是_______. a)仅仅搜索当前目录 b)仅仅搜索源程序所在目录
第七章 结构体和共用体
第十章结构体和共用体一、选择题 1.说明一个结构体变量时系统分配给它的内存是(A)。 A)各成员所需内存总和。 B)结构中第一个成员所需的内存量 C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量 2.以下对结构体类型变量的定义中不正确的是(D)。 A) #define STUDENT struct student STUDENT { int num; float age; } std1; B) struct student { int num; float age; } std1; C) struct { int num; float age; }std1; D) struct { int num; float age; } student; struct student std1; 3.设有以下说明语句 struct stu { int a; float b; } stutype; 则下面的叙述不正确的是(C)。 A)struct是结构体类型的关键字 B)s truct stu是用户定义的结构体类型 C)s tutype是用户定义的结构体类型名 D)a和b都是结构体成员名 4.C语言结构体类型变量在程序执行期间(A) A)所有成员一直驻留在内存中 B)只有一个成员驻留在内存中 C)部分成员驻留在内存中 D)没有成员驻留在内存中
5.以下程序运行结果是(A)。 #include “stdio.h” main() { struct date { int year, month, day; } today; printf(“%d\n”,sizeof(struct date)); A) 6 B)8 C)10 D)12 6.下面程序的运行结果是(D) main() { struct cmplx { int x; int y; } cnum[2]={1,3,2,7}; printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x); } A)0 B)1 C)3 D)6 7.以下scanf函数调用语句中对结构体变量成员的不正确引用是(D)struct pupil { char name[20]; int age; int sex; } pup[5],*p; p=pup; A)scanf(“%s”,pup[0].name); B)scanf(“%d”,&pup[0].age); C)scanf(“%d”,&(p->sex)); D)scanf(“%d”, p->age); 8.设有如下的定义: struct sk { int n; float x; } data, * p; 若要使p指向data中的n域,正确的赋值语句是(C)。 A)p=&data.n; B)*p=data.n; C)p=(struct sk *)&data.n D)p=(struct sk*) data.n; 9.若有以下说明语句 struct student
C语言 第七章 结构体期末测试习题与答案
一、选择题 1、一个C语言程序的执行是从()。 A.第一个语句开始,直到最后一个语句结束 B.第一个函数开始,直到最后一个函数结束 C.main函数的第一条语句开始,直到main函数最后一条语句结束 D.main函数开始,直到最后一个函数结束 正确答案:C 2、变量定以后,系统将为变量分配存储空间,double类型的静态变量()。 A.将在编译时分配4个字节的存储空间 B.将在编译时分配8个字节的存储空间 C.将在程序执行时分配4个字节的存储空间 D.将在程序执行时分配8个字节的存储空间 正确答案:B 3、设int x=8, y;执行y=x++;后,变量x、y的值分别是()。 A.8,8 B.8,9 C.9,8 D.9,9 正确答案:C 4、对于整数n=378,表达式n%10和n/10的值分别是()。 A.3,8 B.8,3 C.37,8 D.8,37 正确答案:D 5、与p!=0等价的表达式是()。
A.p B.p==1 C.p=1 D.!p=0 正确答案:A 6、已定义:int a[5];则数组a可引用的元素有()。 A.a[1]~a[5] B.a[0]~a[5] C.a[1]~a[4] D.a[0]~a[4] 正确答案:D 7、已知char str[20],str1[10]="China", str2[10]="Russia" ;将str1和 str2 中存放的字符串交换的正确操作是()。 A.str=str1 ; str1=str2 ; str2=str; B.str1= str1+str2 ; str2= str1-str2; str1= str1-str2; C.strcat(str1,str2) ; str2= str1-str2; str1= str1-str2; D.strcpy(str,str1) ; strcpy(str1,str2) ; strcpy(str2,str) ; 正确答案:D 8、若有语句:int a [4],*p=a; ,下面均代表地址的一组选项是()。 A.a,p,a[0] B.a,p,++p C.&a,*p,p[0] D.*a,p++,&a[0] 正确答案:B 9、若有以下定义语句,则以下错误的引用是()。 struct student{ int num,age;}; struct student stu[3]={{101,20},{102,19},{103,18}},*p=stu;
结构指针
题目内容: 定义一个学生的结构体,包含姓名,年龄,身高从键盘输入一组学生信息 结果打印4组数据 输入样例 Tom 20 1.70 输出 Tom0 20 1.70 Tom1 21 1.71 Tom2 22 1.72 Tom3 23 1.73 输入描述 从键盘输入一组学生信息 结果打印3组数据 输入样例 Tom 20 1.70 输出描述 结果打印4组数据 输出 Tom0 20 1.70 Tom1 21 1.71 Tom2 22 1.72 Tom3 23 1.73 输入样例 Tom 20 1.70 输出样例 Tom0 20 1.70 Tom1 21 1.71 Tom2 22 1.72 Tom3 23 1.73 程序代码
for(i=0;i<4;i++) printf("%s%d %d %.2f\n",https://www.doczj.com/doc/cc5946170.html,,i,a.age+i,a.high+i *0.01); return 0; } 2.c-05-1 回文句子 (10分) C时间限制:3000 毫秒 | C内存限制:3000 Kb 题目内容: "回文句"是一种句型,一个句子如果正着读与倒着读的意思一样,就可以称为"回文句"。 如:蜜蜂酿蜂蜜;风扇能扇风;奶牛产牛奶;清水池里池水清;静泉山上山泉;上海自来水来自海上;雾锁山头山锁雾;天连水尾水连天;门盈喜气喜盈门。 在英文中也是有回文的,而且是一种非常有趣的修辞,即palindrome,其结构跟中文是 一个道理。英文回文举例: Able was I ere I saw Elba。(在我看到厄尔巴岛之前,我曾所向无敌) Madam, I' m Adam.(女士, 我是Adam) Was it a bar or a bat I saw? (我看到的是酒吧还是蝙蝠?) 编写一个函数,判断给定英文句子是不是回文句。 输入描述 输出描述 输入样例 输入样例1: Madam, I' m Adam. 输入样例2:
C语言程序设计(第7章结构体与共用体)2
C语言程序设计(第7章结构体与共用体)2 7.2 结构体数组的定义和引用 单个的结构体类型变量在解决实际问题时作用不大,一般是以结构体类型数组的形式出现。结构体类型数组的定义形式为: struct stu /*定义学生结构体类型*/ { char name[20]; /*学生姓名*/ char sex; /*性别*/ long num; /*学号*/ float score[3]; /*三科考试成绩*/ }; struct stu stud[20]; /* 定义结构体类型数组stud ,*/ / *该数组有2 0个结构体类型元素* / 其数组元素各成员的引用形式为: stud[0].name 、stud[0].sex、stud[0].score[i]; stud[1].name、stud[1].sex、stud[1].score[i]; . . . . . . stud[19].name、stud[19].sex、stud[19].score[i]; [例7-1] 设某组有4 个人,填写如下的登记表,除姓名、学号外,还有三科成绩,编程实现对表格的计算,求解出每个人的三科平均成绩,求出四个学生的单科平均,并按平均成绩由高分到低分输出。 NumberNameEnglishMathemrPhysicsAverage 1Liping789876. 2Wanglin669086. 3Jiangbo897076. 4Yangming9010067.
题目要求的问题多,采用模块化编程方式,将问题进行分解如下: 1) 结构体类型数组的输入。 2) 求解各学生的三科平均成绩。 3) 按学生的平均成绩排序。 4) 按表格要求输出。 5) 求解组内学生单科平均成绩并输出。 6) 定义m a i n ( )函数,调用各子程序。 第一步,根据具体情况定义结构体类型。 struct stu { char name[20]; /*姓名* / long number; /*学号* / float score[4]; /* 数组依此存放English、Mathema、Physics,及Average*/ } ; 由于该结构体类型会提供给每个子程序使用,是共用的,所以将其定义为外部的结构体类型,放在程序的最前面。 第二步,定义结构体类型数组的输入模块。 void input(arr,n) /*输入结构体类型数组arr 的n个元素*/ struct stu arr[]; int n; { int i,j; char temp[30]; for (i=0;i { printf("\ninput name,number,English,mathema,physic\n"); /*打印提示信息* / gets(arr[i].name); /* 输入姓名*/ gets(temp); /* 输入学号*/ arr[i].number = atol(temp);
c语言第14章书后习题_编程题
第14章结构体、共用体和用户定义类型 三、编程题 14.12设有以下结构类型的说明: struct stud { charnum[5], name[10]; int s[4]; doubleave; }; 请编写: (1) 函数readrec:把30名学生的学号、姓名、四项成绩以及平均分放在一个结构体数组中,学生的学号、姓名和四项成绩由键盘输入,然后计算出平均分放在结构体对应的域中。 (2) 函数writerec:输出30名学生的记录。 (3) main函数调用readrec函数和writerec函数,实现全部程序功能(注:不允许使用外部变量,函数之间的数据全部使用参数传递)。 #include #include struct stud { charnum[5],name[10]; int s[4]; doubleave; }; voidreadrec(struct stud st[],int n) { inti,j,ave; for(i=0;i} st[i].ave=ave/4.0; } } voidwriterec(struct stud st[],int n) { inti,j; for(i=0;i #include struct list { int data; struct list * next; }; struct list * creat( ) { struct list *h, *p, *q; int n; //生成头结点