习题解答(第七章)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(i=0; i<M; i++)
printf("%-7.1f", s.score[i]);
printf("%-7.1f%-7.2f\n", s.sum, s.aver);
}
void main()
{
struct stud student[N];
char numstr[20];
int i, j;
for(i=0; i<N; i++)
提示:
①在定义结构体类型时应预留出准备计算结果的成员项;
②用结构体变量为函数参数,将各数据传给count函数。
(2)改为用指针方法处理,即用指针变量逐次指向数组中各元素,然后向指针变量所指向的元素输入数据,并将指针变量作为函数参数将地址值传给count函数,在函数count中作统计,然后将数据返回main函数,在main函数输出。
{
printf("第%d个职工: \n职工号: ", i);
a[i].num=atol(gets(numstr));
printf("职工名: ");
gets(a[i].name);
printf("性别: ");
a[i].sex=getchar();
getchar();
printf("年龄: ");
a[i].age=atoi(gets(numstr));
{
unsigned long num;
char name[20];
float score;
};
void main()
{
struct stud s[N], *p, *q;
char numstr[20];
for(p=q=s; p<s+N; p++)
{
printf("请输入第%d个学生的记录:\n", p-s);
printf("总分平均分\n");
for(p=student; p<student+N; p++)
{
count(p);
printf("%-8ld%-12s%-5c%-5d", p->num, p->name, p->sex, p->age);
for(i=0; i<M; i++)
printf("%-7.1f", p->score[i]);
count(student[i]);
}
(2)
#include <stdio.h>
#include <stdlib.h>
#define N 4 /*学生数*/
#define M 3 /*课程数*/
struct stud
{
unsignedlong num;
char name[20];
char sex;
int age;
struct employee *head, *p, *q;
if(n==0) return(NULL); /*无结点*/
for(i=0; i<n; i++)
{
p=(struct employee *)malloc(sizeof(struct employee)); /*建立第i个结点*/
printf("请输入第%d个职工的号码和工资: ", i);
for(j=0; j<M; j++)
{
gets(numstr); student[i].score[j]=atof(numstr);
}
}
printf("学号姓名性别年龄");
for(i=0; i<M; i++)
printf("科目%-3d", i);
printf("总分平均分\n");
for(i=0; i<N; i++)
float score[M];
float sum;
float aver;
};
void count(struct stud *s)
{
int i;
for(i=0, s->sum=0; i<M; i++)
s->sum+=s->score[i];
s->aver=s->sum/M;
}
void main()
{
struct stud student[N], *p;
gets(numstr); p->age=atoi(numstr);
for(i=0; i<M; i++)
{
gets(numstr); p->score[i]=atof(numstr);
}
}
printf("学号姓名性别年龄");
for(i=0; i<M; i++)
printf("科目%-3d", i);
(2)在(1)的基础上,新增加一个职工的数据。这个新节点不放在最后,而是按职工号顺序插入,新职工号为0606。写一个函数insert来插入新节点。
(3)在(1)、(2)的基础上,写一个函数delete,用来删除一个节点(按指定的职工号删除)。要求删除职工号为0606的节点;
[解答]
(1)
#include <stdio.h>
a.ls=atoi(gets(numstr));
printf("工资: ");
a.wage=atof(gets(numstr));
printf("地址: ");
gets(a.addr);
printf("职工号: %d\n职工名: %s\n性别: %c\n年龄: %d\n工龄: %d\n工资: %f\n地址: %s\n",
a.num, a.name, a.sex, a.age, a.ls, a.wage, a.addr);
}
(3)
struct employee
{
unsigned long num;
char name[20];
char sex;
unsigned int age;
unsigned int ls;
float wage;
char addr[50];
};
#include <stdio.h>
#include <stdlib.h>
#define N 3
void main()
{
struct employee a[N];
char numstr[10];
int i;
printf("请顺序输入每个职工的数据\n");
for(i=0; i<N; i++)
printf("工龄: ");
a[i].ls=atoi(gets(numstr));
printf("工资: ");
a[i].wage=atof(gets(numstr));
printf("地址: ");
gets(a[i].addr);
}
printf("职工号职工名性别年龄工龄工资地址\n");
for(i=0; i<N; i++)
unsigned int ls;
float wage;
char addr[50];
};
#include <stdio.h>
#include <stdlib.h>
void main()
{
struct employee a;
char numstr[10];
printf("请输入职工数据: \n");
printf("职工号: ");
char numstr[20];
int i;
for(p=student; p<student+N; p++)
{
printf("请输入第%d个学生的记录:\n", p-student);
gets(numstr); p->num=atol(numstr);
gets(p->name);
p->sex=getchar(); getchar();
a.num=atol(gets(numstr));
printf("职工名: ");
gets(a.name);
printf("性别: ");
a.sex=getchar();
getchar();
printf("年龄: ");
a.age=atoi(gets(numstr));
printf("工龄: ");
(2)对上述定义的变量,从键盘输入所需的具体数据,然后用printf函数显示出来。
(3)定义一个职工数据的结构体数组,从键盘输入每个结构体元素所需的数据,然后逐个输出这些元素的数据(为简化起见,可设数组只有三个元素)。
[解答]
(1)
struct employee
{
unsigned long num;
printf("%-7.1f%-7.2f\n", p->sum, p->aver);
}
}
7.6有4名学生,每个学生包括学号、姓名、成绩,要求用指针方法找出成绩最高者的姓名和成绩。
[解答]
#include <stdio.h>
#include <stdlib.h>
#define N 4 /*学生数*/
struct stud
C 语言程序设计习题解答(第七章)
7.1题目略.
[解答] (1) A (2) F (3) B (4) B (5) C
7.2题目略.
(1) 6
(2) 40
(3) DDBBCC
(4) 0 4 5 15
(5) 6
(6) 16
7.3职工数据包括:职工号、职工名、性别、年龄、工龄、工资、地址。
(1)为其定义一个结构体变量。
[解答]
(1)
#include<stdio.h>
#include<stdlib.h>
#define N 4 /*学生数*/
#define M 3 /*课程数*/
struct stud
{
unsignedlong num;
char name[20];
char sex;
int age;
float score[M];
{
printf("请输入第%d个学生的记录:\n", i);
gets(numstr); student[i].num=atol(numstr);
gets(student[i].name);
student[i].sex=getchar(); getchar();
gets(numstr); student[i].age=atoi(numstr);
float sum;
float aver;
};
void count(struct stud s)
{
int i;
for(i=0, s.sum=0; i<M; i++)
s.sum+=s.score[i];
s.aver=s.sum/M;
printf("%-8ld%-12s%-5c%-5d", s.num, s.name, s.sex, s.age);
}
7.7建立一个链表,每个节点包含的成员为:职工号、工资。
(1)用malloc函数开辟新节点。要求链表包含5个节点,从键盘输入节点中的有效数据。然后把这些节点的数据打印出来。要求用函数creat来建立链表,用list函数来输出数据。这5个职工的号码为0601,0603,0605,0607,0609。
(2)性别和出生日期用位段表示。
[解答]
struct date
{
unsigned int day:5;
unsigned int month:4;
unsigned int year:15;
};
struct person
{
unsigned long num;
char name[20];
unsigned int sex:1;
gets(numstr); p->num=atol(numstr);
gets(p->name);
gets(numstr); p->score=atof(numstr);
if(q->score<p->score) q=p;
}
printf("成绩最高者的姓名和成绩为: %s %.1f.\n", q->name, q->score);
printf("%-8d%-10s%-5c%-5d%-5d%-8.2f%s\n",
a[i].num, a[i].name, a[i].sex, a[i].age, a[i].ls, a[i].wage, a[i].addr);
}
7.4设计一个用于人事管理的结构体:
(1)每个人的数据包括:职工号、姓名、性别、出生日期;
#include <stdlib.h>
#define N 5 /*职工数*/
struct employee
{
long num;
float wage;
struct employee *next;
};
struct employee *creat(int n) /*建立一个有n个结点的链表*/
{
int i;
Βιβλιοθήκη Baidustruct date birthday;
};
7.5有n个学生,每个学生的数据包括学号(num),姓名(name[20]),性别(sex),年龄(age),三门课成绩(score[3])。
(1)要求在main函数中输入这几个学生的数据,然后调用一个函数count,在该函数中计算出每个学生的总分和平均分,然后打印出所有各项数据(包括原有的和新求出的)。
char name[20];
char sex;
unsigned int age;
unsigned int ls;
float wage;
char addr[50];
};
(2)
struct employee
{
unsigned long num;
char name[20];
char sex;
unsigned int age;
相关文档
最新文档