《C语言程序设计》作业4解答
一、选择题
1. 假定有“struct BOOK {char title[40]; float price;}; struct BOOK * book;”,则不正确的语句为 ( A )。
A. struct BOOK * x=malloc(book);
B. struct BOOK x={"C++ Programming",27.0};
C. struct BOOK * x=malloc(sizeof(struct BOOK));
D. struct BOOK **x=&book;
2. 假定有“struct BOOK {char title[40]; float price;} book;”,则正确的语句为 ( B )。
A. struct BOOK x=&book;
B. struct BOOK * x=&book;
C. struct BOOK x=calloc(BOOK);
D. struct BOOK *x=BOOK;
3. 表示文件结束符的符号常量为( C )。
A. eof B. Eof C. EOF D. feof
4. C语言中的系统函数fopen( )是( D )一个数据文件的函数。
A. 读取 B. 写入 C. 关闭 D. 打开
5. 从一个数据文件中读入以换行符结束的一行字符串的函数为( B )。
A. gets( ) B. fgets( ) C. getc( ) D. fgetc( )
6. 向一个二进制文件中写入信息的函数fwrite( )带有( D )个参数。
A. 1 B. 2 C. 3 D. 4
二、填空题
1. 假定一个结构类型的定义为“struct A {int a, b; struct A * c;};”,则该类型的大小为 12 字节。
2. 假定一个结构类型的定义为“struct B {int a[5]; char * b;};”,则该类型的大小为 24 字节。
3. 假定一个结构类型的定义为“struct D {int a; union {int b; double c}; struct D * d[2];};”,则该类型的大小为 20 字节。
4. 假定要动态分配一个类型为struct Worker的具有n 个元素的数组,并由r指向这个动态数组,则使用的语句表达式为struct Worker * r= calloc(n, sizeof(struct Worker)); 。
5. 假定要访问一个结构x中的由a指针成员所指向的对象,则表示方法为 *(x.a) 。c语言struct头文件
6. 假定要访问一个结构指针p所指对象中的b指针成员所指的对象,则表示方法为 *(p->b) 。
7. 与结构成员访问表达式(*fp).score等价的表达式是 fp->score 。
三、写出下列每个程序运行后的输出结果
1. #include <stdio.h>
struct Worker {
char name[15]; // 姓名
int age; // 年龄
float pay; // 工资
};
void main( )
{
struct Worker x={"wanghua", 52, 2350};
struct Worker y, * p;
y=x; p=&x;
printf("%s %d %6.2f\n",y.name, y.age, y.pay);
printf("%s %d %6.2f\n",p->name, p->age, p->pay);d资
}
程序的运行结果是: wanghua 52 2350.00
wanghua 52 2350.00
2. #include <stdio.h>
#include <string.h>
struct Worker {
char name[15]; // 姓名
int age; // 年龄
float pay; // 工资
};
void main( ) {
struct Worker x;
char *t="liouting";
int d=38; float f=493;
strcpy(x.name, t);
x.age=d; x.pay=f;
x.age++; x.pay*=2;
printf("%s %d %6.2f\n",x.name, x.age, x.pay);
}
程序的运行结果是: liouting 39 986.00
3. #include <stdio.h>
struct Worker {
char name[15]; // 姓名
int age; // 年龄
float pay; // 工资
};
int Less(struct Worker r1, struct Worker r2) {
if(r1.age<r2.age) return 1;
else return 0;
}
void main( ) {
struct Worker a[4]={{"abc",25,420},{"def",58,638},
{"ghi",49,560,{"jkl",36,375}};
struct Worker x=a[0];
int i;
for(i=1; i<4; i++)
if(Less(x,a[i])) x=a[i];
printf("%s %d %6.2f\n",x.name, x.age, x.pay);
}
程序的运行结果是: def 58 638.00
四、写出下列每个函数的功能
1. void QA(struct Worker a[ ], int n) {
int i;
for(i=1; i<n; i++)
scanf("%s %d %f", &a[i].name, &a[i].age, &a[i].pay);
}
假定结构类型struct Worker的定义如下:
struct Worker {
char name[15]; // 姓名
int age; // 年龄
float pay; // 工资
};
函数的功能是: 将键盘输入的n-1个职工记录,包括职工姓名、年龄和工资保存在结构数组a中。
2. struct StrNode * QB(int n) {
struct StrNode * f, * p;
if(n==0) return NULL;
f=malloc(sizeof(struct StrNode));
scanf("%s",f->name);
p=f;
while(--n) {
p=p->next=malloc(sizeof(struct StrNode));
scanf("%s", p->name);
}
p->name=NULL;
return f;
}
假定结构类型struct StrNode的定义如下:
struct StrNode {
char name[15]; // 字符串域
struct StrNode * Next; // 指针域
};
函数功能是: 将键盘输入的n个长度小于15的字符存储在一个链表中,先输入的字符串存储在链表的表头,最后输入的字符串存储在链表的表尾,函数返回链表的表头指针。
3. struct IntNode * FindMax(struct IntNdoe * f) {
struct IntNode * p=f;
if(!f) return NULL;
f=f->next;
while(f) {
if(f->data<p->data) p=f;
f=f->next;
}
return p;
}
假定struct IntNode的类型定义为:
struct IntNode {
int data; // 结点值域
struct IntNode * next; // 结点指针域
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论