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
- c语言课程设计1
- C语言课程设计任务书
- C语言课程设计
- C语言课程设计
- C语言课程设计
- c语言课程设计
- C语言课程设计---通讯录
- c语言课程设计
- c语言课程设计
- c语言课程设计笔记
- C语言课程设计
- C语言课程设计
- c语言课程设计
- c语言课程设计
- 求助!!!C语言课程设计
- c语言课程设计2
- C语言课程设计----电子词典
- C语言实现课程设计
- 最近做的h5和Native交互协议
- 密码判断
- linux VNC配置(解决:关闭防火墙仍不能访问端口的问题)
- 第一章 Java介绍 和 环境配置
- JSON解析
- c语言课程设计1
- java-反射
- java 获取一个类的所有属性
- Linux的IFS
- HDU 1025 Constructing Roads In JGShining's Kingdom
- 浅谈JavaScript引用类型——基本包装类型
- 2016/12/13学习工作日志
- 用于对付json
- Linux的sysctl命令