10.1請定義一個名為time_struct的結構體,它包含三個整數成員:hour,minute,second.開發一個程式,用于給每個成員指派,并按如下格式顯示時間:
16:40:51
程式如下:
voidmain()
{structtime_struct
{inthour,minute,second;
}time;
printf("input the time:\n");
scanf("%d:%d:%d",&time.hour,&time.minute,&time.second);
}
運作結果:
10.2修改以上程式,使用一個函數來給成員輸入值,另一個函數顯示時間。
程式如下:
voidmain()
{
structtime_struct
{inthour,minute,second;
}time;
printf("input the time:\n");
scanf("%d:%d:%d",&time.hour,&time.minute,&time.second);
printf("%d:%d:%d",time.hour,time.minute,time.second);
}
運作結果:
10.4定義一個名為date的結構體,它包含3個整數成員:day,month,year.開發一個互動式子產品化程式,完成以下認為:
l用一個函數把日期讀入結構體成員。
l用另一個函數來驗證所輸入日期的合法性。
l用第三個函數按如下格式顯示日期:
April 29,2002
輸入資料應為3個整數,如29,4和2002,分别對應日,月和年。例如,以下是不合法的資料:
31,4,2002——4月隻有30天
29,2,2002——2002年不是閏年
程式如下:
structdate
{
intday;
intmonth;
intyear;
};
voidinput_date(structdate*da,intd,intm,inty)
{
da->day=d;
da->month=m;
da->year=y;
}
intis_right_date(intd,intm,inty)
{
if(d<1||m<1||y<1)
{
printf("Date should be positive integer\n");
return0;
}
if(m>12)
{
printf("A year is only 12 months\n");
return0;
}
if(!(y%4==0&&y%100!=0||y%400==0))
{
if((m==2)&&d>28)
{
printf("PingNian February only 28 days\n");
return0;
}
}
if(y%4==0&&y%100!=0||y%400==0)
{
if((m==2)&&d>29)
{
printf("A leap year only 29 days in February\n");
return0;
}
}
if((m==1||m==3||m==5||m==7||m==8||m==10||m==12)&&(d>31))
{
printf("dayue can't more than 31 days\n");
return0;
}
if((m==4||m==6||m==9||m==11)&&(d>30))
{
printf("XiaoYue can't more than 30 days\n");
return0;
}
}
voidprint_date(structdate*da)
{
char*str[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};
printf("%s,%d,%d\n",str[da->month-1],da->day,da->year);
}
intmain()
{
structdate da;
intd,m,y,tmp;
printf("input day month year:\n");
scanf("%d %d %d",&d,&m,&y);
input_date(&da,d,m,y);
tmp=is_right_date(d,m,y);
if(tmp==0)
return0;
print_date(&da);
}
運作結果:
10.8使用程式設計練習10.4中定義的date結構體來儲存兩個日期。開發一個函數,它以這兩個日期為輸入,并如下進行比較:
如果date1早于date2,傳回1.
如果date1更晚,則傳回0。
程式如下:
structdate
{
intday;
intmonth;
intyear;
};
voidmain()
{
inty1,y2,m1,m2,d1,d2,date1,date2;
structdate riqi[2];
printf("input date1 year month day :");
scanf("%d %d %d",&riqi[0].year,&riqi[0].month,&riqi[0].day);
printf("input date2 year month day :");
scanf("%d %d %d",&riqi[1].year,&riqi[1].month,&riqi[1].day);
y1=riqi[0].year;y2=riqi[1].year;
m1=riqi[0].month;m2=riqi[1].month;
d1=riqi[0].day;d2=riqi[1].day;
date1=y1*10000+m1*100+d1;
date2=y2*10000+m2*100+d2;
if(date1>date2)
printf("0");
else
printf("1");
}
運作結果:
10.9請定義一個表示向量(即一個整數系列)的結構體,并編寫一個子產品化的程式來完成以下任務:
l建立一個向量。
l修改給定元素的值。
l乘以一個比例值。
l按如下形式顯示向量。
(10,20,30,...)
程式如下:
#include
structvect
{
intv1;
intv2;
intv3;
};
voidb(structvect*p,intm)
{
p->v1=10;
p->v2=m;
p->v3=30;
}
voida(structvect*v,intn)
{
v->v1=(v->v1)*n;
v->v2=(v->v2)*n;
v->v3=(v->v3)*n;
}
main()
{
intm,n;
structvect myvector;
printf("input three numbers:\n");
scanf("%d %d %d",&myvector.v1,&myvector.v2,&myvector.v3);
printf("(%d,%d,%d,...)\n",myvector.v1,myvector.v2,myvector.v3);
printf("input n:");
scanf("%d",&n);
a(&myvector,n);
printf("(%d,%d,%d,...)\n",myvector.v1,myvector.v2,myvector.v3);
printf("input m:");
scanf("%d",&m);
b(&myvector,m);
printf("(%d,%d,%d,...)\n",myvector.v1,myvector.v2,myvector.v3);
}
運作結果:
10.10給程式設計練習10.9的程式加一個函數,接收兩個向量為輸入參數,并傳回這兩個向量的和。
程式如下:
#include
structvect
{
intv1;
intv2;
intv3;
};
voidb(structvect*p,intm)
{
p->v1=10;
p->v2=m;
p->v3=30;
}
voida(structvect*v,intn)
{
v->v1=(v->v1)*n;
v->v2=(v->v2)*n;
v->v3=(v->v3)*n;
}
main()
{
intm,n,c[3];
structvect myvector,other;
printf("input three numbers:\n");
scanf("%d %d %d",&myvector.v1,&myvector.v2,&myvector.v3);
printf("(%d,%d,%d,...)\n",myvector.v1,myvector.v2,myvector.v3);
printf("input three numbers:\n");
scanf("%d %d %d",&other.v1,&other.v2,&other.v3);
printf("(%d,%d,%d,...)\n",other.v1,other.v2,other.v3);
c[0]=myvector.v1+other.v1;
c[1]=myvector.v2+other.v2;
c[2]=myvector.v3+other.v3;
printf("(%d,%d,%d,...)\n",c[0],c[1],c[2]);
printf("input n:");
scanf("%d",&n);
a(&myvector,n);
printf("(%d,%d,%d,...)\n",c[0],c[1],c[2]);
printf("input m:");
scanf("%d",&m);
b(&myvector,m);
printf("(%d,%d,%d,...)\n",myvector.v1,myvector.v2,myvector.v3);
}
運作結果:
10.14定義一個名為cricket的結構體,用于描述以下資訊:
l球員名
l球隊名
l擊球率
利用cricket聲明一個含有5個元素的數組player,編寫一個程式來讀取所有5個球員的資訊,然後按球隊名排列,顯示其球員和擊球率。
程式如下:
structcricket
{
charmember_name[10];
charteam_name[10];
floathit_rate;
};
main()
{
inti;
structcricket player[5];
printf("input member_name team_name hit_rate\n");
for(i=0;i<5;i++)
{
scanf("%s %s %f",player[i].member_name,player[i].team_name,&player[i].hit_rate);
}
printf("team_name member_name hit_rate\n");
for(i=0;i<5;i++)
{
printf("%s %s %f\n",player[i].team_name,player[i].member_name,player[i].hit_rate);
}
}