《上海电力学院C语言程序设计实验十》由会员分享,可在线阅读,更多相关《上海电力学院C语言程序设计实验十(11页珍藏版)》请在金锄头文库上搜索。
1、注:实验报告内容包括:实验目的与要求、实验原理与内容、实验步骤与记录、实验分析与结论等。1 上海电力学院实验报告课程名称C 语言程序设计实验项目实验 10 结构体姓名学号班级专业信息安全同组人姓名无指导教师姓名实验日期2018 年 1 月14 日一、实验目的( 1)掌握结构体类型变量的定义和使用;( 2)掌握结构体类型数组的概念和使用;( 3)了解共用体的概念与使用。二、实验内容和步骤1. 定义一个结构体变量(包括年、月、日),计算给定日期在本年中是第几天。调试并改正程序中的错误。#include struct dt int year; int month; int day; date; in
2、t main() int days(int year,int month,int day); printf(Please input Y,M,Dn); scanf(%d %d %d,&date.year,&date.month,&date.day); printf(n%d %d %d is: %d daysn,date.year,date.month,date.day,days(date.year,date.month,date.day); int days(int year,int month,int day) int i,day_sum=0 ; static int day_tab13=0
3、,31,28,31,30,31,30,31,31,30,31,30; for(i=0;i=3) day_sum+=1; return day_sum; 注:实验报告内容包括:实验目的与要求、实验原理与内容、实验步骤与记录、实验分析与结论等。2 2. 输入和运行以下程序,分析运行结果。#include union data int i2; float a; long b; char c4; u; int main() scanf(%d,%d,&u.i0,&u.i1); printf(i0=%d,i1=%d,a=%f,b=%1d,c0=%c,c1=%c,c2=%c,c3=%c,u.i0,u.i1,
4、u.a,u.b,u.c0,u.c1,u.c2,u.c3); 注:实验报告内容包括:实验目的与要求、实验原理与内容、实验步骤与记录、实验分析与结论等。3 输入两个整数10000、20000 给 u.i0和 u.il,分析运行结果。然后将scanf 语句改为:scanf(ld,&u.b);输入 60000 给 b,分析运行结果。#include union data int i2; float a; long b; char c4; u; int main() scanf(%ld,&u.b); printf(i0=%d,i1=%d,a=%f,b=%1d,c0=%c,c1=%c,c2=%c,c3=%
5、c,u.i0,u.i1,u.a,u.b,u.c0,u.c1,u.c2,u.c3); 注:实验报告内容包括:实验目的与要求、实验原理与内容、实验步骤与记录、实验分析与结论等。4 共用体 union 共有 8 字节长度更改前: 10000 占用了低4 个字节, 20000 占用了高4 个字节, int是整形, i0读取低 4 个字节,即10000,i1读取高 4 个字节,即20000,a 是浮点型,读取低4 个字节,有效位6 位,即 0.000000 ,b 是长整型,存储方式与 int相同,读取低4 个字节,所以b=10000,char是字符型, c0 读取最低的4 位,但输入的不是单个字符,使用
6、 %c输出会导致乱码,c1,c2,c3同理,若输出改为 %d , 则会分别读取8位输入数字对应的二进制数,并将其转成十进制。更改后: 60000 占用了低4 个字节, int是整形, i0为 60000,float为 0.000000 ,long 是长整型,值与int相同,所以b=60000,字符数组仍旧乱码。3、程序填空。(1)结构体变量案例。编程输出两个小孩的记录信息。1 个男孩和1 个女孩,其姓名首字母分别为“R”和“ H”;男孩15 岁,女孩比男孩小1 岁子;男孩的成绩为75,女孩的成绩为82。# include int main() struct children /*定义结构体类型
7、*/ char initial; /*姓名首字母 */ int age; /* 年龄 */ int grade; /*成绩 */ boy,girl; boy.initial=R; girl. initial=H; boy.age=15; 注:实验报告内容包括:实验目的与要求、实验原理与内容、实验步骤与记录、实验分析与结论等。5 girl.age=boy.age-1; girl.grade=82; boy.grade=75; printf(boy:%c is %d years old and got a grade of %dn,boy.initial,boy.age,boy.grade); p
8、rintf(girl:%c is %d years old and got a grade of %dn,girl. initial=H,girl.age=boy.age-1,girl.grade=82); return 0; (2)结构体数组案例。设有三个候选人,Zhang, Wang和 Li ,设有 10 个人参加投票,每次输入一个得票的候选人的名字,要求最后输出各候选人的得票结果,请设计程序对候选人的得票数进行统计。#include #include struct person /*候选人信息结构体,这是一个全局的结构体数组*/ char name20; /*姓名 */ int coun
9、t; /*得票数 */ stu3=Zhang,0,Wang,0,Li,0; int main() int i,j; char leader_name20; for(i=1;i=10;i+) /*设有10 个人参加投票*/ scanf(%s, leader_name); /*输入得票人姓名*/ for(j=0;j3;j+) if(strcmp(leader_name,stuj.name)=0) 注:实验报告内容包括:实验目的与要求、实验原理与内容、实验步骤与记录、实验分析与结论等。6 stuj.count+; printf(n); for(i=0; i3 ; i+ ) printf(%5s: %
10、dn,stui.name,stui.count); return 0; (3)指向结构体的指针案例。每个学生包括学号、姓名和成绩数据,要求找出成绩最高者的姓名和成绩。( 设有 4 个学生 ) 。# include int main() struct student int num; char name20; float score; stu4,*p; int i,temp=0; float max; for(i=0;i4;i+) scanf (%d%s%f,&stui.num,&stui.name,&stui.score); max=stu0.score; for(i=1;imax) 注:实验
11、报告内容包括:实验目的与要求、实验原理与内容、实验步骤与记录、实验分析与结论等。7 max=stui.score; temp=i; p=stu+temp; printf(nThe max score:n); printf( No.:%d n name : %sn score:%4.1fn,p-num,p-name,p-score); return 0; (4)结构体数组中存放有3 个人的姓名和年龄,以下程序可以输出其中最年长者的姓名和年龄。#include struct man char name20; int age; person=Lifeng,20,Yangfan,21,Sunping,
12、18; int main() int i,k; k=0; for(i=1;ipersonk.age) k=i; printf(%s n%dn,personk.name,personk.age); 注:实验报告内容包括:实验目的与要求、实验原理与内容、实验步骤与记录、实验分析与结论等。8 return 0; 4、编写程序,然后上机调试运行。(1)学生记录由学号、姓名、成绩组成,使用结构体数组,将下列学生的数据按成绩从高到低排序后显示到屏幕上。# include void main() struct student int num; char name20; float score; stu5,
13、temp; int i,j,N=5; for(i=0;i5;i+) scanf(%d %s %f,&stui.num,&stui.name,&stui.score); for(i=0;iN-1;i+) for(j=0;jstuj+1.score) temp=stuj+1; 注:实验报告内容包括:实验目的与要求、实验原理与内容、实验步骤与记录、实验分析与结论等。9 stuj+1=stuj; stuj=temp; for(i=0;i5;i+) printf(%d %s %fn,stui.num,stui.name,stui.score); (2)学生记录由学号、姓名、成绩组成,保存在文本文件中,将
14、下列学生中不及格学生的姓名显示出来,并保存到另一个二进制文件中。#include #include struct student int num; char name100; int score; 注:实验报告内容包括:实验目的与要求、实验原理与内容、实验步骤与记录、实验分析与结论等。10 students5; int main() int i; FILE *fo, *fi; fo = fopen(disqualified.txt, wb); fi = fopen(student.txt, r); for(i=0;i5;i+) fscanf(fi, %d %s %d, &studentsi.n
15、um, &studentsi.name, &studentsi.score); for(i=0;i5;i+) if(studentsi.score60) printf(%s,不及格 n, studentsi.name), fprintf(fo, %d %s %dn, studentsi.num, studentsi.name, studentsi.score); return 0; 注:实验报告内容包括:实验目的与要求、实验原理与内容、实验步骤与记录、实验分析与结论等。11 三、实验总结将程序编写和测试过程中出现的各种问题(需要的话可以截图)、解决方法详细总结在这部分。四、实验报告要求1、 根据实验内容中各个不同实验的要求写出测试数据和调试结果(要求采用截图的方式给出程序运行结果)。2、 编写相应的程序,写出完整的程序代码,包括注释,注意书写的层次结构。3、 整理上机步骤,总结经验和体会。4、 上交的实验报告分两种形式:打印稿由部分同学上交,电子稿全部提交,电子稿的命名方法统一采用形式: 8 位学号 _姓名 .doc 以及所有的源代码文件