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 <stdio.h>
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<stdio.h>
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)
输入样例1:
在这里给出一组输入。例如:
wanglin 18303721616
zhaohaojie 18303721919
zhangli 18303721010
#
zhaohaojie
输出样例1:
在这里给出相应的输出。例如:
number is 18303721919
输入样例2:
在这里给出一组输入。例如:
wanglin 18303721616zhaohaojie 18303721919zhangli 18303721010#zhanglin
输出样例2:
在这里给出相应的输出。例如:
Not found!
代码:
#include <stdio.h>
#include <string.h>
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<stdio.h>
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;
}