c语言/c++(数据结构篇) 之 C语言要点回顾实例(1/7)

实验目的及要求:

熟悉利用结构体类型自定义变量的方法;

使用sizeof关键字计算各种数据类型宽度;

熟练运用动态分配内存函数malloc和free等;

熟悉利用C语言操作单链表的基本方法;

实验内容:

实验题1:利用结构体类型定义变量

目的:熟悉利用结构体类型自定义变量的方法

内容:定义结构体s1,其中可以存放一个学生的数据,该数据由学号、姓名(姓名长度不超过15个英文字符)、年龄、5科成绩构成。共占64个字节,其中学号占4个字节,姓名占16个字节,年龄占4个字节,每科成绩占8个字节。class1是结构体数组,表示一个班,可以存放50个学生的情况。要完成对结构体中各分量的调用(输入、输出)。

实验题2:使用sizeof关键字计算各种数据类型宽度

目的:熟悉sizeof的使用方法

内容:编写一个程序,直接在主函数中测试整形、字符型、等C语言中基本数据类型宽度,并测量实验1中所定义的结构体类型变量所占字节数。

实验题3:动态分配内存相关函数的调用

目的:熟练运用动态分配内存函数malloc和free

内容:针对各种数据类型,调用在主函数内利用malloc动态分配内

存,在程序结束前利用free释放空间。

实验题4:利用结构体类型构造简单链表

目的:预习第二章将要学习的链表相关结构,熟悉利用C语言操作单链表的基本方法

内容:调试第一章课后习题9,图示出程序所表示链表,标出head变量的内容及其地址,以及表达式head->next->next的内容及其表示的内存地址。

实验步骤与程序:

实验题1:

#include<stdio.h> //实验一利用结构体类型定义变量

 struct student

{

 char name[10];         //名字

 int id;                  //学号

 int age;                 //年龄

 float yu_wen;    //语文成绩

   float shu_xue; //数学成绩

  float ying_yu;//英语成绩

 float shu_xue_fen_xi; //数学分析成绩

 float shu_ju_jie_gou ;//数据结构成绩

};

student s1;

int main()

{

struct student s1[100];

 int i,n;

  printf("你想录入几个学生的信息呢?\n");

   scanf("%d",&n);

printf("收到!\n");

 for (i = 0; i < n; i++)

 {

  printf("请输入学生基本信息:\n姓名:");

  scanf("%s", &s1[i].name, 50);

  printf("学号:");

  scanf("%d", &s1[i].id);

  printf("年龄:");

  scanf("%d", &s1[i].age);

  printf("语文成绩:");

  scanf("%f", &s1[i]. yu_wen);

   printf("数学成绩:");

  scanf("%f", &s1[i].shu_xue);

   printf("英语成绩:");

  scanf("%f", &s1[i].ying_yu);

   printf("数学分析成绩:");

  scanf("%f", &s1[i].shu_xue_fen_xi);

   printf("数据结构成绩:");

  scanf("%f", &s1[i].shu_ju_jie_gou);

    printf("该学生信息录入成功\n");

 }

 printf("信息如下:\n");

 for (i = 0; i < n; i++)

 {printf("学号:%d   姓名:%s   年龄:%d\n   语文成绩:%.2f   数学成绩:%.2f  英语成绩:%.2f 数学分析成绩:%.2f 成绩:%.2f   \n", s1[i].id, s1[i].name, s1[i].age, s1[i].yu_wen,s1[i].shu_xue,s1[i].ying_yu,s1[i].shu_xue_fen_xi,s1[i].shu_ju_jie_gou);}

}

实验题2:

#include<stdio.h> //实验一利用结构体类型定义变量

 struct student

{

 char name[10];         //名字

 int id;                  //学号

 int age;                 //年龄

 float yu_wen;    //语文成绩

   float shu_xue; //数学成绩

  float ying_yu;//英语成绩

 float shu_xue_fen_xi; //数学分析成绩

 float shu_ju_jie_gou ;//数据结构成绩

};

student s1;

int main()

{

struct student s1[100];

 int i,n;

  printf("你想录入几个学生的信息呢?\n");

   scanf("%d",&n);

printf("收到!\n");

 for (i = 0; i < n; i++)

 {

  printf("请输入学生基本信息:\n姓名:");

  scanf("%s", &s1[i].name, 50);

  printf("学号:");

  scanf("%d", &s1[i].id);

  printf("年龄:");

  scanf("%d", &s1[i].age);

  printf("语文成绩:");

  scanf("%f", &s1[i]. yu_wen);

   printf("数学成绩:");

  scanf("%f", &s1[i].shu_xue);

   printf("英语成绩:");

  scanf("%f", &s1[i].ying_yu);

   printf("数学分析成绩:");

  scanf("%f", &s1[i].shu_xue_fen_xi);

   printf("数据结构成绩:");

  scanf("%f", &s1[i].shu_ju_jie_gou);

    printf("该学生信息录入成功\n");

 }

 printf("信息如下:\n");

 for (i = 0; i < n; i++)

 {

  printf("学号:%d   姓名:%s   年龄:%d\n   语文成绩:%.2f   数学成绩:%.2f  英语成绩:%.2f 数学分析成绩:%.2f 成绩:%.2f   \n", s1[i].id, s1[i].name, s1[i].age, s1[i].yu_wen,s1[i].shu_xue,s1[i].ying_yu,s1[i].shu_xue_fen_xi,s1[i].shu_ju_jie_gou);

 }

 printf("student 结构体类型所占内存空间的大小:%d\n", sizeof(student));

}

实验题3:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

typedef struct s1

{int buf[50];

 int size;

}s;

void func1(s* p)

{

 p = (s*)malloc(sizeof(s));

 p->size = 10;

 return;

}

s* func2(void)

{

 s* p;

 p = (s*)malloc(sizeof(s));

 p->size = 10;

 return p;

}

void func3(s** p)

{

 *p = (s*)malloc(sizeof(s));

 (*p)->size = 10;

 return;

}

int main(int argc, const char * argv[]) {

 s *p1 = NULL;

 s *p2 = NULL;

 s *p3 = NULL;

 func1(p1);

 p2 = func2();

 func3(&p3);

 if (p1 == NULL)

 { printf("p1=NULL\n");}

 else

 {printf("p1->size:%d\n", p1->size);}

 if (p2 == NULL)

 {printf("p2=NULL\n");}

 else

 {printf("p2->size:%d\n", p2->size);}

 if (p3 == NULL)

 {printf("p3=NULL\n");}

 else

 {printf("p3->size:%d\n", p3->size);}

 return 0;}

 void func_free(s* p)

{

 free(p);

 return;

}

实验4:

#include <iostream>

using namespace std;

struct Node{

 Node(int data) :data(data), next(NULL) {}

 int data;

 Node *next;

};

int main()

{

 Node *head = new Node(1);

 head->next = new Node(2);

 head->next->next = new Node(3);

 head->next->next->next = new Node(4);

 Node *p = head;

 while (p!=NULL) {

  cout << p->data << "->";

  p = p->next; 

 }

 cout<< endl;

 system("pause");

 return 0;

}

运行结果:

实验题1:

实验题2:

实验题3:

实验题4:

结果分析与讨论:

  1. C中定义一个结构体类型要用typedef,先声明结构体类型再定义变量名并且在声明类型的同时定义变量
  2. sizeof关键字计算各种数据类型宽度,比如我的这个程序语句是sizeof(student)。
  3. 熟练运用动态分配内存函数malloc和free等;malloc所分配的是一块连续的内存,以字节为单位,并且不带任何的类型信息。 free用于将动态内存撤销。
  4. 如果要查找某结点则需要对链表中的结点进行逐个遍历,如果要更改某结点的数据:则需要遍历找到该结点,然后直接更改数据的值。向链表中插入节点:将新结点的指针指向插入位置后的结点,将插入位置前的结点的next指针指向插入结点。而链表删除节点:将结点从链表中摘下来,可以利用free函数撤销。

猜你喜欢

转载自blog.csdn.net/qq_59819866/article/details/131450512