天天看点

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

}

}