林小茶 C语言程序设计课后习题 8.7&8.8&8.9&8.10&8.11参考答案(可直接运行版)

【8.7】解决百鸡问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁,鸡母,鸡雏各几只。”
#include<stdio.h>
struct Chicken{
	int cock;
	int hen;
	int chick;
};
int main(){
	int count(struct Chicken *a);
	void print(struct Chicken *a,int index);
	struct Chicken a[1000];
	int index;
	index=count(a);
	print(a,index);
	return 0;
}
int count(struct Chicken *a){
	int i,j,k;
	int index=0;
	for(i=0;i<100;i++){
		for(j=0;j<100;j++){
			for(k=0;k<100;k+=3){
				if((i*5+j*3+k/3)==100&&(i+k+j==100)){
					a->cock=i;
					a->hen=j;
					a->chick=k;
					a++;
					index++;
				}
			}
		}
	}
	return index;
}
void print(struct Chicken *a,int index){
	int i=0;
	while(i<index){
		printf("%5d%5d%5d\n",a->cock,a->hen,a->chick);
		a++;
		i++;
	}
}

运行结果:

【8.8】建立一个枚举类型chook,有三个枚举值:cock,hen,chick(中文意思分别是鸡翁,鸡母,鸡雏),定义一个枚举变量,通过循环输出枚举值对应的是什么鸡。
#include<stdio.h>
enum chock{cock,hen,chick};
int main(){
	enum chock loop=cock;
	while(loop<3){
		switch(loop){
			case 0:printf("鸡翁");
			break;
			case 1:printf("鸡母"); 
			break;
			case 2:printf("鸡雏"); 
			break;
		}
		loop++;
	}
}

运行结果:

【8.9】编写一个链表,链表中存储了若干球员的数据,但是作为结束标记的9999不存在链表中。
【8.10】编写主函数,通过对insert_end()的多次调用,建立一个完整的链表。
#include<stdio.h>
#include<stdlib.h>
struct HOOP2{
	char name[20];
	int number;
	struct HOOP2 *next;
};
int main(){
	struct HOOP2 *create();
	struct HOOP2 * insert_end(struct HOOP2 *head,struct HOOP2 *p);
	void print(struct HOOP2 *head);
	struct HOOP2 *head,*p;
	head=create();
	print(head);
	printf("请输入插入的数据:");
	p=(struct HOOP2 *)malloc(sizeof(struct HOOP2)); 
	scanf("%s",p->name);
	scanf("%d",&p->number);
	while(p->number!=9999){
		head=insert_end(head,p);
		printf("请输入插入的数据:");
		p=(struct HOOP2 *)malloc(sizeof(struct HOOP2));
		scanf("%s",p->name);
		scanf("%d",&p->number);
	}
	print(head);
	return 0;
}
struct HOOP2 *create(){
	struct HOOP2 *head,*p,*q;
	int n=0;
	printf("请输入数据:");
	p=(struct HOOP2 *)malloc(sizeof(struct HOOP2));
	scanf("%s",p->name);
	scanf("%d",&p->number);
	while(p->number!=9999){
		n++;
		if(n==1){
			head=p;
		}else{
			q->next=p;
		}
		q=p;
		printf("请输入数据:");
		p=(struct HOOP2 *)malloc(sizeof(struct HOOP2));
		scanf("%s",p->name);
		scanf("%d",&p->number);
	}
	q->next=NULL;
	return head;
}
struct HOOP2 * insert_end(struct HOOP2 *head,struct HOOP2 *p){
	struct HOOP2 *q=head;
	while(q->next!=NULL){
		q=q->next;
	}
	q->next=p;
	p->next=NULL;
	return head;
}
void print(struct HOOP2 *head){
	struct HOOP2 *p=head;
	do{
		printf("%s\t%d\n",p->name,p->number);
		p=p->next;
	}while(p!=NULL);
}

这是用尾插法建立链表,还是比较简单的,大家不明白的话,画一个图会更加的清晰了然。

运行结果:

【8.11】定义一个函数insert_head()。

其实这是用头插法建立链表,简而言之~

#include<stdio.h>
#include<stdlib.h>
struct HOOP2{
	char name[20];
	int number;
	struct HOOP2 *next;
};
int main(){
	struct HOOP2 *create();
	struct HOOP2 * insert_head(struct HOOP2 *head,struct HOOP2 *p);
	void print(struct HOOP2 *head);
	struct HOOP2 *head,*p;
	head=create();
	print(head);
	printf("请输入插入的数据:");
	p=(struct HOOP2 *)malloc(sizeof(struct HOOP2)); 
	scanf("%s",p->name);
	scanf("%d",&p->number);
	while(p->number!=9999){
		head=insert_head(head,p);
		printf("请输入插入的数据:");
		p=(struct HOOP2 *)malloc(sizeof(struct HOOP2));
		scanf("%s",p->name);
		scanf("%d",&p->number);
	}
	print(head);
	return 0;
}
struct HOOP2 *create(){
	struct HOOP2 *head,*p,*q;
	int n=0;
	printf("请输入数据:");
	p=(struct HOOP2 *)malloc(sizeof(struct HOOP2));
	scanf("%s",p->name);
	scanf("%d",&p->number);
	while(p->number!=9999){
		n++;
		if(n==1){
			head=p;
		}else{
			q->next=p;
		}
		q=p;
		printf("请输入数据:");
		p=(struct HOOP2 *)malloc(sizeof(struct HOOP2));
		scanf("%s",p->name);
		scanf("%d",&p->number);
	}
	q->next=NULL;
	return head;
}
struct HOOP2 * insert_head(struct HOOP2 *head,struct HOOP2 *p){
	p->next=head;
	head=p;
	return head;
}
void print(struct HOOP2 *head){
	struct HOOP2 *p=head;
	do{
		printf("%s\t%d\n",p->name,p->number);
		p=p->next;
	}while(p!=NULL);
}

运行结果:

书中是以9999为插入结束的标志的,大家输入要注意~

  • 13
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值