第9章 结构体数据类型与链表 习题9
1.写出程序的执行结果。 #include
void exam(struct comm. *q); void main( )
{struct comm x[2],y,z,*p; y.name=\; y.age=30}
y.sales=200.0;
x[0].name=\;x[0].Age=55;x[0].sales=350.0; x[1].Name=\;x[1].age=45;x[1].sales=300.0; p=x;p++;
printf(″\n%s%d%4.1f″,p一>name,p一>age,p一>sales) ; z=y;p=&z;
printf(″\n%s%d%4.1f'″,p一>name,p一>age,p一>sales) ; exam(&y) ; }
void exam(struct comm. *q )
{ printf(″\n%s″,q一>name); }
2.用结构体类型编写一个程序,输入一个学生的学号、姓名及3门课的成绩,计算并输出其平均成绩。
3.有30个学生,每个学生的数据包括学号、姓名和3门课的成绩,从键盘输人每个学生的数据,计算:
(1)每个学生的平均成绩。
(2)计算30个学生每门课程的平均分。
(3)按学生平均分从低到高次序打印出每个学生的各课成绩、3门课的平均成绩。 (4)输出每门课程的平均分。
要求用input函数输入,averagel函数求每个学生3门课的平均分,average2函数求30个学生每门课程的平均分,sort函数按学生平均分排序,output函数输出总成绩表。
4.职工数据包括职工号、姓名及工资等数据项。要求在input函数中赋以10位职工的值,在另一个函数output将工资最高者和最低者的姓名与工资找出(要求用指针方法)。
5.建立一个链表,每一个结点包括的成员为学生学号、平均成绩。用malloc函数开辟新结点。要求链表包括8个结点,从键盘输入结点中的有效数据。要求用函数create来建立
链表。
6.在第5题的基础上,实现下列操作: (1)新增加一个学生的数据。这个新结点要求按学号顺序插入。编写一个函数insert来插入结点。
(2)删除第五个结点,并从内存中释放。程序中要求验证删除的结点确已释放。 (3)查找特定学生的信息。
(4)将链表结点数据输出到屏幕上。
7.将一个链表反转排列,即将链表头当链表尾,链表尾当链表头。
第10章 共用体与枚举类型
1.什么是共用体数据类型?如何定义?请举例说明。 2.试比较共用体与结构体。
3.什么是枚举数据类型?有何特点?请举例说明。 4.求下列表达式的值。
(1) (5&&9)+(5&9)+(5 || 9)+(5 | 9) (2) ~2&3<<2 | 3 (3) 6^3 | 2<<1 (4) 015&0x21
5.什么是类型定义?请举例说明。 6.写出程序的执行结果。 (1)
# include ″stdio.h″ void main ( )
{enum team{qiaut,cubs=4,pick,dodger=qiaut一2};
printI(″%d,%d,%d,%d\n″,qiaut,cubs,pick,dodger) ; } (2)
void main( ) {union bt { int k;
char c[2] ; }a;
a.k= 一7;
printf(″%o,%o\\n″,a.c[0] , a.c[1]); } (3)
# include ″stdio.h″ void main( ) {union u_tag {int ival; float fval; char *pval; }uval ,*p;
uval.ival=10; uval.Fval=9.0; uval.pval=″C language″; printf(″\\n%s″,uval.pval) ; p=&uval;
printf(″%d″,p一>ival) ; (4)
bitpat( int x ) {int i;
for ( i=15;i>=0;i一一)
printf(″%d″,(x>>i)&0x0001); }
void main( ) { int a=65; bitpat(a); }
第11章 文件
1.C语言数据文件有几种存储形式?每种存储形式各有什么特点? 2.打开文件、关闭文件的含义各是什么?为什么要打开和关闭文忤?
3.C语言标准的文件I/O操作提供了几种文件存取方式?每种方式各有什么特点? 4.什么是文件型指针?通过文件指针访问文件有什么好处? 5.选择与填空。
(1)下面程序将从键盘输入的字符串存人文件中,字符串以#结束,文件名从键盘输入,请填空。
void main( ) { FILE *fp;
char ch,fname[10];
printf(″Input the name of file\n″一) ; gets(fname) ;
if((fp= ① )= =NULL) {printf(″Cannot open\n″) ;exit(0);} printf(″Enter data\n″); while((ch=getehar())!=’#’)
fpute( ② ,fp); fclose(fp); }
(2)以下程序的功能是:从键盘上输人一个字符串,把该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来,请填空。
#include
char str[100];int i=0;
if((fp=fopen(″text.txt″, ① ))= =NULL) {printf(″can’t open this file.\n″);exit(0);}
printf(″input a string:\n″); gest(str) ; while(str[ i])
{if (str[i]>=’a’&&str[i]<=’z’)
str[i]= ② ; fputc(str[i] ,fp); i++;} fclosc(fp);
fp=fopen(″test txt″, ③ ); fgets(str,100,fp); printf(″%s\n″,str); fclose(fp); }
6.从键盘输人一个字符串,将其中的大写字母全部转换成小写字母.然后输出到一个磁盘文件DATA—FILE中保存。输入的字符串以“#”作为结束标志。
7.在磁盘文件FILE1和FILE2中,各存放着一行字母,现要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件FILE3中去。
8.文件aFILE.t与bFILE.t各有若干个依次递增次序排列的实数。写一个程序,将两个文件上的数统一排序并写到新文件cFILE.t上。
9.从键盘输入若干行字符(每行长度不等),输人的字符串以“#”作为结束标志。输入后把它们存储到一个磁盘文件中。再从该文件中读入这些数据.将其中小写字母转换成大写字母后在显示屏上输出。
10.建立一个班级的学生情况表,表中数据项应包括学号、姓名、百分制记分的3门课程的成绩(离散数学,数据结构,程序设计语言),计算该班各门课程的平均成绩,并将原有数据和计算出的平均分数存放在文件studl中。
11.将上题stud1文件中的学生数据,按平均分进行排序处理,将已排序的学生数据存入一个新文件stud2中。
12.将上题已排学好的学生战绩文件stud2进行插入处理。插入一个学生的3门课成绩,程序先计算插入学生的平均成绩,然后将它按平均成绩高低顺序插入,插入后建立一个新文件stud3。
13.编写程序fcopy,将一个文本文件sf.txt的内容连接到另一个文本文件tf.txt的未尾,并要求使用命令行参数形式:fcopy tf.txt sf.txt调用该程序。
14.将5名职工的数据从键盘输入,然后送到磁盘文件worker.rec中保存。设职工数据包括职工号、姓名、工资。再从磁盘读入这些数据,并依次显示在屏幕上(要求用fread( )和fwrite( )函数)。