7-1 求一年中的天数
实验八 结构体与其他构造类型
一、实验目的
二、实验内容
1、编写程序,在主函数中输入年月日,利用days函数计算该天是本年中的第几天。定义一个结构体变量(包括年、月、日)。
提示:声明结构体类型struct y_m_d,成员为year、month、day。根据题目,需要考虑闰年的情况,
判断闰年的条件为year%4==0 && year%100!=0 || year%400==0。
在这里描述函数接口。例如:
int days(int year,int month,int day);
在这里给出一组输入。例如:
2020 3 1
在这里给出相应的输出。例如:
61
代码:
#include
struct Date
{
int year;
int month;
int day;
}date;
int days(int year, int month, int day)
{
int sum = 0, i;
int a[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
for (i = 0; i < month - 1; i++)
{
sum += a[i];
}
sum += day;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
if (month > 2)
{
sum = sum + 1;
}
else
{
sum = sum + 0;
}
}
else
{
sum = sum + 0;
}
return sum;
}
int main()
{
int sum;
scanf("%d%d%d", &date.year, &date.month, &date.day);
sum = days(date.year, date.month, date.day);
printf("%d\n",sum);
return 0;
}
7-2 成绩排序
实验八 结构体与其他构造类型
一、实验目的
二、实验内容
2、 有n名学生的信息(包括学号、姓名和成绩),编写函数实现按成绩由高到低的顺序输出学生的信息。
在这里描述函数接口。例如:
void sort(struct Student stud[],int n)//选择法
输入一个正整数n(n<50),下面n行输入n个学生的信息,包括:学号、姓名、成绩。
输出从高到低排序后的学生信息,包括:学号、姓名、成绩。
在这里给出一组输入。例如:
3
101 Zhang 78
102 Wang 91
103 Li 85
在这里给出相应的输出。例如:
102 Wang 91
103 Li 85
101 Zhang 78
代码:
#include
struct Stu
{
int num;
char name[50];
int score;
};
int main()
{
struct Stu s[50], * a[50];
struct Stu* t, ** p;
int i,j;
int n;
scanf("%d", &n);
for (i = 0; i < n; ++i)
scanf("%d%s%d", &s[i].num, s[i].name, &s[i].score);
for (i = 0; i < n; ++i)
a[i] = &s[i];
for (i = 0; i < n-1; ++i)
{
p = a + i;
for (j = i + 1; j < n; ++j)
if ((*p)->score < a[j]->score)
p = a + j;
if (p != a + j)
{
t = *p;
*p = a[i];
a[i] = t;
}
}
for (i = 0; i < n; ++i)
printf("%d %s %d\n", a[i]->num, a[i]->name, a[i]->score);
return 0;
}
7-3 查找电话号码
实验八 结构体与其他构造类型
一、实验目的
二、实验内容
3、编写一个程序,输入若干人员的姓名及电话号码(11位),以字符’#’表示结束输入。然后输入姓名,查找该人的电话号码。不允许出现同名。
在这里描述函数接口。例如:
void search(struct Telephone b[],char *x,int n)
在这里给出一组输入。例如:
wanglin 18303721616
zhaohaojie 18303721919
zhangli 18303721010
#
zhaohaojie
在这里给出相应的输出。例如:
number is 18303721919
在这里给出一组输入。例如:
wanglin 18303721616
zhaohaojie 18303721919
zhangli 18303721010
#
zhanglin
在这里给出相应的输出。例如:
Not found!
代码:
#include
#include
struct Men
{
char name[50];
char phone[20];
};
void main()
{
char c[50];
struct Men s[50];
int i, n;
for (i = 0;; i++)
{
scanf("%s\n", s[i].name);
if (s[i].name[0] == '#')
break;
scanf("%s\n", s[i].phone);
}
n = i;
int flag=0;
scanf("%s", c);
for (i = 0; i < n; i++){
if (strcmp(s[i].name, c) == 0){
printf("number is %s\n", s[i].phone);
flag = 1;
}
}
if (flag == 0) {
printf("Not found!");
}
}
7-4 出圈游戏
实验八 结构体与其他构造类型
一、实验目的
二、实验内容
4、m 个人围成一个圈,从第一个人开始顺序报数1,2,3,4……,凡是报到n者退出圈子。找出最后留在圈子中的人是原来的几号。要求用链表实现。
m在[2,50]区间,n在[2,m-1]区间,输出数据的格式为%3d。
在这里描述函数接口。例如:
void games(struct Person link[],int m,int n)
在这里给出一组输入。例如:
8 3
在这里给出相应的输出。例如:
out No: 3 6 1 5 2 8 4
The last one is 7
代码:
#include
int main() {
int i, k, n, m, y;
int num[50];
int *p;
scanf("%d %d", &n, &y);
p = num;
for (i = 0; i < n; i++) {
*(p + i) = i + 1;
}
i = 0;
k = 0;
m = 0;
printf("out No:");
while (m < n - 1) {
if (*(p + i) != 0) {
k++;
}
if (k == y) {
printf("%3d",*(p + i) );
*(p + i) = 0;
k = 0;
m++;
}
i++;
if (i == n) {
i = 0;
}
}
printf("\n");
while (*p == 0) {
p++;
}
printf("The last one is %3d\n", *p);
return 0;
}