实验练习八 结构体编程

合集下载

上机实验有关结构体的程序设计

上机实验有关结构体的程序设计

The intpart is:12
The fracpart is:0.456700
3.【8.2.3】【8.2.三⑵】
( filename:cp83.c )《删除字符串Fra bibliotek指定字符的函数》
删除字符串中的字符。输入一个字符串s,再输入 一个字符c,将字符串s中出现的所有字符 c 删除。
要求定义并调用函数delchar(s,c),它的功能是将字符
5. 《颠倒学号和姓名的顺序》
( filename: cp85.c )
输入一个字符串,内容依次是学号(数字)和姓名
(汉语拼音码)。经处理后,输出一个字符串,内容 依次为姓名、两个*号和学号。
【输入输出样例】(带下划线部分为输入)
12011234ZhangSan ZhangSan**12011234
上机实验8:指针程序设计
1.【8.1.4】【8.1.三⑸】 ( filename:cp81.c )
《报数3的人退出圈子》
有n(n不大于1000)个人围成一圈,按顺序从1到n 编号。从第一个人开始报数,报数3的人退出圈子, 下一个人从1开始重新报数,报数3的人退出圈子。如 此循环,直到留下最后一个人。问留下来的人的编号。
【输入输出样例1】(下划线部分为输入,表示空格)
Enter n:14 Enter 14 integers:07-261414761617 Enter the number of occurrences:3 Meet the requirements:76
【输入输出样例2】(下划线部分为输入,表示空格)
【输入输出样例】(带下划线的为输入,表示空格)
Input n:5 Last No. is:4
2.【8.1.三⑵】 ( filename:cp82.c ) 《拆分实数的整数与小数部分的函数》 编写程序拆分输入实数的整数部分与小数部分。 要求定义一个函数void splitfloat(float x, float *intpart, float *flacpart),其中x是被拆分的实数,*intpart 和 *flacpart 分别是将实数x拆分出的整数部分和小数部 分,自定义main函数并在其中调用splitfloat函数。 【输入输出样例】(带下划线的为输入,表示空格) 12.4567

c语言结构体编程题

c语言结构体编程题

题目:编写一个程序,使用结构体表示一个学生的信息,包括姓名、年龄、学号和成绩,并提供相应的函数进行信息输入、输出和计算平均成绩。

c复制代码#include<stdio.h>#include<string.h>struct student {char name[20];int age;int id;float score;};void input_student(struct student *s) {printf("请输入学生姓名:");scanf("%s", s->name);printf("请输入学生年龄:");scanf("%d", &s->age);printf("请输入学生学号:");scanf("%d", &s->id);printf("请输入学生成绩:");scanf("%f", &s->score);}void output_student(const struct student *s) {printf("学生姓名:%s\n", s->name);printf("学生年龄:%d\n", s->age);printf("学生学号:%d\n", s->id);printf("学生成绩:%.2f\n", s->score);}float average_score(const struct student *s, int n) {float sum = 0;for (int i = 0; i < n; i++) {sum += s[i].score;}return sum / n;}int main() {struct student s[3];input_student(&s[0]);input_student(&s[1]);input_student(&s[2]);printf("平均成绩为:%.2f\n", average_score(s, 3));output_student(&s[0]);output_student(&s[1]);output_student(&s[2]);return0;}在这个示例中,我们定义了一个结构体student来表示学生的信息,包括姓名、年龄、学号和成绩。

结构体编程实验报告

结构体编程实验报告

一、实验目的1. 理解结构体的概念和作用。

2. 掌握结构体的定义、声明和使用方法。

3. 学会通过结构体实现复杂数据的组织和管理。

4. 提高编程实践能力。

二、实验环境1. 编程语言:C/C++2. 操作系统:Windows/Linux3. 编译器:GCC三、实验内容1. 定义一个学生结构体,包含姓名、年龄、性别、学号、成绩等信息。

2. 实现一个函数,用于创建学生结构体实例。

3. 实现一个函数,用于打印学生信息。

4. 实现一个函数,用于计算学生的平均成绩。

5. 实现一个函数,用于查找特定学号的学生信息。

四、实验步骤1. 定义学生结构体```c#include <stdio.h>typedef struct {char name[50];int age;char gender;int id;float score;} Student;```2. 创建学生结构体实例的函数```cStudent createStudent(char name, int age, char gender, int id, float score) {Student stu; = name;stu.age = age;stu.gender = gender;stu.id = id;stu.score = score;return stu;}```3. 打印学生信息的函数```cvoid printStudentInfo(Student stu) {printf("Name: %s\n", );printf("Age: %d\n", stu.age);printf("Gender: %c\n", stu.gender);printf("ID: %d\n", stu.id);printf("Score: %.2f\n", stu.score);}```4. 计算学生平均成绩的函数```cfloat calculateAverageScore(Student stu, int n) {float sum = 0;for (int i = 0; i < n; i++) {sum += stu[i].score;}return sum / n;}```5. 查找特定学号的学生信息的函数```cStudent findStudentById(Student stu, int n, int id) { for (int i = 0; i < n; i++) {if (stu[i].id == id) {return &stu[i];}}return NULL;}```五、实验结果1. 创建一个学生结构体实例```cStudent stu1 = createStudent("Alice", 20, 'F', 1001, 85.5); ```2. 打印学生信息```cprintStudentInfo(stu1);```输出结果:```Name: AliceAge: 20Gender: FID: 1001Score: 85.50```3. 计算平均成绩```cStudent stu2 = createStudent("Bob", 21, 'M', 1002, 90.0); Student stu3 = createStudent("Charlie", 22, 'M', 1003, 92.0); float averageScore = calculateAverageScore(&stu1, 3);printf("Average Score: %.2f\n", averageScore);```输出结果:```Average Score: 88.50```4. 查找特定学号的学生信息```cStudent stuFound = findStudentById(&stu1, 3, 1002); if (stuFound != NULL) {printStudentInfo(stuFound);} else {printf("Student with ID 1002 not found.\n");}```输出结果:```Name: BobAge: 21Gender: MID: 1002Score: 90.00```六、实验总结通过本次实验,我们学习了结构体的概念和作用,掌握了结构体的定义、声明和使用方法。

C语言实验八结构体上机报告

C语言实验八结构体上机报告

《标准C语言程序设计》上机报告实验八结构体程序设计专业:电子信息工程班级:电信1301学号:U201313480姓名:秦行完成日期:2014/6/9一、实验目的:1、掌握结构体类型的说明和结构体变量的定义;2、掌握结构体变量成员的引用和对结构体变量的初始化;3、掌握结构体数组及结构体指针变量的定义及使用。

4、理解并掌握结构体在函数间的传递;5、进一步掌握复杂程序编译、连接和调试的技巧。

二、实验内容及要求(鼓励一题多解)——以下均要求不得使用全局变量:1(1)、正确定义该表格内容要求的数据类型;(2)、分别输入各成员项数据,并打印输出(为简便起见,假设只有3名考生)。

#include<stdio.h>#include<string.h>#define N 3struct date{int year;int month;int day;};struct student{unsigned int num;char name[20];char sex;struct date birth;};void main(){struct student tester[N];int i;for(i=0;i<N;i++){printf("请输入考生学生证号:");scanf("%d",&tester[i].num);printf("请输入姓名:");scanf("%s",tester[i].name);printf("请输入M或W,M表示男,W表示女");scanf("%s",&tester[i].sex);printf("请输入考生生日,(按年月日敲如2014 enter 06 enter 09 enter)");scanf("%d%d%d",&tester[i].birth.year,&tester[i].birth.month,&tester[i].birth. day);}printf("学生证号\t姓名\t性别\t考生生日\n");printf("______________________________\n");for(i=0;i<N;i++){printf("%d\t%s\t%c\t%d%d%d\n",tester[i].num,tester[i].name,tester[i].sex,tester[I ].birth.year,tester[i].birth.month,tester[i].birth.day);}}2、编程实现:(1)输入10个职工姓名和工资,(2)按职工姓名由小到大排序,(3)在主函数中输出排序后的职工姓名与工资、调用查找函数(需要编程)查找输入姓名的职工工资并输出职工姓名和工资。

结构体编程练习

结构体编程练习

结构体编程练习一:实验目的:1、理解结构体和共用体的作用功能;2、掌握结构体类型变量的定义方法;3、掌握结构体变量的使用方法;4、掌握结构体数组,并能较熟练应用;5、理解指向结构体类型数据的指针二:实验内容及要求:1、用结构体实现在屏幕上模拟显示一个数字式时钟;思考题:①用结构体指针作为函数参数与用结构体变量作为函数参数有什么不同?本题可以用结构体变量作为函数参数编程实现吗?②请读者自己分析下面两段程序代码,并解释它们是如何实现时钟值更新操作的。

2、洗牌和发牌模拟(选作)编程实现洗牌和发牌模拟。

三:程序源代码:题目1:#include <stdio.h>struct clock{int hour;int minute;int second;};typedef struct clock CLOCK;void Update(CLOCK*t);void Display(CLOCK*t);void Delay(void);main(){CLOCK t;long i;t.hour = t.minute = t.second = 0;for (i=0; i<100000; i++){Update(&t);Display(&t);Delay();}}void Update(CLOCK*t){t->second++;if(t->second==60){t->minute++;t->second=0;}if(t->minute==60){t->hour++;t->minute=0;}if(t->hour==24){t->hour=0;}}void Display(CLOCK*t){printf("%2d:%2d:%2d\r",t->hour,t->minute,t->second); }void Delay(void){long m;for(m=0;m<50000000;m++){;}}题目2:#include <stdio.h>#include <string.h>#include <time.h>#include <stdlib.h>struct cards{char suit[10];char face[10];};typedef struct cards CARD;void Deal(CARD *wCard);void Shuffle(CARD *wCard);void FillCard(CARD wCard[],char *wFace[],char *wSuit[]);main(){char *suit[]={"Spades","Hearts","Clubs","Diamonds"};char*face[]={"A","2","3","4","5","6","7","8","9","10","jACK","Queen","King"};int i;CARD card[52];srand(time(NULL));FillCard(card,face,suit);Shuffle(card);Deal(card);}void FillCard(CARD wCard[],char *wFace[],char *wSuit[]){int i;for(i=0;i<52;i++){strcpy(wCard[i].suit,wSuit[i/13]);strcpy(wCard[i].face,wFace[i%13]);}}void Shuffle(CARD *wCard){int i,j;CARD temp;for(i=0;i<52;i++){j=rand()%52;temp=wCard[i];wCard[i]=wCard[j];wCard[j]=temp;}}void Deal(CARD *wCard){int i;for(i=0;i<52;i++)printf("%10s%10s\n",wCard[i].suit,wCard[i].face); }。

淮阴工学院c++实验报告实验八结构和链表

淮阴工学院c++实验报告实验八结构和链表

实验八结构体与链表一、实验目的和要求1.掌握结构体类型、结构体变量的基本概念;2.掌握结构体指针、结构体数组的应用;3.掌握链表的基本概念;4.掌握链表的基本操作与应用,包括建立链表、遍历链表、插入结点、删除结点、查找结点等。

二、相关知识点1.结构体类型:定义:struct 结构类型名{数据类型数据项1;数据类型数据项2;…………………….数据类型数据项n;}2.结构体变量:1.定义:(1)间接定义法──先定义结构类型、再定义结构变量struct 结构类型名结构变量;(2)直接定义法──在定义结构类型的同时定义结构变量struct 结构类型名{………}结构变量表;2.结构变量的初始化与引用:(1)如:struct std_info student={"000102","张三","男",{1980,9,20}};(2)结构变量的引用规则,对于结构变量,要通过成员运算符“.”,逐个访问其成员即结构变量.成员3.结构体指针:(1)使用指向结构变量的指针来访问结构变量的各个成员。

struct std_info *p_std=&student(2)使用指向结构数组的指针来访问结构数组struct std_info *p_std=student;4.结构体数组结构数组的每一个元素,都是结构类型数据,均包含结构类型的所有成员。

struct std_info student[3]={{“000102”, “张三”,“男”,{1980,9,20}},{“000105”,“李四”,“男”,{1980,8,15}},{“000112”, “王五”,“女”,{1980,3,10}}};5.链表的基本操作与应用:(1)建立链表:创建静态链表,创建动态链表(2)访问链表(3)插入结点(4)删除结点(5)查找结点(6)链表的释放。

三、实验内容1.定义一个学生成绩结构体类型,包含“学号”、“姓名”、“性别”、“年龄”、“班级”、“英语”、“数学”、“物理”、“总分”、“名次”等信息。

goole hack语法

goole hack语法

实验八:结构体的使用一、实验目的1. 掌握结构体的概念、定义和声明方法。

2. 掌握结构体成员的访问和修改方法。

3. 掌握结构体的内存布局和特性。

二、实验内容1. 定义一个学生信息结构体,包含姓名、学号、年龄和成绩等信息。

2. 声明一个学生信息结构体变量,并对其成员进行赋值。

3. 输出学生信息结构体变量的内容。

4. 修改学生信息结构体变量的某个成员值。

5. 实现学生信息结构体变量的排序。

三、实验步骤1. 定义学生信息结构体:c复制代码#include<stdio.h>#include<string.h>// 定义学生信息结构体struct Student {char name[20];int id;int age;float score;};2. 声明一个学生信息结构体变量,并对其成员进行赋值:c复制代码int main() {// 声明一个学生信息结构体变量 s1struct Student s1;// 对 s1 的成员进行赋值strcpy(, "Alice");s1.id = 1001;s1.age = 20;s1.score = 85.5;// 输出 s1 的内容printf("姓名:%s,学号:%d,年龄:%d,成绩:%.2f\n", , s1.id, s1.age, s1.score);return0;}3. 修改学生信息结构体变量的某个成员值:c复制代码int main() {// 声明一个学生信息结构体变量 s1struct Student s1;// 对 s1 的成员进行赋值strcpy(, "Alice");s1.id = 1001;s1.age = 20;s1.score = 85.5;// 输出 s1 的内容printf("姓名:%s,学号:%d,年龄:%d,成绩:%.2f\n", , s1.id, s1.age, s1.score);// 修改 s1 的某个成员值,例如将成绩修改为 90.0s1.score = 90.0;// 输出修改后的 s1 的内容printf("姓名:%s,学号:%d,年龄:%d,成绩:%.2f\n", , s1.id, s1.age, s1.score);return0;}。

C语言程序设计_ch8结构体等构造数据类型

C语言程序设计_ch8结构体等构造数据类型

printf(“请输入球员号码:”);
/*输入提示*/
scanf("%d",&hoopman[i].number); /*接收球员号码*/
printf(“请输入球员得分:”);
/*输入提示*/
scanf("%d",&hoopman[i].score);
/*接收球员得分*/
printf(“请输入球员上场时间:”);
{ char name[20]; /*球员的姓名*/
int number;
/*球员的号码*/
int score;
/*球员的得分*/
struct TIME
{ int hour; int minute; int second;
} stage;
/*小时*/ /*分*/ /*秒*/
对嵌套结构体的 引用必须引用到
结构体变量进行初始化,但是不限制对内部
静态变量的初始化。
例8.2 结构体变量的初始化。
#include "stdio.h"
int main()
{
struct TIME
{ int hour;
/*小时*/
int minute;
/*分*/
int second;
/*秒*/
};
struct TIME audit_begin={8,30,0};
}
for (ap= attend;ap<attend+SIZE;ap++)
{ ap->age++;
/*年龄增加一岁*/
ap->salary=(int)(1.3*ap->salary); /*工资增加30%*/
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验八结构体编程
实验目的
1.掌握结构体类型变量的定义和使用。

2.掌握结构体类型数组的概念和使用。

3.掌握结构体指针及链表的概念,初步学会对链表进行操作,学会在函数之间传送链表的方法。

4.理解共用体的概念与使用。

实验内容
1、结构体类型的变量及数组
(1)利用指向结构体的指针,遍历结构体数组,寻找第一个名字首字母是‘M’的学生,参考代码如下:
2、结构体链表
(1)建立一个创建单链表的函数
(2)在单链表中查找一个会员
定义一个函数find。

该函数能在head指向的链表中,查找一个名字和s所指字符串完全一样的会员,并返回其地址。

若未找到,则返回NULL。

代码如下:
struct CStudent * find(struct CStudent *head, char *s){
struct CStudent *p=head;
while( p!=NULL && strcmp(p->name, s)!=0 ) p=p->next;
return p;
}
而在主调函数中可以按如下的方式来调用find函数:
p=find(head, "Sun");
if(p==NULL) printf("没找到\n");
完整的参考代码如下:
(3)设计一个函数,在链表的当前节点之后插入一个节点。

该函数的功能是在链表的当前节点插入一个节点,当前节点还有要插入的数据以函数的形式参数传给函数。

函数原型
data *Insert_link((data *op_list, int value);
其中data数据类型定义如下:
//Link list struct
typedef struct data{
int value;
struct data *next;
}data;
结构体中的value成员为所存储的数据,next存储链表下一个节点的地址,如果不存在下一个节点,next值为NULL。

参数说明
op_list为链表需要插入数据的当前节点;
value 为要插入的数据。

需要在链表当前节点建立一个新节点,将需要插入的数据存入其中,并将新节点插入到链表中。

返回值
NULL 增加节点失败
新节点地址插入成功,正常返回。

解读:
函数功能1)在链表的当前节点之后插入一个节点,说明该函数的形参有两个,一个是当前节点,一个是插入节点,插入节点作为形参可以考虑两种类型,一是指向节点的指针类型,那么传递过来的代插入节点实参应该在主调函数中为该节点申请空间,并为该节点的成员赋值;一种形参是节点的成员值,那么应该在该函数中为该节点申请空间,并将传递过来的实参值赋值给该节点的成员,题目要求的形参形式是int,为成员值,因此应在该函数中为该节点申请空间。

通常链表的函数的返回值为指向头节点的指针,即头节点的地址,但具体实现的时候应看题目的具体要求,该函数的返回值是新插入节点的地址,即指向插入节点的指针,即*data.
算法:
1、为新插入节点分配空间
2、为新插入节点的成员赋值
3、将新节点temp_node插入到当前节点op_list之后,考虑当前节点的情况,存在或不存在
(IS NULL?),若存在,则
1)op_list->next=temp_node->next
2)temp_node->next=op_list
3)op_list=op_list->null
若不存在,则
1) op_list = temp_node;
2) op_list->next=NULL;
参考代码:
/********************************************************
* 链表的插入*
* 2013-04-20 *
* *****************************************************/
#include <stdio.h>
#include <malloc.h> //用于malloc函数
#include <stdlib.h> //用于malloc函数
#include <string.h>
#include <time.h> //C/C++中的日期和时间头文件
//Link list struct
typedef struct data {
int value;
struct data *next;
} data;
//student's function
data *Insert_link(data * op_list, int value);
/****************************************
* Insert value in link list *
* Return value: *
* NULL : Failed to call mallo *
* not NULL : Normal return *
* *************************************/
data *Insert_link(data * op_list, int value)
{
data *temp_node; //定义一个指向data型的指针,用来指向新插入的节点
temp_node = (data *) malloc(sizeof(data)); //为新节点分配空间
if (temp_node == NULL) { //为新节点分配空间失败,返回NULL
return NULL;
}
temp_node->value = value; //为新节点的value成员赋值,将形参value赋值。

if (op_list == NULL) { //将新节点插入当前节点之后,当前节点不存在op_list = temp_node; //当前节点直接指向新节点
op_list->next = NULL; //为新节点next成员赋值,因当前节点不存在,因此没有后续节点,赋值为null
return op_list; //返回新插入节点
}
temp_node->next = op_list->next; //当前节点存在,新节点的next指向当前节点的后继op_list->next = temp_node; //当前节点的后继指向新节点
op_list = op_list->next; //新节点成为当前节点
return op_list; //返回当前节点
}
2、自行编程
(1) 有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,(用结构数组
来存放),从键盘输入10个学生数据,并输出10个学生数据。

(2)建立一个包含10个节点的链表,每个结点包括:学号、姓名、性别、年龄。

输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则输出找到。

相关文档
最新文档