一、概念题
F T T T F T T
二、判断题
1. 结构体中的成员不可以单独使用(F )。
2. 成员名可以与程序中的变量名相同,二者不代表同一对象(T )。
3. 不能将一个结构体变量作为一个整体进行输入输出(T )。
4. 结构体变量所占内存长度是各成员占的内存长度之和(T )。
5. 结构体中的成员不可以单独使用(F )。
9. 一个结构体变量的指针就是该变量所占内存段的起始地址(T )。
10. 用结构体变量作实参,形参也必须是同类型的结构体变量(T )。
三、单选题
1. 设变量定义如下,则对其中的结构分量num正确的引用是( )。
struct student {
int num ;
char name[20];
float score;
} stud[10];
A. stud[1].num=10; B. student.stud.num=10;
C. struct.stud.num=10; D. struct student.num=10;
2. 已知职工记录描述如下,设变量w中的“生日”是“1993年10月25日”,下列对“生日”的正确赋值方式是( )。
struct worker
{
int no;
char name[20];
char sex;
struct birth{ int day; int month; int year;}a;
};
struct worker w;
A day=25; month=10; year=1993;
B w.birth.day=25; w.birth.month=10; w.birth.year=1993;
C w.day=25; w.month=10; w.year=1993;
D w.a.day=25; w.a.month=10; w.a.year=1993;
3. 对于以下的变量定义,语句( )在语法和语义上都是正确的。
struct node {
float x,y;
char s[10];
} point={1,2,”abc”},*p;
A. *p=point; B. p=&point;
C. point=p; D. p->x=point.y;
4. 设有以下语句
typedef struct S
{ int g;
char h;} T;
则下面叙述中正确的是( )。
A. 用S定义结构体变量 B. 可以用T定义结构体变量
C. S是struct类型的变量 D. T是struct S类型的变量
5. 设有如下说明
typedef struct na{ int n; char c; double x;}STD;
则以下选项中,能正确定义结构体数组并赋初值的语句是( )。
A. STD tt[2]={{1,'A',62},{2, 'B',75}};
B. STD tt[2]={{1,"A",62},2, "B",75};
C. struct tt[2]={{1, 'A'},{2, 'B'}};
D. struct tt[2]={{1,"A",62.5},{2, "B",75.0}};
6. 若要说明一个类型名STP,使得定义语句STP s等价于char *s,以下选项中正确的是( )。
A. typedef STP char *s; B. typedef *char STP;
C. typedef stp *char; D. typedef char* STP;
7. 设有如下定义:
struct ss{ char name[10];
int age;
char sex;
}std[3],*p=std;
下面各输入语句中错误的是( )。
A. scanf("%d",&(*p). age); B. scanf("%s",&std.n ame);
C. scanf("%c",&std[0].sex) D. scanf("%c",&(p-> sex));
8. 以下程序执行后输出结果是( )。
main()
{ union { unsigned int n;
unsigned char c;
}u1
ul.c=’A’;
printf("%c\n",u1.n);
}
A. 产生语法错 B. 随机值 C. A D. 65
四、程序填空题
#define NULL 0
struct person
{ char *nam;
char sex;
struct person *next;};
main()
{ struct person a,b,c,d,*head,*s;
a.nam="Li ming"; a.sex='W';
b.nam="Hang kai"; b.sex='M';
c.nam="Liu fei"; c.sex='M';
d.nam="Fang ke"; d.sex= 【1】’w’ ;
head=&a;
a.next= 【2】 &b;
b.next= 【3】&d ;
d.next=NULL;
s=head;
do{
printf("%s:【4】 %c \n",s->nam,s->sex);
s=s->next;
}while(s!=NULL);
}
2. 以下程序中给指针p分配三个double型动态内存单元,请填空。
# include
main ( )
{ double *p;
p=(double *) malloc(【1】sizeof(double));
p[0]=1.5;p[1]=2.5;p[2]=3.5;
printf("%f%f%f\n",p[0],p[1],p[2]);
}
3. 已知结构数组person中存有N个人员的姓名和年龄,以下程序的功能为输出数组中最大者的姓名和年龄。请填空:
#define N 3
struct man
{char name[20];int age;};
struct man find(struct man *p ,int n)
{struct man *q;
int i;
q=p;
for(i=0;i
{if( p->age>q->age【5】)q=p;
p++;
}
return q;
}
main()
{ struct man *p, *q;
struct man person[N]={“zhang”,27,”li”,18,”wang”,73};
p=person;
q= 【6】 find(p,N) ;
printf(“年龄最大者为:%s,其年龄为:%d\n”,q->name, q->age【7】)
}
4. 已知head指向一个带头结点的链表,链表中每个结点包含整型数据域(data)和指向链表结点的指针域(next),以下函数返回链表中所有结点数据域之和,请填空:
struct list
{ int data;
struct list *next;
};
main()
{struct list *head;
int s;
s=sum(head);
}
sum( struct list *h 【5】)
{struct list *p;
int s=0;
p=h->next;
while(p!=NULL)
{s= p->date 【6】;
p= p->next 【7】;
}
return s;
}
5. 下列程序读入时间数值,将其加1秒后,输出,时间格式为hh:mm:ss,即时:分:秒。当小时等于24小时,置为0。
#include
struct{int hour;int minute;int second;}time;
main()
{scanf(“%d:%d:%d”, &time.hour,&time.minute,&time.second【1】);
time.second++;
if(【2】time.second ==60){
time.minute++;
【3】time.second=0;
if(time.minute==60)
{time.hour++;
time.minute=0;
if(time.hour==24)time.hour=0;
}
}
printf(“%d:%d:%d\n”,time.hour,time.minute,time.second);
}
6. 下列函数用于将链表中各结点的数据依次输出。请填空:
struct student{
int data;
struct student *next;
}
void out(struct student *head)
{【8】struct student *p;
p=head;
if(head!=NULL)
do{
printf(“%d\n”,p->data);
【9】P->next;
}while(【10】p!=NULL);
}
五、程序阅读题
1. 以下程序执行后输出结果:2041 2044
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);
}
2. 以下程序执行后输出结果是:580 550
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("5d %d\n",s[1].Score,p[1]->Score);
}
3. 以下程序的运行结果是:。2002shangxian
# include
typedef struct student{
char name[10];
long sno;
float score;
}STU;
main( )
{ STU a={"zhangsan",2001,95},b={"Shangxian",2002,90},c={"Anhua",2003,95},d,*p=&d;
d=a;
if(strcmp(a.name,b.name)>0) d=b;
if(strcmp(c.name,d.name)>0) d=c;
printf("%ld%s\n",d.sno,p->name);
}
4. 以下程序执行后的输出结果是:shen
#include
5. 以下程序执行后的输出结果是:
# include
6. 以下程序执行后的输出结果是: 4
#include
struct NODE{
int num;
struct NODE *next;
};
main( )
{ struct NODE *p,*q,*r;
int sum=0;
p=(struct NODE *)malloc(sizeof(struct NODE));
q=(struct NODE *)malloc(sizeof(struct NODE));
r=(struct NODE *)malloc(sizeof(struct NODE));
p->num=1;q->num=2;r->num=3;
p->next=q;q->next=r;r->next=NULL;
sum+=q->next->num;sum+=p->num;
printf("%d\n",sum);
}
7. 以下程序执行后输出结果:2,4,6,8,10
# include
六、程序设计题
1. 定义一个结构体变量,其中每个成员都从键盘接收数据,然后对结构中的浮点数求和,并显示运算结果。
提示:结构体类型为:
struct
{ char name[8];
int age;
char sex[2];
char depart[20];
float w1,w2,w3,w4,w5;
}a;
注意:结构体成员的引用方法。
2. 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天。注意闰年问题。
提示:计算该日是本年中的第几天,是从本年1月1日起。
3. 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据,要求在屏幕上显示出3门课程的平均成绩,以及最高分数的学生的数据(包括学号、姓名、3门课程成绩、平均分)。
提示:定义结构体数组类型为:
struct student
{ char num[6];
char name[8];
int score[3];
float avr;
} stu[5];
最高分数是指每个学生3门课程的平均分最高。
4. 设有一组学生的成绩数据已经放在结构数组BOY中,计算各个学生的不及格人数。
1)要求:使用结构指针变量作为函数参数编程。
struct stu
{ int num;
char *name;
char sex;
float score;
}boy[5]={{101,“li ping ”,’m’,45},
{102,“zhang ping”,’m’,62.5},
{103,“he fang”,’m’,92.5},
{104,“cheng ling”,’f’,87},
{106,“wang ming”,’m’,58},};
2) 在学生Wang Ming之前添加一条记录“105, ma li, f, 20”,并打印结果。(1) 参考书上的插入结点函数。(2)在主函数中调用该函数。3) 学生cheng ling已转学,请将其记录从链表中删除,并打印结果;(1) 参考书上的删除结点函数。(2) 在主函数中调用该函数。(3) 考虑如果已知被删除结点位于链表末端,程序可以如何简化。
5. 编写求链表长度的函数。
提示:从链表指针头往表尾移动计算结点的个数。
6. 已有两个链表a、b,每个链表的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。
提示:可以定义一个新的链表,先从链表a,再从链表b中取出结点,依次按学号升序插入到新的链表中。7. 如果我有若干面值为0.1元,0.5元,1元的硬币,任意取出其中三枚,如果其和大于1元就打印该排列。(1) 参考书上程序定义枚举类型数据结构。(2) 用穷举法计算所有可能的排列情况,计算其和。(3) 将和大于1的排列输出。
8. 声明新的类型名,用“R”来定义实数,用“Z”来定义整数,计算表达式“x/3+y”的值,分别取x=6.3,y=5。
本文来源:https://www.2haoxitong.net/k/doc/0b5cb70adaef5ef7bb0d3c4c.html
文档为doc格式