结构体与共同体文件测验

合集下载

工大作业&&结构体和共用体

工大作业&&结构体和共用体

《程序设计语言 C1》随机题目做作业时间:2013-5-13 8:30:00至2013-6-12 8:30:001. 下列程序的执行结果是_________。

#includeunion un{ int i;char c[21;};void main(){ union un x;x.c[0]=10:x.c[1]=1:printf("\n%d",x.i);}(3分)2. C语言结构体类型变量在程序执行期间(3分)A、B、C、D、A、所有成员一直驻留在内存中B、只有一个成员驻留在内存中C、部分成员驻留在内存中D、没有成员驻留在内存中3. 在16位IBM-PC机上使用C语言,若有如下定义struct data{int i;char ch;double f;}b;则结构变量b占用内存的字节数是(3分)A、B、C、D、A、1B、2C、8D、114. 设有以下说明语句typedef struct{ int n;char ch[8];}PER;则下面叙述中正确的是(3分)A、B、C、D、A、PER 是结构体变量名B、 PER是结构体类型名C、 typedef struct 是结构体类型D、struct 是结构体类型名5. 若有以下结构体定义,则________是正确的引用或定义。

struct example{ int x;int y;}v1;(3分)A、B、C、D、A、example.x=10B、example v2.x=10C、struct v2;v2.x=lOD、struct example v2={10};6. 有以下程序# includestruct STU{ int num;float TotalScore; };void f(struct STU p){ struct STU s[2]={{20044,550},{20045,537}};p.num = s[1].num; p.TotalScore = s[1].TotalScore;}main(){ struct STU s[2]={{20041,703},{20042,580}};f(s[0]);printf("%d %3.0(3分)A、B、C、D、A、20045 537B、20044 550C、20042 580D、20041 7037. 以下选项中不能正确把cl定义成结构体变量的是A.typedef structB.struct color cl{ int red; { int red;int green; int green;int blue; int blue;} COLOR; };COLOR cl;C.struct colorD.struct{ int red; { int red;int green; int green;int blue;(3分)8. 若有以下说明和定义union dt{int a;char b;double c;}data;以下叙述中错误的是_____。

C语言题库第8章 结构体和共同体

C语言题库第8章 结构体和共同体

第八章结构体和共同体一、单项选择1. 若有以下定义:struct link{int data;struct link *next;}a,b,c,*p,*q;且变量a和b之间已有如下图所示的链表结构,若指针p指向a,指针q指向c。

则能把c插入到a和b之间形成新的链表的语句是( C )2. 若有以下程序段:int a=1,b=2,c=3;struct dent {int n ; int *m ;} s[3] = {{101,&a},{102,&b},{103,&c}};struct dent *p=s ;则以下表达式中值为2的是( D )。

3. 下面程序的运行结果是( D )。

#iunclude<stdio.h>int main ( ) {struct complx {int x; int y ;}cnum[2]={1,3,2,7} ;printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x) ;return 0;}二、程序设计1. /*学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s 中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序: */#include <stdio.h>#define N 16typedef struct{ char num[10];int s ;}STREC;void fun (STREC a[]){/*********Begin*********//*********End**********/}int main (){FILE *wf,*in;STREC s[N]={{ "GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};int i;fun(s);printf("The data after sorted :\n");for (i=0; i<N; i++)printf("%s %4d\n",s[i].num,s[i].s);printf("\n");/******************************/in=fopen("in001.dat","r");i=0;while(!feof(in)){fscanf(in,"%s %d",s[i].num,&s[i].s);i++;}fun(s);wf=fopen("out.dat","w");for (i=0; i<N; i++)fprintf(wf,"%s %4d\n",s[i].num,s[i].s);fclose(wf);fclose(in);/*****************************/return 0;}【参考代码】int i,j;STREC t;for(i=0;i<N;i++)for(j=0;j<N-1-i;j++)if(a[j].s<a[j+1].s){t=a[j];a[j]=a[j+1];a[j+1]=t;}2. /*某学生的记录由学号、8门课成绩和平均分组成,学号和8门课的成绩已在主函数中给出。

国家二级C语言机试(结构体、共同体、位运算及文件操作)模拟试

国家二级C语言机试(结构体、共同体、位运算及文件操作)模拟试

国家二级C语言机试(结构体、共同体、位运算及文件操作)模拟试卷12(题后含答案及解析)题型有:1. 选择题选择题1.关于typedef的叙述中错误的是( )。

A.用typedef可以为各种类型起别名,但不能为变量起别名B.可以通过typedef增加新的类型C.用typedef定义新的类型名后,原有类型名仍有效D.可以用typedef将已存在的类型用一个新的名字来代表正确答案:B解析:C语言允许用typedef说明一种新类型名或为现有类型起个别名,而不是创建新类型,说明新类型名的语句一般形式为:typedef类型名标识符;在此,“类型名”必须是在此语句之前已有定义的类型标识符。

标识符是一个用户定义标识符,用作新的类型名。

typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。

知识模块:结构体及文件操作2.正确的结构体类型说明和变量定义是( )。

A.typedef struct f{int n;char c;}STR;STR t1,t2;B.struct STR;{int n;char C;};STR t1,t2;C.typedef stmct STR;{int n=0;char c=‘A’;}t1,t2;D.struct{int n;char c;}STR;STR t1,t2;正确答案:A解析:定义结构体类型的一般形式为:struct结构体名{成员列表};struct 结构体名后不能加“:”号。

但定义完之后要在句末加分号,所以选项B、C有误,选项D中定义无名称的结构体类型同时定义结构体变量形式应为“stmct t1,t2;”。

选项A为用户自定义类型,其为正确的定义形式。

知识模块:结构体及文件操作3.若typedef int*T;T a[5];则与a的定义相同的是( )。

A.int*a[5];B.int(*a)[5]C.int,*a;D.int a[5];正确答案:A解析:typedef的主要功能是为存在的类型指定一个新的别名,后面的代码中可以利用该新定义的别名定义变量,题目定义了整型指针类型T,而后利用T 定义了整型指针数组a,含有5个元素,选项A中定义了整型指针数组a,选项B定义了一个指向一维数组的指针a,选项C定义指针变量,而选项D为定义整型数组最常用的形式,数组a中可以存放5个数据元素。

国家二级C语言机试结构体共同体位运算及文件操作模拟试卷13_含答案与解析)-交互73

国家二级C语言机试结构体共同体位运算及文件操作模拟试卷13_含答案与解析)-交互73

国家二级C语言机试(结构体、共同体、位运算及文件操作)模拟试卷13 (总分50, 做题时间90分钟)1. 选择题1.下列说法正确的是( )。

SSS_SINGLE_SELA 使用typedef可以定义新的数据类型B 使用struct可以定义新的数据类型C 使用typedef可以对现有类型起别名,但不能定义数据类型D 使用new关键字可以定义新的数据类型分值: 2答案:C解析:C语言中只能通过struct关键字定义新的结构体,使用typedef对现有类型起别名,但不能定义新的数据类型,所以答案C正确。

2.以下说法正确的是( )。

SSS_SINGLE_SELA typedef和struct可以联合使用来定义新数据类型B typedef只能单独使用C struct只能单独使用D 以上说法都不正确分值: 2答案:D解析:typedef和struct可以联合使用来定义新的结构体,但不能定义新的数据类型。

所以A,B,C选项的说法均不正确。

答案选D项。

3.若typedef char T[3];T*a;上述定义中a的类型与下面选项中完全相同的是( )。

SSS_SINGLE_SELA char(*A)[3];B char*a;C char a[3];D char*a[3];分值: 2答案:D解析:C语言允许用typed说明一种新类型名。

题目中利用typedef定义了字符数组类型T,而后定义了该类型的指针a,因此a为指针数组。

4.关于typedef的叙述中正确的是( )。

SSS_SINGLE_SELA 在使用typedef改变原类型的名称后,只能使用新的类型名B 使用typedef说明新类型名时,后面不能加分号C 在程序中,允许用typedef来说明一种新的类型名D 使用typedef说明新类型名时,其格式是:typedef新类型名原类型名分值: 2答案:C解析:C语言允许用typedef说明一种新类型名。

typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。

C语言程序设计结构体与共用体

C语言程序设计结构体与共用体

C语⾔程序设计结构体与共⽤体⼀、选择题1、定义结构类型时,下列叙述正确的是()A、系统会按成员⼤⼩分配每个空间B、系统会按最⼤成员⼤⼩分配空间C、系统不会分配空间D、以上说法均不正确2、已知结构类型变量x的初始化值为{“20”,30,40,35.5},请问合适的结构定义是()A、 Struct s{int no;int x,y,z};B、 Struct s{char no[2];int x,y,z};C、 Struct s{int no;float x,y,z};D、Struct s{char no[2];float x,y,z};3、若程序中有定义struct abc{int x;char y;};abc s1,s2;则会发⽣的情况是()A、编译时会有错误B、链接时会有错误C、运⾏时会有错误D、程序没有错误4、已知学⽣记录描述为struct student{int no;char name[20];char set;struct{int year;int month;int day;}birth;};struct student s;设变量s中的“⽣⽇”应是“1984年11⽉11⽇”,下列对⽣⽇的正确赋值⽅式是( ). A)year=1984; B)birth.year=1984;month=11; birth.month=11;day=11; birth.day=11;C)s.year=1984; D)s.birth.year=1984;5、当说明⼀个结构体变量时系统分配给它的内存是( ).A)各成员所需内存量的总和 B)结构中第⼀个成员所需内存量C)成员中占内存量最⼤者所需的容量 D)结构中最后⼀个成员所需内存量6、以下对结构体类型变量的定义中不正确的是( ).A)#define STUDENT struct student B)struct studentSTUDENT {int num;{int num; float age;float age; }std1;}std1;C)struct D)struct{int num; int num;float age; float age;}std1; }student;struct student std1;7、设有以下说明语句struct stu{int a;float b;}stutype;则下⾯的叙述不正确的是( ).A)struct是结构体类型的关键字B)struct stu是⽤户定义的结构体类型C)stutype是⽤户定义的结构体类型名D)a和b都是结构体成员名8、C语⾔结构体类型变量在程序执⾏期间( )..A)所有成员⼀直驻留在内存中B)只有⼀个成员驻留在内存中C)部分成员驻留在内存中D)没有成员驻留在内存中9、在16位IBM-PC机上使⽤C语⾔,若有如下定义:struct data{int i;char ch;则结构变量b占⽤内存的字节数是( ).A)1 B)2 C)3 D)410、以下程序的运⾏结果是( ).#include “stdio.h”main(){struct data{int year,month,day;}today;printf(“%d\n”,sizeof(struct data));}A)6 B)8 C)10 D)1211、若有以下定义和语句;struct student{int age;int num ;};struct student stu [3]={{1001,20 },{1002,19},{1003,21}};main(){struct student *p;p=stu;…..}则以下不正确的引⽤是( )。

国家二级C语言(结构体和共用体、文件)机试模拟试卷2

国家二级C语言(结构体和共用体、文件)机试模拟试卷2

国家二级C语言(结构体和共用体、文件)机试模拟试卷2(总分:52.00,做题时间:90分钟)一、选择题(总题数:26,分数:52.00)1.若有语句typedef struet S{int g;char h;}T;,则下列叙述中正确的是( )。

(分数:2.00)A.可用S定义结构体变量B.可用T定义结构体变量√C.S是struct类型的变量D.T是struet S类型的变量解析:解析:本题考查typedef重新声明一种结构体类型。

那么T为结构体类型,而不是结构体变量,所以B选项正确。

2.设有语句typedef struet TT{char c;int a[4];}CIN;,则下列叙述中正确的是( )。

(分数:2.00)A.CIN是struet TT类型的变量B.,IT是struct类型的变量C.可以用TT定义结构体变量D.可以用CIN定义结构体变量√解析:解析:本题考查typedef重新声明一种结构体类型。

其中CIN为结构体类型名,而不是结构体变量,所以D选项正确。

3.下列叙述中错误的是( )。

(分数:2.00)A.可以用typedef将已存在的类型用一个新的名字来代表B.可以通过typedef增加新的类型√C.用typedef定义新的类型名后,原有类型名仍有效D.用typedef可以为各种类型起别名,但不能为变量起别名解析:解析:本题考查typedef的用法。

typedef并不是增加一种新的类型,而是对已存在的类型用一个新的名字来代表,所以B选项错误。

4.有以下程序:#include<stdio.h>main(){struet STU{char name[9];char sex:double score[2];};struct STU a={"Zhao",'m',85.0,90.0},b={"Qian",'f',95.0,92.0};b=a;printf("%s,%c,%2.0f,%2.0f\n",b.name,b.sex,b.score[0],b.score[1]);}程序的运行结果是( )。

实验9 结构体、共用体与枚举类型答案

实验9 结构体、共用体与枚举类型答案

率。 其次,结构体指针作为函数参数:可以在函数中通过该指针引用结 构体,当在函数中修改了结构体的成员变量后,指针所指向的结构体本 身也被改变了。而当结构体变量作为函数参数;在函数中可通过变量直 接使用结构体,但是,如果在函数中修改了结构体的成员变量后,结构 体本身并未发生变化,只是副本被改变。
} } average = s/5 ; printf("平均成绩:%.2f\n",average); }
4、5位职工的月收入如下表所示: 部门 月收入 工号 姓名 (char (float (int num) (char name) department) salary) 技术科 010002 张援朝 6800 生产科 020006 李明瑞 2600 检验科 030018 王国庆 4800 后勤部 040026 刘小兵 3700 经营科 050068 吴 伟 1900 试编程求这5位职工的平均月收入,并输出月收入小于3000元的职 工的部门、工号、姓名与月收入等信息。源程序以ex9_8.c命名,保存 在自己的文件夹内。
保存在自己的文件夹内。
解: #include <stdio.h> struct bookinfo { char isbn[20]; char title[50]; char author[20]; char publisher[50]; char pubdate[30]; float price; }book[5] = {{"7115177810","Java实用教程","李钟 尉","人民邮电出版社","2008年5月",32.00}, {"7113101015","汇编语言程序设计","白小明","中国铁 道出版社","2009年8月",35.00}, {"7302108535","C语言程序设计","谭浩强","清华大学 出版社","2005年7月",26.00}, {"7301123713","网络工程实用教程","汪新民","北京大 学出版社","2008年2月",34.00}, {"7111283812","软件工程概论","郑人杰","机械工业出 版社","2010年3月",28.00}}; main() { int i; float average, s=0; for(i=0; i<5; i++) { s += book[i].price; if(book[i].price<30.00) { printf("书号:%s ",book[i].isbn); printf("书名:%s ",book[i].title);

C语言各章节单元测试题及答案——结构体与共用体

C语言各章节单元测试题及答案——结构体与共用体

第9章结构体与共用体9.1典型考试题剖析9.1.1选择题【例1】若指针p已经正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是。

A) p=2*(int *)malloc(sizeof(int)); B) p=(int*)malloc(2*sizeof(int));C) p=(int *)malloc(2*2); D) p=(int*)calloc(2,sizeof(int));✧考点:动态存储分配函数。

✧分析:根据动态存储分配函数malloc和calloc的函数原型可以知道,calloc函数的调用形式为:void * calloc(unsigned n,unsigned size);表示在动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配域起始地址的指针,因此答案D是正确的。

malloc函数的调用形式为:void * malloc(unsigned int size);表示是在内存的动态存储区分配一个长度为size的连续空间,并返回一个指向分配域起始地址的指针,答案B和C中malloc的参数分别为:2*(sizeof(int))和2*2,都是整型数,因此调用形式正确。

答案A中(int *)malloc(sizeof(int))的返回值为一个地址值,将地址的值乘以2是没有意义的。

✧答案:A【例2】若有以下说明和定义:struct test{ int m1; char m2; float m3;union uu{ char u1[5]; int u2[2]; }ua;}myaa;则sizeof(struct test)的值是。

A) 12 B) 16 C) 14 D) 9✧考点:结构体类型和共用体类型所占内存的字节数。

✧分析:sizeof(struct test)的功能是求结构体类型test所占用的内存字节数。

它应该等于结构体每个成员所占的字节数之和。

m1为int型,占2字节,m2为char型,占1字节,m3为float型,占4字节,接下来是一个共用体类型uu,共用体所占的字节数应该等于成员中最长者所占的字节数,u1占5字节,u2占4字节,那么该共用体类型应该占用5字节,所以2+1+4+5=12。

实验二 有关结构体和共用体的程序设计参考答案

实验二  有关结构体和共用体的程序设计参考答案

实验2:有关结构与共同体的程序设计一、实验目的1.掌握结构体类型和结构体变量的定义、引用方法;2.掌握结构体类型数组和结构体类型指针的概念和应用;3.掌握共用体的概念和使用;4.能用结构体类型解决实际问题。

二、实验要求1.了解结构体类型和简单数据类型、结构体类型和共用体类型的区别;2.复习结构体变量、结构体指针与结构体数组的相关理论课程;3.完成各项实验任务及问题讨论。

三、实验内容1.输入和运行下面的程序,并分析输出结果。

①#include <stdio.h>main(){ union EXAMPLE{ struct{ int x,y;}in;int a,b;}e;e.a=1;e.b=2;e.in.x=e.a*e.b;e.in.y=e.a+e.b;printf(“%d,%d\n”,e.in.x,e.in.y);}输出结果:4,8解答:对于共用体e,有三个成员in,a,b,它们在内存中的覆盖关系如下图:即e.a,e.b,e.in.x占相同的内存单元,执行e.a=1;e.b=2;后e.a,e.b,e.in.x的值为2,执行e.in.x=e.a*e.b;后e.a,e.b,e.in.x的值为2*2=4,执行e.in.y=e.a+e.b;e.in.y=4+4=8。

main(){ union{ int i[2];long k;char c[4];}r,*s=&r;s->i[0]=0x39;s->i[1]=0x38;printf(“%c\n”,s->c[0]);}输出结果:9解答:对于共用体r,有三个成员i,k,c,它们在内存中的覆盖关系如下图:i[0]ki[1]执行s->i[0]=0x39;s->i[1]=0x38;赋值语句后,内存中存储的数据值如上图所示。

2.完善程序①下面程序的功能是输入学生的姓名和成绩,然后输出。

#include <stdio.h>struct studinf{ char name[20];/* 学生姓名*/int score;/* 学生成绩*/} stu, *p;void main ( ){ p=&stu;printf("Enter name:");gets(p->name);printf("Enter score: ");scanf("%d",&(*p).score);printf("Output: %s, %d\n",,stu.score);}目标:掌握结构体成员引用的三种等价表达方式。

☆C语言实验十(结构体、共同体)

☆C语言实验十(结构体、共同体)

1、做2008春C07“上机套题”;(思考:改错题中有什么值得参考的和借鉴的?)2、选做题(数制变换2009春C01编程题):由2009秋C02改错题设想上机编程题程序功能:十进制数转换为以数组形式表示的十六、八、二进制数形式的字符串编程要求:1、编写函数void dtov(char s[],unsigned num, int type)。

函数功能是将输入一个无符号十进制数num 和数制值type。

函数返回以数组形式表示的十六、八、二进制数形式的字符串s[]。

2、编写main函数。

函数功能是声明字符数组p[10],键盘输入无符号十进制数m 和数制值type,并作为实参,调用函数dtov,输出相应的数制的字符串数组p到屏幕及文件myf2.out中。

最后将考生本人的准考证号输出到文件myf2.out中。

测试数据:3、选做题(闰年题):由2009秋C01改错题设想上机编程题程序功能:输入两个正确日期且年份在1900-9999范围内,计算并输出两个日期之间间隔的天数。

例如:2008-8-1和2009-8-1之间间隔的天数为365。

提示:能被4整除并且不能被100整除的年份是闰年,能被400整除的年份也是闰年,其他年份则是平年。

编程要求:1、选定义结构体:struct d { int y,m,d; };2、编写函数int days( struct d d1, struct d d2)。

函数声明二维数组int mon[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30, 31,31,30,31,30,31}};和函数返回值long td。

3、编写main函数。

函数功能是输入第一个日期、第二个日期后,调用函数days,输出相应第一个日期与第二个日期之间间隔的天数到屏幕及文件myf2.out中。

最后将考生本人的准考证号输出到文件myf2.out中。

实验十一 结构体(struct)与共用体(union)

实验十一 结构体(struct)与共用体(union)

实验十一结构体(struct)与共用体(union)实验目的理解并掌握使用不同数据类型的变量组合成一个数据的组合体-结构体与共用体的定义与引用;正确使用结构体数组、结构体与函数及指向结构体的指针。

要点提示1.结构体定义的一般格式为:struct 结构体类型名{数据类型成员名1;数据类型成员名2;……数据类型成员名n;};2.结构体变量的说明struct 结构体类型名结构体变量名;3.引用结构体成员结构体变量名.成员名共用体与结构体有相似的使用形式实验内容●结构体的定义与引用●结构体与函数●结构体数组●指向结构体的指针●共用体的定义与引用实验步骤读懂并输入程序,完成填空后输出结果1.建立学习成绩单结构,并建立一个同学王林(wanglin)的记录。

#include <stdio.h>main(){struct grade /* 定义结构体类型*/{int number;char name;int math;int english;};struct 【】wanglin; /* 说明结构体变量*/printf("Please input the number, name, math, english:\n");scanf("%d,%d,%d",&【】,& wanglin. name,【】& wanglin.english);printf("wanglin 'grade is: %d/%d/%d\n", wanglin. number, , wanglin.math, wanglin.english);}程序执行过程与结果:Please input the number, name, math, english::26,A, 85,90wanglin ' grade is:#include <stdio.h>main(){struct grade /* 定义结构体类型*/{int number;char name;int math;int english;};struct grade wanglin; /* 说明结构体变量*/printf("Please input the number, name, math, english:\n");scanf("%d,%c,%d,%d",&wanglin. number,& wanglin. name,& wanglin. math,& wanglin.english);printf("wanglin 'grade is: %d/%c/%d/%d\n", wanglin. number, , wanglin.math, wanglin.english);}Please input the number, name, math, english:26,A,85,90wanglin 'grade is: 26/A/85/90Press any key to continue请再建立一个刘芳(liufang)的成绩记录, 比较一下。

C语言程序设计 实验九 结构体和共用体 答案 西北民大 电气院

C语言程序设计 实验九 结构体和共用体 答案 西北民大 电气院

实验九结构体和共用体一,实验目的:1,掌握结构体类型变量的定义和使用.2,掌握结构体类型数组的概念和应用.3,掌握共用体的概念和使用.4,了解链表的概念,初步学会对链表进行操作.二,实验准备:1,复习结构体的概念和定义方法.2,复习共用体的概念和定义方法.3,源程序.三,实验步骤及内容:程序改错typedef union { lo ng x[2];int y[4];char z[8];} MYTYPE;typedef union them;main(){ printf("%d",sizeof(them));}修改后的程序:typedef union { lo ng x[2];int y[4];char z[8];} MYTYPE;MYTYPE them;main(){ printf("%d",sizeof(them));}程序填空以下程序建立了一个带有头结点的单向链表,结点中的数据可由键盘输入,当输入数据为-1时,表示输入结束(链表头结点的data与不放数据,表空的条件是ph―>next==NULL).#include _<stdio.h>_____struct list {int data ;struct list *next ;};_ struct list *creatlist(){ struct list *p, *q, *ph;int a ;ph=(struct list *)malloc(sizeof(struct list));p=q=ph;printf("input an integer number,enter -1 to end :\n");scanf("%d",&a);while (a!=-1){ p=(struct list *)malloc(sizeof(struct list));p->data=a;q->next=p;ph->next=p;scanf("%d",&a);}p->next ="\0";return(ph);}main(){struct list *head;head=creatlist();}3,有5个学生,每个学生的数据包括学号,姓名,三门课成绩,从键盘输入5个学生数据,要求打印出三门课总平均成绩,以及最高分的学生的数据(包括学号,姓名,三门课成绩,平均成绩).要求:用一个input函数输入5个学生数据;用一个average函数求总平均分;用max函数找出最高分学生数据;总平均分和最高分的学生的数据都在主函数中输出.(习题9.5)源程序:#include<stdio.h>#define N 5struct student{char num[6];char name[8];float score[3];float avr;}stu[N];int i,j,maxi;float sum,max,average;void main(){printf("请输入学生信息:\n");for(i=0;i<5;i++){printf("no.:");scanf("%s",stu[i].num);printf("name:");scanf("%s",stu[i].name);for(j=0;j<3;j++){printf("score %d:",j+1);scanf("%d",&stu[i].score[j]);}printf("\n");}average=0;max=0;for(i=0;i<5;i++){sum=0;for(j=0;j<3;j++)sum+=stu[i].score[j];stu[i].avr=sum/3;average+=stu[i].avr;if (sum>max){max=sum;maxi=i;}}average/=N;printf("no. name score1 score2 core3 average\n"); for(i=0;i<N;i++){printf("%5s%10s",stu[i].num,stu[i].name);for(j=0;j<3;j++)printf("%9.2f",stu[i].score[i]);printf("8.2%f\n",stu[i].avr);}printf("average=%5.2f\n",average);printf("highestscore :student %s,%s.\n",stu[maxi].num,stu[maxi].name);printf("hisscore :%6d,%6d,%6d,average: %5.2f\n",stu[maxi].score[0], stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr);getch();}4,输入和运行以下程序:unio n data{int i[2];float a;long b;char c[4];};main(){unio n data u;scanf("%d,%d",&u.i[0],&u.i[1]);printf("i[0]=%d,i[1]=%d\na=%f\nb=%ld\nc[0]=%c,c[1]=%c,c[2]=%c,c[3]=%c\n",u.i[0],u.i[1],u.a,u.b,u.c[0],u.c[1],u.c[2],u.c[3]);}输入两个整数10000,20000给u.i[0]和u.i[1].分析运行结果.运行结果:分析:定义了共用体变量data.u,将10000,20000分别赋给u.i[0],u.i[1],分别用%d,%c,%f,输出这两个数,得到的结果然后将scanf语句改成:scanf("%ld",&u.b);输入60000给b.分析运行结果.源程序:unio n data{int i[2];float a;long b;char c[4];};main(){unio n data u;scanf("%ld",&u.b);printf("i[0]=%d,i[1]=%d\na=%f\nb=%ld\nc[0]=%c,c[1]=%c,c[2]=% c,c[3]=%c\n",u.i[0],u.i[1],u.a,u.b,u.c[0],u.c[1],u.c[2],u.c[3]);getch();运行结果:分析:原来的程序:结构体中的数组i被赋值10000和20000,并且也没有超过32767的范围;但其他的变量没有初始值;改后的程序:只有b的值是被赋值的;四,实验报告:1,根据下列程序段回答问题:struct data{int i;char ch;float f;}a;uno in data{int i;char ch;float f;}b;试问结构体变量a和共用体变量b所占用的字节数各是多少解答:结构体变量a是七个字节,共用体变量b是七个字节2,源程序.3,错误原因及其修改记录.4,实验结果记录.5,实验体会.。

C语言结构体共用体选择题

C语言结构体共用体选择题

1、变量a所占的内存字节数是________。

(假设整型i n t为4字节)struct stu{ char name[20];long int n;int score[4];} a ;A) 28 B) 30C) 32 D) 46C2、下列程序的输出结果是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);}B3、有如下定义struct person{ char name[9]; int age;};struct person calss[4]={ "Johu",17,"Paul",19,"Mary",18,"Adam",16,};根据以上定义,能输出字母M的语句是________。

A) printf("%c\n",class[3].name);B) printf("%c\n",class[3].name[1]);C) printf("%c\n",class[2].name[1]);D) printf("%c\n",class[2].name[0]);D4、以下程序的输出是________。

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) 11C) 51 D) 60C6、以下程序的输出结果是________。

C语言结构体和共用体实验报告

C语言结构体和共用体实验报告

实验九参考程序实验9-1/*****************************************************************实验9.1**(1)为某商店的商品设计合适的结构体(PRODUCT)。

每一种商品包含编号(number)、* 名称(name)、价格(price)、折扣(discount)4项信息,根据表9-1,为这些信息选择合适的数据类型。

*(2)建立2个函数,以实现对商品的操作。

input函数实现商品的输入;* display函数显示商品信息。

要求这2个函数都以商品的结构体(PRODUCT)指针为参数。

*(3)在主函数中为商品键盘定义一个结构体变量(keyboard),利用input函数实现键盘信息的输入;* 定义一个结构体数组(elec_device[3]),利用input函数实现冰箱、空调、电视信息的输入;* 最后利用display函数显示4种商品的信息。

** 表9-1**编号名称价格折扣*1010 键盘89.50 0.85*1021 冰箱1024.00 0.95*1022 空调2058.50 0.90*1023 电视3001.88 0.95*****************************************************************/#include <stdio.h>typedef struct _PRODUCT{int iNumber;char strName[32];float fPrice;float fDiscount;}PRODUCT,*PPRODUCT;void input(PRODUCT *pProduct);void display(PPRODUCT pProduct);void main(){int i;PRODUCT kyeboard;PRODUCT elec_device[3];input(&kyeboard);for(i=0;i<3;i++){input(&elec_device[i]);}display(&kyeboard);for(i=0;i<3;i++){display(&elec_device[i]);}}/******************************************************************函数名称:input()**参数:PRODUCT *pProduct -PRODUCT结构体指针,用来存放输入数据***返回值:无*说明:*该函数用来完成PRODUCT结构体数据的输入。

结构体与共用体测试

结构体与共用体测试

结构体与共用体测试一、选择题1.已知学生记录描述为struct student{int no;char name[20];char sex;struct{int year;int month;int day;}birth;};struct student s;设变量s中的“生日”应该是“1984年11月11日”,下列对“生日”的正确赋值方式是( ) A. year=1984; B.birth.year=1984;month=11; birth.month=11;day=11; birth.day=11;C.s.year=1984;D.s.birth.year=1984;s.month=11; s.birth.month=11;s.day=11; s.birth.day=11;2.根据下面的定义,能打印出字母M的语句是( )struct person{char name[9];int age;};struct person class[10]={"John",17,"Paul",19,"Mary"18,"adam",16};A.printf("%c\n",class[3].name);B.printf("%c\n",class[3].name[1]);C.printf("%c\n",class[2].name[1]);D.printf("%c\n",class[2].name[0]);3. 若已有以下结构体定义和初始化,则值为2的表达式是( )。

struct cmplx{int x ;int y; } c[]={1,2,3,4};A. c[0].yB. yC. c.y[0]D. c.y[1]4.若有以下说明和语句,则下面表达式中的值为1002的是( ) struct student{int age; int num;};struct student stu[3]={{1001,20},{1002,19},{1003,21}}; struct student *p;p=stu;A.(p++)->numB.(++p)->ageC.(*p).numD.(*p).age5.设有以下语句:struct st{int n; struct st *next;};struct st a[3]={5,&a[1],7,&a[2],9,'\0'};*p;p=&a[0];则以下表达式的值为6的是( )A.p++->nB.p->n++C.(*p).n++D.++p->n6.设有以下说明和定义语句,则下面表达式中值为3的是( ) struct s{int il; struct s *12;};struct s a[3]={1,&a[1],2,&a[2],3,&a[0]},*ptrptr=&a[1];A.ptr->il++B.ptr++->ilC.*ptr->ilD.++ptr->il7.若有以下定义语句union data{int l; char c; float f;}a;int n;则以下语句正确的是( )A.a=5;B.a={2,'a',1,2};C.printf("%d\n",a.c);D.n=a;8.以下程序的运行结果是:( )#include<stdio.h>union pw{int i;char ch[2];}a;main(){a.ch[0]=13;a.ch[1]=0;printf("%d\n",a.i);}A.13B.14C.208D.2099. 设有如下程序段,则vu.a 的值为( )。

结构体共用体与枚举课后习题

结构体共用体与枚举课后习题

结构体共用体与枚举课后习题1.定义一结构体,成员项包括一个字符型、一个整型。

编程实现结构体变量成员项的输入、输出,并通过说明指针引用该变量。

#includevoidmain(){tructa{charb;intc;}d,某p;p=&d;printf(\输入:\\n\canf(\canf(\printf(\输出:\\n\printf(\printf(\}2.建立一结构体,其中包括学生的姓名、性别、年龄和一门课程的成绩。

建立的结构体数组通过输入存放全班(最多45人)学生信息,输出考分最高的同学的姓名、性别、年龄和课程的成绩。

#includevoidmain(){inti,b,n;floata;printf(\请输入班级的人数:\canf(\getchar();tructperon{charname[20];chare某[10];intyear;floatcore;}tu[45];for(i=0;igetchar();}for(b=0,a=tu[0].core,i=0;i3.已知一个班有45人,本学期有两门课程的成绩,求:说明:要求定义结构体,第一成员项为学生姓名,第二成员项为学号,另外两个成员项为两门课成绩,并要求分别用函数完成。

(本人注:由于人数太多,故改为4人)#include#defineN4tructperon{charname[20];longintnumber;floatcore 1;floatcore2;};voidhuru(tructperontu[N]){inti;for(i=0;ivoidzuigao(tructperontu[N]){intb,i;floata;for(b=0,a=tu[0].core1,i=0;ivoidpingjun(tructperontu[N]){inti;float1,2,p1,p2;for(1=0,2=0,i=0;ivoidpai某u(tructperontu[N]){inti,j;tructperont;for(i=0;ivoidmain(){tructperontu[N];huru(tu);printf(\zuigao(tu);pingj un(tu);pai某u(tu);}4.输入一字符串,用链表形式储存,每个结点的数据域存放一个字符,最后输出链表中的全部字符。

C语言学习 实验10 结构体和共用体

C语言学习 实验10  结构体和共用体

实验10 结构体和共用体1.实验目的掌握结构体类型变量的定义和使用;掌握结构体类型数组的概念和使用;掌握链表的概念,初步学会对链表进行操作;掌握共用体的概念与使用。

2.实验内容编程序,然后上机调试运行。

(1).有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数)。

(习题11.5)要求用input函数输入10个学生数据;用average函数求总平均分;用max函数找出最高分的学生数据;总平均分和最高分学生的数据都在主函数中输出。

(2).13个人围成一圈,从第1个人开始顺序报号1、2、3。

凡报到“3”者退出圈子,找出最后留在圈子中的人原来的序号。

(习题11.9)本题要求用链表实现。

(3).建立一个链表,每个结点包括:学号、姓名、性别、年龄。

输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。

(习题11.11)(4).输入和运行以下程序union data{int i[2];float a;long b;char c[4];}u;main ( ){scanf("%d,%d",&u.i[0],&u.i[1]);printf(i[0]=%d,i[1]=%da=%fb=%1dc[0]=%c,c[1]=%c,c[2]=%c,c[3]=%c,u.i[0],u.i[1],u.a,u.b,u.c[0],u.c[1],u.c[2],u.c[3]);}输入两个整数10000、20000给u.i[0]和u.i[l],分析运行结果。

然后将scanf语句改为:scanf("%ld",&u.b);输入60000给b,分析运行结果。

结构体文件测试

结构体文件测试

结构体⽂件测试⽂件读写的函数字符读写 fgetc()/fputc()字符串读写 fputs()/fgets()格式化读写 fscanf()/fprintf()⼆进制读写:fread()/fwrite()其他相关函数:检测⽂件结束的函数:feof()检测⽂件读写时出错函数:ferror()清楚末尾⽂件标志和出错标志函数:clearerr()⽂件定位函数:fseek(),rewind(),ftell();fseek函数:⽤法:int fseek( FILE *stream, long offset, int origin );函数设置⽂件指针stream的位置。

如果执⾏成功,stream将指向以fromwhere(偏移起始位置:⽂件头0(SEEK_SET),当前位置1(SEEK_CUR),⽂件尾2(SEEK_END))为基准,偏移offset(指针偏移量)个字节的位置。

如果执⾏失败(⽐如offset超过⽂件⾃⾝⼤⼩),则不改变stream指向的位置。

第⼀个参数stream为⽂件指针第⼆个参数offset为偏移量,正数表⽰正向偏移,负数表⽰负向偏移第三个参数origin设定从⽂件的哪⾥开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SETSEEK_SET:⽂件开头SEEK_CUR:当前位置SEEK_END:⽂件结尾其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.#include<stdio.h>#define N 5typedef struct student{long sno;char name[10];float score[3];}STU;void fun(char*filename,STU n){FILE*fp;fp=fopen(filename,"rb+");fseek(fp,-1L*sizeof(STU),SEEK_END);fwrite(&n,sizeof(STU),1,fp);fclose(fp);}int main()/*修改覆盖最后⼀个学⽣数据*/{STU t[N]={{10001,"MaChao",91,92,77},{10002,"CaoKai",75,60,88},{10003,"LiSi",85,70,78},{10004,"FangFang",90,82,87},{10005,"ZhangSan",95,80,88}};STU n={10006,"ZhaoSi",55,70,68},ss[N];int i,j;FILE*fp;fp=fopen("student.dat","wb");fwrite(t,sizeof(STU),N,fp);fclose(fp);fp=fopen("student.dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);printf("\nThe original data:\n\n");for(j=0;j<N;j++){printf("\nNo:%ldName:%-8sScores:",ss[j].sno,ss[j].name);for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);printf("\n");}fun("student.dat",n);printf("\nThe data after modifing:\n\n");fp=fopen("student.dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);for(j=0;j<N;j++){printf("\nNo:%ldName:%-8sScores:",ss[j].sno,ss[j].name);for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);printf("\n");}return 0;}rewind()函数将⽂件内部的指针重新指向⼀个流的开头函数作⽤等同于 (void)fseek(stream, 0L, SEEK_SET);⽤法: void rewind(FILE *stream);EOF:通常在⽂本的最后存在此字符表⽰资料结束;和feof的返回值不是⼀个概念ftell()函数⽤于得到⽂件位置(⽂件的第⼀个字节所在位置是零)指针当前位置相对于⽂件⾸的偏移字节数⽤法:long ftell(FILE *stream);结构体的输⼊和输出:结构体的定义:结构体的初始化:结构体内容的修改:/*输⼊n(3<n<=10)个职⼯的编号、姓名、基本⼯资、职务⼯资,输出其中“基本⼯资+职务⼯资”最少和最多的职⼯姓名。

测试504

测试504

100.4 结构体struct和共同体union(联合)的区别 结构体:将不同类型的数据组合成一个整体,是自定义类型 共同体:不同类型的几个变量共同占用一段内存
Байду номын сангаас
1)结构体中的每个成员都有自己独立的地址,它们是同时存在的; 共同体中的所有成员占用同一段内存,它们不能同时存在; sizeof(struct)是内存对齐后所有成员长度的总和,sizeof(union)是内存对齐后最长数据成员的长 度 100.5 引用与指针 引用&:就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 (1)引用的目的主要用于在函数参数传递中,解决大块数据或对象的传递效率和空间不如意的问题 。 (2)用引用传递函数的参数,能保证参数传递中不产生副本,提高传递的效率,且通过const的使用 ,保证了引用传递的安全性。 (3)引用与指针的区别是,是任何对于引用参数的处理都会通过一个间接寻址的方式操作到主调函 数中的相关变量。而对于指针传递的参数,如果改变被调函数中的指针地址,它将影响不到主调函数 的相关变量。 100.6 深拷贝和浅拷贝的区别 浅拷贝:拷贝后两者共用一块空间,在多个对象指向一块空间的时候,释放一个空间会导致其他对象 所使用的空间也被释放了,再次释放便会出现错误 深拷贝:先给需要拷贝的对象开辟空间,再将内容拷贝过去 拷贝构造函数/自定义深拷贝构造函数,两个类之间需要A = B拷贝 100.7 栈溢出的原因以及解决方法 1)函数调用层次过深,每调用一次,函数的参数、局部变量等信息就压一次栈 2)局部变量体积太大。 解决办法大致说来也有两种: 1> 增加栈内存的数目;增加栈内存方法如下,在vc6种依次选择Project->Setting->Link,在 Category中选择output,在Reserve中输入16进制的栈内存大小如:0x10000000 2> 使用堆内存;具体实现由很多种方法可以直接把数组定义改成指针,然后动态申请内存;也可以把 局部变量变成全局变量 100.8 调试程序:windows下vs的debug;linux下gdb 100.9 extern“C” 加上后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。 100.10 delete与delete[] 在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存 空间的时候用 delete[]
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

for(p=p->link;p!=first;p= __【1】_____) { m = p->data + p->link->data + p->link->link->data; if (___【2】____) m3 = m; } return(m3); } 2. 以下程序的功能是统计循环链表中结点的个数, 其中first为指向第一个结点 的指针。请在【 】内填入正确内容。 int count(struct node *first) { struct node *p; if(first == NULL) return 0; int c = 1; p = first->link; while(____【1】______) { ___【2】________; p = ___【3】______; } return (c ); } 三、 程序阅读题 (30分,每题15分) 1. 以下程序的运行结果是_________。 main() { union EXAMPLE {struct { int x; int y; }in; int a; int b; }e; e.a = 1; e.b = 2; e.in.x = e.a * e.b; e.in.y = e.a + e.b; printf(“%d %d %d”,e.a,e.in.x, e.in.y); } 3. 假设磁盘上有三个文本文件,其文件名和内容分别为: 文件名 内容 f1 aaa! f2 bbb! f3 ccc!
四、 编程题(30分) 已知head指向一个带头结点的单向链表, 链表中每个结点包含整型数据域(data) 和指针域(next),链表中各结点按数据域递增有序链接。(1)实现函数删除链表 中数据域相同的结点, 使之只保留一个。(2)实现函数将其倒序递减排列(不能使 用额外的存储空间)。 typedef int datatype; typedef struct ode * next; }linklist; …… linklist * purge(linklist *head); linklist * invert(linklist *head); //请实现这两个函数
结构体与共同体、文件
一、选择题 (20分,每题10分) 1. 若有以下说明和语句, 则在scanf函数调用语句中对结构体变量成员的不正确 引用方式是( )。 struct pupil { char name[20]; int age; int sex; }pup[5],*p; p=pup; A. scanf(“%s”, pup[0].name); B. sanf(“%d”, &pup[0].age); C. scanf(“%d”,&(p->sex)); D. scanf(“%d”, &p->age);
磁盘上还有以下C语言源程序,经编译、连接后生成可执行文件,文件名为 ex12.exe。 #include<stdio.h> main(int argc, char * argv[]) { FILE * fp; void sub( ); int i=1; while(--argc>0) if((fp=fopen(argv[i++],”r”)) == NULL) { printf(“count open file!\n”); exit(1); } else { sub(fp); fclose(fp);} } void sub (FILE * fp) { char c; while((c=getc(fp))!=’!’) putchat(c+1); } 若在DOS提示符下键入:ex12 f1 f2 f3 <回车>,则程序的运行结果是 _____________。
评分标准: 代码风格:0-5(缩进 2: 、注释 1、空行 1、见名知意 1) 周详:0-5 没输入提示(-2)有没有判断空链表的情况和 free 被删除的结点 功能正确:0-20 两个函数分别 10 分,
2.设有如下定义成的链表,则值为 6 的表达式是( )。 struct st { int n; struct st *next ; } a[3]={5,&a[1],7,&a[2],9,NULL}; struct st *p=&a; A. p++->n B. p->n++ C. (*p).n++ D. ++p->n
二、 填空题(20分,每空4分) 1. 以下min3函数的功能是: 计算循环链表first中每3个相邻结点数据域中的和, 并返回其中最小值。请在【 】内填入正确内容。
struct node { int data; struct node * link; }; int min3(struct node *first) { struct node *p = first; If(first == NULL) return 0; int m, m3 = p->data + p->link->data + p->link->link->data;
相关文档
最新文档