【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;
}
}
}
}
其实逻辑是一样的,只不过表达形式不一样而已,而且大家最好在使用数组的时候初始化一下,这样会避免不必要的差错。
运行结果: