本文整理自博主本科大一《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”},并进行排序。实际是对指针指向的排序,字符串不动!)
一、实验目的
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;
}
运行结果:
三、实验总结
- 掌握了结构体和结构体数组的使用。
- 掌握了指针基本概念以及如何用指针访问变量、一维数组。
- 掌握了指针数组的应用。
- 熟悉利用结构体和指针实现动态链表。
- 进一步巩固函数的定义和调用。