数字雨+大数加法+割圆术求π+冒泡排序+快速排序+栈练习+链表练习
发布时间:2021-02-01 20:34:24 所属栏目:大数据 来源:网络整理
导读:数字雨 #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;
}
(编辑:92站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


