c语言课程设计1

来源:互联网 发布:dns顶级域名有哪些 编辑:程序博客网 时间:2024/04/30 00:44
# include<stdio.h># include<math.h># include<time.h># include<malloc.h># include<string.h>typedef struct _node{    char name[40];//姓名    char no[18];//身份证号    int xb;//性别:女性为0,男性为1    struct _node *next;}node;//=====================函数声明===========================void PutBlack();void PutWhite();void Paint(int Arr[]);node *Create(int n);//创建链表void TraverList(node *Head);//遍历链表void Insert(node **Head,char name[]);//在某考生之前插入新节点void Delete(node **Head, char name[]);//删除某考生//=======================================================int main(){    //=======================定义变量======================    int iSelect;    //===========================1========================    int n_1;//正多边形的边数    double iSide_1 = 1;    double PI_1;    int i_1;//for循环里面的    int iCountTotal_1=0;    int iCount_1=0;    double x_1, y_1;    int iWhile_2=0;//while里循环次数    //===========================2========================    int Arr_2[] = { 0, 0, 0,-1,1, 1, 1 };    //0表示白子,1表示黑子,-1表示空格    int iCount_2=0;//步数    int i_2;    int temp_2[7] = {1,1,1,-1,0,0,0};    int *p_2 = Arr_2;    int flag_2 = 0;    //==========================3==========================    int n_3;    node *head;    char _name_3[40];    printf("欢迎来到第15组,考试报名管理\n");    printf("1:求π的近似值\n");    printf("2:黑白子交换\n");    printf("3:开始报名管理\n");    printf("请输入对应的数字选择要进行的项目:");    scanf("%d", &iSelect);    switch (iSelect)    {        //==========================1==============================    case 1:        printf("假设圆半径为1\n");        printf("\n这是用”正多边形逼近”方法实现的\n");        printf("正6边形,π=3\n");        for (i_1 = 0, n_1 = 12; i_1 < 20; i_1++, n_1 *= 2)        {            iSide_1 = (double)sqrt(2 - sqrt(4 - iSide_1*iSide_1));            PI_1 = (double)n_1*iSide_1 / 2;            printf("正%d边形,边长=%.15f\tπ=%.15f\n", n_1, iSide_1, PI_1);        }        printf("\n这是用随机数法实现的\n");        srand(time(0));        for (i_1 = 0; i_1 < 100000; i_1++)        {            iCountTotal_1++;            x_1 = rand() % 10 / 1.0;            y_1 = rand() % 10 / 1.0;            if ((x_1*x_1 + y_1*y_1) <= 100)                iCount_1++;        }        printf("PI=%.15f\n", (double)iCount_1 / (double)iCountTotal_1 * 4.0);        break;        //==========================2==============================    case 2:        /*        用 system() 调用 color命令可以改变颜色 如system(“color 12”),后面打出来的就是蓝底绿字        COLOR [attr]        attr        指定控制台输出的颜色属性        颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为        前景。每个数字可以为以下任何值之一:        0 = 黑色       8 = 灰色        1 = 蓝色       9 = 淡蓝色        2 = 绿色       A = 淡绿色        3 = 浅绿色     B = 淡浅绿色        4 = 红色       C = 淡红色        5 = 紫色       D = 淡紫色        6 = 黄色       E = 淡黄色        7 = 白色       F = 亮白色        如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时        的颜色。这个值来自当前控制台窗口、/T 命令行开关或        DefaultColor 注册表值。        如果用相同的前景和背景颜色来执行 COLOR 命令,COLOR 命令        会将 ERRORLEVEL 设置为 1。        例如: "COLOR fc" 在亮白色上产生亮红色        */        system("COLOR 70");        printf("有三个白子和三个黑子如下图布置(.表示空格):\n");        Paint(Arr_2);        printf("游戏目的是用最少的步数将上图中白字和黑子的位置进行交换:\n");        Paint(temp_2);        printf("游戏的规则是:\n1);一次只能移动一个棋子;\n2)棋子可以向空格中移动,也可以跳过");        printf("一个对方的棋子进入空格,但不能向后跳,也不能跳过两个子。\n");        printf("以下是移动过程\n\n");        while ((Arr_2[0] + Arr_2[1] + Arr_2[2]) != 3 || Arr_2[3] != -1 || (Arr_2[4] + Arr_2[5] + Arr_2[6]) != 0)            //判断游戏是否结束        {            flag_2 = 0;//每次进入循环后flag_2设为0            //1)黑子向左跳过白子落入空格            //空格 白 黑            //这时不用考虑棋子阻塞现象            for (i_2 = 0; !flag_2&&i_2 < 5; i_2++)//如果移动了棋子,这里肯定不执行,直接跳到while判断            if (p_2[i_2] == -1 && p_2[i_2 + 1] == 0 && p_2[i_2 + 2] == 1 && i_2 <= 4)            {                Arr_2[i_2] = 1;                Arr_2[i_2 + 2] = -1;                iCount_2++;                printf("%d:\t", iCount_2);                Paint(Arr_2);                printf("\n");                flag_2 = 1;//移动了棋子            }            //2)白子向右跳过黑子落入空格            //白 黑 空格            //这时不用考虑棋子阻塞现象            for (i_2 = 0;!flag_2&&i_2 < 5; i_2++)            if (Arr_2[i_2] == 0 && Arr_2[i_2 + 1] == 1 && Arr_2[i_2 + 2] == -1 && i_2 <= 4)            {                Arr_2[i_2] = -1;                Arr_2[i_2 + 2] = 0;                iCount_2++;                printf("%d:\t", iCount_2);                Paint(Arr_2);                printf("\n");                flag_2 = 1;            }            //3)黑子向左移动一格落入空格(但不应该产生棋子阻塞现象)            //空格 黑            //如果是白 空 黑 白就不能移动中间的(亦即黑)            //这时i_2是空的下标,i_2=0或5时肯定不会阻塞            for (i_2 = 0; !flag_2&&i_2 < 7; i_2++)//对每一个棋子做判断            if (Arr_2[i_2] == -1 && Arr_2[i_2 + 1] == 1 && (i_2 == 0 || i_2 == 5 || !(Arr_2[i_2 - 1] == 0 && Arr_2[i_2 + 2] == 0)))            {                Arr_2[i_2 ] = 1; Arr_2[i_2 +1] = -1;                iCount_2++;                printf("%d:\t", iCount_2);                Paint(Arr_2);                printf("\n");                flag_2 = 1;            }                //4)白子向右移动一格落入空格(但不应该产生棋子阻塞现象)                //白 空格                //如果是黑 白 空 黑就不能移动中间的(亦即白)                //这时i_2是白下标,i_2=0或5时肯定不会阻塞                for (i_2 = 0; !flag_2&&i_2 < 7; i_2++)                if (Arr_2[i_2] == 0 && Arr_2[i_2 + 1] == -1 && (i_2 == 0 || i_2 == 5 || !(Arr_2[i_2 - 1] == 1 && Arr_2[i_2 + 2] == 1)))                {                    Arr_2[i_2 ] = -1; Arr_2[i_2+1] = 0;                    iCount_2++;                    printf("%d:\t", iCount_2);                    Paint(Arr_2);                    printf("\n");                    flag_2 = 1;                }        }        printf("游戏结束,共用了%d步\n", iCount_2);        break;        //==========================3==============================    case 3:        printf("欢迎来到考试报名管理系统!\n");        printf("请输入要统计的考生的个数n:");        scanf("%d", &n_3);        printf("现在,请依次输入一下信息:\n");        printf("姓名\t身份证号\t\t\t性别(1代表男,0代表女)\n");        //创建链表        head = Create(n_3);        //插入节点        printf("接下来要在某考生节点前插入一个新的考生节点,请输入该考生的名字\n");        scanf("%s", _name_3);        Insert(&head, _name_3);        printf("插入节点后:\n\n");        TraverList(head);        //删除节点        printf("现在,要删除一个考生节点,请输入该考生姓名:\n");        scanf("%s", &_name_3);        Delete(&head, _name_3);        printf("删除该考生后:\n\n");        TraverList(head);        break;    }    system("pause");    return 0;}//=========================函数定义===================================void PutBlack(){    printf("●");}void PutWhite(){    printf("○");}//画图形void Paint(int Arr[]){    for (int i = 0; i < 7; i++)    {        switch (Arr[i])        {        case 1:            PutBlack();            break;        case 0:            PutWhite();            break;        case -1:            printf(".");            break;        }        printf("\t");    }    printf("\b\n");}node *Create(int n)//创建链表{    node *p1, *p2,*Head;    char _name[40], _no[18];    int i;    p1 = (node *)malloc(sizeof(node));    scanf("%s%s%d", _name, _no, &p1->xb);    strcpy(p1->name, _name);    strcpy(p1->no, _no);    p1->next = NULL;    Head = p1;    p2 = p1;    for (i = 1; i < n; i++)    {        p2 = p1;        p1 = (node *)malloc(sizeof(node));        scanf("%s%s%d", _name, _no, &p1->xb);        strcpy(p1->name, _name);        strcpy(p1->no, _no);        p1->next = NULL;        p2->next = p1;        p2 = p1;    }    return Head;}void TraverList(node *Head)//遍历链表{    node *p = Head;    for (; p != NULL; p = p->next)    {        printf("%s\t%s\t\t\t", p->name, p->no);        if (p->xb == 1)            printf("%s\n", "男");        else printf("%s\n", "女");    }}void Insert(node **Head, char name[])//在某考生之前插入新节点{    node *p = *Head;    node *p1;    char _name[40];    char _no[18];    node *newNode = (node *)malloc(sizeof(node));    printf("请输入要插入的节点的信息:\n");    scanf("%s%s%d", _name, _no, &newNode->xb);    strcpy(newNode->name, _name);    strcpy(newNode->no, _no);    newNode->next = NULL;    if (strcmp((*Head)->name, name) == 0)    {        newNode->next = *Head;        *Head = newNode;        return;    }    for (; p->next != NULL;p=p->next)    {        if (strcmp(p->next->name, name) == 0)        {            p1 = p->next;            p->next = newNode;             newNode->next = p1;            return;        }    }}void Delete(node **Head, char name[])//删除某考生{    node *p = *Head;    node *p1;    if (strcmp((*Head)->name, name) == 0)    {        (*Head) = (*Head)->next;        free(p);        p = NULL;        return;    }    for (; p->next != NULL; p = p->next)    {        if (strcmp(p->next->name, name) == 0)        {            p1 = p->next;            p->next = p1->next;            free(p1);            p1 = NULL;            return;        }    }}

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

0 0
原创粉丝点击