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

本文整理自博主本科大一《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. 进一步巩固函数的定义和调用。
  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一份实验报告,主要涉及指针结构体。 ## 实验名称:指针结构体 ## 实验目的 - 理解指针结构体的概念 - 学会使用指针结构体进行编程 - 掌握指针结构体的常见用法 ## 实验内容 ### 1. 指针 指针是一种特殊的变量,它存储了一个地址,该地址指向内存中的另一个变量。指针可以用于传递变量的地址,从而实现函数间的参数传递和数据共享。 指针的声明方式为: ```c type *pointer_name; ``` 其中,`type`表示指针所指向的变量类型,`pointer_name`表示指针的名称。 指针的初始化方式为: ```c type var_name; type *pointer_name = &var_name; ``` 其中,`&`表示取地址符,`var_name`表示要指向的变量名称。 指针的使用方式为: ```c type var_name; type *pointer_name = &var_name; *pointer_name = value; ``` 其中,`*`表示解引用符,`value`表示要赋给变量的值。 ### 2. 结构体 结构体是一种用户自定义的数据类型,可以包含多个不同类型的成员变量。结构体的声明方式为: ```c struct struct_name { type member1; type member2; ... }; ``` 其中,`struct_name`表示结构体的名称,`member1`和`member2`表示结构体的成员变量,可以是任意类型。 结构体的初始化方式为: ```c struct struct_name var_name = {value1, value2, ...}; ``` 其中,`value1`和`value2`表示结构体的成员变量的值。 结构体的使用方式为: ```c struct struct_name var_name = {value1, value2, ...}; var_name.member1 = new_value1; var_name.member2 = new_value2; ``` 其中,`new_value1`和`new_value2`表示要赋给成员变量的新值。 ## 实验结果 本次实验我们使用指针结构体编写了一个程序,实现了以下功能: 1. 定义了一个名为`student`的结构体,包含学生的姓名、年龄和成绩三个成员变量。 2. 使用指针动态分配了一个`student`结构体对象,并对其进行初始化。 3. 使用指针访问结构体成员变量,并输出结果。 4. 释放动态分配的内存。 程序代码如下: ```c #include <stdio.h> #include <stdlib.h> struct student { char name[20]; int age; float score; }; int main() { struct student *p = (struct student *)malloc(sizeof(struct student)); if (p == NULL) { printf("Memory allocation failed!\n"); return -1; } strcpy(p->name, "Jack"); p->age = 18; p->score = 90; printf("Name: %s\n", p->name); printf("Age: %d\n", p->age); printf("Score: %.2f\n", p->score); free(p); return 0; } ``` ## 实验结论 本次实验我们深入学习指针结构体的概念,并掌握了指针结构体的常见用法。通过实现一个简单的程序,我们进一步加深了对指针结构体的理解,为以后的编程工作打下了坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值