结构体练习题
结构体习题

结构体习题49、以下程序运行结果是______。
#include <string.h>typedefstruct student{char name[10];longsno;float score;}STU;main(){ STUa={"Zhangsan",2001,95},b={"Shangxian",2002,90},c={"Anhua",2003,95},d,*p=&d;d=a;if(strcmp(,)>0) d=b;if(strcmp(,)>0) d=c;printf("%ld %s\n",d.sno,p->name);}标准答案为:2002 Shangxian1. 填空题人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。
函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!#include <stdio.h>#include <string.h>#define N 8typedefstruct{ charnum[10];intyear,month,day ;}STU;/**********found**********/STU fun(STU *std, char *num){ int i; STU a={"",9999,99,99};for (i=0; i<N; i++)/**********found**********/if(strcmp(std[i].num,num)==0 )/**********found**********/return (std[i]);return a;}main(){ STU std[N]={ {"111111",1984,2,15},{"222222",1983,9,21},{"333333",1984,9,1},{"444444",1983,7,15},{"555555",1984,9,28},{"666666",1983,11,15},{"777777",1983,6,22},{"888888",1984,8,19}};“”STU p;char n[10]="666666";p=fun(std,n);if(p.num[0]==0)printf("\nNot found !\n");else{ printf("\nSucceed !\n ");printf("%s %d-%d-%d\n",p.num,p.year,p.month,p.day);}}第1 处:STU fun(STU *std, char *num)第2 处:if(strcmp(std[i].num,num)==0 )第3 处:return (std[i]);2. 填空题人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。
第8章结构体(答案)

第8章结构体(答案)第8章结构⼀、选择题1、设有以下说明语句struct ex{ int x;float y;char z;}example;则下⾯的叙述中不正确的是(B)A)struct是结构体类型的关键字B)example是结构体类型名C)x,y,z都是结构体成员名D)struct ex是结构体类型2、设有以下说明语句typedef struct{int a;char c[10];} ST;则下⾯的叙述中正确的是(B)A)ST是结构体变量名B)ST是结构体类型名C)typedef struct是结构体类型名D)struct是结构体类型名3、有以下定义,能输出字母M的语句是(D)struct person{char name[9];int age;};struct person class[10]={ “ohu”,17, “Paul”,19,“Mary”,18,“Adam”,16 } A)printf(“%c\n”,class[3].name[0]);B)printf(“%c\n”,class[3].name[1]);C)printf(“%c\n”,class[2].name[1]); D)printf(“%c\n”,class[2].name[0]);4、以下对结构体类型变量的定义中,不正确的是( B )A)typedef struct B)#define AA struct aa{int n; AA{int n;C)struct aa D)struct{int n;float m; {int n;}; float m;struct aa td1; }td1;5、下列程序输出的结果是(B)A)5 B)6 C)7 D)8struct 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);}6、在TC2.0下,int 类型为2个字节。
结构体习题1

1、在说明一个结构体变量时,系统分配给它的存储空间是。
A、该结构体中第一个成员所需的存储空间B、该结构体中最后一个成员所需的存储空间C、该结构体中占用最大存储空间的成员所需的存储空间D、该结构体中所有成员所需存储空间的总和2、结构体变量在程序执行期间。
A、所有成员一直驻留在内存中B、只有一个成员驻留在内存中C、部分成员驻留在内存中D、没有成员驻留在内存中3、设有以下说明语句:typedef struct{ int n;char ch[8];}PER;则下面叙述中正确的是。
A、PER是结构体变量名B、PER是结构体类型名C、typedef struct 是结构体类型D、struct 是结构体类型名4、有如下定义:struct date{ int year;int month;int day;};struct worklist{ char name[20];char sex;struct date birthday;}person;对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是。
A、year=1958B、birthday. year=1958C、person. birthday. year=1958D、person. year=19585、若有下面的说明和定义:struct test{int m1;char m2;float m3;union uu{char u1[5];int u2[2];}ua;}myaa;则sizeof(stuct test)的值是。
A、12B、16C、14D、96、以下对结构体类型变量td1的定义中,不正确的是。
A 、typedef struct aa{ int n;float m;} AA;AA td1; B 、struct aa { int n;float m;} td1;C 、struct { int n;float m;} aa;struct aa td1;D 、struct { int n;float m;} td1;7、设有如下定义:struct sk{int a;float b;} data;int *p;若要使p指向data中的a域,正确的赋值语句是。
C语言结构体习题及答案知识讲解

{
printf("%c,%d\n",kw[3].Key[0], kw[3].ID);
}
A) i,3B) n,3C)f,4D)l,4
7.定义以下结构体类型
structstudent
{
char name[10];
int score[50];
float average;
}stud1;
则stud1占用内存的字节数是【 】。
} x[4]={{2008,10,1, "guangzhou"}, {2009,12,25, "Tianjin"}};
语句
printf("%s,%d,%d,%d",x[0].name,x[1].birthday.year);的输出结果为【】。
A)guangzhou,2009B)guangzhou,2008
C)printf("%s\n",class[3].name);
D)printf("%s\n",class[0].name);
10.定义以下结构体数组
struct date
{ int year;
int month;
int day; };
struct s
{ struct date birthday;
char name[20];
struct c
{ int x;
int y;
}s[2]={1,3,2,7};
语句printf("%d",s[0].x*s[1].x)的输出结果为【】
A) 14B)6C)2D) 21
5.运行下列程序段,输出结果是【】
struct country
结构体练习题

结构体练习题1.设有如下说明语句:struct ex{ int x;float y; char z;} example;则下面的叙述中不正确的是________。
A)struct 是结构体类型的关键字B)example是结构体类型名C)x、y、z都是结构体成员名D)struct ex是结构体类型正确答案:B(知识点:结构体类型及结构体变量的定义)试题分析:example是结构体类型的变量名。
2.设有如下定义:struct ss{ char name[10];int age;char sex;}std[3],*p=std;下面各输入语句中错误的是________。
A)scanf("%d",&(*p).age); B)scanf("%s",&);C)scanf("%c",&std[0].sex); D)scanf("%c",&(p->sex));正确答案:B(知识点:结构体数组、指向结构体数组的指针、结构体变量的引用)3.设有如下定义:struct sk{ int a;float b;}data;int *p;若要使p指向data中的a域,正确的赋值语句是________。
A)p=&a B)p=data.a; C)p=&data.a D)*p=data.a正确答案:C(知识点:结构体成员地址的引用、指向结构体成员的指针)4.以下选项中不能正确把c1定义成结构体变量的是________。
A)typedef struct B)struct color c1{int red; {int red;int green; int green;int blue;}COLOR int blue;};COLOR c1;C)struct color D)struct{int red; {int n;int green; int green;int blue;}c1; int blue;}c1;正确答案:B(知识点:结构体变量的定义、自定义变量)5.有以下程序:struct s{int x,y;}data[2]={10,100,20,200};main(){struct s *p=data;printf("%d\n ",++(p->x));}程序运行后的输出结果是________。
结构体与链表习题附答案

结构体与链表习题附答案一、选择题1、在说明一个结构体变量时系统分配给它的存储空间是().A)该结构体中第一个成员所需的存储空间B)该结构体中最后一个成员所需的存储空间C)该结构体中占用最大存储空间的成员所需的存储空间D)该结构体中所有成员所需存储空间的总和。
2.设有以下说明语句,则以下叙述不正确的是()tructtu{inta;floatb;}tutype;A.truct是结构体类型的关键字B.tructtu是用户定义的结构体类型C.tutype是用户定义的结构体类型名D.a和b都是结构体成员名3、以下对结构体变量tu1中成员age的合法引用是()#includetructtudent{intage;intnum;}tu1,某p;p=&tu1;A)tu1->ageB)tudent.ageC)p->ageD)p.age4、有如下定义:Structdate{intyear,month,day;};Structworklit{Charname[20];Chare某;Structdatebirthday;}peron;对结构体变量peron的出生年份进行赋值时,下面正确的赋值语句是()Aworklit.birthday.year=1978Bbirthday.year=1978Cperon.birthday .year=1958Dperon.year=19585、以下程序运行的结果是()#include”tdio.h”main(){tructdate{intyear,month,day;}today;printf(“%d\\n”,izeof(truct date));}A.6B.8C.10D.126、对于时间结构体tructdate{intyear,month,day;charweek[5];}则执行printf(“%d\\n”,izeof(tructdate))的输出结果为(A.12B.17C.18D.207、设有以下语句:tructt{intn;charname[10]};tructta[3]={5,“li”,7,“wang”,9,”zhao”},某p;p=a;则以下表达式的值为6的是()A.p++->nB.p->n++C.(某p).n++D.++p->n8、设有以下语句,则输出结果是()tructLit{intdata;tructLit某ne某t;};tructLita[3]={1,&a[1],2,&a[2],3,&a[0]},某p;p=&a[1];printf(\printf(\printf(\}A.131B.311C.132D.2139、若有以下语句,则下面表达式的值为1002的是()tructtudent{intage;intnum;};tructtudenttu[3]={{1001,20},{1002,19},{1003,21}};)tructtudent某p;p=tu;A.(p++)->numB.(p++)->ageC.(某p).numD.(某++p).age10、下若有以下语句,则下面表达式的值为()tructcmpl某{int某;inty;}cnumn[2]={1,3,2,7};cnum[0].y/cnum[0].某某cnum[1].某;A.0B.1C.3D.611、若对员工数组进行排序,下面函数声明最合理的为()。
3-结构体练习题

{"009","Zhangjie",'m',19,66},{"010","Wangmei",'f',21,39}};
C++程序设计课件 设计制作:徐龙琴 12
void sort(int n) //冒泡排序函数 {int i,j; struct student temp; for(i=0;i<n-1;i++) for(j=0;j<n-i;j++) if(st[j].mathscore<st[j+1].mathscore) {temp=st[j]; st[j]=st[j+1]; st[j+1]=temp; } } void print(int n) //输出函数 {int j;
b.p++
c.(*p).num d.p=&stu.age
结构基础练习(带答案)

for(;p<q;p++)
{ printf(“age:sex:name”);
scanf(“%u%s”,&p->age,p->sex);
__ scanf(“%s”,p->name_____________; }
}
data_out(struct man *p,int n)
C.scanf(“%d”,&p->age);D.scanf(“%d”,&stu[0].num);
8.已知struct{
int x,y;
}s[2]={{1,2},{3,4}},*p=s;
则表达式++p->x值___2_____表达式(++p)->x值__3_____
9.以下程序运行的正确结果是___10,x___
C.(a.x<b.x) ? a.x: b.x D. c.x=a.x, c.y=a.y
3.若有以下结构体定义,正确引用或定义是______D____
struct example{
int x,y;}v1;
A.example.x=10; B.example v2.x=10;
C.struct v2;v2.x=10 D.struct example v2={10}
if (head==NULL)
{______head=p0____;
p0->next=NULL;
}
else
while ((p0->data < p1->data) && (p1->next!=NULL))
习题十结构体共用体习题

习题十结构体班级: 学号: 姓名:1. 填空题(1) 定义结构体的关键字是,定义共用体的关键字是。
(2) 结构体和共用体的相同点是,不同点是。
(3) 若有以下定义和语句,则sizeof(a)的值是__ ___,而sizeof(b)的值是__ _。
struct tu{ int m; char n; int y;}a;struct{ float p, char q; struct tu r} b;(4) 设有下面结构类型说明和变量定义,则变量a在内存所占字节数是。
如果将该结构改成共用体,结果为。
struct stud{ char num[6]; int s[4]; double ave; } a;(5) 下面程序用来输出结构体变量ex所占存储单元的字节数,请填空。
struct st{ char name[20]; double score; };main(){ struct st ex ; printf("ex size: %d\n",sizeof( )); }(6) 下面定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针,请将定义补充完整。
struct node{ int info; link; }(7) 以下程序执行后输出结果是。
main(){ union { unsigned int n; unsigned char c; } u1;u1.c='A'; printf("%c\n",u1.n); }(8) 变量root如图所示的存储结构,其中sp是指向字符串的指针域,next是指向该结构的指针域,data用以存放整型数。
请填空,完成此结构的类型说明和变量root的定义。
rootstruct{ char *sp ; __ __; _ _; } root;2. 阅读下面的程序,写出程序结果(1)struct info{ char a,b,c;};main(){ struct info s[2]={{‘a’,‘b’,‘c’},{‘d’,‘e’,‘f’}};int t;t=(s[0].b-s[1].a)+(s[1].c-s[0].b);printf("%d\n",t); }(2)void main(){ union { char i[2]; int k; } stu;stu.i[0]='2'; stu.k=0;printf("%s,%d\n",stu.i,stu.k);}(3)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); }3. 程序设计题(1)设计一个程序,用结构类型实现两个复数相加。
结构体练习题

5. 有以下程序输出结果是(B )。
#include<stdio.h>
struct stu
{ int num;
char name[10];
int age; };
void fun(struct stu *p)
{ print("%s\n",(*p).name); }
void main()
{ struct stu students[3]={{9801,"zhang",20},
则下面的叙述中不正确的是_____B___。
A)struct 是结构体类型的关键字 B)example是结构体类型名
C)x、y、z都是结构体成员名
D)struct ex是结构体类
11.设有如下定义:
struct ss
{ char name[10];
int age;
char sex;
}std[3],*p=std;
}
程序运行后的输出结果是_______11_。
14.C语言共用体类型变量在程序执行期间:B
A.所有成员一直驻留在内存中 B.只有一个成员驻留在内存中
C.部分成员驻留在内存中
D. 没有成员驻留在内存中
15.设有以下说明,则下面的叙述不正确的是:C
union data
1、 以下程序的输出结果是A A) 0 B) 1 C) 3 D) 6
main() { struct cmp
{ int x; int y; } cnum[2]={1,3,2,7}; printf(“%d\n”,cnum[0].x/cnum[1].y*cnum[1].x); } 2、根据以下定义,能输出字母M的语句是D
a[2].n=9; a[2].next='\0';
结构体练习题

算并输出每个人的学号和平均成绩。
2.已知链表结点结构如下,假设动态链表已经建立,请编写删除给定学号的结点的函数。
(只编写删除子函数即可)3.编写函数实现动态链表的建立。
链表结点结构如下,要求在主函数中将你所建立的链表输出到屏幕上。
4.有10个学生,每个学生的信息包括学号、姓名、3门课的成绩,从键盘输入10个学生数据存入结构体数组中,要求输出个人总分最高的学生的信息(包括学号、姓名、3门课成绩、总分)。
5.链表的结点数据类型如下:struct node{int data;struct node *next;};链表的建立和输出函数如下,编写将第i个结点删除的函数,并完善主函数,调试运行整个程序。
struct node *creat(){ int x;struct node *h,*s,*r;h=(struct node *)malloc(sizeof(struct node));r=h;scanf("%d",&x);while(x!=-1){ s=(struct node*)malloc(sizeof(struct node));s->data=x;r->next=s;r=s;scanf("%d",&x);}r->next=NULL;return h;}void print(struct node *h) //打印函数{ struct node *p;p=h->next;if(p==NULL)printf("list is empty!");else{ while(p!=NULL){ printf("%4d",p->data);p=p->next;}}}并输出其平均成绩。
7.试利用指向结构体的指针编制一程序,实现输入三个学生的学号、数学期中和期末成绩,然后计算其平均成绩并输出成绩表。
C语言结构体习题及参考答案

D)结构中各成员所需内存容量之和
3.定义以下结构体类型
structs
{intx;
floatf;
}a[3];
语句printf("%d",sizeof(a))的输出结果为【】
A)4B)12C)18D)6
7.定义以下结构体类型
structstudent
{
charname[10];
第9章结构体
1.定义以下结构体类型
structs
{
inta;
charb;
floatf;
};
则语句printf("%d",sizeof(structs))的输出结果为【】。
A)3B)7C)6D)4
2.当定义一个结构体变量时,系统为它分配的内存空间是【】
A)结构中一个成员所需的内存容量
B)结构中第一个成员所需的内存容量
structabc
{intx;chary;};
则会发生的情况是______。
A)编译时错B)程序将顺序编译、连接、执行
C)能顺序通过编译、连接、但不能执行D)能顺序通过编译、但连接出错
charsex;
structdatebirthday;
}person;
若对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是。。。。
A.year=1976B.birthday.year=1976
C.person.birthday.year=1976D.person.year=1976
1、若程序中有以下的说明和定义:
intscore[50];
floataverage;
}stud1;
第11章 结构体练习题

3、 有以下说明和定义语句 struct student
{ int age; char num[8];};
struct student stu[3]={{20,"200401"},{21,"200402"},{10\9,"200403"}}; struct student *p=stu; 以下选项中引用结构体变量成员的表达式错误的是D
{9802,"Wang",19},{9803,"zhao",18}}; fun(students+2); } A.Zhang C.Wang B.Zhao D.18
7. 下面程序的输出结果为( C ) #include <stdio.h> struct st { int x; int *y; } *p; int dt[4]={10,20,30,40}; struct st aa[4]={50,&dt[0],60,&dt[1],70,&dt[2], 80,&dt[3]}; main() { p=aa; printf("%d\n",++p->x); printf("%d\n",(++p)->x); printf("%d\n",++(*p->y)); } A.10 B.50 C. 51 D.60 20 60 60 70 20 21 21 31
8.下面结构体的定义语句中,错误的是( B)。 A. struct ord B. struct ord { { int x; int x ; int y; int y ; int z; int z ; }; } struct ord a; struct ord a; C. struct ord D. struct { { int x; int x ; int y; int y ; int z; int z ; } a; }a;
c语言结构体试题及答案

c语言结构体试题及答案1. 定义一个结构体,包含学生的姓名、学号和成绩。
```cstruct Student {char name[50];int id;float score;};```2. 编写一个函数,计算结构体数组中所有学生的平均成绩。
```cfloat calculateAverageScore(struct Student students[], int size) {float sum = 0.0;for (int i = 0; i < size; i++) {sum += students[i].score;}return sum / size;}```3. 给定一个结构体数组,编写一个函数,返回成绩最高的学生。
```cstruct Student* findHighestScoreStudent(struct Student students[], int size) {struct Student* highest = students;for (int i = 1; i < size; i++) {if (students[i].score > highest->score) {highest = &students[i];}}return highest;}```4. 编写一个函数,将结构体数组中的学生信息打印出来。
```cvoid printStudents(struct Student students[], int size) { for (int i = 0; i < size; i++) {printf("Name: %s, ID: %d, Score: %.2f\n", students[i].name, students[i].id, students[i].score);}}```5. 如何定义一个结构体,其中包含另一个结构体类型的成员?```cstruct Inner {int a;float b;};struct Outer {struct Inner inner;char c[100];};```6. 编写一个函数,交换两个结构体变量的值。
结构体练习题

结构体练习题:第1 题:计算日期的差值(1)编写一函数,计算两个日期之间的时间差,并将其值返回。
日期以年、月、日表示。
“时间差”以天数表示。
注意考虑日期之间的闰年。
函数的输入参数为日期1和日期2,函数的返回值为时间差,单位为天数。
(2)编写一程序,在主函数中输入两个日期,调用上述函数计算两个日期之间的时间差,并将结果输出。
为了计算简便,假设用户输入的日期1总是早于日期2。
参考代码:#include<stdio.h>struct date{int year;int month;int day;};int isLeap(int year);int dif(struct date a, struct date b);void main(){struct date a, b;printf("请输入日期1(空格分隔,年月日):\n");scanf("%d%d%d", &a.year, &a.month, &a.day);printf("请输入日期2(空格分隔,年月日,晚于日期1):\n");scanf("%d%d%d", &b.year, &b.month, &b.day);printf("相差天数为:");printf(" %d 天\n", dif(a, b));}int isLeap(int year) //判断一个年份是否是闰年的函数{if(year%400==0 || (year%4==0 && year%100!=0))return 1;elsereturn 0;}int dif(struct date a, struct date b){int i;long day=0, day1=0, day2=0;intd[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,3 1,31,30,31,30,31}};// day变量为年份a到年份b前一年的年份总天数for(i=a.year; i<b.year; i++)if(isLeap(i))day += 366;elseday += 365;// day1变量为年份a年初到当天的年内总天数for(i=1; i<a.month; ++i)day1 += d[isLeap(a.year)][i];day1 += a.day;// day1变量为年份b年初到当天的年内总天数for(i=1; i<b.month; ++i)day2 += d[isLeap(b.year)][i];day2 += b.day;return day + day2 - day1;}参考截图:第2 题:结构体数组应用请定义一个描述学生基本信息的结构,包括姓名,学号,籍贯,身份证号,年龄,家庭住址,性别,联系方式等。
C语言程序设计基础-结构体习题

1、把一个学生得信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生得信息。
#include <stdio、h>int main(){struct Student{long int num;char name[20];char sex;char addr[20];}a={10101,“Li Lin”,‘M’, “123 Beijing Road”};printf("NO、:%ld\nname:%s\n sex:%c\naddress:%s\n",a、num,a、name,a、sex,a、addr); return 0;}2、输入两个学生得学号、姓名与成绩,输出成绩较高学生得学号、姓名与成绩#include <stdio、h>int main(){ struct Student{int num;char name[20];float score;}student1,student2;scanf("%d%s%f",&student1、num,student1、name, &student1、score);scanf(“%d%s%f”,&student2、num,student2、name, &student2、score);printf("The higher score is:\n");if (student1、score>student2、score)printf("%d %s %6、2f\n",student1、num,student1、name, student1、score);else if (student1、score<student2、score)printf("%d %s %6、2f\n",student2、num,student2、name, student2、score);else{printf("%d %s %6、2f\n",student1、num,student1、name, student1、score);printf("%d %s %6、2f\n",student2、num,student2、name, student2、score);}return 0;}3、有3个候选人,每个选民只能投票选一人,要求编一个统计选票得程序,先后输入被选人得名字,最后输出各人得票结果。
结构体和共用体习题

结构体和共用体习题(总8页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--习题六1. 从下列四个选项中选择一个正确的填入括号中。
(1)在说明一个结构体变量时系统分配给它的存储空间是( D)。
A该结构体中第一个成员所需存储空间B该结构体中最后一个成员所需存储空间C该结构体中占用最大存储空间的成员所需存储空间D该结构体中所有成员所需存储空间的总和(2)在说明一个共用体变量时系统分配给它的存储空间是(D )。
A该共用体中第一个成员所需存储空间B该共用体中最后一个成员所需存储空间C该共用体中占用最大存储空间的成员所需存储空间D该共用体中所有成员所需存储空间的总和(3)共用体类型在任何给定时刻, ( B)。
A所有成员一直驻留在内存中B只有一个成员驻留在内存中C部分成员驻留在内存中D没有成员驻留在内存中(4)以下定义结构体类型的变量st1,其中不正确的是(A )A typedef stuct student{int num;int age;}STD;STD st1;B struct student{int num,age;}st1;C struct{int num;float age;}st1;D struct student{int num;int age;};struct student st1;(5)已知职工记录描述为:struct workers{int no;char name[20];char sex;struct{int day;int month;int year;}birth;};struct workers w;设变量w中的”生日”应是”1993年10月25日”,下列对”生日”的正确赋值方式是( C)。
A day=25; month=10; year=1993;B ==10; =1993;C =25; =10; =1993;(6)设有如下定义:struct sk{int a;float b;}data,*p;若有p=&data;则对data中的a成员的正确引用是( B)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结构体练习题:第1 题:计算日期的差值(1)编写一函数,计算两个日期之间的时间差,并将其值返回。
日期以年、月、日表示。
“时间差”以天数表示。
注意考虑日期之间的闰年。
函数的输入参数为日期1和日期2,函数的返回值为时间差,单位为天数。
(2)编写一程序,在主函数中输入两个日期,调用上述函数计算两个日期之间的时间差,并将结果输出。
为了计算简便,假设用户输入的日期1总是早于日期2。
参考代码:#include<stdio.h>struct date{int year;int month;int day;};int isLeap(int year);int dif(struct date a, struct date b);void main(){struct date a, b;printf("请输入日期1(空格分隔,年月日):\n");scanf("%d%d%d", &a.year, &a.month, &a.day);printf("请输入日期2(空格分隔,年月日,晚于日期1):\n");scanf("%d%d%d", &b.year, &b.month, &b.day);printf("相差天数为:");printf(" %d 天\n", dif(a, b));}int isLeap(int year) //判断一个年份是否是闰年的函数{if(year%400==0 || (year%4==0 && year%100!=0))return 1;elsereturn 0;}int dif(struct date a, struct date b){int i;long day=0, day1=0, day2=0;intd[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,3 1,31,30,31,30,31}};// day变量为年份a到年份b前一年的年份总天数for(i=a.year; i<b.year; i++)if(isLeap(i))day += 366;elseday += 365;// day1变量为年份a年初到当天的年内总天数for(i=1; i<a.month; ++i)day1 += d[isLeap(a.year)][i];day1 += a.day;// day1变量为年份b年初到当天的年内总天数for(i=1; i<b.month; ++i)day2 += d[isLeap(b.year)][i];day2 += b.day;return day + day2 - day1;}参考截图:第2 题:结构体数组应用请定义一个描述学生基本信息的结构,包括姓名,学号,籍贯,身份证号,年龄,家庭住址,性别,联系方式等。
并定义一个结构体数组。
编程:a) 编写函数input() , 输入基本信息(3~5 条记录);b) 编写函数print(),输出全体记录信息;c) 编写函数search(), 检索一个指定的学生信息并返回, 由主函数打印到屏幕上;d) 说明,访问结构的时候,什么时候应该用运算符“.”,什么时候应该用运算符“->”。
(运算符前是结构体变量时用“.”,是指向结构体变量的指针时用“->”)参考代码:#include <stdio.h>#include <string.h>#define N 3 //增加程序的可扩展性struct student{char name[20];char num[15];char place[20];char id[20];int age;char address[100];char sex;char phone[15];} stu[N];void input(struct student stu[]);void print(struct student stu[]);void search(struct student stu[], char name[]);void main(){char name[20];input(stu);print(stu);printf("\n请输入想要查找的学生姓名: ");scanf("%s", name);search(stu, name);}void input(struct student stu[]){for(int i=0; i<N; i++){printf("请输入第%d个学生的信息:\n", i+1);printf("姓名: ");scanf("%s", stu[i].name);printf("学号: ");scanf("%s", stu[i].num);printf("籍贯: ");scanf("%s", stu[i].place);printf("身份证号: ");scanf("%s", stu[i].id);printf("年龄: ");scanf("%d", &stu[i].age);printf("家庭住址: ");scanf("%s", stu[i].address);fflush(stdin);printf("性别(M/F): ");scanf("%c", &stu[i].sex);printf("电话: ");scanf("%s", stu[i].phone);printf("\n");}}void print(struct student stu[]){printf("姓名学号籍贯身份证号年龄地址性别电话\n");for(int i=0; i<N; i++)printf("%-8s%-12s%-10s%-20s%-4d%-10s%-3c%-10s\n", stu[i].name,stu[i].num, stu[i].place, stu[i].id, stu[i].age, stu[i].address,stu[i].sex,stu[i].phone);}void search(struct student stu[], char name[]){int flag=0;for(int i=0; i<N; i++)if(strcmp(stu[i].name, name)==0){printf("%-8s%-12s%-10s%-20s%-4d%-10s%-3c%-10s\n", stu[i].name,stu[i].num, stu[i].place, stu[i].id, stu[i].age, stu[i].address,stu[i].sex,stu[i].phone);flag = 1;}if(flag == 0)printf("没有该学生的信息!\n\n");}参考截图:第3 题:一元多项式加法编写一元多项式加法器,输入两个一元稀疏多项式,然后对它们进行加法操作。
在具体实现上,要求用线性链表形式来存储一个多项式,每个链表的节点包括两个成员变量,系数和指数(均为整数)。
例如A(x) 75 30x 95x8 50x9,B(x) 80x 25x7 90x8可以用下面的链表表示:说明:(1) 每个链表节点都是根据需要动态创建的;(2) 程序采用多函数形式来实现,至少包括创建链表、打印链表、加法函数等。
(3) 多项式系数可正、可负;指数肯定是非负整数,且按照递增顺序排列输入格式:第一行是一个整数M,表示第一个多项式的项数。
接下来有M行,每行有两个整数ci和ei,分别表示第i项的系数和指数。
再接下来是输入第二个多项式,方法同第一个多项式输入。
输出格式:输出两个多项式相加的结果。
第一行是整数K,表示新多项式的项数。
接下来有K行,每一行为两个整数,分别代表系数和指数。
参考代码:#include <stdio.h>#include <stdlib.h>#define LEN sizeof(struct polynomial)struct polynomial{int a;int x;struct polynomial *next;};struct polynomial *create(int);void print(struct polynomial *);struct polynomial *add(struct polynomial *, struct polynomial *); void main(){struct polynomial *head1, *head2, *p0, *p;int m1, m2, i, n=0;printf("请输入第一个多项式的项数:");scanf("%d", &m1);printf("请输入第一个多项式(一项一行升幂排列,格式: 系数指数):\n");head1 = create(m1);printf("请输入第二个多项式的项数:");scanf("%d", &m2);printf("请输入第二个多项式(一项一行升幂排列,格式: 系数指数):\n");head2 = create(m2);p0 = add(head1,head2);p = p0;while(p != NULL){n++;p = p->next;}printf("\n相加后的多项式项数为:%d\n", n);printf("\n相加后的多项式为:\n");print(p0);}struct polynomial *create(int m){struct polynomial *p1, *p2, *head=NULL;p1 = p2 = (struct polynomial *) malloc(LEN);scanf("%d %d", &p1->a, &p1->x);head = p1;for(int i=1; i<m; i++){p1 = (struct polynomial *) malloc(LEN);scanf("%d %d",&p1->a,&p1->x);p2->next = p1;p2 = p1;}p1->next = NULL;return(head);}void print(struct polynomial *head){struct polynomial *p;p = head;while(p != NULL){printf("%d %d\n", p->a, p->x);p = p->next;}}struct polynomial *add(struct polynomial *head1, struct polynomial *head2) {struct polynomial *p1, *p2, *p3;p1 = head1;while(head2 != NULL) //将后者往前者中插{p3 = head2;head2 = p3->next;while(((p1->x)<(p3->x)) && (p1->next!=NULL)) //找到插入点{p2 = p1;p1 = p1->next;}if(p1->x > p3->x) //如果p1的次数大{if(p1 == head1){head1 = p3;p3->next = p1;}else{p2->next = p3;p3->next = p1;}}else if(p1->x == p3->x) //如果相等则相加{p1->a = p1->a + p3->a;if(p1->a == 0) //若相加后该项的系数为0,则将其删去{if(p1 == head1)head1 = p1->next;else{p2->next = p1->next;p1 = p1->next;}}}else //p1移动至末尾{p1->next = p3;p3->next = NULL;}}return(head1);}参考截图:第4 题:循环淘汰有N 个同学,编号分别为1,2,3……,N,围成一圈,随便选定一个整数m,让大家按顺时针依次报数,报到m 的同学便会从圈子中退出,从而被淘汰,直到最后剩下一个人。