C语言结构体和共用体实验报告
实验10 结构体、共用体
实验11 结构体、共用体一、实验目的:1、掌握结构体类型定义和结构体变量定义、初始化的方法;2、掌握结构体成员的访问方法,熟悉结构体嵌套定义方法;3、掌握结构体数组的定义和使用方法,能够用模块化方法设计程序;4、熟悉typedef的基本用法。
二、实验内容1、下列程序的功能是:先定义结构体Book,再定义两个变量book1、book2,其中一个初始化,另一个从键盘输入数据,最后输出book1、book2的值。
程序运行结果如下:请根据题意和注释填写下列程序所缺代码,并回答相关问题:#include<stdio.h>//定义结构体Book,成员有:书名(title),字符数组,长度为100;//作者(authors),字符数组,长度为30;ISBN,字符数组,长度为20;//页数(pages),整型;价格(price),单精度浮点数。
/*代码段_1*/struct Book {char title[100];char authors[30];char ISBN[20];int pages;float price;};int main(){//定义两个Book型变量book1、book2,其中book1用我们本学期所使用教材的数据初始化Struct Book book1 = {“C程序设计(第四版)”,”谭浩强”,“978-7-302-22446-4”,390,29.0f};//从键盘输入我们本学期所使用实验指导书的数据给book2/*代码段_2*/printf("请输入实验指导书的信息:书名、作者、ISBN、页数、价格:\n");Scanf(“%s %s %s %d %f”,book2.title,book2.authors,book2.ISBN,&book2.pages,&b ook2.price);printf("\n教材、实验书信息如下:\n");printf("书名:%s, 作者:%s,ISBN: %s,\n总页数:%d,价格: %f\n\n",book1.title,book1.authors,book1.ISBN,book1.pages,book1.price);/*代码段_3*///将book1和book2的信息输出return 0;}问题:(1)如何定义结构体类型?(2)怎样定义结构体变量,并初始化?(3)怎样输入、输出结构体变量各成员的值?2、(基础题)请按下列要求编程:(1)先定义一个结构体Date,它包含三个成员:年(year,int)、月(month,int)、日(day,int);(2)再定义一个结构体,它包含三个成员:姓名(name,char[10])、性别(sex,char类型,’m’为男,’f’为女)、出生时间(birthday,Date类型)、身份证号(ID,char[19])、电子邮箱(email,char[60]),并用typedef将该结构体命名为Person类型;(3)然后在主函数中定义一个Person类型的变量me,通过键盘输入自己的信息,然后输出me的各成员值。
c语言实验报告实验
c语言实验报告实验C 语言实验报告实验一、实验目的本次 C 语言实验的主要目的是通过实际操作和编程实践,加深对 C 语言基本语法、数据类型、控制结构、数组、指针等重要概念的理解和掌握,提高编程能力和解决实际问题的能力。
二、实验环境本次实验使用的编程环境为 Visual Studio 2019,操作系统为Windows 10。
三、实验内容1、基本数据类型和运算符的使用定义不同类型的变量,如整数型(int)、浮点型(float、double)、字符型(char)等,并进行赋值和运算操作。
熟悉各种运算符的优先级和结合性,包括算术运算符(+、、、/、%)、关系运算符(>、<、>=、<=、==、!=)、逻辑运算符(&&、||、!)、位运算符(&、|、^、~、<<、>>)等。
2、控制结构的应用使用ifelse 语句实现条件判断,根据不同的条件执行相应的代码块。
运用 switch 语句进行多分支选择,处理不同的情况。
利用 for 循环、while 循环和 dowhile 循环实现重复执行的操作,例如计算数列的和、打印特定的图案等。
3、数组和字符串的操作定义和使用一维数组、二维数组,进行数组元素的访问、赋值和遍历。
掌握字符串的存储和处理方式,使用字符数组和字符串函数(如strlen、strcpy、strcmp 等)进行字符串的操作。
4、指针的应用理解指针的概念和指针变量的定义,通过指针访问变量和数组元素。
实现指针与数组、指针与函数的结合使用,体会指针在程序中的灵活运用。
5、函数的定义和调用编写自定义函数,实现特定的功能,如计算阶乘、判断素数等。
掌握函数的参数传递方式(值传递和地址传递),理解函数的返回值。
6、结构体和共用体的使用定义结构体类型,创建结构体变量,访问结构体成员。
了解共用体的概念和使用场景,比较结构体和共用体的区别。
四、实验步骤1、实验准备打开 Visual Studio 2019 开发环境,创建一个新的 C 语言项目。
第八章结构体、共用体与枚举实验报告
{ union{unsigned int t;
unsigned char c;
}u;
u.c='a';
printf("%c\n",u.t); getch();
}
结论:一个共用体中可能有若干个不同类型的成员,但在任何时刻,只有一个成员的值被存储。
这就是最后赋给它的值。
6、设有以下语句
char x=3,y=6,z;
inti;floatsum = 0;
for ( i = 0;i<3;i++ )
sum = sum+p->score[i];
printf( "%6.2f\n", sum ) ;
}
3、下面程序的输出结果是( )
typedef struct{
float x ;
char z ;
}mytype;
mytype a ;
具体内容:
1、有以下程序,程序运行后的输出结果是()。
structs
{intx, y;
} data[2] = { 10, 100, 20, 200 } ;
main( )
{structs *p = data;
printf( "%d\n", ++ ( p->x ) ) ;
}
2、有以下程序,程序运行后的输出结果是()。
main()
{
printf("%d",sizeof(a));
}
4、下面程序的输出结果是( )
typedef union{lonBiblioteka a[1] ;char y ;
char c[10];
C程序实验报告十 结构体与共用体
实验10 结构体与公用体1.实验目的、要求(1)掌握结构体类型变量的定义和使用。
(2)掌握结构体类型数组的概念和使用。
(3)掌握公用体的概念与使用。
2.实验内容(1)输入程序并运行,观察运行结果#include “stdio.h”int main( ){ struct cmplx{ int x;int y;} cnum[2]={1 , 3 , 2 , 7};printf(“%d\n”, cnum[0].y / cnum[0].x * cnum[1].x );return(0); }运行此程序:按F2保存源程序,按F9完成一次编译连接,无提示错误,按任意键返回源程序行,按ctrl+F9运行,按alt+F5看结果,结果显示:6(2)输入程序并运行,观察运行结果union ks{ int a;int b;};union ks s[4];union ks *p;#include “stdio.h”int main( ){ int n=1, i;printf(“\n”);for(i=0;i<4;i++){ s[i].a=n;s[i].b=s[i].a+1;n=n+2;}p=&s[0];printf(“%d,”,p->a);printf(“%d” ,++ p->a);return(0); }运行此程序:按F2保存源程序,按F9完成一次编译连接,无提示错误,按ctrl+F9运行,按任意键返回源程序行,按alt+F5看结果,结果显示:23(3)编写程序有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩、平均分数)。
要求用input 函数输入10个学生数据;用average函数求总平均分;用max函数找出最高分的学生数据;总平均分和最高分学生的数据都在主函数中输出。
#include"stdio.h"struct student{char num[6];char name[8];int score[4];float avr;}stu[10];main(){int i,j,max,maxi,sum;float average;for(i=0;i<10;i++){printf("number");scanf("%s",stu[i].num);printf("name");scanf("%s",stu[i].name);for(j=0;j<3;j++){printf("\nscore\n");scanf("%d",&stu[i].score[j]); } }average=0;max=0;maxi=0;for(i=0;i<10;i++){sum=0;for(j=0;j<3;j++)sum+=stu[i].score[j];stu[i].avr=sum/3.0;average+=stu[i].avr;if(sum>max){max=sum;maxi=i; }}average/=5;printf("number name score1 score2 score3 average\n");for(i=0;i<10;i++){printf("%8s%10s",stu[i].num,stu[i].name);for(j=0;j<3;j++)printf("%7d",stu[i].score[j]);printf("%6.2f\n",stu[i].avr); }printf("average=%5.2f\n",average);printf("The best student is %s,sum=%d\n",stu[maxi].name,max);}运行此程序:按F2保存源程序,按F9完成一次编译连接,无提示错误,按ctrl+F9运行,按要求输入十个学生的数据,按任意键返回源程序行,按alt+F5看结果,结果显示:number name score1 score2 score3 average01 san 76 87 79 80.6702 tian 65 75 86 75.3303 yuan 98 68 78 81.3304 ping 97 86 78 87.0005 shuo 65 74 82 73.6706 ying 90 80 68 79.3307 xiao 87 80 58 75.0008 hu 64 98 60 74.0009 xing 65 82 90 79.0010 xu 60 98 76 78.00average=156.67The best student is ping,sum=2613.思考及总结(1结构体、共用体定义方式、引用方式和功能的相同点与不同点。
华水《C语言程序设计》实验报告实验七参考模板
#include<stdio.h>
void main()
{ struct man
{char name[10];
int years;
}boy[4]={{"zhang san",20},{"li si",22},{"wang ping",23},{"little",0}};
码:
#include<stdio.h>
#include<string.h>
struct person
{ char name[20];
int count;
}leader[5]={"zhang",0,"wang",0,"li",0,"zhao",0,"liu",0};
void main()
{ int i,j;
char select[20];
for(i=0;i<5;i++)
{ printf("%d please input your result:",i+1);
scanf("%s",select);
for (j=0;j<5;j++)
{if (strcmp(leader[j].name,select)==0)
leader[j].count++;
}
}
printf("the result:\n");
for(j=0;j<5;j++)
printf("%s\t%d\n",leader[j].name,leader[j].count);
C语言实验报告9模板
宁夏师范学院数学与计算机科学学院
《高级语言程序设计》实验报告
实姓 名
专业、班级
12级数应(2)班
实验地点
指导教师
郑利珍
时间
一、实验目的及要求
1、熟悉结构体类型的概念和定义方法以及结构体变量的定义和引用。
2、掌握指向结构体变量的指针变量的概念和应用,特别是链表的概念和应用。
签名:郑利珍
日期:2013年月日
成绩
100
2、在上题中,按平均成绩由高到低排序后,输出每个学生的成绩,输出格式与上题相同。
注意:在排序中交换average成员的数据时,其他成员的数据也要作对应的交换。
四、分析与讨论
五、教师评语
1.按时完成实验;
2.实验内容和实验过程记录完整;
3.回答问题完整、正确;
4.有关于实验的心得;
5.实验报告的撰写认真、报告格式符合要求。
3、掌握运算符“。”和“-〉"的应用。
4、掌握共用体的概念和应用。
二、实验设备(环境)及要求
硬件:PC(P 以上,128M以上内存);
软件:Windows XP操作系统、Visual C++ 6.0。
三、实验内容、步骤及结果
1、有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,用赋初值的方法输入5个学生的数据到结构体数组中,输出每个学生的3门课平均成绩(保留2位小数)。输出格式为:
Ex10c语言实验报告
实验十结构体和共用体
1.实验目的
(1)掌握结构体类型变量的定义和使用;
(2)掌握结构体类型数组的概念和使用;
(3)掌握链表的概念,初步学会对链表进行操作;
(4)掌握共用体的概念与使用。
2.实验内容
编程序,然后上机调试运行。
(1)有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数)。
程序运行如下:
(2)13个人围成一圈,从第1个人开始顺序报号1、2、3。
凡报到“3”者退出圈
子,找出最后留在圈子中的人原来的序号。
(3)建立一个链表,每个结点包括:学号、姓名、性别、年龄。
输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。
(4)输入和运行以下程序并运行:
输入两个整数10000、20000赋给u.i[0]和u.i[1]。
运行结果如下:
将scanf语句改为:
scanf("%ld,"&u.b);
输入60000赋给b。
运行结果如下:
实验总结:
结构体、公用体定义方式、引用方式和功能的相同点与不同点。
枚举类型的定义及应用场合。
1、在做实验内容(1)、(2)时,先分析运行结果,注意结构体、公用体的不同特性,再上机运行,对照结果是否一致。
2、实验内容综合性较强,包括函数调用和结构体的应用,提前做好预习工作,再上机实验。
实验9-1 结构体与共用体
实验9-1 结构体和共用体(1)1【实验目的】掌握结构体类型变量的定义和使用掌握结构体类型数组的概念和应用了解链表的概念和操作方法【实验要求】掌握结构体类型变量的定义和使用了解链表的概念和操作方法【实验环境】(1) Microsoft XP操作系统(2) Microsoft VC++ 6.0【实验内容】1、第几天/acmhome/problemdetail.do?&method=showdetail&id=1071描述:给定一个日期,输出这个日期是该年的第几天。
输入输入数据有多组,每组占一行,数据格式为YYYY-MM-DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
输出:对于每组输入数据,输出一行,表示该日期是该年的第几天。
样例输入:2000-01-01样例输出:12、学生成绩/JudgeOnline/problem.php?id=1518题目描述现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。
编写一个函数input,用来输入一个学生的数据记录。
编写一个函数print,打印一个学生的数据记录。
在主函数调用这两个函数,读取N条记录输入,再按要求输出。
N<100输入:学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。
输出:每个学生的学号、姓名、三科成绩占一行,逗号分开。
样例输入2a100 zhblue 70 80 90b200 newsclan 90 85 75样例输出a100,zhblue,70,80,90b200,newsclan,90,85,753、平均分和最高分/JudgeOnline/problem.php?id=1519题目描述有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)输入:学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。
C语言程序设计实验报告(结构体和共用体)
C语言程序设计实验报告(结构体和共用体)1实验目的1、掌握结构体类型变量的定义和使用;2、掌握结构体类型变量数组的概念和使用;3、掌握链表的概念,初步学会对链表进行操作;4、掌握共用体的概念和使用。
2实验内容1)在一个结构体数组中存入三个人的姓名及年龄,输出三者中年龄居中者的姓名及年龄。
要求:1、三个人的数据采用直接初始化的方式赋值;2、利用结构体指针实现处理过程。
3算法描述流程图4源程序#include<stdio.h>main(){struct students{char name[10];int age;} stu[3]={{"Jack",17},{"Anne",16},{"Tom",19}},stu1[3];struct students *stu2=&stu[0],*t=&stu1[0];int i,j,k;for(i=0;i<2;i++){k=i;for(j=i+1;j<3;j++){if(((stu2+j)->age)<((stu2+k)->age))k=j;}*t=*(stu2+k);*(stu2+k)=*(stu2+i);*(stu2+i)=*t;}printf("三人中年龄居中者姓名:%s,年龄:%d\n",stu[1].name,stu[1].age); }5测试数据{"Jack",17},{"Anne",16},{"Tom",19}6运行结果7出现问题及解决方法;实验中,引用结构体数组出现错误,忘记写{},指针的初始化忘记写*,这些问题都是些低级错误,不应该犯的,在循环中,i的初始化错误。
以后应更加仔细,多注意细节问题,很多时候细节是决定事情的关键。
8实验心得在本次试验中,我通过学习和实践,对结构体类型变量的定义和使用以及链表的概念有了更清楚的理解,初步学会了对链表进行操作,掌握了结构体类型变量数组以及共用体的使用。
C语言程序设计实验十一 结构体与共用体(二)
实验十一结构体与共用体(二)一、目的和要求1、掌握结构体类型方法以及结构体变量的定义和引用。
2、掌握运算符”.”和”->”的应用。
3、掌握指向结构体变量的指针变量的应用。
4、本实验在学习了第7章和第8.1节后进行。
二、实验内容和步骤1、分析、调试、运行下列程序,记录程序中的错误之处并给予改正,写出正确的运行结果。
#include <stdio.h>struct st{ int x;int y;}*p;int a[]={10,20,30,40};struct st sb[]={2,&a[0],4,&a[1],6,&a[2],8,&a[3]};main(){ p=sb;printf(“\n%d”,p->x);printf(“\n%d”,(++p)->x);printf(“\n%d”,(++p)->y);}2、下列程序实现:从键盘上输入年、月、日,计算并输出该日在该年中是第几天(注意闰年问题)。
调试运行该程序,写出程序运行结果。
#include <stdio.h>struct date{ int day;int month;int year;int yes;};static int day_tab[2][13]={{0,31,29,31,30,31,30,31,31,30,31,30,31},{0,31,28,31,30,31,30,31,31,30,31,30,31}}main(){ int i,leapstruct date *p;printf(“enter year/month/day:”);scanf(“%d,%d,%d”,&(*p).year,&(*p).month,&(*p).day);leap=p->year%4==0&&p->year%100!=0||p->year%400==0;p->yes=p->day;for(i=0;i<p->month;i++)p->yes+=day_tab[leap][i];printf(“the day in the passed year is %d\n”,p->year);}三、实验结果四、分析与讨论(1)理解运用指向结构体变量的指针访问结构体成员的方法。
c语言结构体实验报告
c语言结构体实验报告实验目的:掌握C语言结构体的基本知识,能够使用结构体对多个变量进行分类管理。
实验内容:1.理解结构体的基本概念结构体是一种用户自定义的数据类型,它由多个不同类型的变量组成,每个变量称为结构体的成员。
2.定义结构体类型定义结构体类型需要使用struct关键字,格式如下:struct 结构体类型名{数据类型成员1;数据类型成员2;...};3.结构体变量的定义与初始化定义结构体变量时,可以像定义简单变量一样使用结构体类型名进行声明,然后使用“.”运算符来访问结构体成员。
结构体变量的初始化方式和普通变量一样,可以用赋值语句或者在定义时用大括号括起来的成员值列表进行初始化。
4.结构体作为函数参数结构体变量可以作为函数参数进行传递,当传递结构体变量时,实际上传递的是结构体变量的拷贝,因此函数在对结构体进行改变时不会影响原来的结构体变量。
5.结构体数组和普通数组一样,结构体数组也是一组相同类型的变量的集合,用于存储多个结构体变量。
在定义结构体数组时,可以使用类似普通数组的方式进行定义。
实验过程:我们按照上述内容进行C语言结构体的实验,具体过程如下:1.定义一个结构体类型,包括两个成员,分别为学生姓名和学生的成绩。
struct student{char name[20];float score;};2.定义并初始化一个学生结构体变量。
struct student s={"Tom",88.5};3.定义一个函数,用于输出学生的姓名和成绩。
void output(struct student s){printf("Name:%s Score:%.2f\n",,s.score);}4.定义一个结构体数组,用于存储多个学生的信息。
struct student stu[3]={{"Tom",88.5},{"Jerry",76},{"Tony",90}};5.调用output函数,输出学生的姓名和成绩。
c语言实验报告
c语言实验报告《C 语言实验报告》一、实验目的本次 C 语言实验的主要目的是通过实际操作和编程练习,加深对 C 语言基本语法、数据类型、控制结构、函数等知识的理解和运用,提高编程能力和解决实际问题的能力。
二、实验环境操作系统:Windows 10开发工具:Visual Studio 2019三、实验内容1、数据类型与变量定义不同类型的变量,如整型、浮点型、字符型等,并进行赋值和输出操作。
了解不同数据类型的存储方式和取值范围。
2、控制结构使用ifelse 语句实现条件判断,根据不同的条件执行不同的代码块。
运用 for 循环、while 循环和 dowhile 循环完成重复操作,如计算数列的和、打印特定图案等。
3、数组与指针定义数组并进行初始化和遍历操作,掌握数组元素的访问和修改。
学习指针的概念和基本操作,通过指针访问数组元素和动态分配内存。
4、函数编写自定义函数,实现特定的功能,如计算两个数的最大值、对数组进行排序等。
理解函数的参数传递和返回值机制。
5、结构体与共用体定义结构体类型,创建结构体变量,并访问结构体成员。
了解共用体的特点和使用场景。
四、实验步骤1、数据类型与变量实验在代码中分别定义整型变量`int num = 10`、浮点型变量`float pi =314`、字符型变量`char ch ='A'`。
使用`printf`函数输出这些变量的值,观察输出结果。
2、控制结构实验编写 ifelse 语句,判断一个数是否为偶数,如果是偶数则输出"该数是偶数",否则输出"该数是奇数"。
使用 for 循环计算 1 到 100 的整数和,并输出结果。
实现一个 while 循环,计算用户输入的整数的阶乘,直到用户输入0 结束。
3、数组与指针实验定义一个整数数组`int arr5 ={1, 2, 3, 4, 5}`,使用 for 循环遍历数组并输出每个元素的值。
共用体实验报告
一、实验目的1. 理解共用体的概念和作用。
2. 掌握共用体的定义和使用方法。
3. 通过实验加深对共用体在C语言中的实际应用。
二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 语言:C语言三、实验内容1. 共用体的定义与初始化2. 共用体的成员访问3. 共用体与结构体的区别4. 共用体的内存占用5. 共用体的应用实例四、实验步骤1. 共用体的定义与初始化(1)创建一个新的C语言文件,命名为“共用体实验.c”。
(2)定义一个共用体类型,包含两个成员:一个整型变量和一个浮点型变量。
```c#include <stdio.h>typedef union {int i;float f;} data_union;int main() {data_union my_union;printf("请输入一个整数:");scanf("%d", &my_union.i);printf("您输入的整数为:%d\n", my_union.i);printf("请输入一个浮点数:");scanf("%f", &my_union.f);printf("您输入的浮点数为:%f\n", my_union.f);return 0;}```2. 共用体的成员访问(1)在上面的代码中,我们通过共用体成员名访问整型变量和浮点型变量。
(2)修改程序,输出共用体中整型变量的值。
```cprintf("共用体中的整型变量值为:%d\n", my_union.i);```3. 共用体与结构体的区别(1)结构体中的成员变量各自占用独立的内存空间,而共用体的成员变量共享同一块内存空间。
(2)结构体可以同时存储不同类型的成员变量,而共用体在任意时刻只能存储一种类型的成员变量。
C语言结构体和共用体实验报告
实验九参考程序实验9-1/*****************************************************************实验9.1**(1)为某商店的商品设计合适的结构体(PRODUCT)。
每一种商品包含编号(number)、* 名称(name)、价格(price)、折扣(discount)4项信息,根据表9-1,为这些信息选择合适的数据类型。
*(2)建立2个函数,以实现对商品的操作。
input函数实现商品的输入;* display函数显示商品信息。
要求这2个函数都以商品的结构体(PRODUCT)指针为参数。
*(3)在主函数中为商品键盘定义一个结构体变量(keyboard),利用input函数实现键盘信息的输入;* 定义一个结构体数组(elec_device[3]),利用input函数实现冰箱、空调、电视信息的输入;* 最后利用display函数显示4种商品的信息。
** 表9-1**编号名称价格折扣*1010 键盘89.50 0.85*1021 冰箱1024.00 0.95*1022 空调2058.50 0.90*1023 电视3001.88 0.95*****************************************************************/#include <stdio.h>typedef struct _PRODUCT{int iNumber;char strName[32];float fPrice;float fDiscount;}PRODUCT,*PPRODUCT;void input(PRODUCT *pProduct);void display(PPRODUCT pProduct);void main(){int i;PRODUCT kyeboard;PRODUCT elec_device[3];input(&kyeboard);for(i=0;i<3;i++){input(&elec_device[i]);}display(&kyeboard);for(i=0;i<3;i++){display(&elec_device[i]);}}/******************************************************************函数名称:input()**参数:PRODUCT *pProduct -PRODUCT结构体指针,用来存放输入数据***返回值:无*说明:*该函数用来完成PRODUCT结构体数据的输入。
C语言程序设计第八次实验报告(绝对有效!!)
第八次上机实验报告(结构体、共用体)一、实验目的:(1)掌握结构体类型、结构体变量的定义与使用。
(2)掌握结构体数组的定义与使用。
(3)学会使用结构体变量指针的定义与使用。
(4)掌握链表的概念,学会对链表进行建立、遍历、删除、查找操作。
(5)了解共用体的概念,进一步复习指针的内容。
二、实验题目:(1)根据以下学生情况表,编制一个C程序,分别用选择法和冒泡法对该学生情况表按成绩从低到高进行排序处理并输出。
具体要求:(a)程序中,输入、输出和两种排序功能模块分别用自定义函数形式实现。
(b)在主函数中定义一个结构体数组和结构体指针数组,其中结构体数组用以存放学生表的信息,结构体指针数组中的每一个指针元素分别指向结构体数组的个元素,利用指针数组实现排序可避免结构体数组元素交换移动,节省排序时间。
(c)在主函数中通过调用输入、输出和两种排序函数,实现首先输入数据,然后输出排序前学生的情况,再输出排序后的学生结果,格式如图所示(不要求输出表格线)。
程序:#include<stdio.h>#define N 5typedef struct student{int num;char name[16];char sex;int age;double grade;} stu;int output(stu *a[],int n){int i;printf("学生情况表\n");printf("学号\t姓名\t性别\t年龄\t成绩\n");for(i=0;i<n;i++)printf("%d\t%s\t%c\t%d\t%lf\n",a[i]->num,a[i]->name,a[i]->sex ,a[i]->age,a[i]->grade);return 0;}int input(stu *a[],int n)int i;printf("输入%d个学生的信息(学号姓名性别年龄成绩):\n",n);for(i=0;i<n;i++)scanf("%d%s%s%d%lf",&(a[i]->num),a[i]->name,&(a[i]->s ex),&(a[i]->age),&(a[i]->grade));return 0;}int bubblesort(stu *a[],int n){int i,j;stu *tmp;for(i=0;i<n-1;i++)for(j=0;j<n-i-1;j++){if (a[j]->grade < a[j+1]->grade){tmp=a[j];a[j]=a[j+1];a[j+1]=tmp;}}return 0;}int selectsort(stu *a[],int n){int i,j,k;stu *tmp;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(a[j]->grade > a[k]->grade) k=j;if(k!=i){tmp=a[k];a[k]=a[i];a[i]=tmp;}}return 0;}int main(){int i,flag;stu p[N],*q[N];for(i=0;i<N;i++)q[i]=&p[i];input(q,N);output(q,N);printf("选择排列方式(1)冒泡排序法(2)选择排序法:\n");scanf("%d",flag);if(flag==1)bubblesort(q,N);else if(flag==2)selectsort(q,N);else printf("choice error!!");output(q,N);return 0;}新程序:#include<stdio.h>struct person{int num;char name[7];char sex;int age;float grade;}p[5],*q[5],*s,**t;void input(struct person p[]){int i;for(i=0;i<=4;i++)scanf("%d%s%1s%d%f",&(p[i].num),p[i].name,&(p[i].sex),&(p[ i].age),&(p[i].grade));}struct person **bubblesort(struct person p[],struct person *q[],struct person *s) {int j,i;for(i=0;i<4;i++)for(j=0;j<4-i;j++)if(p[j].grade>p[j+1].grade){s=q[j];q[j]=q[j+1];q[j+1]=s;}return(q);}void output(struct person **q){int i;for(i=0;i<=4;i++)printf("%d\t%s\t%c\t%d\t%f\n",(*(q+i))->num,(*(q+i))->name,(*(q+ i))->sex,(*(q+i))->age,(*(q+i))->grade);}int main(){int w;for(w=0;w<=4;w++)q[w]=&p[w];s=NULL;printf("input the information of students:\n");input(p);t=bubblesort(p,q,s);printf("\nnum name sex age grade\n");output(t);return 0;}(2)链表基本操作。
C语言程序设计实验结构体与共用体
实验8:结构体与共用体一、实验目的1.掌握结构体类型变量的定义和使用;2.掌握共用体的概念与使用。
二、实验内容编写程序,实现如下功能:1.定义结构体变量,用它表示考生的学号、姓名(用英文表示)以及语文、数学、外语成绩。
输入两个考生的信息和各门课成绩并比较(按总分进行高低排序;当总分相同时,依次按语、数、外的顺序排序)。
2.设有一个教师与学生通用的表格,数据项包括:姓名、年龄、职业和单位,其中“职业”一项可分为“教师”和“学生”两类;对“单位”一项,教师填入“系部名称”(用字符类型表示),学生填入“班级编号”(用整型量表示)。
编程输入人员数据,再以表格输出。
三、实验结果记录第1题上机调试后的最终代码及上机调试结果(截图):程序代码运行结果1.总分不同2.总分相同的情况2.1总分完全相同2.2总分相同但语文成绩不同2.3总分相同、语文成绩相同但数学成绩不同第2题上机调试后的最终代码及上机调试结果(截图):程序代码运行结果1.正确输入2.错误输入四、实验小结:经过此次实验,我熟悉掌握了结构体的定义和使用,同时也掌握了共用体的使用。
对于程序1,基本思路是通过结构体定义变量,采用if-else语句嵌套,当总分相同且语文数学成绩均相同时就不必再进行一轮的if语句判断,因为此时两考生的英语成绩一定相同。
对于程序2,在结构体中定义了共用体,可对不同职业进行不同单位的划分。
基本思路是用malloc函数进行动态内存分配,确定要输入的样本数量,再进行数据的输入,在单位数据的输入时需要判断输入对象是学生还是老师,此时要用strcmp函数进行比较判断,输入结束后打印表格,用转义字符\t让表格更加美观,最后通过free进行内存释放。
C语言实验报告
C语⾔实验报告c程序实验报告姓名:黄澄实验地点:教学楼514教室实验时间:4⽉30⽇⼀、本章要点1.通过实验理解结构体和共⽤体的数据结构(先定义类型,再变量)2.结构体、共⽤体中数组的使⽤及变量的赋值3.结构体和共⽤体定义时的嵌套使⽤(嵌套使⽤的结构体必须先定义)⼀、实验⽬的与要求(1)掌握结构体类型说明和结构体类型变量、数组、指针的定义⽅法及使⽤。
(2)学会引⽤结构体中的成员。
(3)掌握利⽤指向结构体的指针成员构成链表的基本算法。
(4)了解联合体类型和枚举类型的说明、其变量的定义及赋初值的⽅法。
(5)了解联合类型变量中各成员的存储结构,学会引⽤各成员中的数据。
(6)学习正确引⽤枚举类型常量,了解如何对枚举类型变量进⾏操作。
⼆、实验内容9.3.1 结构体变量的运⽤1.问题的简单描述:问题的简单描述:试利⽤结构体类型描述年、⽉、⽇,输⼊⼀个⽇期,统计⽇期是本年度第多少天。
2.流程图:3.实验代码:#include<stdio.h>main(){ struct date{int day;int month;int year;}a;int i,days=0;printf("请输⼊年⽉⽇:");scanf("%d%d%d",&a.year,&a.month,&a.day);for(i=1;i<a.month;i++){ if(i==1||i==3||i==5||i==7||i==8||i==10)days+=31;else if(i==4||i==6||i==9||i==11)days+=30;else if(a.year%4==0||a.year%400==0||a.year%100==0)days+=29;else days+=28;}days+=a.day;printf("%d年%d⽉%d⽇是该年的第%d天",a.year,a.month,a.day,days);}运⾏结果问题分析天数的计算就是循环累加,再加上不⾜⽉的⽇期,记录是不能作为⼀个整体输出的,应该分别⼀条条输出,结构体是构造数据类型,要先定义类型,然后是类型的变量,结构体赋初值要⽤花括号括起来。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验九参考程序实验 9- 1 /***************************************************************** 实验 9.1** ( 1 )为某商店的商品设计合适的结构体 (PRODUCT) 。
每一种商品包含编号 (number) 、* 名称 (name) 、价格 (price) 、折扣 (discount)4 项信息,根据表 9-1 ,为这些信 息选择合适的数据类型。
* (2)建立 2个函数,以实现对商品的操作。
input 函数实现商品的输入;* display 函数显示商品信息。
要求这 2个函数都以商品的结构体 (PRODUCT) 指针为 参数。
* (3 )在主函数中为商品键盘定义一个结构体变量 (keyboard) ,利用 input 函数实现键 盘信息的输入;* 定义一个结构体数组 (elec_device[3]) ,利用 input 函数实现冰箱、 空调、电视 信息的输入; *最后利用 display 函数显示 4 种商品的信息。
** 表 9-1#include <stdio .h> typedef struct _PRODUCTint iNumber;char strName[32];float fPrice;float fDiscount; * 编号 名称价格 折扣 *1010键盘 89.50 0.85 *1021冰箱 1024.00 0.95 *1022 空调 2058.500.90 *1023 电视 3001.88 0.95*************************************************************** */}PRODUCT,*PPRODUCT;void input(PRODUCT *pProduct);void display(PPRODUCT pProduct);void main(){int i ;PRODUCT kyeboard;PRODUCT elec_device[3];input(&kyeboard);for ( i =0; i <3; i ++){ input(&elec_device[ i ]);}display(&kyeboard);for ( i =0; i <3; i ++){ display(&elec_device[ i ]);}}I****************************************************************函数名称:input()参数:PRODUCT *pProduct -PRODUCT 结构体指针,用来存放输入数据* 返回值:无** 说明:*该函数用来完成PRODUCT吉构体数据的输入**************************************************************/void input(PRODUCT †pProduct){printf ( "\n 请输入商品的编号:\n" );scanf ("%d" ,&pProduct->iNumber);printf ( " 请输入商品的名称:\n" );scanf ("%s" ,pProduct->strName);printf ( " 请输入商品的价格:\n" );scanf ("%f" ,&pProduct->fPrice);printf ( " 请输入商品的折扣:\n" );scanf ("%f" ,&pProduct->fDiscount);}I**************************************************************函数名称:display()参数:PRODUCT pProduct -PRODUCT 结构体数据printf ( " 商品的价格:%.2f\n" ,pProduct->fPrice);printf ( " 商品的折扣:%.2f\n" ,pProduct->fDiscount);}实验9-/***************************************************************** 实验9.2†返回值:无** 说明:*该函数用来完成PRODUCT吉构体数据的显示。
*****************************************************************/void display(PPRODUCT pProduct){printf ( "\n 商品的编号:%d\n" ,pProduct->iNumber);printf ( " 商品的名称:%s\n" ,pProduct->strName);* (1 )利用链表结构(PLAY_LIST) ,为某媒体播放器建立一个播放列表(playList) ,* 该链表的每一个节点包括:歌曲编号(number) 、歌曲名称(name) 、歌手姓名(artist) 、歌曲长度(time) ,见表9-2 。
* (2)建立4个函数,以实现对播放列表操作。
函数的原型如下:* 创建播放列表PLAY_LIST* createList();* 在播放列表中添加一首歌曲PLAY_LIST* insertItem(PLAY_LIST* pPlayList,PLAY_LIST* pNewPlayList);* 在播放列表中删除编号为iItemNumber 的歌曲PLAY_LIST*deleteItem(PLAY_LIST* pPlayList, int iItemNumber);* 显示整个播放列表中的所有信息voiddisplayIList(PLAY_LIST* pPlayList);* (3 )在主函数中定义一个链表playList 。
* A) 利用函数createList 创建播放列表playList ,并在其节点上依次存储编号为1100 、1102 、1103 的3首歌曲,* 并调用displayList 函数显示此时整个播放列表中的所有信息。
* B) 调用insertItem 函数将编号为1101 的歌曲添加到playList 中,并显示整个播放列表中的所有信息。
* C) 调用deleteItem 函数将编号为1102 的歌曲从playList 中删除,并显示整个播放列表中的所有信息。
表9-2歌曲编号歌曲名称歌手姓名歌曲长度1100 落叶归根王力宏05:161101 风吹麦浪李健04:071102 往事随风齐秦04:381103 天空王菲03:42***************************************************************#include <stdio .h>typedef struct _PLAY_LIST{int iNumber;char strName[64];char strArtist[32];struct _TIME{int iMinutes;int iSeconds;} sTime;struct _PLAY_LIST * pNext ;}PLAY_LIST,*PPLAY_LIST;PLAY_LIST* createList();PLAY_LIST* insertItem(PLAY_LIST* pPlayList,PLAY_LIST* pNewPlayList);PLAY_LIST* deleteItem(PLAY_LIST* pPlayList, int voidiItemNumber);displayList(PLAY_LIST* pPlayList);int inputItem(PLAY_LIST* pPlayList);void main(){PLAY_LIST *pPlayList= NULL;PLAY_LIST *pNewPlayList= NULL;pPlayList=createList();printf ( " 播放列表:\n" );displayList(pPlayList);printf ( "\n 播放列表插入曲目:\n" ); pNewPlayList=createList();pPlayList=insertItem(pPlayList,pNewPlayList);printf ( " 插入新的曲目之后的播放列表:\n" ); displayList(pPlayList);printf ( "\n 播放列表删除曲目:\n" );pPlayList=deleteItem(pPlayList,1102);printf ( " 删除编号为1102 的曲目之后的播放列表:\n" ); displayList(pPlayList);} /**************************************************************** ** 函数名称:createList()** 参数:无返回创建好的播放列表链表说明:该函数用来创建播放列表链表************************************************************刘PLAY_LIST* createList(){int iResult=0;PLAY_LIST *pListHead,*pTemp,*pNewList;pTemp=pNewList=(PLAY_LIST*) malloc ( sizeof (PLAY_LIST)); pNewList-> pNext =NULL;pListHead= NULL;printf ( " 创建新播放列表\n" );iResult=inputItem(pNewList);if (iResult){ pListHead=pNewList;}while (iResult){pNewList=(PLAY_LIST*) malloc ( sizeof (PLAY_LIST)); pNewList->pNext =NULL;iResult=inputItem(pNewList);if (iResult){ pTemp-> pNext =pNewList; pTemp=pNewList;}}return pListHead;}函数名称:insertItem()I***************************************************************参数:PLAY_LIST* pPlayList - PLAY_LIST* pNewPlayList - 操作的播放列表链表插入的新项目* 返回值:PLAY_LIST* - 返回操作后的播放列表链表** 说明:* 该函数用来完成播放列表链表的新项目插入。