天天看點

c語言用結構體編寫向量的模,C語言結構體

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);

}

運作結果:

c語言用結構體編寫向量的模,C語言結構體

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);

}

運作結果:

c語言用結構體編寫向量的模,C語言結構體

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);

}

運作結果:

c語言用結構體編寫向量的模,C語言結構體

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");

}

運作結果:

c語言用結構體編寫向量的模,C語言結構體

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);

}

運作結果:

c語言用結構體編寫向量的模,C語言結構體

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);

}

運作結果:

c語言用結構體編寫向量的模,C語言結構體

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);

}

}