C++ 實驗十四結構程式設計
阿新 • • 發佈:2020-12-21
1.輸入一個時間數值,再輸入秒數n,輸出該時間再過n秒後的時間值,時間的表示形式為:時:分:秒,超過24時從0重新開始計時。
輸入輸出示例(括號內為說明)如下:
輸入:
11:59:40
30(秒數n=30)
輸出:
time:12:0:10(11:59:40加上30秒的新時間)
#include<stdio.h> //構建結構體
struct time{
int hour;
char fu;
int minute;
char hao;
int second;
};
int main()
{
int n;
struct time s1; //定義結構體變數
printf("Input present time:");
scanf("%d%c%d%c%d",&s1.hour,&s1.fu,&s1.minute,&s1.hao,&s1.second);
printf("Input n:");
scanf("%d",&n);
if(s1.second+n>=60)
{s1.minute=s1.minute+(s1.second+n)/60; //n值有可能大於60,故整除60得到增加的分鐘數
//printf("%d",(s1.second+n)/60); 驗證增加分鐘數;可不寫
s1.second=s1.second+n-((s1.second+n)/60)*60;
}
else
s1.second=s1.second+n;
if(s1.minute>=60)
{s1.minute=s1.minute-60;
s1.hour=s1.hour+1;
}
else
s1.minute=s1.minute;
if(s1.hour>=24)
s1.hour=0;
printf("now time:%d%c%d%c%d" ,s1.hour,s1.fu,s1.minute,s1.hao,s1.second);
return 0;
}
實驗結果:(1)n<60
(2)n>60
2.輸入整數n(n<10),再輸入n個學生的基本資訊,包括序號。姓名和成績,要求計算並輸出他們的平均成績(保留2位小數)。
輸入輸出示例(括號內為說明)如下:
輸入:
3(n=3)
1 zhang 70
2 wang 80
3 qian 90
輸出:
average:80.00
#include<stdio.h>
struct student{
int num;
char name[20];
int sroce;
};
int main()
{
int i,n;
float sum=0;
struct student s1;
printf("Input n:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%s%d",&s1.num,&s1.name,&s1.sroce);
sum=sum+s1.sroce;
}
printf("average:%.2f",sum/n);
}
3.輸入4個整數a1,b1,a2,b2,分別表示兩個複數的實部和虛部,求兩個複數之積(a1+b1i)(a2+b2i),乘積的實部為a1×a2-b1×b2,虛部為a1×b2+a2×b1。
輸入輸出示例(括號內為說明)如下:
輸入:
3 4 5 6
輸出:
(3+4i)*(5+6i)= -9+38i
#include<stdio.h>
struct fushu{
int a1;
int b1;
int a2;
int b2;
};
int main()
{
struct fushu s1;
int a,b;
printf("兩個複數的實部和虛部:\n");
scanf("%d%d%d%d",&s1.a1,&s1.b1,&s1.a2,&s1.b2);
a=s1.a1*s1.a2-s1.b1*s1.b2;
b=s1.a1*s1.b2+s1.a2*s1.b1;
printf("(%d+%di)*(%d+%di)=%d+%di",s1.a1,s1.b1,s1.a2,s1.b2,a,b);
return 0;
}
4.通訊錄排序。建立一個通訊錄,輸入n(n<10)個朋友的資訊,包括姓名、生日、電話號碼,生日包括年、月、日。並按照年齡從大到小的順序依次輸出通訊錄。
思路:結構體巢狀。
#include<stdio.h>
struct brith{
int year;
int month;
int day;
};
struct friend{
char name[20];
struct brith age;
char num[15];
int sum;
};
int main()
{
struct friend b[10],item;
int i,j,k,n;
printf("Input n(n<10):");
scanf("%d",&n);
printf("姓名 出生年月 電話:\n");
for(i=0;i<n;i++)
{
scanf("%s%d%d%d%s",b[i].name,&b[i].age.year,&b[i].age.month,&b[i].age.day,b[i].num);
b[i].sum=b[i].age.year*365+b[i].age.month*30+b[i].age.day;
}
for(j=0;j<n;j++)
for(k=0;k<n-j;k++)
if(b[k].sum>b[k+1].sum)
{
item=b[k];
b[k]=b[k+1];
b[k+1]=item;
}
printf("年齡由大到小輸出:\n");
for(i=0;i<n;i++)
{
printf("%s",b[i].name);
printf("%5d%3d%3d",b[i].age.year,b[i].age.month,b[i].age.day);
printf("%12s\n",b[i].num);
}
return 0;
}
實驗結果: