精选文库
} time;
int main(void) {
scanf(\time.second++;
if( _time.second_ == 60){ _time.minute++ _; time.second = 0;
if(time.minute == 60){ time.hour++; time.minute = 0;
if( _time.hour == 24_ ) time.hour = 0; } }
printf (\
return 0; }
4.写出下面程序的运行结果 1 2 A B 。 struct s1{ char c1, c2; int n; };
struct s2{ int n;
struct s1 m;
} m = {1, {‘A’, ’B’, 2} }; int main(void) {
printf(“%d\\t%d\\t%c\\t%c\\n”, m.n, m.m.n, m.m.c1, m.m.c2); return 0; }
5.写出下面程序的运行结果 23, wang, 98.5, wang 。 struct abc{
int a; float b; char *c; }; int main(void) {
struct abc x = {23,98.5,\struct abc *px = &x;
printf(\
—
6
精选文库
return 0;
}
三、程序设计题
1. 时间换算:用结构类型表示时间内容(时间以时、分、秒表示),输入一个时间数值,再输入一个秒数n(n<60),以h:m:s的格式输出该时间再过n秒后的时间值(超过24点就从0开始计时)。试编写相应程序。 解答:
#include
int main(void) {
int n;
struct time tim;
printf(\
scanf(\ printf(\ scanf(\
tim.hour=(tim.hour*60*60+tim.minute*60+tim.second+n)/3600$; tim.minute=(tim.minute*60+tim.second+n)/60`; tim.second=(n+tim.second)`;
printf(\
return 0; }
2. 计算两个复数之积:编写程序,利用结构变量求解两个复数之积: (3+4i) × (5+6i)。
提示:求解(a1+a2i)×(b1+b2i),乘积的实部为:a1×b1 - a2×b2,虚部为:a1×b2 + a2×b1。 解答:
#include
struct complex cmult(struct complex a,struct complex b); int main(void) {
struct complex a={3,4},b={5,6},c;
c=cmult(a,b);
—
7
精选文库
printf(\l,c.im);
return 0; }
struct complex cmult(struct complex a,struct complex b) {
struct complex c;
c.real=a.real*b.real-a.im*b.im; c.im=a.real*b.im+a.im*b.real;
return c; }
3. 平面向量加法:输入两个二维平面向量V1=(x1,y1)和V2=(x2,y2)的分量,计算并输出两个向量的和向量。试编写相应程序。 解答:
#include
struct vector vec(struct vector v1,struct vector v2); int main(void) {
struct vector v1,v2,v;
printf(\
scanf(\ printf(\
scanf(\ v=vec(v1,v2);
printf(\
return 0; }
struct vector vec(struct vector v1,struct vector v2) {
struct vector v;
v.x=v1.x+v2.x; v.y=v1.y+v2.y;
return v;
—
8
精选文库
}
4. 查找书籍:从键盘输入 10 本书的名称和定价并存入结构数组中,从中查找定价最高和最低的书的名称和定价,并输出。试编写相应程序。 解答:
#include
char name[10]; float price; };
int main(void) {
int i,maxl,minl,n;
struct book test[NUMBER];
for(i=0;i scanf(\ maxl=minl=0; for(i=1;i if(test[maxl].price printf(\ printf(\ return 0; } 5.通讯录排序:建立一个通讯录,通讯录的结构包括:姓名、生日、电话号码;其中生日又包括三项:年、月、日。编写程序,定一个嵌套的结构类型,输入 n(n≤10)个联系人信息,再按照他们的年龄从大到小依次输出其信息。试编写相应程序。 解答: #include struct friends_list{ char name[10]; struct date birthday; char phone[15]; }; void sort(struct friends_list s[],int n); int main(void) — 9 精选文库 { int i,n; struct friends_list friends[10]; printf(\ scanf(\ printf(\ for(i=0;i scanf(\ &friends[i].birthday.month,&friends[i].birthday.day,&friends[i].phone); sort(friends,n); for(i=0;i printf(\ ear,friends[i].birthday.month,friends[i].birthday.day,friends[i].phone); return 0; } void sort(struct friends_list s[],int n) { int i,j,index; struct friends_list temp; for(i=0;i for(j=i+1;j if(s[index].birthday.year>s[j].birthday.year) index=j; else if((s[index].birthday.year==s[j].birthday.year) &&(s[index].birthday.month>s[j].birthday.month)) index=j; else if((s[index].birthday.year==s[j].birthday.year) &&(s[index].birthday.month==s[j].birthday.month)&&(s[index].birthday.day>s[j].birthday.day)){ index=j; temp=s[i]; s[i]=s[index]; s[index]=temp; } } } 6.按等级统计学生成绩:输入 10 个学生的学号、姓名和成绩,输出学生的成绩等级和不及格人数。每个学生的记录包括学号、姓名、成绩和等级,要求定义 — 10