精华内容
下载资源
问答
  • c语言数据结构课设

    2018-11-07 18:28:48
    该资源是基于数据结构的校园导航系统,使用树,和链表相关知识
  • C语言 数据结构课设

    2010-08-16 22:47:39
    两个星期折腾出来的数据结构课设,包含有五种排序方法,二叉树,二叉排序书,哈夫曼树,表达式求值。下载了的朋友如果有什么好的意见,请不吝赐教!
  • C语言课程设计二: 要求:实现树与二叉树的转换·以及树的前序﹑后序的递归﹑非递归算法,层次序的非递归算法的实现,应包含建树的实现。 要求:实现树与二叉树的转换·以及树的前序、后序的递归、非递归算法,层次序的...
  • void Print(int *arr,int len) //输出排完的数据 { int i; for(i=0;i;i++) { printf(" %d ",arr[i]); } } void swap01(int *arr, int i, int j) //交换两个变量的值 { int temp = arr[i]; arr[i] = arr...

    此段代码针对冒泡排序,选择排序,希尔排序,插入排序,快速排序,基数排序,堆排序进行比较
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    #define M 10 //排序多少条,可自行改变
    #define WIDTH 5 //被排序元素的最大位数,可以排100000以内的
    #define MAXK 10 //位数划分基于的基数,10表示为10进制划分

    typedef int ElementType;
    void SetFigure(int *arr, int len)
    {
    FILE *fp=fopen(“rand.txt”,“w”); //生成随机数,并写入文件

    int i;
    srand(time(NULL));
    for (i = 0; i<len; i++)
    {
    arr[i]=rand();
    fprintf(fp,"%d ",arr[i]);
    }
    fclose(fp);
    }

    void GetFigure(int *arr, int len) //读出随机数,写入arr[]
    {
    FILE *fp=fopen(“rand.txt”,“r”);
    int i;
    for (i = 0; i < len; i++)
    {
    fscanf(fp,"%d ",arr + i);
    }
    fclose(fp);
    }

    void Print(int *arr,int len) //输出排完的数据
    {
    int i;
    for(i=0;i<len;i++)
    {
    printf(" %d ",arr[i]);
    }

    }

    void swap01(int *arr, int i, int j) //交换两个变量的值
    {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
    }

    void Bubbling(int *arr, int len) //冒泡排序
    {
    int i;
    int j;
    int temp;

    for(i = 0; i < len - 1; i++)
    {
    	for(j = 0; j < len - 1 - i; j++)
    	{
    		if(arr[j] > arr[j + 1])
    		{
    			temp = arr[j];
    			arr[j] = arr[j + 1];
    			arr[j + 1] = temp;
    		}
    	}
    }
    

    }

    void SelectionSort(int arr, int len) // O(nn) 选择排序
    {
    int i = 0;
    int j = 0;
    int k = -1;

    for(i=0; i<len; i++)
    {
    	k = i; //寻找最小元素的下标
    	for(j=i+1; j<len; j++)
    	{
    		if( arr[j] < arr[k] ) //开始寻找最小元素的下标
    		{
    			k = j;	
    		}
    	}
    	swap01(arr, i, k);
    }
    

    }

    void InertionSort(int arr, int len) // O(nn) 直接插入排序
    {
    int i = 0;
    int j = 0;
    int k = -1;
    int temp = -1;

    for(i=1; i<len; i++)
    {
    	k = i; //待插入位置
    	temp = arr[k];
    
    	for(j=i-1; (j>=0) && (arr[j]>temp); j--)
    	{ 
    		arr[j+1] = arr[j]; //元素后移
    		k = j; //k需要插入的位置
    	}
    
    	arr[k] = temp;//元素插入
    }
    

    }

    void ShellSort(int *arr, int len) //希尔排序
    {
    int i = 0;
    int j = 0;
    int k = -1;
    int temp = -1;
    int gap = len;
    do
    {

    	gap = gap / 3 + 1;   //O(n 1.3)
    
    	for(i=gap; i<len; i+=gap)
    	{
    		k = i;
    		temp = arr[k];
    
    		for(j=i-gap; (j>=0) && (arr[j]>temp); j-=gap)
    		{
    			arr[j+gap] = arr[j];
    			k = j;
    		}
    
    		arr[k] = temp;
    	}
    
    }while( gap > 1 );
    

    }

    void swap1(int *arr, int i, int j)
    {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
    }
    //划分过程 第一个元素当枢轴,分成2个有效子序列
    int partition(int *arr, int low, int high)
    {
    int pv = arr[low];

    while( low < high )
    {
    	while( (low < high) && (arr[high] >= pv) )
    	{
    		high--; //比基准大,本来就在右边,所以high前移动
    	}
    	swap1(arr, low, high);
    	while( (low < high) && (arr[low] <= pv) )
    	{
    		low++;
    	}
    	swap1(arr, low, high);
    }
    //返回枢轴的位置。。。重要
    return low;
    

    }

    //让n个元素 依此减少 减少到1个元素的时候,因为1个元素可以看成一个有序的序列

    void QSort2(int *arr, int low, int high)
    {
    if( low < high )
    {
    int pivot = partition(arr, low, high);

    	//对子序列1排序
    	QSort2(arr, low, pivot-1);
    	//对子序列2排序
    	QSort2(arr, pivot+1, high);
    }
    

    }

    void QSort(int *arr, int low, int high)
    {
    if( low < high )
    {
    int pivot = partition(arr, low, high);

    	//对子序列1排序
    	QSort2(arr, low, pivot-1);
    	//对子序列2排序
    	QSort2(arr, pivot+1, high);
    }
    

    }

    void QuickSort(int arr, int len) // O(nlogn)
    {
    QSort(arr, 0, len-1);
    }

    void PercDown(int *arr, int i, int N)
    {
    int child;
    ElementType Tmp;

    for (Tmp = arr[i]; 2*i+1 < N; i = child){
        child = 2*i+1; //注意数组下标是从0开始的,所以左孩子的求发不是2*i
        if (child != N - 1 && arr[child + 1] > arr[child])
            ++child;                //找到最大的儿子节点
        if (Tmp < arr[child])
            arr[i] = arr[child];
        else
            break;
    }
    arr[i] = Tmp;
    

    }

    void HeapSort(int *arr, int N)
    {
    int i;
    for (i = N / 2; i >= 0; --i)
    PercDown(arr, i, N); //构造堆
    for(i=N-1;i>0;–i)
    {
    swap1(arr,0,i); //将最大元素(根)与数组末尾元素交换,从而删除最大元素,重新构造堆
    PercDown(arr, 0, i);
    }
    }

    void radixSort(int *arr, int len)
    {
    int i;
    void innerCountingSort(int *arr, int len, int d);//内部的计数排序声明
    for (i = 0; i < WIDTH; i++)
    {
    innerCountingSort(arr, len, i);//对于每个元素的每一位都调用一次内部计数排序
    }
    }

    void innerCountingSort(int *arr, int len, int d) //根据第d位数对数组进行排序
    {
    int i, j,k[MAXK] = {0};//数组K用来统计某一个元素的个数,该元素是待排序数组中某一位的数值
    int *ip = (int *)malloc(len * sizeof(int));//用来存储待排序数组的元素的某一位的数值
    int *bp = (int *)malloc(len * sizeof(int));
    int getDValue(int value, int d);//获取待排序数组元素的第d位的数值
    for (i = 0; i < len; i++)
    {
    ip[i] = getDValue(arr[i], d);
    k[ip[i]]++;
    }

    for (j = 1; j < MAXK; j++) //统计小于等于j的元素个数
    {
    	k[j] = k[j] + k[j-1];
    }
    
    for (i = len - 1; i >= 0; i--)//按照第d位的大小,将数组元素放置到正确的位置
    {
    	bp[k[ip[i]] - 1] = arr[i];
    	k[ip[i]]--;
    }
    
    for (i = 0; i < len; i++) //将按某一位排过序后的数组复制给原数组
    {
    	arr[i] = bp[i];
    }
    
    free(ip);
    free(bp);
    

    }

    int getDValue(int value, int d) //获取一个数第d位数的值,位数索引从0开始
    {
    for (;d > 0 && value > 0; d–)
    {
    value = value / MAXK;
    }
    return value % MAXK;
    }

    int main()
    {
    int *arr=(int *)malloc(sizeof(int)*M);
    SetFigure(arr, M); //写入随机数,并存入文件中

    GetFigure(arr, M);
    clock_t beg = clock();
    Bubbling(arr, M);//冒泡排序
    clock_t end = clock();
    printf(“冒泡排序所需时间为:%.2lfms\n”, (end - beg) * 1000.0 / CLOCKS_PER_SEC);
    //Print(arr,M);

    memset(arr, 0, sizeof(int)*M); //初始化数组
    GetFigure(arr, M);
    clock_t beg1 = clock();
    SelectionSort(arr,M);//选择排序
    clock_t end1 = clock();
    printf(“选择排序所需时间为:%.2lfms\n”, (end1 - beg1) * 1000.0 / CLOCKS_PER_SEC);
    //Print(arr,M);

    memset(arr, 0, sizeof(int)*M); //初始化数组
    GetFigure(arr, M);
    clock_t beg2 = clock();
    InertionSort(arr,M);//插入排序
    clock_t end2 = clock();
    printf(“直接插入排序所需时间为:%.2lfms\n”, (end2 - beg2) * 1000.0 / CLOCKS_PER_SEC);
    //Print(arr,M);

    memset(arr, 0, sizeof(int)*M); //初始化数组
    GetFigure(arr, M);
    clock_t beg3 = clock();
    ShellSort(arr, M);//希尔排序
    clock_t end3 = clock();
    printf(“希尔排序所需时间为:%.2lfms\n”, (end3 - beg3) * 1000.0 / CLOCKS_PER_SEC);
    //Print(arr,M);

    memset(arr, 0, sizeof(int)*M); //初始化数组
    GetFigure(arr, M);
    clock_t beg4 = clock();
    QuickSort(arr, M);//快速排序
    clock_t end4 = clock();
    printf(“快速排序所需时间为:%.2lfms\n”, (end4 - beg4) * 1000.0 / CLOCKS_PER_SEC);
    //Print(arr,M);

    memset(arr, 0, sizeof(int)*M); //初始化数组
    GetFigure(arr, M);
    clock_t beg5 = clock();
    HeapSort(arr, M);//堆排序
    clock_t end5 = clock();
    printf(“堆排序所需时间为:%.2lfms\n”, (end5 - beg5) * 1000.0 / CLOCKS_PER_SEC);
    //Print(arr,M);

    memset(arr, 0, sizeof(int)*M); //初始化数组
    GetFigure(arr, M);
    clock_t beg6 = clock();
    radixSort(arr, M);//基数排序
    clock_t end6 = clock();
    printf(“基数排序所需时间为:%.2lfms\n”, (end6 - beg6) * 1000.0 / CLOCKS_PER_SEC);
    //Print(arr,M);
    return 0;
    }

    展开全文
  • c语言实现的猴子选大王程序,是数据结构中的经典案例。里面含有设计报告和源代码。代码拷贝出来即可运行。
  • c语言实现的二叉树的遍历,是数据结构中的经典案例。里面含有设计报告和源代码。代码拷贝出来即可运行。
  • c语言实现的哈夫曼编码译码器,是数据结构中的经典案例。里面含有设计报告和源代码。把好的东西贡献出来,供大家参考一下。
  • } void Print(int *arr,int len) //输出排完的数据 { int i; for(i=0;i{ printf(" %d ",arr[i]); } } void swap01(int *arr, int i, int j) //交换两个变量的值 { int temp = arr[i]; arr[i] = arr[j]; arr[j] = ...

    此段代码针对冒泡排序,选择排序,希尔排序,插入排序,快速排序,基数排序,堆排序进行比较

    #include #include #include #include #define M 10 //排序多少条,可自行改变

    #define WIDTH 5 //被排序元素的最大位数,可以排100000以内的

    #define MAXK 10 //位数划分基于的基数,10表示为10进制划分

    typedef int ElementType;

    void SetFigure(int *arr, int len)

    {

    FILE *fp=fopen(“rand.txt”,“w”); //生成随机数,并写入文件

    int i;

    srand(time(NULL));

    for (i = 0; i{

    arr[i]=rand();

    fprintf(fp,"%d ",arr[i]);

    }

    fclose(fp);

    }

    void GetFigure(int *arr, int len) //读出随机数,写入arr[]

    {

    FILE *fp=fopen(“rand.txt”,“r”);

    int i;

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

    {

    fscanf(fp,"%d ",arr + i);

    }

    fclose(fp);

    }

    void Print(int *arr,int len) //输出排完的数据

    {

    int i;

    for(i=0;i{

    printf(" %d ",arr[i]);

    }

    }

    void swap01(int *arr, int i, int j) //交换两个变量的值

    {

    int temp = arr[i];

    arr[i] = arr[j];

    arr[j] = temp;

    }

    void Bubbling(int *arr, int len) //冒泡排序

    {

    int i;

    int j;

    int temp;

    for(i = 0; i < len - 1; i++)

    {

    for(j = 0; j < len - 1 - i; j++)

    {

    if(arr[j] > arr[j + 1])

    {

    temp = arr[j];

    arr[j] = arr[j + 1];

    arr[j + 1] = temp;

    }

    }

    }

    }

    void SelectionSort(int arr, int len) // O(nn) 选择排序

    {

    int i = 0;

    int j = 0;

    int k = -1;

    for(i=0; i

    }

    void InertionSort(int arr, int len) // O(nn) 直接插入排序

    {

    int i = 0;

    int j = 0;

    int k = -1;

    int temp = -1;

    for(i=1; i=0) && (arr[j]>temp); j--)

    {

    arr[j+1] = arr[j]; //元素后移

    k = j; //k需要插入的位置

    }

    arr[k] = temp;//元素插入

    }

    }

    void ShellSort(int *arr, int len) //希尔排序

    {

    int i = 0;

    int j = 0;

    int k = -1;

    int temp = -1;

    int gap = len;

    do

    {

    gap = gap / 3 + 1; //O(n 1.3)

    for(i=gap; i=0) && (arr[j]>temp); j-=gap)

    {

    arr[j+gap] = arr[j];

    k = j;

    }

    arr[k] = temp;

    }

    }while( gap > 1 );

    }

    void swap1(int *arr, int i, int j)

    {

    int temp = arr[i];

    arr[i] = arr[j];

    arr[j] = temp;

    }

    //划分过程 第一个元素当枢轴,分成2个有效子序列

    int partition(int *arr, int low, int high)

    {

    int pv = arr[low];

    while( low < high )

    {

    while( (low < high) && (arr[high] >= pv) )

    {

    high--; //比基准大,本来就在右边,所以high前移动

    }

    swap1(arr, low, high);

    while( (low < high) && (arr[low] <= pv) )

    {

    low++;

    }

    swap1(arr, low, high);

    }

    //返回枢轴的位置。。。重要

    return low;

    }

    //让n个元素 依此减少 减少到1个元素的时候,因为1个元素可以看成一个有序的序列

    void QSort2(int *arr, int low, int high)

    {

    if( low < high )

    {

    int pivot = partition(arr, low, high);

    //对子序列1排序

    QSort2(arr, low, pivot-1);

    //对子序列2排序

    QSort2(arr, pivot+1, high);

    }

    }

    void QSort(int *arr, int low, int high)

    {

    if( low < high )

    {

    int pivot = partition(arr, low, high);

    //对子序列1排序

    QSort2(arr, low, pivot-1);

    //对子序列2排序

    QSort2(arr, pivot+1, high);

    }

    }

    void QuickSort(int arr, int len) // O(nlogn)

    {

    QSort(arr, 0, len-1);

    }

    void PercDown(int *arr, int i, int N)

    {

    int child;

    ElementType Tmp;

    for (Tmp = arr[i]; 2*i+1 < N; i = child){

    child = 2*i+1; //注意数组下标是从0开始的,所以左孩子的求发不是2*i

    if (child != N - 1 && arr[child + 1] > arr[child])

    ++child; //找到最大的儿子节点

    if (Tmp < arr[child])

    arr[i] = arr[child];

    else

    break;

    }

    arr[i] = Tmp;

    }

    void HeapSort(int *arr, int N)

    {

    int i;

    for (i = N / 2; i >= 0; --i)

    PercDown(arr, i, N); //构造堆

    for(i=N-1;i>0;–i)

    {

    swap1(arr,0,i); //将最大元素(根)与数组末尾元素交换,从而删除最大元素,重新构造堆

    PercDown(arr, 0, i);

    }

    }

    void radixSort(int *arr, int len)

    {

    int i;

    void innerCountingSort(int *arr, int len, int d);//内部的计数排序声明

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

    {

    innerCountingSort(arr, len, i);//对于每个元素的每一位都调用一次内部计数排序

    }

    }

    void innerCountingSort(int *arr, int len, int d) //根据第d位数对数组进行排序

    {

    int i, j,k[MAXK] = {0};//数组K用来统计某一个元素的个数,该元素是待排序数组中某一位的数值

    int *ip = (int *)malloc(len * sizeof(int));//用来存储待排序数组的元素的某一位的数值

    int *bp = (int *)malloc(len * sizeof(int));

    int getDValue(int value, int d);//获取待排序数组元素的第d位的数值

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

    {

    ip[i] = getDValue(arr[i], d);

    k[ip[i]]++;

    }

    for (j = 1; j < MAXK; j++) //统计小于等于j的元素个数

    {

    k[j] = k[j] + k[j-1];

    }

    for (i = len - 1; i >= 0; i--)//按照第d位的大小,将数组元素放置到正确的位置

    {

    bp[k[ip[i]] - 1] = arr[i];

    k[ip[i]]--;

    }

    for (i = 0; i < len; i++) //将按某一位排过序后的数组复制给原数组

    {

    arr[i] = bp[i];

    }

    free(ip);

    free(bp);

    }

    int getDValue(int value, int d) //获取一个数第d位数的值,位数索引从0开始

    {

    for (;d > 0 && value > 0; d–)

    {

    value = value / MAXK;

    }

    return value % MAXK;

    }

    int main()

    {

    int *arr=(int *)malloc(sizeof(int)*M);

    SetFigure(arr, M); //写入随机数,并存入文件中

    GetFigure(arr, M);

    clock_t beg = clock();

    Bubbling(arr, M);//冒泡排序

    clock_t end = clock();

    printf(“冒泡排序所需时间为:%.2lfms\n”, (end - beg) * 1000.0 / CLOCKS_PER_SEC);

    //Print(arr,M);

    memset(arr, 0, sizeof(int)*M); //初始化数组

    GetFigure(arr, M);

    clock_t beg1 = clock();

    SelectionSort(arr,M);//选择排序

    clock_t end1 = clock();

    printf(“选择排序所需时间为:%.2lfms\n”, (end1 - beg1) * 1000.0 / CLOCKS_PER_SEC);

    //Print(arr,M);

    memset(arr, 0, sizeof(int)*M); //初始化数组

    GetFigure(arr, M);

    clock_t beg2 = clock();

    InertionSort(arr,M);//插入排序

    clock_t end2 = clock();

    printf(“直接插入排序所需时间为:%.2lfms\n”, (end2 - beg2) * 1000.0 / CLOCKS_PER_SEC);

    //Print(arr,M);

    memset(arr, 0, sizeof(int)*M); //初始化数组

    GetFigure(arr, M);

    clock_t beg3 = clock();

    ShellSort(arr, M);//希尔排序

    clock_t end3 = clock();

    printf(“希尔排序所需时间为:%.2lfms\n”, (end3 - beg3) * 1000.0 / CLOCKS_PER_SEC);

    //Print(arr,M);

    memset(arr, 0, sizeof(int)*M); //初始化数组

    GetFigure(arr, M);

    clock_t beg4 = clock();

    QuickSort(arr, M);//快速排序

    clock_t end4 = clock();

    printf(“快速排序所需时间为:%.2lfms\n”, (end4 - beg4) * 1000.0 / CLOCKS_PER_SEC);

    //Print(arr,M);

    memset(arr, 0, sizeof(int)*M); //初始化数组

    GetFigure(arr, M);

    clock_t beg5 = clock();

    HeapSort(arr, M);//堆排序

    clock_t end5 = clock();

    printf(“堆排序所需时间为:%.2lfms\n”, (end5 - beg5) * 1000.0 / CLOCKS_PER_SEC);

    //Print(arr,M);

    memset(arr, 0, sizeof(int)*M); //初始化数组

    GetFigure(arr, M);

    clock_t beg6 = clock();

    radixSort(arr, M);//基数排序

    clock_t end6 = clock();

    printf(“基数排序所需时间为:%.2lfms\n”, (end6 - beg6) * 1000.0 / CLOCKS_PER_SEC);

    //Print(arr,M);

    return 0;

    }

    展开全文
  • c语言数据结构课设

    2011-06-23 21:42:44
    包含有表达式求职,订票系统,二叉排序树,二叉树的便利,哈夫曼殊,内部排序的比较等
  • 数据结构二叉树系统课设,codeblocks实现,以C语言编写
  • C语言版多项式相加,主要用于计算机专业数据结构课程的课设
  • 成绩管理系统
  • 北京工业大学C语言程序设计课设报告.docx高级语言程序设计课设报告题 目 光头强摘苹果 学 号 15074219 姓 名 梁丰洲 指导教师 陈彩 提交日期 年 月 日 成绩评价表实验报告内容实验报告结构实验报告图表实验报告与...

    253b171540df25e1b84436cbe50dfc72.gif北京工业大学C语言程序设计课设报告.docx

    高级语言程序设计课设报告题 目 光头强摘苹果 学 号 15074219 姓 名 梁丰洲 指导教师 陈彩 提交日期 年 月 日 成绩评价表实验报告内容实验报告结构实验报告图表实验报告与程序一致性最终成绩丰富正确 基本正确 有一些问题 问题很大完全符合要求 基本符合要求 有比较多的缺陷 完全不符合要求符合规范 基本符合规范 有一些错误 完全不正确完全一致基本一致 基本不一致程序功能实现程序执行情况问题回答情况总体评价完成基本功能和 扩展功能完成基本功能几乎无扩展功能基本完成基本功能未完成基本功能顺畅有问题,经过老师指出之后改正 有问题,无法改正立即正确回答 经思考后正确回答 回答有部分错误 回答完全错误 不能回答问题 教师签字 目录1 需求分析31.1 功能需求31.2数据需求31.3 界面需求31.4 开发与运行环境需求52 概要设计52.1 主要数据结构52.1.1常量52.1.2主要结构体52.1.3主要变量62.2 程序总体结构62.2.1 模块调用图62.2.1 主程序流程图82.3 子模块设计93详细设计113.1 变量定义用于变量的申明定义(无全局变量)113.2 变量初始化用于变量的初始化赋值(涉及文件的读取)113.3 显示环境设置用于屏幕创建、背景音乐和文字样式设置153.4 游戏状态判定用于游戏运行状态处理(包括文件读取)163.5 绘图处理用于游戏的绘图163.6 逻辑运算处理用于游戏逻辑处理包括游戏计时173.7 鼠标操作用于鼠标操作处理183.8 键盘操作用于键盘操作处理193.9 摘取判定用于苹果摘取判定193.10 运动判定用于运动可行判定及操作203.11 运动修改用于运动位置修改223.12 碰撞判定用于运动碰撞判定233.13 自由落体用于物体自由落体判定和操作243.14 平台移动用于处理平台移动和平台的状态随机生成263.15 熊大移动用于处理熊大移动284 测试284.1 按键测试284.2 鼠标测试304.3 计时测试305 用户手册305.1 游戏的设计目的305.2 游戏的运行环境和要求315.3 游戏的安装和启动方法315.4 游戏的操作方法316 总结提高316.1 课程设计总结316.2 对本课程意见与建议31附录 程序代码32gtq123.cpp32MY_image_move.h371 需求分析游戏名称光头强摘苹果 这是一款PC端的益智小游戏。玩家通过对鼠标键盘的控制操控人物来躲避熊大监视并摘取苹果进行游戏。1.1 功能需求基本功能1.进入游戏后提示输入玩家名。游戏界面有两部分组成,左侧为1000632的游戏运行界面,右侧为300632的按键操作和玩家信息显示界面。2.键盘输入玩家名后按“Start”按钮开始游戏。3.平台生成并随机移动,通过键盘上下左右键控制人物在平台和地面之间来回移动跳跃、跳下。熊大不断的上下移动监视光头强,玩家可操控人物在平台上按空格键摘取苹果,如成功摘取苹果积10分。在时间(60s)结束或摘苹果被发现后视为游戏结束。4.初始化读取并显示历史最高分与姓名。拓展功能1.能够显示玩家排行榜。这个功能需要从文件中获取每个玩家的最高得分,并按得分排序。2.增加和美化界面元素,是游戏更具趣味性。如光头强向上跳跃时可能被滑块撞回,不是直接站上。光头强跳跃时考虑到重力,且使曲线更加真实优美等3.添加更多的按钮功能。4.同时用键盘和鼠标控制游戏1.2数据需求1.历史最高分和最高分玩家。2.玩家名和当前得分。3.运行的剩余游戏时间。4.人物的坐标和各个方向移动速度,平台的坐标和状态,熊大的坐标。1.3 界面需求游戏开始键入玩家名和开始画面游戏运行过程中界面游戏结束后界面1.4 开发与运行环境需求开发环境Visual studio 2010运行环境win82 概要设计2.1 主要数据结构2.1.1常量物体碰撞计算公式define RECT_HIT_RECTx,y,w,h,x1,y1,w1,h1 yhy1 yy1h1 xwx1 xx1w1 物体碰撞计算公式define LINE_ON_LINEx1,y1,w1,x2,y2,w2 y1y2 x1x2w2 x1x2-w1 速度define MOVE_SPEED_HERO 6define JUMP_HEIGHT 160define MOVE_SPEED_MONSTER 72.1.2主要结构体typedef struct角色结构体IMAGE pic5;int x;int y;int direct; 运动方向 0左 1右 2上 3下 int width; 图片的宽度和高度,用于碰撞判定 int height;int p_movex;随平台上移动速度int movex;横向移动速度int jumpx;跳跃状态横向移动速度int movey; 跳跃速度int jumpheight; 跳跃高度int P_num;怪兽所在层数Make_hero;typedef struct平台结构体IMAGE pic7;int x;int y;int width;int height;int state; 状态 0-平台 1-有苹果平台 2-无苹果平台int layer;平台的第几层Make_plat;2.1.3主要变量1.Make_hero m_hero1,Monster1; 光头强 熊大 2.Make_plat Plat9;平台最大数量3.int Num_plat3,NUM_P0,count40,0,TIME_COUNT,0,state0,game_point0;各个平台数 平台总数NUM_P 按键是否弹起计数0,1 计时2 逻辑运算计数3 游戏状态 分数4.MOUSEMSG my_mouse;鼠标5.LOGFONT f;信息字体6.char H_Player_name10;最高分玩家7.int h_game_point;最高分8.TCHAR Player_name10; 玩家tchar9.Char player_name10;玩家名char10.FILE *fp;文件2.2 程序总体结构2.2.1 模块调用图482.2.1 主程序流程图2.3 子模块设计1. 图片加载模块1void Load_heroMake_hero m_hero,LPCTSTR pImgFile,LPCTSTR pImgFile_,int x,int y,int width,int hight,int x_,int y_2void Load_heroMake_hero m_hero,LPCTSTR pImgFile,int x,int y,int width,int hight,int x_,int y_3void Load_platMake_plat plat,LPCTSTR pImgFile,int g功能给指定变量架构体image变量初始化。参数Make_hero m_hero -人物结构体, Make_plat plat -平台结构体, LPCTSTR pImgFile -图片地址, int x,int y,int width,int hight,int x_,int y -图片截图坐标, int g -平台总数返回值无返回值。2. 绘图函数模块1void DrawMake_hero hero2void DrawMake_plat plat,int NUM_P功能绘制图片。参数Make_hero hero -人物结构体, Make_plat plat -平台结构体, int NUM_P -平台总数返回值无返回值。3. 文字显示函数模块1void Text_outint text,int x,int y2void Text_outchar text,int x,int y3void Text_outTCHAR text,int x,int y功能文字显示。参数int text,char text,TCHAR text -函数重载 不同的类型变量显示, int x,int y -显示坐标返回值无返回值。4. 键盘操作模块1void Key_checkint count,Make_hero m_hero功能按键接收。参数int count -按键计数, Make_hero m_hero -人物结构体返回值无返回值。5. 苹果摘取函数模块1int CheckPickMake_hero m_hero,Make_hero Monster,Make_plat Plat,int NUM_P功能苹果摘取。参数Make_hero hero -人物结构体, Make_hero Monster -熊大结构体, Make_plat plat -平台结构体, int NUM_P -平台总数返回值整形返回值 0-不能摘取 1-摘取成功积分 3-摘取失败游戏结束。6. 运动判定函数模块1void MovecheckMake_hero m_hero,Make_plat Plat,int NUM_P功能运动可行判定及操作。参数Make_hero hero -人物结构体, Make_plat plat -平台结构体, int NUM_P -平台总数返回值无返回值。7. 运动修改函数模块1void MoveOffsetint x,int y,Make_hero m_hero,Make_plat Plat,int NUM_P功能运动位置修改。参数Make_hero hero -人物结构体, Make_plat plat -平台结构体, int NUM_P -平台总数, int x,int y -x y方向的人物移动速度返回值无返回值。8. 碰撞判定函数模块1int RoleCanMoveint xoff, int yoff,Make_hero m_hero,Make_plat Plat,int NUM_P功能判断是否碰撞。参数Make_hero hero 人物结构体, Make_plat plat -平台结构体, int NUM_P -平台总数, int xoff int yoff -x y方向的人物移动速度返回值整形返回值 0-碰撞 不能移动 1-可以进行移动。9. 自由落体函数模块1int CheckRoleMake_hero m_hero,Make_plat Plat,int NUM_P功能判断是否需要自由落体。参数Make_hero hero 人物结构体, Make_plat plat -平台结构体, int NUM_P -平台总数返回值整形返回值 0-自由落体 1-无须自由落体。10. 平台移动函数模块1void Plat_MoveMake_plat Plat,int NUM_P功能平台移动和随机状态生成。参数Make_plat plat -平台结构体, int NUM_P -平台总数返回值无返回值。11. 熊大移动函数模块1void Monster_MoveMake_hero monster功能熊大移动。参数Make_hero Monster -熊大结构体返回值无返回值。3 详细设计3.1 变量定义用于变量的申明定义Make_hero m_hero1,Monster1; 光头强 熊大Make_plat Plat9;平台各个平台数 平台总数NUM_P 按键是否弹起计数0,1 计时2 逻辑运算计数3 游戏状态 分数int Num_plat3, NUM_P0,count40,0,TIME_COUNT,0,state0,game_point0;MOUSEMSG my_mouse;鼠标LOGFONT f;信息字体char H_Player_name10;最高分玩家int h_game_point;最高分TCHAR Player_name10; 玩家char player_name10;FILE *fp;3.2 变量初始化用于变量的初始化赋值(涉及文件的读取)玩家信息 最高分信息初始化fp resPoints fight.txt,r;fscanffp,d,s,fclosefp;光头强的初始化m_hero0.x100;m_hero0.y465;m_hero0.direct0;m_hero0.width55;m_hero0.height85;m_hero0.movex0;横向移动速度m_hero0.jumpx0;跳跃时横向速度m_hero0.movey0;跳跃时纵向速度m_hero0.jumpheight0;跳跃高度级别m_hero0.p_movex0; 初始平台速度为0m_hero0.P_num0;熊大的初始化Monster0.x1000;Monster0.y350;Monster0.direct3;Monster0.width108;Monster0.height126;Monster0.jumpx0;Monster0.movex0;Monster0.jumpheight0;Monster0.movey0;Monster0.P_num1;熊大的初始平台第一层平台的初始化srandunsignedtimeNULL;doint i0;forint t0;t3;t给平台 layer赋值Num_platt rand31;ift0fori;iNum_platt;iPlati.layer1;ift1fori;iNum_plattNum_plat0;iPlati.layer2;ift2fori;iNum_plattNum_plat1Num_plat0;iPlati.layer3;NUM_Pi;得到总平台数while5NUM_P;forint g0;gNUM_P;g平台 (及初始值设定)ifPlatg.layer1Load_platPlat,_TresPlat.jpg,g;Platg.xg*1214/Num_plat0;设定水平坐标 平均Platg.y400;Platg.height30;Platg.width214;Platg.state0;ifPlatg.layer2Load_platPlat,_TresPlat.jpg,g;Platg.xg-Num_plat0*1214/Num_plat1125;Platg.y255;Platg.height30;Platg.width214;Platg.state0;ifPlatg.layer3Load_platPlat,_TresPlat.jpg,g;Platg.xg-Num_plat1-Num_plat0*1214/Num_plat275;Platg.y110;Platg.height30;Platg.width214;Platg.state0;动态图加载Load_herom_hero,_Tresm_hero.jpg,_Tresm_hero_.jpg,0,0,55,85,0,85;Load_heroMonster,_TresMonster.jpg,0,0,108,126,0,126;背景静态图加载IMAGE img9;loadimageloadimageloadimageloadimageloadimageSetWorkingImagegetimagegetimagegetimagegetimage3.3 显示环境设置用于屏幕创建、背景音乐和文字样式设置创建屏幕initgraph1300,632;信息字体设置gettextstylef.lfHeight25;字体大小_tcscpy_sf.lfFaceName,_T微软雅黑;字体f.lfQuality ANTIALIASED_QUALITY;抗锯齿setbkmodeTRANSPARENT;透明settextstyle工作状态settextcolorBLACK;颜色绘图BeginBatchDraw;putimage0,0,putimage0,550,putimage1000,0,putimage1173,276,putimage1173,276,EndBatchDraw;背景音乐mciSendString_Topen resbgm.mp3 alias BackMusic, NULL, 0, NULL; 打开音乐mciSendString_Tsetaudio BackMusic volume to 500,NULL,0,NULL;设置音量大小mciSendString_Tplay BackMusic repeat, NULL, 0, NULL;玩家名加载BoxPlayer_name,10,_T输入玩家名;WideCharToMultiByteCP_ACP, 0, Player_name, -1, player_name, 10, NULL, NULL;3.4 游戏状态判定用于游戏运行状态处理(包括文件读取)/游戏结束/ifstate3ifgame_point h_game_pointiffp resPoints fight.txt,wNULL;fprintffp,d,s,game_point,player_name;fclosefp;putimage250,150,Sleep3000;exit0;3.5 绘图处理用于游戏的绘图/画图处理/静态图/BeginBatchDraw;putimage0,0,putimage0,550,动态图/DrawPlat,NUM_P;putimage1000,0,putimage1173,276,putimage1173,276,DrawMonster;Drawm_hero;/用户信息 时间输出/Text_outcount2/1000,1210,34;Text_outgame_point,1150,450;ifgame_point h_game_pointText_outgame_point,1150,550;Text_outPlayer_name,1150,504;elseText_outh_game_point,1150,550;Text_outH_Player_name,1150,504;Text_outPlayer_name,1150,400;EndBatchDraw;3.6 逻辑运算处理用于游戏逻辑处理包括游戏计时/逻辑运算处理/ifcount34在10毫秒每帧设定下 每40毫秒走一次逻辑运算count30;ifstate1 游戏状态判定count2 -40; 计时器 if0count2状态改变state 3;按键操作判定 键压Key_checkcount,m_hero;ifGetAsyncKeyStateVK_SPACE 0ifCheckPickm_hero,Monster,Plat,NUM_P1 苹果摘取判定game_point 10;ifCheckPickm_hero,Monster,Plat,NUM_P3state 3;移动可行判定以及操作Movecheckm_hero,Plat,NUM_P;/自由落体 以及 平台站定判定/CheckRolem_hero,Plat,NUM_P;/平台移动函数/Plat_MovePlat,NUM_P;/熊大移动函数/Monster_MoveMonster;count3;3.7 鼠标操作用于鼠标操作处理/鼠标接收/ifMouseHitmy_mouseGetMouseMsg;ifmy_mouse.uMsg WM_LBUTTONUPifstate0state21200my_mouse.xmy_mouse.x1280 86 my_mouse.ymy_mouse.y170state 1;if 1200my_mouse.xmy_mouse.x1280180 my_mouse.ymy_mouse.y260state 3;ifstate11200my_mouse.xmy_mouse.x1280280 my_mouse.ymy_mouse.y360state 2;3.8 键盘操作用于键盘操作处理按键操作判定 键压Key_checkcount,m_hero;ifGetAsyncKeyStateVK_SPACE 0ifCheckPickm_hero,Monster,Plat,NUM_P1 苹果摘取判定game_point 10;ifCheckPickm_hero,Monster,Plat,NUM_P3state 3;3.9 摘取判定用于苹果摘取判定int CheckPickMake_hero m_hero,Make_hero Monster,Make_plat Plat,int NUM_Pforint g0;gNUM_P;gif LINE_ON_LINEm_hero0.x, 是否站在平台的苹果树范围内m_hero0.ym_hero0.height,m_hero0.width,Platg.x50,Platg.y,Platg.width-100ifPlatg.state1Platg.layerMonster0.P_numPlatg.state2;修改苹果树平台被摘后状态return 1;else ifPlatg.state1Platg.layerMonster0.P_numreturn 3;elsereturn 0;3.10 运动判定用于运动可行判定及操作void MovecheckMake_hero m_hero,Make_plat Plat,int NUM_Pif0 m_hero0.movey如果不是跳跃, 横向移动MoveOffsetm_hero0.movex, 0,m_hero,Plat,NUM_P;else跳跃, 先横向移动, 再纵向移动MoveOffsetm_hero0.jumpx, 0,m_hero,Plat,NUM_P;MoveOffset0, m_hero0.movey,m_hero,Plat,NUM_P;ifm_hero0.movey0向上运动纵向速度movey为负值m_hero0.jumpheight-m_hero0.movey; 增加跳跃高度重力影响,速度减慢ifm_hero0.movey-1m_hero0.movey;到达顶点后向下落, 最大跳跃高度为JUMP_HEIGHTifm_hero0.jumpheight JUMP_HEIGHT m_hero0.jumpheight JUMP_HEIGHT; 跳跃高度置为最大m_hero0.movey4; 纵向下落速度置为4, 表示开始下落else ifm_hero0.movey0下落过程, 跳跃高度减少m_hero0.jumpheight - m_hero0.movey;重力影响,速度增大m_hero0.movey;3.11 运动修改用于运动位置修改void MoveOffsetint x,int y,Make_hero m_hero,Make_plat Plat,int NUM_P横纵增量为0,不移动,代码结束ifx0 y0 m_hero0.x m_hero0.p_movex;ifm_hero0.x0m_hero0.x0;ifm_hero0.x945m_hero0.x945;return;ify0跳跃状态下清除 随平台速度m_hero0.p_movex0;如果碰到物体,不移动,代码结束ifRoleCanMovex,y,m_hero,Plat,NUM_Preturn;修改玩家坐标m_hero0.x m_hero0.xxm_hero0.p_movex;m_hero0.y y; 判断是否超出左边界ifm_hero0.x0m_hero0.x0;ifm_hero0.x945m_hero0.x945;3.12 碰撞判定用于运动碰撞判定int RoleCanMoveint xoff, int yoff,Make_hero m_hero,Make_plat Plat,int NUM_Pint canmove1;初始化, 1表示能移动

    展开全文
  • c语言程序设计课设》课程设计指导书 《C 语言程序设计课设》 课程设计指导书 一、课程设计的目的 (1)加深对讲授内容的理解,尤其是一些语法规则。 (2)熟悉 C 语言程序设计的结构化编程的思想,掌握数据的基本类型...

    41528d3028836879cd698677c3999917.gif《c语言程序设计课设》课程设计指导书

    《C 语言程序设计课设》 课程设计指导书 一、课程设计的目的 (1)加深对讲授内容的理解,尤其是一些语法规则。 (2)熟悉 C 语言程序设计的结构化编程的思想,掌握数据的基本类型、 自定义类型、函数、文件和指针等知识,能运用这些知识进行综合编程,熟练 应用。 (3)能够综合运用所学知识,编程解决实际问题。 (4)培养团队分工合作的意识,最终使学生提高编程技能和解决实际问题 的能力。 二、课程设计基本要求 2.1.组织管理 1.由院、系指派经验丰富的专业教师担任指导教师。 2.课程设计实行课程负责人与指导教师共同负责制。 3.课程负责人主要进行课设的命题、指导教师的考核、技术把关和全面管 理。 4.指导教师全面负责所承担班级的课程设计指导、管理和考核评定工作。 2.2 设计要求 1.自选题目、小组管理、团队合作、小组评测。 2.模块化程序设计。 3.锯齿型书写格式。 4.必须上机调试通过。 三、选题要求: 每个题目限定 1-2人,每人必须负责一部分功能,并独立完成,推举出一1 个组长,负责任务分工,汇总到班长处,然后交给指导教师。 四、设计报告格式及要求: 1、题目 2、设计目的 3、总体设计(程序设计组成框图、流程图) 4、详细设计(模块功能说明(如函数功能、入口及出口参数说明,函数调 用关系描述等) 5、运行结果及分析 6、调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主 要问题及采取的解决措施 7、课程设计心得及体会 8、源程序清单和执行结果:清单中应有足够的注释 五、课程设计成绩评定 5.1基本要求: (1) 每个人必须有程序运行结果; (2) 每个人必须交《C 语言课程设计》报告 5.2、成绩评定和打分标准 由指导教师对学生在课程设计期间的表现,所完成的设计报告的质量、设 计结果的验收和答辩情况进行综合考核。具体评定标准如下: (1)上机考勤:注重平时上机考勤与遵守纪律情况 20% (2)结果验收:学生能运行、讲述或调试自己的程序,回答教师提问,每 个人必须有程序运行结果 40% (3)小组自评成绩结果 10% (4)设计报告:每个人必须交《C 语言课程设计》报告和《C 语言课程设 计》日志 30% 以上四项缺一不可,否则不能到得相应学分 依据上述考核内容,最后采用优(>90 分) 、良(80~89分) 、中(70~792 分)及格(60~69分) 、不及格(<60 分)五级记分制评定学生课程设计成绩。3 六、课程设计题目 题目一:职工信息管理系统设计 问题描述:试设计一职工信息管理系统,职工信息包括职工号、姓名、性别、年龄、学历、 工资、住址、电话等(职工号不重复)。 实现功能:1、系统以菜单方式工作 2、职工信息录入功能(职工信息用文件保存)--输入 3、职工信息浏览功能 --输出 4、查询和排序功能:(至少一种查询方式) --算法  按工资查询  按学历查询等 5、职工信息删除、修改功能 知 识 点:结构体、数组、函数、文件等的应用 说 明:系统可录入的职工最大数值为50,要求界面友好,易于操作。 题目二:图书信息管理系统设计 问题描述:试设计一图书信息管理系统,图书信息包括:登录号、书名、作者名、分类号、 出版单位、出版时间、价格等。 实现功能:1、系统以菜单方式工作 2、图书信息录入功能(图书信息用文件保存)--输入 3、图书信息浏览功能--输出 4、查询和排序功能:(至少一种查询方式)--算法  按书名查询  按作者名查询 5、图书信息的删除与修改 知 识 点:结构体、数组、函数、文件等的应用 说 明:系统可录入的图书最大数值为100,要求界面友好,易于操作。 题目三:学生信息管理系统设计 问题描述:学生的基本个人信息管理,其中个人信息应包含:姓名、性别、年龄、出生年 月、家庭住址、班级、电话号码、宿舍号等 实现功能:具有整张信息表的浏览功能、整表输出到文件功能、个人信息的二次修改功能、 新人员的基本信息的添加功能、删除实际人员基本信息功能、查询功能等 知 识 点:数组,指针、结构体、文件操作 说 明:必须用到结构体和文件操作4 题目四:学生选修课程系统设计 问题描述:选修课程管理,每门选课课程的信息包括:课程名、学分、人数限制、面向专 业、面向年级;选课时学生需要提供:姓名、学号、班级等信息 实现功能:具有选择某门课程功能、退选某门课程功能、按照课程浏览选课学生名单功能、 按照学生姓名和学号查询某人的选修课程情况功能、根据选修课程的选修条件自动排除不 满足条件的选修请求功能、输出某门选修课的选修名单到文件功能、输出某人的选修课情 况到文件功能 知 识 点:数组,指针、结构体、文件操作 说 明:必须用到结构体和文件操作 题目五:销售管理系统 问题描述:设计一个日用商品销售管理,以小型超市商品销售为管理对象来设计系统。 实现功能:根据销售信息(包含如下内容:商品编号、销售数量、销售单价、销售日期、 销售人员;保存为磁盘文件),实现对商品日常信息的管理。1、日用商品销售信息输入运用人机对话方式实现商品的商品编号、销售数量、销售单价、销售日期、销售人 员的信息录入,以文件的形式保存其信息 2、商品销售信息查询: a) 根据商品编号查询所售商品明细(数量,单价,金额) b) 根据销售日期查询当天所售商品明细(数量,单价,金额) c) 根据销售人员查询某营业员所售商品明细(数量,单价,金额) 3、商品销售信息统计 a) 日销售额统计(按商品编号,销售人员,全部商品)及总销售额统计b) 月销售额(按商品编号,销售人员,全部商品)及总销售额统计 c) 月度销售排名(按商品编号,销售人员) 知 识 点:结构体类型变量的应用,文件操作,数据的查询,函数的应用 说 明:以十组商品三个营业员构成二十组商品数据 题目六:职工工作量统计系统 问题描述:设计一个以班组职工日常工作量统计为对象的管理系统。 实现功能:根据组内职工日常工作信息(包含如下内容:职工编号,职工姓名,工作内容, 完成数量,完成质量,完成日期;保存为磁盘文件),实现对职工日常工作量信息的管理。1、职工日常工作量信息输入运用对话方式分别输入职工编号,职工姓名,完成数量,完成质量(优、良、中), 完成日期,对就多个完成质量的信息录入,以文件的形式保存其信息5 2、职工日常工作量信息统计与输出 a) 以完成工作数量及完成质量进行工作量当日统计排序。名次相同,以完成数量多 者优先,再次相同,以职工编号小者优先。b) 以一个星期为一时间段按上述规则进行排序。 知 识 点:结构体类型变量的应用,文件操作,数据的查询与排序。 说 明:以十人构成一个班组,每天大家都做同一工作来构成数据。 题目九:通讯录管理 问题描述:本程序属于非数值计算

    展开全文
  • 银行业务模拟数据结构课设(C语言版)
  • 数据结构课设学生搭配问题 数 据 结 构 课程设计报告书 班级 学号 专业 姓名 课题描述: 一、 需求分析: 1. 设计内容 一班有m个女生,有n个男生(m不等于n),现要开一个舞会. 男女生分别编号坐在舞池的两边的椅子上.每...
  • 数据结构课设报告哈夫曼编译器C语言源码.docx
  • C语言+EasyX,数据结构,适合中北大学学生
  • 说是C语言程序设计的课设,实际上和上学期的数构的课设没什么区别,换了个系统而已,也不知道学校老师为啥要多一门这个课设。不过还是有所收获的,会改了很多常见的BUG,还把系统做的有点花里胡哨的(功能多了点)。...
  • 校园导游系统 数据结构课设 c语言写的控制台程序 使用了Dijkstra 算法计算最短路径,界面友好,显示清晰 程序优质
  • 宿舍管理系统 数据结构课设 c语言写的控制台程序 实现了hash算法查找,等多种查找方式,程序清晰易懂,代码优质
  • 数据结构课设城市公交完整代码(c语言

    千次阅读 多人点赞 2020-06-07 09:15:25
    数据结构课设城市公交查询系统(C语言) 代码如下: #include <stdio.h> #include <string.h> #include <stdlib.h> #define ERR 0 #define OK 1 #define Dij_MAXN 100 #define MAX_VERTEX_NUM 100...
  • C语言实现的学生成绩管理系统-数据结构课程设计。C语言实现的学生成绩管理系统-数据结构课程设计。C语言实现的学生成绩管理系统-数据结构课程设计。
  • 数据结构课设——学籍管理系统,用C语言完成的课设。内附有代码
  • 数据结构课设:航空客运订票系统(C语言实现)。航空结点由带头结点的单链表实现,已订票客户订单结点由双向链表(不带头结点)实现,候补队列由链式队列(无头结点)实现
  • 数据结构课设

    2014-12-02 21:24:20
    常见数据结构课设题目代码,windows VC2010环境编写的
  • 算术表达式求解数据结构课设,代码,说明书
  • 本人自己做的数据结构C语言实现链表学生管理系统 其中有代码 封面 论文总结 论文说明书 反正是应有尽有 是学数据结构学生交课设的一个好选择 别错过
  • 学生成绩管理是高等学校教务管理的重要组成部分,主要包括学生注册、考试成绩的录入及修改、成绩的统计分析等等。设计一个系统实现对学生成绩的管理。要求系统应具有以下基本功能: ... (2)增加、删除某一班级的...
  • 查找子系统数据结构课设C语言实现,codeblocks

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,288
精华内容 515
关键字:

c语言数据结构课设

c语言 订阅
数据结构 订阅