首页 > 其他分享 >软件工程实验

软件工程实验

时间:2022-10-09 17:25:30浏览次数:30  
标签:fp int average float number 软件工程 实验 printf

一、最大子数组

//求某数组的最大子数组

//最优方法,时间复杂度O(n)

//和最大的子序列的第一个元素肯定是正数

//因为元素有正有负,因此子序列的最大和一定大于0

#include <stdio.h>

#include <stdlib.h>

  int main()

  {

     int MaxSum(int);

     int shuzu[6] = {-10,20,50,-60,80,-90};

     int MaxSum(int *shuzu);

        {

                int i;

                int MaxSum = 0;

        int Sum = 0;

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

        {

            Sum += shuzu[i];

            if(Sum > MaxSum)

              MaxSum = Sum;

            //如果累加和出现小于0的情况,

            //则和最大的子序列肯定不可能包含前面的元素,

            //这时将累加和置0,从下个元素重新开始累加

            if(Sum <= 0)

              Sum = 0;

        }

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

      }

     system("pause");

  }

 

 

二、黄金点游戏

#include "atlstr.h"

#include "stdlib.h"

#include "math.h"

typedef struct gameplayer  //玩家结构体

{

    int name, score, win, fail;

    float number, b;

}PLAYER;            //玩家的姓名、分数、编号、输赢

void STARTGAME(FILE *fp);   //初始化游戏

void GAMERULE();            //游戏规则

void CALCULATE_SCORE(PLAYER *p, float average, int number, FILE *fp);//计算比赛得分

int main()

{

    //system("color 1D");

    int opt;

    FILE *fp;

    while (1)

    {

        fp = fopen("goldgame.txt", "w+");

        printf("\n                            黄金点游戏        \n");

        printf("                           1.   规则\n");

        printf("                           2.   开始\n");

        printf("                           3.   退出\n");

        scanf("%d", &opt);

        switch (opt)

        {

        case 1: GAMERULE();    break;

        case 2: STARTGAME(fp); break;

        case 3: exit(0);       break;

        default: {  printf("    输入错误,重新输入\n");    break;   }

        }

    }

    return 0;

}

void STARTGAME(FILE *fp)

{

    PLAYER *p;

    int i, j, playernumber, gamenumber;

    int flag = 1;

    float sum, average;

    p = (PLAYER *)malloc(10 * sizeof(PLAYER));              //动态分配结构体数组

    printf("输入玩家人数:");

    scanf("%d", &playernumber);

    if (playernumber>10)

    {      

        p = (PLAYER *)realloc(p, playernumber*sizeof(PLAYER));//空间时不足增加额外的空间   

    }

    printf("输入比赛轮数:");

    scanf("%d", &gamenumber);

    //printf("\n");

    for (j = 0; j<gamenumber; j++)

    {

        printf("\n第%d轮比赛:\n", j + 1);

        for (i = 0, sum = 0; i<playernumber; i++)//sum为总数和

        {

            if (flag == 1)

            {

                p[i].name = i + 1;

                p[i].score = 0;

            }                               //初始化 初值为0

            printf("       玩家%d: ", p[i].name);

            scanf("%f", &p[i].number);

            sum += p[i].number;

        }

        average = sum / playernumber;        //计算平均值

        average = (float)(average*0.618);   //计算黄金点的值

        printf("      黄金点G值为:%f\n", average);

        CALCULATE_SCORE(p, average, playernumber, fp);

        flag = 0;

    }

 

}

void CALCULATE_SCORE(PLAYER *p, float average, int number, FILE *fp)

{

    int i;

    char cha;

    float max = (float)fabs(p[0].number - average);

    float min = (float)fabs(p[0].number - average);

    for (i = 0; i<number; i++)         //统计 最大值、最小值

    {

        p[i].b = (float)fabs(p[i].number - average);

        if (max<p[i].b)

            max = p[i].b;

        if (min>p[i].b)

            min = p[i].b;

    }

    for (i = 0; i<number; i++)        //每个玩家的得分

    {

        if (p[i].b == max)

        {          

            p[i].score -= 2;       

        }

        if (p[i].b == min)

        {          

            p[i].score += number;

        }

    }

    printf("累计比赛的得分:\n");

    for (i = 0; i < number; i++)        //依次输出每个玩家的得分

    {      

        printf("      玩家%d: %d\n", p[i].name, p[i].score);

    }

    while (1)

    {

        printf("是否继续  Y or N : ");

        scanf("%c", &cha);

        if (cha == 'y' || cha == 'Y')

        {           break;      }

        else if (cha == 'n' || cha == 'N')

        {           exit(0);    }

 

    }

}

void GAMERULE()//游戏规则

{  

    printf("N个同学(N>10),每人写一个0到100之间的有理数(不包括0或100),计算出平均值,再乘以0.618(所谓黄金分割常数),得到G。给出的数字最靠近G的同学得到N分,离G最远的同学得到-2分,其他同学得0分。\n"); 

}

 

标签:fp,int,average,float,number,软件工程,实验,printf
From: https://www.cnblogs.com/xjlnl/p/16772859.html

相关文章

  • Python学习实验报告03——序列
    实验要求:完成课本实例部分及实战部分实验内容:Part1实例:实例01:创建一个文件命名为tips,导入日期时间类,定义一个包含七条励志文字的列表,获取当前星期作为索引输出每日一......
  • Cisco PBR 中的 next-hop 多种设置实验
    1:起因在配置PBR中设置next-hop的时候对后面的一些参数不明白,研究清楚,刚好在网上找到这个帖子:​​http://www.doczj.com/doc/f99682692.html​​万分感谢!!!!命令总结:1:setip......
  • 实验4:开源控制器实践——OpenDaylight
    一、实验目的能够独立完成OpenDaylight控制器的安装配置;能够使用Postman工具调用OpenDaylightAPI接口下发流表。二、实验环境Ubuntu20.04Desktopamd64三、实验......
  • 计算机算法设计与分析 实验题 及代码
    很舒服的题目,不难。科班的知识就是舒服。实验2:递归与分治实验目的熟悉递归算法的基本思想和基本步骤,熟练掌握递归公式的推导和定义方法,用递归算法解决实际问题。实验要......
  • 实验4:开源控制器实践——OpenDaylight
    基本要求利用Mininet平台搭建下图所示网络拓扑,并连接OpenDaylight控制器通过Postman工具调用OpenDaylight提供的API下发流表,实现拓扑内主机h1和h3网络中断10s进阶要求......
  • 实验2:Open vSwitch虚拟交换机实践、实验3:OpenFlow协议分析实践
    实验2:OpenvSwitch虚拟交换机实践一、实验目的能够对OpenvSwitch进行基本操作;能够通过命令行终端使用OVS命令操作OpenvSwitch交换机,管理流表;能够通过Mininet的Pytho......
  • 实验3:OpenFlow协议分析实践
    实验3:OpenFlow协议分析实践一、实验要求(一)基本要求1.搭建下图所示拓扑,完成相关IP配置,并实现主机与主机之间的IP通信。用抓包软件获取控制器与交换机之间的通信数据......
  • 软件设计实验5
    实验5:建造者模式[实验任务一]:计算机组装使用建造者模式,完成下述任务:计算机组装工厂可以将CPU、内存、硬盘、主机等硬件设备组装在一起构成计算机,计算机的类型可以是笔记......
  • 实验3:OpenFlow协议分析实践
    一、实验目的能够运用wireshark对OpenFlow协议数据交互过程进行抓包;能够借助包解析工具,分析与解释OpenFlow协议的数据包交互过程与机制。二、实验环境Ubuntu20.0......
  • 实验5:开源控制器实践——POX
    这个作业属于哪个课程https://edu.cnblogs.com/campus/fzzcxy/FZUZCSDN202201这个作业要求在哪里https://edu.cnblogs.com/campus/fzu/FZUSDN2022/homework/12765这个......