C语言习题及答案(第九章)
9-3编写程序,使用结构体类型,输出一年十二个月的英文名称及相应天数。
解:#include "stdio.h"
struct date
{
char month[10] ;
int daynumber ;
}
main()
{
int i ;
struct date a[12]={{"January",31},{"February",29},{"March",31},{"Aprial",30},{"May",31},{"June",30},{"july",31},{"August",31},{"September",30},{"October",31},{"November",30},{"December",31}} ;
for(i=0;i<12;i++);
printf("%d 月:%s %d\n",i+1,a[i].month,a[i].daynumber) ;
}
思考:如何对结构体变量进行初始化?对结构体变量的引用为何要体现为分量(或成员)的引用?
9-4 编写程序求空间任一点到原点的距离,点用结构体描述。并请考虑求空间中任意两点的距离的程序。
解:#include "stdio.h"
#include "math.h"
struct point
{
float x ;
float y ;
float z ;
} main()
{
double d1,d2,d ;
struct point p1,p2 ;
printf("请输入第一个点的坐标:");
scanf("%f,%f,%f",&p1.x,&p1.y,&p1.z);
printf("请输入第二个点的坐标:");
scanf("%f,%f,%f",&p2.x,&p2.y,&p2.z);
d1=sqrt(p1.x*p1.x+p1.y*p1.y+p1.z*p1.z);
d2=sqrt(p2.x*p2.x+p2.y*p2.y+p2.z*p2.z);
d=sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y)+(p2.z-p1.z)*(p2.z-p1.z));
printf("第一个点到原点的距离:%f\n",d1);
printf("第二个点到原点的距离:%f\n",d2);
printf("两点间的距离:%f\n",d);
}
9-5 编写输入、输出10个朋友数据的通讯录程序,每个朋友数据包括姓名、地址、邮编、电话、传呼、手机等数据。
解:#include "stdio.h"
struct AddressBook
{
char name[10] ;
char address[30] ;
char mailnumber[7] ;
char telphone[12] ;
char byphone[16] ;
char movephone[1] ;
}
main()
{
int i ;
struct AddressBook fd[10] ;
for(i=0;i<10;i++)
{
printf("请输入第%d个朋友的信息:\n",i+1);
printf("姓名:");
scanf("%s",&fd[i].name) ;
printf("地址:");
scanf("%s",&fd[i].address) ;
printf("邮编:");
scanf("%s",&fd[i].mailnumber) ;
printf("电话:");
scanf("%s",&fd[i].telphone) ;
printf("传呼:");
scanf("%s",&fd[i].byphone) ;
printf("手机:");
scanf("%s",&fd[i].movephone) ;
}
for(i=0;i<10;i++)
{
printf("\n第%d个朋友的信息:\姓名:%s\n 地址:%s\n 邮编:%s\n 电话:%s\n 传呼:%s\n 手机:%s\n",i+1,fd[i].name,fd[i].address,fd[i].mailnumber,fd[i].telphone,fd[i].byphone,fd[i].movephone) ;
}
}
思考:结构体类型变量的分量可以是各种基本数据类型(整形、实型、字符型等)或数组类型,是否可以是另一结构体类型?
9-6 用一个数组存放图书信息,每本图书包含书名、作者、出版年月、出版社、借出数目、库存数目等信息。编写程序输入若干本图