Lenguaje C/c++ (estructura de datos) Ejemplos de revisión de puntos clave del lenguaje C (1/7)

Propósito experimental y requisitos:

Familiarizado con el método de usar el tipo de estructura para personalizar variables;

Use la palabra clave sizeof para calcular el ancho de varios tipos de datos;

Competencia en el uso de las funciones de asignación de memoria dinámica malloc y free, etc.;

Familiarizado con el método básico de uso del lenguaje C para operar una lista enlazada individualmente;

Contenido del experimento:

Experimento 1 : Definir variables usando tipos de estructura

Propósito: Familiarizarse con el método de uso de variables personalizadas de tipo de estructura

Contenido: defina la estructura s1, que puede almacenar los datos de un estudiante, que consisten en el número de estudiante, el nombre (la longitud del nombre no supera los 15 caracteres en inglés), la edad y las calificaciones de 5 materias. Ocupa un total de 64 bytes, entre los cuales el número de alumno ocupa 4 bytes, el nombre ocupa 16 bytes, la edad ocupa 4 bytes y los resultados de cada asignatura ocupan 8 bytes. class1 es una matriz de estructura que representa una clase que puede almacenar 50 estudiantes. Para completar la llamada (entrada, salida) de cada componente de la estructura.

Experimento 2 : use la palabra clave sizeof para calcular el ancho de varios tipos de datos

Propósito: Familiarizarse con el uso de sizeof

Contenido: Escribir un programa para probar directamente el ancho de los tipos de datos básicos en lenguaje C como enteros, caracteres, etc. en la función principal, y medir el número de bytes ocupados por las variables de tipo de estructura definidas en el Experimento 1.

Pregunta experimental 3 : Llamada de funciones relacionadas con la asignación dinámica de memoria

Propósito: Competencia en el uso de las funciones de asignación de memoria dinámica malloc y free

Contenido: para varios tipos de datos, use malloc para asignar memoria dinámicamente en la función principal

Guardar, usar gratis para liberar espacio antes de que finalice el programa.

Pregunta experimental 4 : Construya una lista enlazada simple usando el tipo de estructura

Propósito: obtener una vista previa de la estructura relacionada de la lista enlazada que se aprenderá en el Capítulo 2 y familiarizarse con el método básico de uso del lenguaje C para operar la lista enlazada única

Contenido: Después de depurar el primer capítulo del ejercicio 9, el diagrama muestra la lista enlazada representada por el programa, marcando el contenido y la dirección de la variable cabeza, y el contenido de la expresión cabeza->siguiente->siguiente y la dirección de memoria. representa.

Pasos y procedimientos experimentales:

Pregunta experimental 1:

#include<stdio.h> //El Experimento 1 usa el tipo de estructura para definir variables

 estudiante de estructura

{

 char nombre[10]; //nombre

 int id; // Número de estudiante

 int edad; // edad

 float yu_wen; // Puntuación china

   float shu_xue; //puntuación matemática

  float ying_yu;//partitura en inglés

 float shu_xue_fen_xi; //resultados del análisis matemático

 float shu_ju_jie_gou ;//resultados de la estructura de datos

};

estudiante s1;

int principal()

{

estudiante de estructura s1[100];

 int i, n;

  printf("¿Cuantos estudiantes quieres ingresar?\n");

   escaneo("%d",&n);

printf("¡Recibido!\n");

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

 {

  printf("Por favor ingrese la informacion basica del estudiante:\nNombre:");

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

  printf("Numero de estudiante:");

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

  printf("edad:");

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

  printf("Puntuacion en chino:");

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

   printf("Puntuacion matematica:");

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

   printf("Puntuacion en ingles:");

  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函数撤销。

Supongo que te gusta

Origin blog.csdn.net/qq_59819866/article/details/131450512
Recomendado
Clasificación