C/C++程序设计实验报告5 | 结构体和指针实验

news2024/12/27 10:23:21

本文整理自博主本科大一《C/C++程序设计》专业课的课内实验报告,适合C语言初学者们学习、练习。

编译器:gcc 10.3.0

----

注:

1.虽然课程名为C++程序设计,但实际上当时校内该课的内容大部分其实都是C语言,C++的元素最多可能只是体现在输入输出。

2.博主当时给出的实验代码可能并不是最优解,这里只是整理并未重编,因此各位前来学习的小伙伴们注意辨别。

目录

一、实验目的

二、实验内容

1、定义结构体,包含学生学号,姓名和3门课成绩。定义一个函数,求若干学生的平均成绩。 主函数负责结构体数组的定义和输入。

2、主函数输入3个整数a,b,c,按先大后小的顺序输出。要求用函数处理,而且用指针类型的数据作函数参数。

3、定义指针数组,使其指向字符串常量:char * name[4]={“Follow”,,“Great”,“FORTRAN”,“Computer”},并进行排序。实际是对指针指向的排序,字符串不动!

4、编写两个函数,实现链表的建立和输出,主函数调用。 

三、实验总结 


一、实验目的

1.掌握结构体定义和使用,掌握结构体数组的使用

2.掌握指针基本概念;指针访问变量,指针访问一维数组;

3.掌握指针作为函数参数;指针数组的应用:对字符串进行排序

4.熟悉利用结构体和指针实现动态链表

5.进一步巩固函数的定义和调用


二、实验内容

1、定义结构体,包含学生学号,姓名和3门课成绩。定义一个函数,求若干学生的平均成绩。 主函数负责结构体数组的定义和输入。

代码:

#include<iostream>
#include<string.h>
using namespace std;
//1,定义结构体,包含学生学号,姓名和3门课成绩。定义一个函数,求若干学生的平均成绩。 
//主函数负责结构体数组的定义和输入。

typedef struct student {
	int sno;
	char name[20];
	float grade[3];
}STU; 
float avg(STU x){
	
	return (x.grade[0]+x.grade[1]+x.grade[2])/3;
}
int main(){
	STU stu[81];
	cout<<"请输入学生信息:"<<endl;
	int i = 0;
	char judge;
	do{
		cout << "sno:";
		cin >> stu[i].sno;
		cout << "name:";
		fflush(stdin);
		gets(stu[i].name);
		for(int j=0;j<3;j++){
			cout << "grade " << j+1 << ": ";
			cin >> stu[i].grade[j];	
		}
		cout << "输入Y继续录入学生信息,输入N退出录入..." << endl;
		cin >> judge;
		if(judge == 'Y'){
			i++;
		}
	}while(judge == 'Y');
	
	for(int k=0;k<=i;k++){
		cout << "第 " << k+1 << "位的学生平均成绩是:" << endl << endl;;
		cout << avg(stu[k]) << endl;
	}
	
	
	return 0;
}

运行结果:

2、主函数输入3个整数a,b,c,按先大后小的顺序输出。要求用函数处理,而且用指针类型的数据作函数参数。

代码:

#include<iostream>
using namespace std;

//2,主函数输入3个整数a,b,c,按先大后小的顺序输出。要求用函数处理,而且用指针类型的数据作函数参数。

void pointerSort(int *p,int *q,int *t){
	int *tmp;
	if(*p < *q){
		tmp = p;
		p = q;
		q = tmp;
	}
	if(*p < *t){
		tmp = p;
		p = t;
		t = tmp;
	}
	if(*q < *t){
		tmp = q;
		q = t;
		t = tmp;
	}
	cout << *p << " " << *q << " " << *t;
}
int main(){
	int a,b,c;
	int *p,*q,*t;
	p = &a;
	q = &b;
	t = &c;
	cin >> a >> b >> c;
	pointerSort(p,q,t);
	return 0;
}

运行结果:

3、定义指针数组,使其指向字符串常量:char * name[4]={“Follow”,,“Great”,“FORTRAN”,“Computer”},并进行排序。实际是对指针指向的排序,字符串不动!

要求:函数调用实现。

代码:

#include <stdio.h>
#include <string.h>
void sort(char* name[],int n);
void print(char* name[],int n);

int main()
{
	char* name[]={"Follow","Great","FORTEAN","Computer"};
	int n=4;
	sort(name,n);
	print(name,n);
	
}

void sort(char* name[],int n)
{
	char* tmp;
	int i,j,k;
	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i+1;j<n;j++)
		{
			if(strcmp(name[k],name[j])>0)
				k=j;
		}
		if(k!=i)
		{
			tmp=name[i];
			name[i]=name[k];
			name[k]=tmp;
		}
	}
}
void print(char* name[],int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		printf("%s\n",name[i]);
	}
}

运行结果:

4、编写两个函数,实现链表的建立和输出,主函数调用。 

代码:

#include <stdlib.h>
#include <stdio.h>

struct node{
	int data;
	struct node *next;
};
int initList(node *h){
	h->next=NULL;
	return 1;
}
int creatList(node *h){
	node *p,*s;
	int x;
	p=h;
	for(int i=0;i<5;i++)
	{
		scanf("%d",&x);
		if(x==0){
			printf("finish creat List!\n");
			p->next=NULL;
			return 1;
		}
		s=(node*)malloc(sizeof(node));
		s->data=x;
		p->next=s;
		p=s;
	}
	p->next=NULL;
	return 1;
}
int ShowList(node* TList){
	node *pList;
	pList=TList;
	pList=pList->next;
	while(pList->next != NULL){
		printf("%d ",pList->data);
		pList=pList->next;
	}
	printf("\n");
	printf("Print Finish!\n");
	return 1;
}
int main(){
	node nList,*pList;//定义链表
	pList=&nList;
	if(initList(pList)==1){
		printf("Init success!\n");
	}
	else{
		printf("Init error!\n");
		return -1;
	}
	creatList(pList);//创建链表
	ShowList(pList);	
	return 0;
}

运行结果:


三、实验总结 

  1. 掌握了结构体和结构体数组的使用。
  2. 掌握了指针基本概念以及如何用指针访问变量、一维数组。
  3. 掌握了指针数组的应用。
  4. 熟悉利用结构体和指针实现动态链表。
  5. 进一步巩固函数的定义和调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1621469.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2. 多机多卡运行nccl-tests对比分析

系列文章 第2章 多机多卡nccl-tests 对比分析 目录 系列文章前言一、本地环境1. 网卡接口2. RDMA3. TOPO信息pcie信息nvidia-smi topo -m 二、nccl-test对比分析1. 相关环境变量2. 不同情况的对比3. 总结与分析 前言 NCCL&#xff08;NVIDIA Collective Communications Libra…

ruoyi-nbcio-plus基于vue3的flowable收回任务后重新进行提交表单的处理

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

CUDA入门系列课程,从最基础着手

CUDA入门系列课程&#xff0c;从最基础着手&#xff0c;突出的就是一个字“细”&#xff01;&#xff01; github项目包含代码、博客、课件pdf下载地址&#xff1a;https://github.com/sangyc10/CUDA-code! 在这里插入图片描述 CUDA编程基础入门系列 https://github.com/sang…

Java冲突

本身 父类 接口(多) 如果出现同样名字的方法,就会出现冲突 * 情况描述1: * 当一个类,继承了父类,实现了某接口,父类中的成员方法和接口中的方法重名 * 解决方法: * 子类就近选择父类成员方法 亲爹优先原则 * *使用格式: * 父类:super.方法名 * 父接口:父接口名.super.方…

指针学习总结

当指针本身定义的类型不同十&#xff0c;指向的一次性取值长度也不同 数组元素的指针 数组存放字符串 数组存放字符串时存放在栈区&#xff0c;sizeof(str1) 128字节 字符指针指向字符串 str2此时存放的是h的地址&#xff0c;因此sizeof(str2) 4字节或者8字节 并且文字常量…

快速回复app是什么样

在电商领域&#xff0c;掌握一些必备的软件工具是提高工作效率、优化运营流程以及提升用户体验的关键。本文将为您介绍做电商必备的几个软件&#xff0c;帮助您更好地开展电商业务。 ​ 快速回复APP&#xff1a;重新定义沟通效率 在快节奏的现代社会中&#xff0c;人们对于沟通…

Python实现“黑猫投诉平台,舆论监控系统”

黑猫投诉平台&#xff0c;舆论监控系统 BuzzMonitor https://github.com/nangongchengfeng/BuzzMonitor.git 简介 "黑猫投诉"舆论监控系统是一款专为快速识别和响应网络投诉而设计的应用&#xff0c;旨在帮助企业或机构第一时间掌握公众意见和反馈。通过实时监控网…

C++:运算符重载和“const”成员

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;运算符重载》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 文章目录 赋值运算符重载1. 运算符重载2.赋值运算符重载第一个点第二个点&…

C++感受5-HelloWorld 函数版

借助 Hello (std::string_view XXX) 函数&#xff0c;快速向你心目中的女神问好。 视频 ffls08-HelloWorld-函数版 函数简述 函数用于封装程序中需要反复执行的事情。事情每一次执行时&#xff0c;所需要的初始数据的变化&#xff0c;由函数参数体现。 定义函数时所写的参数&…

小孩子不懂事,写着玩的

目录 Web攻防 特有漏洞 ASP安全 ASPX&#xff08;.NET&#xff09;安全 PHP安全 JavaWeb安全 JS&#xff0c;Node.js安全 Java安全 Python安全 通用漏洞 SQL注入 MySQL-root高权限读写注入 PostgreSQL-高权限读写注入 MSSQL-sa高权限读写执行注入 SQL注入体系 o…

虹科Pico汽车示波器 | 免拆诊断案例 | 2006 款林肯领航员车发动机怠速抖动

故障现象 一辆2006款林肯领航员车&#xff0c;搭载5.4 L发动机&#xff0c;累计行驶里程约为26万km。该车因发动机怠速抖动故障进厂维修&#xff0c;维修人员更换了火花塞、点火线圈及凸轮轴位置传感器&#xff0c;清洗了积炭和喷油器&#xff0c;故障依旧&#xff0c;于是向笔…

Linux系统硬盘读写慢,如何排查

若服务器硬盘读写慢&#xff0c;导致处理性能降低&#xff0c;用户响应慢&#xff08;例如&#xff1a;ssh登录操作文件&#xff0c;处理很慢说明磁盘很慢&#xff09; 1.查看硬盘是否繁忙 top 若值比较大&#xff0c;说明当前硬盘比较繁忙&#xff0c;有大量读写操作&#x…

PO框架【自动化测试】

对象&#xff1a;Tpshop商城 需求&#xff1a;更换头像 操作步骤&#xff1a; 个人信息–头像–上传图片–图片确认–确认保存 核心代码&#xff1a; # 进入frame框架[不熟] driver.switch_to.frame(driver.find_element_by_xpath(//*[id"layui-layer-iframe1"]))…

链式存储的特点与设计由来

简介 案例引入 相关术语 两种结构的区别与实现 注&#xff1a; 特点

迪拜Token2049展会圆满落幕,MVP成唯一MEMECOIN项目,闪耀全场!

近日&#xff0c;据多家媒体报道&#xff0c;于全球财富聚集地迪拜举行的全球性大型区块链会议TOKEN2049圆满落幕。来自全球的5000多家公司和100多个国家10000名参与者共同参会&#xff0c;讨论未来30年至50年关于区块链行业的宏大未来。 新晋MEMECOIN项目MAGA VP&#xff08;…

希捷HDD最新财报:销售同比下降11%,环比增长6%,4Q24前景看好

Seagate Technology Holdings plc公布了截至2024年3月29日的第三财季财务业绩。 “随着云需求改善、我们强大的运营纪律和价格执行&#xff0c;希捷3月季度的营收增长了6%&#xff0c;非GAAP每股收益较上一季度翻了一番多。这种组合为我们市场复苏时回归目标利润率奠定了基础。…

【C++】string常用函数总结及其模拟实现

目录 一、String的构造 二、String的大小和容量 三、String的字符串比较 四、string的访问 五、String的字符插入 六、string拼接字符串 七、string的删除 八、string的查找 九、string的分割 模拟实现 一、String的构造 string()&#xff1a;生成空字符串&#xff1…

Llama3 中文通用 Agent 微调模型来啦!(附手把手微调实战教程)

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 基于大家…

文本语音互相转换系统设计

title: 文本语音互相转换系统设计 date: 2024/4/24 21:26:15 updated: 2024/4/24 21:26:15 tags: 需求分析模块化设计性能优化系统安全智能化跨平台区块链 第一部分&#xff1a;导论 第一章&#xff1a;背景与意义 文本语音互相转换系统的定义与作用 文本语音互相转换系统是…

js进行数据移除性能比较(splice,map)

当使用 splice() 方法处理大量数据时&#xff0c;确实会遇到性能问题&#xff0c;因为它涉及到移动数组中的元素&#xff0c;导致操作的时间复杂度为 O(n)。对于大量数据&#xff0c;频繁的插入和删除可能会导致性能下降。 1、设置数组数据为10000&#xff0c;使用splice移除数…