C 语言实训教程
----结构体专项练习
能够熟练并正确定义结构体,可以定义并初始化、输入、输出结构体变量并使用结构体解决问题。
能够正确定义、初始化、输入、输出并使用结构体数组解决问题。
练习使用枚举类型解决问题。
若有定义:
struct num
{
int a;
int b; float f;
}n={1, 3, 5.0};
struct num ﹡pn=&n;
则表达式pn->b/n.a﹡++pn->b 的值是 ,表达式(﹡pn).a+pn->f 的值是 。
若要使指针 p 指向一个double 类型的动态存储单元,请填空。
p= malloc(sizeof(double));
设有以下结构类型说明和变量定义,则变量 a 在内存所占字节数是 。
Struct stud
{
char num[6]; int s[4]; double ave;
} a,*p;
结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名和年龄。请填空。 #include "stdio.h"
static struct man
{
char name[20]; int age;
}person[ ]={ "li-ming",18, "wang-hua",19,"zhang-ping",20}; void main( )
{
struct man *p,*q;
int old=0; p=person;
for( ; (1) ) if(old<p->age)
{
q=p;
(2) ;
}
printf("%s %d\n", (3) );
}
以下程序的运行结果是 。 #include "stdio.h"
struct n
{
int x;
char c;
};
void func(struct n b); void main( )
{
struct n a={10, 'x'}; func(a);
printf ( "%d,%c\n", a.x, a.c);
}
void func(struct n b)
{
b.x=20;
b.c='y';
}
以下程序的运行结果是 。 #include "stdio.h"
void main( )
{
struct EXAMPLE
{
struct
{
}in;
int x;
int y;
}e;
int a;
int b;
=1;
=2; e.in.x=e.a * e.b;
e.in.y=e.a + e.b; printf("%d,%d", e.in.x, e.in.y);
}
复数运算

输出示例:

编写 input()和 output()函数分别输入和输出 5 个学生的数据记录,学生信息包括学号、姓名、分数。
3 多门学生成绩排序

.
4. 打鱼还是晒网(选做,上学期做过的同学不用做了,其他同学尽量做做) 中国有句俗语叫“三天打鱼两天晒网”。某人从 1990 年 1 月 1 日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”,其中日期要求用结构体。
1.算法分析:
根据题意可以将解题过程分为三步:
计算从 1990 年 1 月 1 日开始至指定日期共有多少天;
由于“打鱼”和“晒网”的周期为 5 天,所以将计算出的天数用 5 去除;
根据余数判断他是在“打鱼”还是在“晒网”;
若 余数为 1,2,3,则他是在“打鱼”
否则 是在“晒网”
在这三步中,关键是第一步。求从 1990 年 1 月 1 日至指定日期有多少天,
要判断经历年份中是否有闰年,二月为 29 天,平年为 28 天。闰年的方法可以用伪语句描述如下:
如果 ((年能被 4 除尽 且 不能被 100 除尽)或 能被 400 除尽)
则 该年是闰年;
否则 不是闰年。
C 语言中判断能否整除可以使用求余运算(即求模)
测试个人星座:从键盘输入你的出生月份日期,测试你的星座。(提示日期可以用结构体)
在屏幕上虚拟显示数字时钟,时钟用结构体完成(体会与类的使用相同及不同点)。
快递员问题:快递员一天要从 A 地出发到 B、C、D、E 几个地方去送快递,途经各点,仅一次回到 A 点,求最短路径。要求:1、启发式搜索,临近点优先;2、随机输入两点之间的距离值可正确输出结果。
找朋友问题实现从朋友记录表中查找一位朋友的详细信息并显示出来。
*9.综合设计编写一个图书管理程序,实现学生借书、还书和图书查询功能。