数字雨+大数加法+割圆术求π+冒泡排序+快速排序+栈练习+链表练习
发布时间:2021-01-25 13:02:52 所属栏目:大数据 来源:网络整理
导读:数字雨 #include "stdafx.h"#include "windows.h"int _tmain(int argc,_TCHAR* argv[]){system("color 0a");register short i;while (1){i = rand() % 200;printf("%c",(i 50 ? (i % 2 ? '0' : '1') : ' '));if (i16)// 数字越小速度越快Sleep(i);}return 0;
数字雨#include "stdafx.h" #include "windows.h" int _tmain(int argc,_TCHAR* argv[]) { system("color 0a"); register short i; while (1){ i = rand() % 200; printf("%c",(i < 50 ? (i % 2 ? '0' : '1') : ' ')); if (i<16) // 数字越小速度越快 Sleep(i); } return 0; } 大数加法// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "string" void savetoint(char *s,int *a,int weizhi) { for (int j = 0; weizhi >= 0; j++,weizhi--) { a[j] = s[weizhi] - '0'; } } void savetochar(int *a,char *s,int weizhi) { int j = 0; for (; weizhi >= 0; j++,weizhi--) { s[j] = a[weizhi] + '0' ; } s[j] = ' '; } int plus(int *a,int *b,int size) { for (int i=0; i <= size;i++) { b[i] += a[i]; if (b[i] >= 10){ b[i + 1] += b[i] / 10; b[i] %= 10; } } if (b[size + 1] != 0) { return size + 1; } else { return size; } } int _tmain(int argc,_TCHAR* argv[]) { int a[200] = { 0 },b[201]={0}; char sa[201],sb[202]; scanf_s("%s%s",sa,200,sb,200); int lena = strlen(sa) - 1,lenb = strlen(sb) - 1; savetoint(sa,a,lena); savetoint(sb,b,lenb); if (lena >= lenb) { savetochar(b,plus(a,lena)); } else { savetochar(a,plus(b,lenb)); } printf("%sn",sb); _wsystem(_T("PAUSE")); return 0; } 割圆术求π// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "math.h" #include "stdlib.h" #include "time.h" double MonteCarlo(int n) { // 蒙特卡罗法 double x,y,pi; // 记录坐标 int sum=0; // 统计满足条件的颗粒数量 srand(time(NULL)); // 获取随机种子 for (int i = 1; i<n; i++){ x = (double)rand() / RAND_MAX; // 产生0-1之间的随机数 y = (double)rand() / RAND_MAX; // 产生0-1之间的随机数 if (x*x + y*y <= 1) sum++; // 符合条件,数量+1 } pi = 4.0*sum / n; // 计算π return pi; } void cyclotomic(int n) { // 割圆术 int i; // 计数器 int N; // 内接正N边形的边数 double y1; // 内接正N边形的边长 double y2; // 内接正2N边形的边长 i = 0; N = 6; // 从内接正6边形开始 y1 = 1; // 正6边形初始边长为1 while (i<n){ y2 = sqrt(2 - sqrt(4 - y1*y1)); N = N * 2; // 边数翻倍 printf_s("第%2d次切割,为正%5d边形,PI=%.24fn",i+1,N,N*y2/2); y1 = y2; i++; } } int _tmain(int argc,_TCHAR* argv[]) { /* int n = 6;//正六边形开始 double m = 1;//正六边形的边长为1 double Pi = m*n*0.5; for (int i = 0; i < 20; ++i) { printf("第%2d次切割,为正%7d边形,π为:%.16fn",i,n,Pi); double t = 1 - sqrt((double)(1 - m*m*0.25)); t *= t; n *= 2;//边数翻倍 m = sqrt((double)(t + m*m*0.25)); Pi = m*n*0.5; } */ printf_s("%fn",MonteCarlo(50000)); getchar(); return 0; } 冒泡排序// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "time.h" #include "stdlib.h" inline void swap(int &a,int &b){ int temp; temp = a; a = b; b = temp; } void BBsort(int *a,int m) { int i,j,k; for (i = m-1; i > 0; i--) { for (j = 0; j < i; j++) { if (a[j] > a[j + 1]) { swap(a[j],a[j + 1]); } } printf("第%d步排序结果为:",m - i); for (k = 0; k < m; k++) { printf("%d ",a[k]); } printf("n"); } } int _tmain(int argc,_TCHAR* argv[]) { int arr[10]; srand(time(NULL)); for (int i = 0; i < 10; i++) { arr[i] = rand() / 1000 + 10; printf("%d ",arr[i]); } printf("nn"); BBsort(arr,10); system("PAUSE"); return 0; } 快速排序// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "time.h" #include "stdlib.h" #define SIZE 20 inline void swap(int &a,int &b){ int temp; temp = a; a = b; b = temp; } void quicksort(int *a,int numsize)/*a是整形数组,numsize是元素个数*/ { if (numsize>1)/*确保数组长度至少为2,否则无需排序*/ { int left = 0,right = numsize - 1; int val = a[0];/*指定参考值val大小*/ while (left<right)/*循环结束条件*/ { /*从后向前搜索比val小的元素,找到后填到a[left]中并跳出循环*/ for (; right>left; right--) if (a[right]<val) { a[left] = a[right]; break; } /*从前往后搜索比val大的元素,找到后填到a[right]中并跳出循环*/ for (; left<right; left++) if (a[left]>val) { a[right] = a[left]; break; } } a[left] = val;/*将保存在val中的数放到a[left]中*/ quicksort(a,left);/*递归,对前left个数排序*/ quicksort(a + left + 1,numsize - 1 - left);/*对i+1到numsize-1这numsize-1-i个数排序*/ } } int cmp(const void * a,const void * b) { return(*(int *)a - *(int *)b); } int _tmain(int argc,_TCHAR* argv[]) { there: srand(time(NULL)); int arr[SIZE]; for (int i = 0; i < SIZE; i++) { arr[i] = rand() / 1000 + 10; printf("%d ",arr[i]); } printf("nQuickSort Result:n"); quicksort(arr,SIZE); // 也可以用math库中写好的的快速排序函数 // qsort(arr,SIZE,sizeof(int),cmp); for (int i = 0; i < SIZE; i++) { printf("%d ",arr[i]); } printf("nn"); system("PAUSE"); goto there; return 0; } 栈练习// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "string.h" typedef struct data { char name[20]; int age; }; class mystack { public: data dt[100]; int top; mystack(){ top = 0; } }; void cleanall(mystack *st) { st->top = 0; } bool push(mystack *st,data dt) { if (st->top >= 100) { return false; } else { st->dt[++st->top] = dt; return true; } } data pop(mystack *st) { if (st->top != 0) { return st->dt[st->top--]; } } data peek(mystack *st) { if (st->top != 0) { return st->dt[st->top]; } } int _tmain(int argc,_TCHAR* argv[]) { printf("Look at this!n"); mystack st; data dt; data tdata; for (int i = 0; i < 3; i++) { printf("nPlease input your name:"); scanf_s("%s",dt.name,20); printf("Please input your age:"); scanf_s("%d",&dt.age); push(&st,dt); } printf("nPrint out!n"); for (int i = 0; i < 3; i++) { tdata = pop(&st); printf("name:%s,age:%dn",tdata.name,tdata.age); } _wsystem(_T("pause")); return 0; } 链表练习// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "MyLinkType.h" #include <string.h> typedef struct Data { char name[20]; int age; }; typedef struct theOneLink { Data data; theOneLink *NEXT; }aLink; bool Clean(aLink* LK)//清空链表 { aLink *p; if (LK == NULL)//如果这是链表末尾 { return true; } else//否则释放 { p = LK->NEXT; delete LK; Clean(p);//递归地清除下一个 return true; } } aLink *Add(aLink* LK,Data data)//添加节点 { aLink *p; if (LK == NULL)//如果是空链表 { p = new aLink; p->data = data; p->NEXT = NULL; return p;//添加完成 } else//若不是空链表 { p = LK; while ((p->NEXT)!= NULL)//查找链表末端 { p = p->NEXT; } //找到末尾 p->NEXT = new aLink; (p->NEXT)->data = data; (p->NEXT)->NEXT = NULL; //添加完成 return (LK); } } aLink *DelNode(aLink* LK,char* name)//删除节点 { if (LK == NULL)//如果是空链表 { return NULL;//没东西可以删 } else//若不是空链表 { aLink *p; p = LK; Data tdata; tdata = (p->data); if (strcmp(tdata.name,name) == 0) { //如果是第一个 aLink *thenext; thenext = p->NEXT; delete p; return thenext; } do { tdata = (p->NEXT->data); if (strcmp(tdata.name,name) == 0) { //找到了,释放它! aLink *tp; tp = p->NEXT; p->NEXT = p->NEXT->NEXT; delete tp; return LK; } else { //没找到,下一个 p = p->NEXT; } } while (p->NEXT != NULL);//没到末尾,继续查找 //到了末尾仍未发现 return NULL; } } aLink *InsertNode(aLink* LK,char* name,Data data)//插入节点 { if (LK == NULL)//如果是空链表 { return Add(LK,data);//调用Add函数插入 } else//若不是空链表 { aLink *p; p = LK; Data tdata; do { tdata = (p->data); if (strcmp(tdata.name,name)==0) { //找到了 aLink *tp; tp = p->NEXT; p->NEXT = new aLink; p->NEXT->data = data; p->NEXT->NEXT = tp; return LK; } else { //没找到,下一个 p = p->NEXT; } } while (p != NULL);//一直查找,直到末尾 return Add(LK,data);//调用Add函数追加末尾 } } void ShowAll(aLink* LK)//显示全部 { aLink *p; p = LK; while (p != NULL) { //输出data printf("nname:%s age:%d",(p->data.name),(p->data.age)); //下一个 p = p->NEXT; } } aLink *head; int _tmain(int argc,_TCHAR* argv[]) { Data tdata; head = NULL; there://标记 printf("n============================================n"); printf("Please choose a function to cotinue.n"); printf("1.Add sth n"); printf("2.Insert sth n"); printf("3.DEL sth n"); printf("4.Show ALL n"); printf("5.Clean ALL n"); printf("6.Exit n"); int f; scanf_s("%d",&f); char name[20]; switch (f) { case 1://添加 printf("name:"); scanf_s("%s",20); printf("age:"); scanf_s("%d",&tdata.age); head = Add(head,tdata); break; case 2://插入 printf("findBYname:"); scanf_s("%s",name,20); printf("name:"); scanf_s("%s",&tdata.age); head = InsertNode(head,tdata); break; case 3://删除 printf("DelBYname:"); scanf_s("%s",20); head = DelNode(head,name); break; case 4://显示 ShowAll(head); break; case 5://清空 if (Clean(head)) { printf("nsuccess!"); } else { printf("nfailed!"); } head = NULL; break; case 6://退出 return 0; break; default: break; } goto there;//返回 return 0; } (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |