【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为插入结束的标志的,大家输入要注意~