《数据结构》实验报告(一)之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

   

{

    int number;

    char name[16];

    int age;

    double score[5];

};

int main()

{

    struct _student s1;

    struct _student class[50];

}

实验题2

#include<stdio.h>

struct _student

{

    int number;

    char name[16];

    int age;

    double score[5];

};

int main()

{

    char ch = 0;

    short int si = 0;

    int i = 0;

    long int li = 0;

    float f = 0;

    double d = 0;

    int arr[10] = { 0 };

    struct _student s1 = { 0 };

    struct _student class1[50] = { 0 };

    printf("sizeof(char)=%d,sizeof(ch)=%d\n", sizeof(char), sizeof(ch));

    printf("sizeof(short int)=%d,sizeof(int)=%d,sizeof(long int)=%d\n", sizeof(si), sizeof(i), sizeof(li));

    printf("sizeof(float)=%d,sizeof(double)=%d,sizeof(int arr[10])=%d\n", sizeof(f), sizeof(d), sizeof(arr));

    printf("sizeof(struct _student)=%d,sizeof(array struct _student[50])=%d\n", sizeof(s1), sizeof(class1));

    return 0;

}

实验题3

#include<stdlib.h>//宏定义_MAX_PATH

#include <stdio.h>

int main(void)

{

    char* string;

    string = malloc(_MAX_PATH);//动态分配内存

        if (string == NULL)

            printf("Insufficient memory available\n");

        else

        {

            printf("Memory space allocated for path name\n");

            free(string);

            printf("Memory freed\n");

        }

}

/*单一内存动态分配*/

#include <stdio.h>

int main(void)

{

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

    if (p == NULL)

    {

        return 0;

    }

    *p = 5;

    printf("%d\n", *p);

    free(p);

    return 0;

}

#include <stdlib.h>

/*一维数组内存动态分配*/

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

    int i;

    double* p = (double*)malloc(sizeof(double) * 10);

    double* array = p;

    if (array == NULL)

    {

        return 0;

    }

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

    {

        array[i] = i + 1;

    }

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

    {

        printf("%.2f", array[i]);

    }

       

    free(p);

    return 0;

}

实验题4

#include <stdio.h>

typedef struct _node

{

    int data;

    struct _node* next;

}Node;

int main()

{

    Node* head, a, b, c;

    a.data = 1;

    a.next = &b;

    b.data = 2;

    b.next = &c;

    c.data = 3;

    c.next = NULL;

    head = &a;

    while (head != NULL)

    {

        printf("%d\n", head->data);

        head = head->next;

    }

    return 0;

}

运行结果:

1.

2.

3.

4.

结果分析与讨论:

        通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去"掩盖"程序中的错误,而不是尽可能多地发现程序中存在的问题。自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

了一li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值