数据结构实验报告01

时间:2024.3.19

实验一

1、

#include<stdio.h>

void main()

{

       char c1,c2;

       c1=97;

       c2=98;

       printf("%c %c",c1,c2);

}

结果:a b

2、

#include<stdio.h>

void main()

{

       int i,j,m,n;

       i=8;

       j=10;

       m=++i;

       n=j++;

       printf("%d,%d,%d,%d",i,j,m,n);

}

结果:9,11,9,10

(1)9,11,8,11

(2)8,10

(3)9,11

(4)8,10,8,10

(5)i=9,j=9,m=8,n=-9

3、

#include<stdio.h>

main()

       int i=3,j=2,a,b,c,d;

       d=(i*3,j=10);

       a=(--i==j++)? --i:++j;

       b=i++;

       c=j;

       printf("%d,%d,%d,%d\n",a,b,c,d);

}

结果:12,2,12,10

实验二

1、

#include<stdio.h>

void main()

{

       int i;

       char j;

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

       {

              scanf("%c",&j);

              printf("%c",j);

       }

}

(1)    a b c d

(2)    abcdefghi

2、

(1)使用char类型输入

#include<stdio.h>

void main()

{

       char a;

       scanf("%c",&a);

       getchar();

       putchar(a);

       printf(" %d\n",a);

}

输入:d

输出:d 100

(2)使用int类型输入

#include<stdio.h>

void main()

{

       int a;

       scanf("%c",&a);

       getchar();

       putchar(a);

       printf(" %d\n",a);

}

输入:d

输出:d -858993564

实验三

1、编写一程序,从键盘输入字符,判别输入字符是数字、大写字母还是小写字母,输出判别结果。

#include<stdio.h>

void main()

{

       char a;

       printf("请输入一个数字或者字母:");

       scanf("%c",&a);

       if(a>=48&&a<=57)

              printf("这是一个数字\n");

       else if(a>=65&&a<=90)

              printf("这是一个大写字母\n");

       else if(a>=97&&a<=122)

              printf("这是一个小写字母\n");

}

2、  给出一个不多于5位的正整数,要求:

(1)求出它是几位数;

(2)分别打印出每一位数字;

(3)按逆序打印出各位数字。

#include<stdio.h>

void main()

{

       int a,i,ge,shi,bai,qian,wan;

       printf("请输入一个不多于五位的正整数:");

       scanf("%d",&a);

       ge=a%10;

       shi=a/10%10;

       bai=a/100%10;

       qian=a/1000%10;

       wan=a/10000;

      

       if(a>0&&a<10)

              printf("这是一个一位数\n正序输出:%d\n逆序输出:%d\n",ge,ge);

       else if(a>9&&a<100)

              printf("这是一个两位数\n正序输出:%d%d\n逆序输出:%d%d\n",shi,ge,ge,shi);

       else if(a>99&&a<1000)

              printf("这是一个三位数\n正序输出:%d%d%d\n逆序输出:

%d%d%d\n",bai,shi,ge,ge,shi,bai);

       else if(a>999&&a<10000)

              printf("这是一个四位数\n正序输出:%d%d%d%d\n逆序输出:

%d%d%d%d\n",qian,bai,shi,ge,ge,shi,bai,qian);

       else if(a>9999&&a<100000)

              printf("这是一个五位数\n正序输出:%d%d%d%d%d\n逆序输出:

%d%d%d%d%d\n",wan,qian,bai,shi,ge,ge,shi,bai,qian,wan);

}

3、  有一函数,,用scanf函数输入任意x的值,求y的值。

#include<stdio.h>

void main()

{

       int x,y;

       printf("请输入x的值:");

       scanf("%d",&x);

       if(x<1){

              y=x*x;

              printf("y=%d\n",y);

       }

       else if(x>=1&&x<=10){

              y=2*x-1;

              printf("y=%d\n",y);

       }

       else if(x>=10){

              y=3*x-1;

              printf("y=%d\n",y);

       }

}

实验四

1、  输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。

#include<stdio.h>

void main()

{    

       char  x;

       int  letter,space,number,others;

       letter=0,space=0,number=0,others=0;

       while((c=getchar())!='\n')             

       {

                if((x>='a'&&x<='z'||x>='A'&&X<='Z'))

                     letter++;

                     else if(x=='')

                            space++;

                            else if(x>='0'&&x<='9')

                                   number++;

                                   else

                                          others++;

                     }

       printf("英文字母、空格、数字、其他字符的个数分别为:%d,%d,%d,%d\n",letter,space,number,others); }

解:

#include<stdio.h>

void main()

{

     char s[100];

     int i,n;

     int let=0,spa=0,num=0,oth=0;

     scanf("%s",s);

     n=strlen(s);

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

     {         

        if(s[i]>64&&s[i]<91||s[i]>96&&s[i]<123)

                    let++;

        else if(s[i]==32)

                    spa++;

        else if(s[i]>47&&s[i]<58)

                    num++;

        else

                    oth++;

     }

     printf("letter:%d\nspace:%d\nnumber:%d\nother:%d\n",let,spa,num,oth);

     getch();

}


第二篇:数据结构实验报告示例


数据结构实验报告:编制一个Joseph约瑟夫环示例程序

◎实验题目: 给定(也可自己定相关内容)

◎实验目的:给定(也可自己定相关内容)

◎实验内容:给定(也可自己定相关内容)

一、 需求分析

陈述程序设计的任务,强调程序要解决的问题是什么?  明确规定:输入的形式和输入值的范围;输出的形式;程序所能达到的功能;测试数据

1. 输入的形式和输入值的范围

    本程序中,输入报数上限值m和人数上限l,密码,均限定为正整数,输入的形式为一个以“回车符”为结束标志的正整数。

2. 输出的形式

    从屏幕显示出列顺序。

3. 程序功能

    提供用户从键盘输入,Joseph约瑟夫环的必要数据,并显示出列顺序。

4. 测试数据

(1)

输入

20

7

3 1 7 2 4 8 4

输出

6    1    4    7    2    3    5

二、概要设计

说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。

以单向循环链表实现该结构。

1. 抽象数据类型的定义为:

ADT LNode

{

    数据对象:D={ai | ai∈CharSet,i= 1,2,…,n,n≥0}

    数据关系:R1={< ai-1 ,ai > | ai ∈D, I=2,…,n}

基本操作:

    InitList(&L)

        操作结果:构造一个最大长度ms,内容为空的有序表L。

    ClearList(&L)

        初始条件:线性表L已经存在。

        操作结果:将L重置为空表。

    EmptyList(L)

        初始条件:线性表L已经存在。

        操作结果:若L为空表返回TRUE,否则返回FALSE。

    ListLength(L)

            初始条件:线性表L已经存在。

        操作结果:返回L中数据元素个数。

    GetElem(L, pos, &e)

        初始条件:线性表L已经存在,1≤i≤ListLength(L)。

        操作结果:用e返回L中第i个数据元素的值。

    LocateElem(L, e)

        初始条件:线性表L已经存在。

        操作结果:返回L中第1个与e相同的元素的位序。若不存在返回0。

    ListInsert (L, i, e)

        初始条件:线性表L已经存在。

        操作结果:在L中的第i个元素的位置之前插入新元素 e,L的长度加1。

ListDelete(L, pos, e)

        初始条件:线性表L已经存在,1≤i≤ListLength(L)。

        操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1。

    ListTraverse(L)

        初始条件:线性表L已经存在。

        操作结果:依次对L的每个数据元素进行访问。

}ADT SqList

本程序包含以下模块:

(1)主程序模块:

void main()

{

    初始化;

    输入数据;

    执行功能;

显示结果;

}

(2)各功能模块——实现单循环链表表的各项功能。

各模块的调用关系:

主程序

   ↓

各功能模块

三、详细设计

 实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法;画出函数的调用关系。

设计思路:写出存储结构,主要算法的基本思想。 

设计表示:每个操作及模块的伪码算法。列出每个过程或函数所调用和被调用的过程或函数,也可以通过调用关系(层次)图表达。 

实现注释:各项功能的实现程度、在完成基本要求的基础上还实现了什么功能。 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

typedef int Status;

typedef int ElemType;

/*定义类型*/

typedef struct LNode

{

    ElemType data;

    struct LNode * next;

}LNode, *LinkList;

/*1初始化,置表头指针为空*/

void InitList(LinkList &HL)

{

    HL = (LinkList) malloc(sizeof(LNode));

    HL->next = HL;

}

/*3返回长度,空则返回0*/

int ListLength(LinkList HL)

{

    int i=0;

    LinkList p;

    p = HL->next;

    while(p != HL)

    {

        i++;

        p = p->next;

    }

    return i;

}

/*5返回指定位置元素的值,超出则停止运行*/

ElemType GetElem(LinkList HL,int pos)

{略}

/*6遍历所有元素*/

void TraverseList(LinkList HL)

{

    LinkList p;

    p = HL->next;

    if(p == HL)

    {

        printf("空拉!\n");

        exit(1);

    }

    while(p != HL)

    {

        printf("%-5d", p->data);

        p = p->next;

    }

    printf("\n");

}

/*8修改某位置的元素值,成功返回1,否则返回0*/

int UpdatePosList(LinkList HL,int pos,ElemType x)

{略}

/*10插入元素到表尾*/

void InsertLastList(LinkList* HL,ElemType x)

{略}

/*主函数*/

void main()

{

    int a[30];// = {3, 1, 7, 2, 4, 8, 4};

    int m, n, l;

    LinkList p;

    InitList(p);

    do

    {

        printf("Input upper limit number (m): ");

        scanf("%d", &m);

        getchar();

        printf("Input upper limit people (n): ");

        scanf("%d", &l);

        getchar();

    }while(m <= 0 || l <= 0);

    printf("Input people's password: ");

    for(int i = 0; i < l; i++)

    {

        scanf("%d", &a[i]);

        InsertLastList(&p, a[i]);

    }

    printf("**********Order**********\n");

    n = ListLength(p);

    for(int c = 0, s = 0; n > 0; n--)

    {

        if(m != n && m % n != 0)

            c = m % n;

        else if(m == n)

            c = n;

        else if(m % n == 0)

            c = 1;

        while(c > 0)

        {

            if(s + 1 == l)

                s = l;

            else

                s = (++s) % l;

            if(GetElem(p, s) != -1)

                c--;

        }

        printf("%-5d", s);

        m = GetElem(p, s);

        UpdatePosList(p, s, -1);

    }

    printf("\n**********End**********\n");

}

四、 调试分析

调试过程中遇到的主要问题,是如何解决的,对设计和编码的回顾讨论和分析;改进设想;经验和体会等。

程序的编写和调试基本正常。

遇到的问题主要是:指针的指向的边界问题。

本实验采用数据抽象的与模块化程序设计方法。思路清晰,实现时调试顺利,各模块具有很好的可重用性,得到了一次良好的程序设计训练。

五、用户使用说明

说明如何使用你编写的程序;即,如何使用,详细步骤。

根据提示输入学生人数和学生信息

示例:

Input upper limit number (m): 20

Input upper limit people (n): 7

Input people's password: 3 1 7 2 4 8 4

六、  测试结果

列出测试结果,包括输入和输出。这里的测试数据应该完整和严格,最好多于需求分析中所列。

输入字母与负数 如:a,-1

提示继续输入正确的值:Input upper limit number (m):

输入正确的值得:Input upper limit number (m): 20

Input upper limit people (n): 7

Input people's password: 3 1 7 2 4 8 4

**********Order**********

6    1    4    7    2    3    5

**********End**********

Input upper limit number (m): 5

Input upper limit people (n): 5

Input people's password: 1 2 3 4 5

**********Order**********

5    1    2    4    3

**********End**********

七、实验总结

你在编程过程中花时多少?

    多少时间在纸上设计?

    多少时间上机输入和调试?

    多少时间在思考问题?

    遇到了哪些难题?

    你是怎么克服的?

你的收获有哪些?

算法的时空分析和改进设想等等。

八、附录 

源程序文件名清单

    .h   //头文件,基本操作函数的集合

    .c   //主程序文件

更多相关推荐:
数据结构实验报告

实验报告实验课程:数据结构实验项目:实验专业:计算机科学与技术姓名:**学号:***指导教师:**实验时间:20**-12-7重庆工学院计算机学院数据结构实验报告实验一线性表1.实验要求掌握数据结构中线性表的基…

数据结构实验报告(C语言)(强力推荐)

数据结构实验实验内容和目的掌握几种基本的数据结构集合线性结构树形结构等在求解实际问题中的应用以及培养书写规范文档的技巧学习基本的查找和排序技术让我们在实际上机中具有编制相当规模的程序的能力养成一种良好的程序设计...

数据结构实验———图实验报告

数据结构实验报告目的要求掌握图的存储思想及其存储实现掌握图的深度广度优先遍历算法思想及其程序实现掌握图的常见应用算法的思想及其程序实现实验内容键盘输入数据建立一个有向图的邻接表输出该邻接表3在有向图的邻接表的基...

数据结构实验报告格式

数据结构实验报告格式实验11顺序表的基本操作一实验目的1掌握使用VC上机调试线性表的基本方法2掌握线性表的基本操作插入删除查找等运算在顺序存储结构上的实现二实验内容顺序表的基本操作的实现三实验要求1认真阅读和理...

数据结构实验报告全集

数据结构实验报告全集实验一线性表基本操作和简单程序1实验目的1掌握使用VisualC60上机调试程序的基本方法2掌握线性表的基本操作初始化插入删除取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法2实...

数据结构实验报告5

计算机科学与工程系计算机科学与工程系2计算机科学与工程系附录可包括源程序清单或其它说明includeltiostreamgtincludeltstdiohgtusingnamespacestdtypedefst...

数据结构实验报告[4]

云南大学数据结构实验报告第四次实验学号姓名一实验目的复习线性表的逻辑结构存储结构及基本操作掌握顺序表和带头结点单链表了解有序表二实验内容必做题假设有序表中数据元素类型是整型请采用顺序表或带头结点单链表实现Ord...

数据结构上机实验报告

实验一线性表的基本操作实验目的学习掌握线性表的顺序存储结构链式存储结构的设计与操作对顺序表建立插入删除的基本操作对单链表建立插入删除的基本操作算法实验内容1顺序表的实践1建立4个元素的顺序表ssqlist123...

桂电数据结构实验报告

实验二栈和队列及应用一实验目的1掌握用c语言实现队列和栈的方法2了解栈和队列的使用二实验内容实验题目一在许多语言现象中常见到一种形如abcba的文字这种文字从左到右读和从右到左读结果是一样的这种文字就是常说的回...

数据结构图实验报告

一实验目的和要求1掌握图的相关概念包括图有向图无向图完全图子图连通图度入度出度简单回路和环等定义2重点掌握图的各种存储结构包括邻接矩阵和邻接表等3重点掌握图的基本运算包括创建图输出图深度优先遍历广度优先遍历等4...

数据结构实验报告之排序(终极版)

数据结构实验报告实验四排序一需求分析一实验目的1掌握插入排序算法直接插入希尔排序2掌握交换排序算法冒泡排序快速排序3掌握选择排序算法直接选择堆排序4掌握归并排序算法5掌握基数排序算法二实验内容给定一个序列如45...

焦作数据结构实验报告

河南省高等教育自学考试实验报告册计算机及应用专业本科段数据结构姓名李威威准考证号所属地市焦作市实验地点焦作大学实验实训中心实验日期20xx0921实验总成绩指导教师签名实验单位实验室意见主考院校审核意见河南科技...

数据结构实验报告(46篇)