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

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

编译器:gcc 10.3.0


注:

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

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

目录

一、实验目的

二、实验内容

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

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

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

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

三、实验总结


一、实验目的

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

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

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

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

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


二、实验内容

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

代码:

cpp 复制代码
#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,按先大后小的顺序输出。要求用函数处理,而且用指针类型的数据作函数参数。

代码:

cpp 复制代码
#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"},并进行排序。实际是对指针指向的排序,字符串不动!

要求:函数调用实现。

代码:

cpp 复制代码
#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、编写两个函数,实现链表的建立和输出,主函数调用。

代码:

cpp 复制代码
#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. 进一步巩固函数的定义和调用。
相关推荐
小俊俊的博客13 分钟前
海康RGBD相机使用C++和Opencv采集图像记录
c++·opencv·海康·rgbd相机
嵌入式科普27 分钟前
十三、从0开始卷出一个新项目之瑞萨RZN2L串口DMA接收不定长
c语言·stm32·瑞萨·e2studio·rzn2l
_WndProc28 分钟前
C++ 日志输出
开发语言·c++·算法
薄荷故人_30 分钟前
从零开始的C++之旅——红黑树及其实现
数据结构·c++
m0_7482400230 分钟前
Chromium 中chrome.webRequest扩展接口定义c++
网络·c++·chrome
biter008832 分钟前
opencv(15) OpenCV背景减除器(Background Subtractors)学习
人工智能·opencv·学习
qq_4335545437 分钟前
C++ 面向对象编程:+号运算符重载,左移运算符重载
开发语言·c++
努力学习编程的伍大侠42 分钟前
基础排序算法
数据结构·c++·算法
yuyanjingtao1 小时前
CCF-GESP 等级考试 2023年9月认证C++四级真题解析
c++·青少年编程·gesp·csp-j/s·编程等级考试
Code哈哈笑2 小时前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习