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. 进一步巩固函数的定义和调用。
相关推荐
ヾ慈城3 小时前
【数据结构 - 二叉树】
c语言·数据结构·算法·链表
吉拉尔3 小时前
昇思25天学习打卡营第06天 | 网络构建
学习
卡戎-caryon3 小时前
【项目实践】贪吃蛇
c语言·数据结构·算法
Easonmax3 小时前
【C++】 解决 C++ 语言报错:Undefined Reference
java·开发语言·c++
计算机平台作业答案讲解3 小时前
QT实现GIF动图显示(小白版,可直接copy使用)
服务器·开发语言·数据结构·数据库·c++·qt·动态规划
冲鸭嘟嘟可3 小时前
【数据结构】使用C语言 从零实现一个栈的数据结构
c语言·数据结构·算法
ᯤ⁶ᴳ⁺⁵²⁰ ⌯˃̶ᗜ˂̶⌯ಣ3 小时前
分支与循环
c语言
Java追光着3 小时前
谷粒商城学习-07-虚拟机网络设置
服务器·网络·学习·谷粒商城
峰上踏雪3 小时前
\r:回车符 与 \n:换行符
linux·运维·c++
github_zwl3 小时前
昇思25天学习打卡营第6天|linchenfengxue
人工智能·学习·目标跟踪