第十一章 结构体与共用体
学习目的与要求:1,掌握结构体变量的定义与引用。
2,重点掌握链表的建立、插入、删除、输出等操作。
3,了解共用体变量的定义与引用。
重点,1,掌握结构体变量的定义与引用。
2,重点掌握链表的建立、插入、删除、输出等操作。
3,switch语句。
第1讲
知识归纳
1,结构体和结构体变量的定义
格式一,
struct 结构体名 //定义结构体
{
类型 成员名;
} ; 此处分号不能少;
struct 结构体名 变量名1,变量名2……;//定义结构体变量
格式二,
struct 结构体名 //定义结构体与变量
{
类型 成员名;
} 变量名1,变量名2……;
(1) 注意:只能对结构体变量赋值、存取或运算,而不能对结构体赋值、存取或运算 ;
结构体是一个数据类型,与int,folat 一样,都是数据类型,所以数据类型本身不能获值,
只不过结构体类型是一个构造数据类型,与数组类似。
(2) 一个结构体变量所占的存储空间,是各个成员所占空间的和。
2,结构体变量的引用
格式:结构体变量名.成员名;
(1) 不能将一个结构体变量作为一个整体进行输入和输出,只能对结构体变量中的各个成员分别进行输入和输出 ;结构体变量中的各个成员等价于普通变量。
(2),—是成员运算符;他在所有运算符中优先级最高。
(3) 结构体变量的成员可以进行各种运算。
C语言程序设计上机指导与同步训练
·256·
·256·
如,struct strdent
{ int num ;
char name [10] ;
int age ;
float score;
} student1 ;
scanf(,%d %s%d%f”,&student1.num,student1.name,
&student1.age,&student1.score) ;
student1.age++ ;
3,结构体数组
(1) 先定义结构体类型。
(2) 然后定义结构体类型数组,方法同普通类型数组的定义。
struct strdent
{ int num ;
char name [10] ;
int age ;
float score;
} student [5] ;
student[0].score = 480;
4,指向结构体变量或数组的指针
(1) 通过指向结构体变量或数组的指针,访问结构体变量或数组的成员的格式。
( * p ),成员名 ;
p barb2right 成员名;
等价于 结构体变量,成员名;
barb2right -------称为指向运算符;与成员运算符(.) 一样,级别最高;
如,
struct strdent
{ int num ;
char name [10] ;
int age ;
float score;
} student1 ;
struct strdent* p ;
p = &student1 ;
(*p).num=1001;
strcpy(p-> name,“Wanglin”);
(*p).age=20;
p -> score=480 ;
基础训练(A)
一、填空题
1,定义结构体的关键字是____________。
第二部分 C语言程序设计同步训练
·257·
·257·
2,一个结构体变量所占用的空间是____________________。
3,有如下定义并初始化,请填写输出语句。
struct person {char name[9];
int age;
}
struct person class[4]={“John”,17,
“Paul”,19,
“Mary,18,
“adam”,16
}
main()
{ int i;
for ( i=0;i<4;i++)
printf(______________________________) 。
}
4,指向结构体数组的指针的类型是___________________。
5,通过指针访问结构体变量成员的两种格式______________和_______________。
二、选择题
1,当说明一个结构体变量时系统分配给g4439的g1881存是( )。
A) 各成员所g19668g1881存量的g5647和
B) 结构中g12544一个成员所g19668g1881存量
C) 成员中占g1881存量最g3835g13785所g19668的g4493量
D) 结构中最后一个成员所g19668g1881存量
2,在如下结构体定义中,不g8503g11842的是( )。
A)struct teacher B) struct tea[20]
{ {
int no; Int no;
char name[10]; char name[10]
float salary float salary;
} }
C) struct teacher D) struct
{ {
int no; int no;
char name[10]; char name[10]
float score; float score;
} tea[20]; }stud[100];
3,g7693据下g19766的定义,能g6183g2372出Mary的语句是( )。
struct person {char name[9];
int age;
}
struct person class[10]={“John”,17,
“Paul”,19,
C语言程序设计上机指导与同步训练
·258·
·258·
“Mary,18,
“adam”,16
}
A) rintf(“%c\n”,class[3].name);
B) rintf(“%c\n”,class[1].name[1]);
C) printf(“%c\n”,class[2].name);
D) printf(“%c\n”,class[0].name);
4,g14521有以下说明和语句,
struct student
{ int age;
int num;
}std,*p;
p=&std;
g2029以下对结构体变量std中成员age的g5353用方式不g8503g11842的是( )。
A) std.age B) p->age C) (*p).age D) *p.age
g989、g13546g12255题
1,定义一个能g8503g5132g2465g7156g6957g5084g5785g1929的结构体teacher,g2265g2559g6957g5084g4007名、g5627别、g5192g21848、所在g18108
g19388和g15230g8712。
能力提高(B)
一、填空题
1,以下g12255g5219用以输出结构体变量所占g1881存g2345g1815的字g14422数,请在_______g1881填g990g17878当的
g1881g4493。
struct per
{
double x;
char str[50];
};
main()
{struct per bt;
printf(,bt size =%d\n”,_____________);
}
2,有如下定义
struct
{
int x;
char *y;
}tab[2]={{1,”ab”},{2,”cd”}},*p=tab;
g2029:g15932g17810式*p->y的结g7536是____________ 。
g15932g17810式 *(++p)->y的结g7536是________________ 。
3,有如下定义
第二部分 C语言程序设计同步训练
·259·
·259·
struct date
{ int year,month,day;
}
struct person
{ char name[8];
char sex ;
struct data birthday;
} person1;
对结构体变量 person1 的出g10995g5192g1233(1980)进行赋值,请填写g8503g11842的赋值语句:
__________________________________;
4,结构数组中存有g989g1166的g4007名和g5192g21848,以下g12255g5219输出g989g1166中g5192g21848最g5192g19283g13785的g4007名和g5192
g21848,请在____________g1881填入g8503g11842g1881g4493。
static struct man
{
char name[20];
int age;
}person[ ]={“liming”,18,
“wanghua”,19,
“zhangping”,20
};
main()
{struct man *p,*q;
int old=0;
p=person;
for(;p______________;p++)
if(old<p->age)
{q=p; ________________;}
printf(“%s %d”,________________);
}
二、选择题
1,以下g12255g5219的运行结g7536是( )。
#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
2,g14521有以下说明和语句,g2029对pup中sexg3507的g8503g11842g5353用方式是( )。
struct pupil
{char name[20];
int sex;
}pup,*p;
p=&pup;
C语言程序设计上机指导与同步训练
·260·
·260·
A) p.pup.sex B) p->pup.sex C) (*p).pup.sex D) (*p).sex
3,g14521有以下g12255g5219g8585,
struct dent
{ int no;
int *m;
};
int a=1,b=2,c=3;
struct dent s[3]={{101,&a},{102,&b},{103,&c}};
main()
{ struct dent *p;
p=s;

}
g2029以下g15932g17810式中值为2的是( )。
A) (p++)->m B) * (p++)->m C) (*p).m D) *(++p)->m
g989、g13546g12255题
1,定义一个能g8503g5132g2465g7156g6957g5084g5785g1929的结构体teacher,g2265g2559g6957g5084g4007名、g5627别、g5192g21848、所在g18108
g19388和g15230g8712;定义一个能存g6930两g1166数据的结构体数组tea,并用如下数据初始化,
{{“Mary,,‘W’,40,‘Computer’,1234 },{“Andy,,‘M’,55,‘English’,1834}} ;g16213g8726:分别用结构体数组tea和指针p输出各g1313g6957g5084的g1461g5699,写出g4448整定义、初始化、输出过g12255;
2,有5个g4410g10995,g8611个g4410g10995的数据g2265g6336g4410g2507(num),g4007名(name),g5647成g13501(score),g13546g12255g4466
g10628g1186键g11436输入5g1313g4410g10995数据,g6365g5647成g13501g11013高g2052g1314g6502g5219,输出g6502g5219后的g4410g2507、g4007名、g5647成g13501(为
g1114g12628化问题,g6564g12046同g4410g1216可以将g5647成g13501定义为 int ;g2490,在g6502g5219g1144g6454时,不能只g1144g6454g5647成
g13501变量值)。
第2讲
知识归纳
1,链表概述
(1) g19154g15932有一个“g3848指针”变量;他存g6930g19154g15932g12544一个结g9869的g3332g3348。
(2) g19154g15932中g8611一个g1815g13044称为一个结g9869,g8611个结g9869都g2265g6336两g18108分:一个是数据g3507;一个是指针g3507;数据g3507用g7481存g6930用g6155数据,指针g3507用g7481存g6930下一个结g9869的g3332g3348。
(3) g19154g15932的最后一个结g9869的指针g3507g5132g5132g16786g13634为 NULL (空),g15932g12046g19154g15932g2052g8504结g7475。
(4) g5132g5132用结构体变量作为g19154g15932中的结g9869。
2,链表的操作
(1) g19154g15932的g19757g5589g2031g5326。
(2) g19154g15932的g2172g5589g2031g5326。
g989个g2001数,
第二部分 C语言程序设计同步训练
·261·
·261·
malloc( )g2001数,
格式,void *malloc(unsigned int size);
g2163能:在g1881存的g2172g5589存储g2318中分配1个g19283g5242为size 的g17842g13505空间。
g2001数的g17832g3250值:g11015请存储空间成g2163,g17832g3250g11015请的存储空间的g17227始g3332g3348,g11015请不成g2163,
g17832g3250Null
calloc( )g2001数,
格式:vod * calloc(unsigned n,unsigned int size);
g2163能:在g1881存的g2172g5589存储g2318中分配n个g19283g5242为size的g17842g13505空间。
g2001数的g17832g3250值:g11015请存储空间成g2163,g17832g3250g11015请的存储空间的g17227始g3332g3348,g11015请不成g2163g17832
g3250NULL
free( )g2001数,
free ()g2001数,
格式:void free(void *p)
g2163能:g18334g6930g11013p指针指向的g1881存g2318,g1363g17837g18108分g1881存g2318能g15999g1866他变量g1363用。
Free g2001数g7092g17832g3250值。
基础训练(A)
一、填空题
1,g19154g15932有一个“g3848指针”变量,g999g19388用g7481存g6930___________________________。
2,g5132g5132用结构体变量作为g19154g15932中的结g9869,g8611个结g9869都g2265g6336两g18108分:一个是
___________;一个是________________。
3,g19154g15932的最后一个结g9869的指针g3507g5132g5132g16786g13634为__________,g15932g12046g19154g15932g2052g8504结g7475;
4,为g5326g12447如g3282所g12046的存储结构(g2375g8611个g14422g9869两个g3507,data是数据g3507,next是指向g14422g9869的指针g3507,请将定义g15929g1817g4448整)。
data next
struct node
{char data;
_______________________;
} v1 ;
5,以下g19757g5589g5326g12447一个有2个g4410g10995数据的g19154g15932,并输出各结g9869中的数据。
#include NULL 0
#include,stdio.h”
struct student
{ int num ;
float score ;
struct student * link;
};
C语言程序设计上机指导与同步训练
·262·
·262·
main()
{ struct student a,b,*head,* p ;
a,num= 0001 ; a.score = 459;
a,num= 0002 ; a.score = 586;
head = &a;
a.link= _______________;
b.link = NULL;
p = head ;
do
{ printf (,%d,%5.1f\n”,_________________) ;
p = ____________ ;
} while(p!=NULL);
}
二、选择题
1,g5062g11705head指向g2345g19154g15932的g12544一个g14422g9869,以下g12255g5219g16855用g2001数print输出g17837一g2345向g19154g15932。
请选择g8503g11842g1881g4493填空____________。
#include,<stdlib.h>
#include,<stdio.h>
struct student
{ int info;
struct student *link;
};
void print(struct student * head)
{ struct student *p;
p=head;
if(head!=NULL)
do
{printf(“%d”,____________);
_______________;
}
while(p!=NULL);
}
(1) A) p->info B) *p.info C) info D) (*p).link
(2) A) p->link=p B) p=p->link C) p=NULL D) p++
能力提高(B)
一、填空题
1,g14521g16213g2045用下g19766的g12255g5219g10267g8585g1363指针变量p指向一个存储整g5430变量的存储g2345g1815,g2029____
中g5224填入的g1881g4493是什么?
int *p;
p=___________malloc(sizeof(int));
2,g5062g11705 head 指向一个带g3848g14422g9869的g2345项g19154g15932,g19154g15932中g8611个g14422g9869g2265g2559数据g3507(data)和指针
g3507(next),数据g3507为整型。以下过g12255g8726出g19154g15932中所有g19154g14422g9869数据g3507的和值。请在___________
g1881填入g8503g11842g1881g4493。
第二部分 C语言程序设计同步训练
·263·
·263·
struct link
{ int data;
struct link next; };
main()
{ struct link *head,*p;
int s =0;
p= head->next;
while(p! =NULL)
{ s+=________________;
p = __________________;
printf(“s=%d\n”,s );
}
3,以下g2172g5589g5326g12447一个g4410g10995数据的g19154g15932,写出g2031g5326g19154g15932的g2001数 create,以g4410g2507为 0 g15932g12046
输入结g7475,在___________处填写g8503g11842g1881g4493。
#include NULL 0
#include <stdio.h>
struct student
{ int num ;
float score ;
struct student * next ;
};
int n ;
struct student *create(void)
{ struct student *head,* p1,*p2 ;
n=0 ;
p1=p2=( struct student * ) malloc(_________________) ;
scanf (“%d%f”,&p1->num,&p1->score);
head = NULL;
while(p1->num!=0)
{ n=n+1;
if (n==1) head = p1;
else _____________________;
p2=p1;
p1=p2=( struct student * ) malloc(sizeof(struct student)) ;
scanf (,%d%f”,&p1->num,&p1->score);
}
p2->next =NULL;
}
二、选择题
1,g5062g11705head指向g2345g19154g15932的g12544一个g14422g9869,以下g2001数delg4448成g1186g2345向g19154g15932中删除值为num
的g12544一个结g9869。请选择g8503g11842g1881g4493填空。
#include <stdio.h>
struct student
{ int info;
struct student *link;
};
struct student *del(struct student *head,int num)
C语言程序设计上机指导与同步训练
·264·
·264·
{ struct student *p1,*p2;
if(head = =NULL)
printf(“\n list null! \n”);
else
{p1=head;
while( num!=p1->infor && p1->link !=NULL)
{ p2=p1;
p1=p1->link; }
if(num==p1->info)
{if(p1= =head) _____________;
else p2->link =_________________;
printf(“delete:%d\n”,num);
}
else printf(“%d not been found! \n”,num);
}
return (head);
}
(1) A) p2=p1->link B) head= p1 C) head=p1->link D) p1->link=head
(2) A) head B) p1->link C) p1 D) p1->info
g989、g13546g12255题
1,g5326g12447一个g6957g5084g19154g15932,g8611个结g9869g2265g6336g4410g2507(no),g4007名(name[8]),工资(wage),写出g2172
g5589g2031g5326g2001数creat和输出g2001数print。
2,在g990一题基础g990,假如g5062经g6365g4410g2507升g5219g6502列,写出插入一个新g6957g5084的结g9869的g2001数
Insert。
第3讲
知识归纳
1,共用体
(1) 概念:g1363几个不同的变量共占同一g8585g1881存的结构,称为共用体。
(2) 共用体定义格式,
union 共用体名
{ 成员表列;
} 变量表列;
如,union
{ int i;
char ch;
float f;
} a,b,c ;
(1) 共用体变量所占g1881存g19283g5242等于最g19283的成员的g19283g5242。
(2) 不能直接g5353用共用体变量,只能g5353用共用体变量中的成员。
g5353用格式:共用体变量,成员名;
第二部分 C语言程序设计同步训练
·265·
·265·
如,a.i,a.ch,a.f
(3) 在同一g8585g1881存g8585中可以用g7481存g6930几种不同类型的成员,但在g8611一时刻只能存g6930g1866
中一种,而不是同时存g6930几种。
共用体变量中g17227作用的成员是最后一次存g6930的成员,在存入一个新的成员后原有成员就失去作用。
g5353用共用体变量g5224注意当前存g6930在共用体变量中的究竟是哪一个成员。
(6) 共用体变量的g3332g3348和g4439的各成员的g3332g3348都是同一个g3332g3348。
2,枚举类型
(1) 概念:是指将变量的值一一列举出g7481,变量的值只限于列举出g7481的值的范围g1881。
(2) 声明枚举类型:enum 枚举类型名( 枚举g5132量列g15932);
如:enum weekday( sun,mon,tue,wed,thu,fri,sat);
(3) 枚举变量的定义格式,enum 枚举类型名 枚举变量名。
(4) 枚举g5132量是有值的,C语言g6365定义时的顺g5219g1363g4439g1216的值为0,1,2,…
也可以改变枚举g1815g13044的值,在定义时g11013g12255g5219员指定。
(5) 一个整数不能直接赋给一个枚举变量,g5224先进行强制类型转g6454才能赋值。
3,用typedef定义类型
(1) 概念:用typedef 声明新的类型名g7481代替g5062有的类型名。
(2) 格式:typedef 原有类型 新声明的类型别名;
g5132g5132将一个复杂类型给他一个别名,以便好书写。
用typedef 声明的类型别名,g5132g5132用g3835写。
注意:typedef的作用仅仅是给已有类型一个别名,typedef本身并不具有定义一个新的类型的能力。
基础训练(A)
一、填空题
1,共用体变量所占g1881存g19283g5242等于____________________。
2,在下列g12255g5219g8585中,枚举变量c1和c2的值分别是___________和__________。
main()
{ enum color{red,yellow,blue =4,green,white} c1,c2 ;
c1=yellow;
c2=white ;
printf(“%d,%d\n”,c1,c2);
}
3,以下g12255g5219的执行结g7536是________________。
main()
{
union
{int x ;
struct sc
C语言程序设计上机指导与同步训练
·266·
·266·
{ char c1;
char c2;
} b;
} a ;
a.x=0x1234;
printf(“%x,%x\n”,a.b.c1,a.b.c2) ;
}
4,g16786有以下定义和语句,请在printf语句的___________中填g990g8503g11842输出的变量及相g5224
的格式说明。
union
{ int n;
double x;
} num ;
num.n=10;
num.x=10.5;
printf(,_____________”,________________) ;
5,以下g12255g5219的运行结g7536是______________。
main()
{ struct EXAMPLE
{ union { int x ;
int y ;
} myion ;
int a ;
int b;
} e ;
e.a=1 ;
e.b=2;
e.myion.x=e.a*e.b;
e.myion.y=e.a+e.b;
printf(,%d,%d”,e.myion.x,e.myion.y) ;
}
能力提高(B)
一、填空题
1,有以下定义和语句,g2029 sizeof(a)的值是,而 sizeof(a.share)的值是 。
struct date{ int day;
int month;
int year;
union{int share1;
float share2;
}share;
}a;
2,有以下说明定义和语句,可用 a.day g5353用结构体成员 day,请写出g5353用结构体成员第二部分 C语言程序设计同步训练
·267·
·267·
a.day的g1866g4439两种g5430式 ___________,_________________ 。
struct{int day;char mouth;int year;}a,*b; b=&a;
3,g14521有以下说明和定义语句,g2029变量w在g1881存中所占的字g14422数是 。
union aa
{ float x,y;
char c[6];
};
struct st { union aa v; float w[5]; double ave; } w;
二、选择题
1,以下对枚举类型名的定义中g8503g11842的是( )。
A) enum a={one,two,three}; B) enum a {one=9,two=-1,three};
C) enum a={"one","two","three"}; D) enum a {"one","two","three"};
2,g16786有以下说明和定义
typedef union
{ long i; int k[5]; char c; }DATE;
struct date
{ int cat; DATE cow; double dog; } too;
DATE max;
g2029下列语句的执行结g7536是( )。
printf ("%d",sizeof (struct date ) +sizeof(max));
A) 26 B) 30 C) 18 D) 8
3,变量a所占g1881存字g14422数是( )。
union U
{ char st[4];
int i;
long l;
};
struct A
{ int c;
union U u;
}a;
A) 4 B) 5 C) 6 D) 8
4,有以下g12255g5219
main()
{ union { unsigned int n;
unsigned char c;
}u1;
ul.c=`A`;
printf("%c\n",u1.n);
}
执行后输出结g7536是( ) 。
C语言程序设计上机指导与同步训练
·268·
·268·
A) 产g10995语法错 B) 随机值 C) A D) 65
5,以下各选项企g3282说明一种新的类型名,g1866中g8503g11842的是( ) 。
A) typedef v1 int; B) typedef v2=int;
C) typedef int v3; D) typedef v4,int;
链接二级考试
一、选择题
1,下列g12255g5219的输出结g7536是( )。
struct abc
{ int a,b,c; };
main()
{ struct abc s[2]={{1,2,3},{4,5,6}}; int t;
t=s[0],a+s[1],b;
printf("%d \n",t);
}
A) 5 B) 6 C) 7 D) 8
(2000g51924月)
2,以下g12255g5219的输出是( ) 。
struct st
{ int x; int *y;} *p;
int dt[4]={ 10,20,30,40 };
struct st aa[4]={ 50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0],};
main()
{ p=aa;
printf(“%d\n”,++(p->x));
}
A) 10 B) 11 C) 51 D) 60
(2001g51924月)
3,以下g12255g5219的输出结g7536是( )。
union myun
{ struct
{ int x,y,z; } u;
int k;
} a;
main()
{ a.u.x=4; a.u.y=5; a.u.z=6;
a.k=0;
printf(%d\n”,a.u.x);
}
A) 4 B) 5 C) 6 D) 0
(2001g51929月)
第二部分 C语言程序设计同步训练
·269·
·269·
4,g16786有以下说明语句
typedef struct
{ int n;
char ch[8];
}PER;
g2029下g19766叙述中g8503g11842的是( )。
A) PER 是结构体变量名 B) PER是结构体类型名
C) typedef struct 是结构体类型 D) struct 是结构体类型名
(2002g51924)
5,有以下结构体说明和变量的定义,且如下g3282所g12046指针p指向变量a,指针q指向变量b。
g2029不能把结g9869bg17842接g2052结g9869a之后的语句是( ) 。
struct node
{ char data;
struct node *next;
} a,b,*p=&a,*q=&b;
data next data next
A) a.next=q; B) p.next=&b;
C) p->next=&b; D) (*p).next=q;
(2000g51924月)
6,g14521g5062g5326g12447如下g3282所g12046的g2345向g19154g15932结构,
P
data next
在该g19154g15932结构中,指针p、s分别指向g3282中所g12046结g9869,g2029不能将s所指的结g9869插入g2052g19154
g15932末尾仍构成g2345向g19154g15932的语句组是( )。
A) p =p->next; s->next=p; p->next=s;
B) p =p->next; s->next=p->next; p->next=s;
C) s->next=NULL; p=p->next; p->next=s;
D) p=(*p).next; (*s).next=(*p).next; (*p).next=s;
(2000g51929月)
5
↑p
a
↑q
b 9 o
G
F \0 E head
s
C语言程序设计上机指导与同步训练
·270·
·270·
7,g14521以下定义
struct link
{ int data;
struck link *next;
}a,b,c,*p,*q;
且变量a和b之间g5062有如下g3282所g12046的g19154g15932结构,
a b
data next data next
┌──┬──┐ ┌──┬──┐
│ 5 │ ┼──→ │ 9 │ \0 │
└──┴──┘ └──┴──┘
↑p
c
data next
┌──┬──┐
│ 7 │ │
└──┴──┘
↑q
指针p指向变量a,q指向变量c。g2029能够把c插入g2052a和b 之间并g5430成新的g19154g15932的语句组是,( ) 。
A) a.next=c; c.next=b; B) p.next=q; q.next=p.next;
C) p->next=&c; q->next=p->next; D) (*p).next=q; (*q).next=&b;
(2002g51924月)
8,g14521g5062g5326g12447下g19766的g19154g15932结构,指针p、s分别指向g3282中所g12046的结g9869,g2029不能将s所指的结g9869插入g2052g19154g15932末尾的语句组是( )。
A) s->next=NULL; p=p->next; p->next=s;
B) p=p->next; s->next=p->next; p->next=s;
C) p=p->next; s->next=p; p->next=s;
D) p=(*p).next; (*s).next=(*p).next; (*p).next=s;
(1996g51924)
9,请读g12255g5219
#include <stdio.h>
void fun(float *pl,float *p2,float *s)
{ s=( float * )calloc( 1,sizeof(float));
*s=*p1+ *(p2++);
F NULLE
data next
head
p
G s
第二部分 C语言程序设计同步训练
·271·
·271·
}
void main()
{ float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
fun(a,b,s)
printf("%f\n",*s);
}
g990g19766g12255g5219的输出结g7536是( )。
A) 11.100000 B) 12.100000 C) 21.100000 D) 1.100000
(1996g51924)
10,下g19766g12255g5219的输出是( )。
A) 0 1 2 3 B) 0 4 0 10 C) 0 4 5 15 D) 1 4 5 15
main()
{ enum team {my,your=4,his,her=his+10};
printf("%d %d %d %d\n",my,your,his,her);}
(1996g51929)
11,g5062g11705字符0的ASCII码为十六进制的30,下g19766g12255g5219的输出是( )。
A) 6 B) 9 C) 0 D) 3
main()
{ union { unsigned char c;
unsigned int i[4];
} z;
z.i[0]=0x39;
z.i[1]=0x36;
printf("%c\n",z.c);}
(1996g51929)
一、填空题
1,g14521有如下g3282所g12046五个g17842g13505的 int 类型的存储g2345g1815并赋值如下g3282,a[0]的g3332g3348小于 a[4]
的g3332g3348。p和s是基类型为int的指针变量。请对以下问题进行填空。
a[0] a[1] a[2] a[3] a[4]
22 33 44 55 66
(1) g14521pg5062指向存储g2345g1815a[1]。通过指针p,给s赋值,g1363s指向最后一个存储g2345a[4]的语句是_________。
(2) g14521指针s指向存储g2345g1815a[2],p指向存储g2345g1815a[0],g15932g17810式s-p的值是__________。
(2000g51924月)
2,g16786有以下结构类型说明和变量定义,g2029变量a在g1881存所占字g14422数是_____________。
struct stud
{ char num[6];
int s[4];
double ave;
} a,*p;
C语言程序设计上机指导与同步训练
·272·
·272·
(2000g51929月)
3,变量root有如g3282所g12046的存储结构,g1866中sp是指向字符串的指针g3507,next 是指向该结构的指针g3507,data用以存g6930整型数,请填空,g4448成g8504结构的类型说明和变量root的定义
sp next data
┌─┬─┬─┐
root │ │ │ │
└─┴─┴─┘
struct list
{ char *sp;
_________________ ;
__________________ ;
}root;
(1999g51924月)
4,下g19766g12255g5219的运行结g7536是:____________。
typedef union student
{ char name[10];
long sno;
char sex;
float score[4];
}STU;
main()
{ STU a[5];
printf(“%d\n”,sizeof(a));
}
(2002g51929月)
5,g16786有以下定义
struct ss
{ int info;struct ss *link;}x,y,z;
且g5062g5326g12447如下g3282所g12046g19154g15932结构,
X Y Z
请写出删除g9869y的赋值语句______。
(2003g51924月)
6,为g1114g5326g12447如g3282所g12046的存储结构(g2375g8611个结g9869g2559两个g3507,data是数据g3507,next是向结g9869
的指针g3507),请填空。
data next
struct link { char data; ______________} node;
(1996g51924)
第二部分 C语言程序设计同步训练
·273·
·273·
7,g14521有以下说明和定义语句,g2029变量w在g1881存中所占的字g14422数是 _____________ 。
union aa
{ float x,y;
char c[6];
};
struct st { union aa v; float w[5]; double ave; } w;
(1996g51924)