林小茶 C语言程序设计 8.4&8.5&8.6答案

【8.4】用结构体表示日期,编写程序计算北京奥运会倒计时的天数并输出(2008年8月8日北京奥运会开幕,输入的日期范围是2008年1月1日-2008年8月7日)。

#include<stdio.h>
struct Date{
	int year;
	int month;
	int day;
};
int main(){
	void compute(struct Date date,int a[]);
	int a[12]={31,29,31,30,31,30,31,8};
	struct Date date;
	scanf("%d%d%d",&date.year,&date.month,&date.day);
	compute(date,a);
	return 0;
}
void compute(struct Date date,int a[]){
	int day=0,i;
	if(date.month>8){
		printf("error");
		return;
	}
	day+=(a[date.month-1]-date.day+1);
	for(i=date.month;i<8;i++){
		day+=a[i];
	}
	printf("%d",day);
}

运行结果:

【8.5】编写程序,输入若干球员的姓名和球员的号码,按球号的号码从小到大排序,并输出结果。

#include<stdio.h>
struct HOOP2{
	char name[20];
	int number;
};
int main(){
	void sort(struct HOOP2 num[],int count);
	struct HOOP2 num[100];
	int i,count;
	printf("请输入有几个数:"); 
	scanf("%d",&count);
    for(i=0;i<100;i++){
		num[i].number=0;
	}
	for(i=0;i<count;i++){
		scanf("%d",&num[i].number);
		scanf("%s",num[i].name);
	}
	sort(num,count);
	for(i=0;num[i].number!=0;i++){
		printf("%d\t%s\n",num[i].number,num[i].name);
	}
	return 0;
}
void sort(struct HOOP2 num[],int count){
	int i,j;
	struct HOOP2 temp;
	for(i=0;num[i].number!=0;i++){
		for(j=0;j<count-i-1;j++){
			if(num[j].number>num[j+1].number){
				temp=num[j];
				num[j]=num[j+1];
				num[j+1]=temp;
			}
		}
	}
}

运行结果:

这里用的是冒泡排序,小编在写的时候很容易出差错,其实选择排序更清晰一点,大家可以根据自己的喜好选择排序的方法。

【8.6】用指针方法操作结构体数组。

#include<stdio.h>
struct HOOP2{
	char name[20];
	int number;
};
int main(){
	void sort(struct HOOP2 num[],int count);
	struct HOOP2 num[100];
	int i,count;
	printf("请输入有几个数:"); 
	scanf("%d",&count);
	for(i=0;i<100;i++){
		num[i].number=0;
	}
	for(i=0;i<count;i++){
		scanf("%d",&num[i].number);
		scanf("%s",num[i].name);
	}
	sort(num,count);
	for(i=0;num[i].number!=0;i++){
		printf("%d\t%s\n",num[i].number,num[i].name);
	}
	return 0;
}
void sort(struct HOOP2 *num,int count){
	int i,j;
	struct HOOP2 temp;
	for(i=0;(num+i)->number!=0;i++){
		for(j=0;j<count-i-1;j++){
			if((num+j)->number>(num+j+1)->number){
				temp=*(num+j);
				*(num+j)=*(num+j+1);
				*(num+j+1)=temp;
			}
		}
	}
}

其实逻辑是一样的,只不过表达形式不一样而已,而且大家最好在使用数组的时候初始化一下,这样会避免不必要的差错。

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值