您的位置:首页 > 大数据 > 人工智能

c程序(打印日历、数转成素数乘积、猜随机数、九宫格,汉诺塔问题、main中命令行参数)

2011-08-15 22:59 183 查看

1.打印日历

//打印日历

//判断是否是闰年

#include <stdio.h>

int a[]={0,31,28,31,30,31,30,31,31,30,31,30,31};

int b[]={0,0,31,59,90,120,151,181,212,243,273,304,334,365};

int isleap(int y)

{

return (y%4==0 && y%100!=0 || y%400==0)==1?1:0;

}

//返回一个日期距1900年1月1日(星期1)有多少天

int totaldays(int y,int m,int d)

{

int tdays;

int tyear=y-1900;

tdays=tyear*365+tyear/4-tyear/100+tyear/400;

if(m>2) tdays+=isleap(y);

tdays+=d+b[m];

return tdays;

}

//返回此天是星期几

int tweek(int y,int m,int d)

{

return totaldays(y,m,d)%7;

}

//打印日历

void pt(int y,int m,int d)

{

int i;

int j;

if(m==2) j=a[m]+isleap(y);

else j=a[m];

int week=tweek(y,m,1);

printf("日\t一\t 二\t三\t四\t五\t六\n");

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

printf("\t");

for (i=1;i<=j;i++)

{

printf("%d\t",i);

if((week+i)%7==0)

printf("\n");

}

}

int main()

{

int y,m,d;//定义年、月、日

printf("input y-m-d\n",&y,&m,&d);

scanf("%d-%d-%d",&y,&m,&d);

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

pt(y,m,d);

return 0;

}

2.数转成素数乘积

//将一个数转化成它的素数的乘积,如90=2*3*3*5。

//判断一个数是否是素数,是的话返回1,否则返回0

#include <stdio.h>

int isshu(int x)

{

int i;

for (i=2;i<x/2;i++)

{

if(x%i==0) return 0;

}

return 1;

}

int main()

{

int x;

int i;

int a[20]={0};

int cnt=0;

printf("input data\n");

scanf("%d",&x);

while (isshu(x)==0)

{

for (i=2;i<x/2;i++)

{

if(x%i==0 && isshu(i)==1)

{

a[cnt++]=i;break;

}

}

x/=i;

}

a[cnt]=x;

//将所求的打印出来

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

{

printf("%d\t",a[i]);

}

return 0;

}

3.输入数据,猜次数

//产生一个随机数,然后输入它,输出输入的次数和猜测结果是否正确(最多猜7次)

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main()

{

srand(time(NULL));

int x=rand()%100;

int y=7;//最多猜测次数

int cnt=0;//猜测次数

int num;//你输入的数

printf("产生的随机数是%d\n",x);

while (cnt<7)

{

printf("请输入你猜测的数:\n");

scanf("%d",&num);

if (x==num)

{break;}

else

{

if (x>num)

{

printf("你输入的数小了,请输入大的数\n");

}

else

{

printf("你输入的数大了,请输入小的数\n");

}

cnt++;

}

}

if (cnt!=7)

{printf("你太聪明了,你猜测的次数为%d。\n",cnt+1);

}

else

{printf("今天没有猜中,明天再来吧!\n");

}

return 0;

}

4.九宫格

//九宫格程序,横、竖、斜相加的数都一样。注意:第1行的中间必定放1.

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main()

{

int n;

printf("输入一个奇数:\n");

scanf("%d",&n);

if(n%2==0) return 0;

int cnt=1;//计算放了多少次数据

int i=0;//行

int j=n/2;//列

int a[20][20]={0};//本来要定义一个a

的数组,但是vc6.0中不可以,办法,只好定义成20*20的,在打印的时候打前n行n列了。

//九宫格赋值

for (cnt=1;cnt<=n*n;cnt++)

{

a[i][j]=cnt;

i--;

j++;

if(i<0 && j<n) i=n-1;//行越界

if(i>=0 && j>=n) j=0;//列越界

if(i<0 && j>=n) {i+=2;j-=1;}//行列都越界

if(i>=0 && j<n)//行列都没有越界,且如果没有数值的话,调整行、列的值

{

if(a[i][j]!=0) {i+=2;j-=1;}

}

}

//打印九宫格

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

{

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

{

printf("%d\t",a[i][j]);

}

printf("\n");

}

return 0;

}

5.汉诺塔问题

//汉诺塔问题用递归(注意,盘子数量不要太多,不然运行时间会很长),汉诺塔问题是每次只能移动一个盘子,并且只能大盘子在下,小盘子在上。

#include <stdio.h>

void hano(int n,char a,char b,char c)//将n个盘子从位置a移动到位置c,利用中间位置b

{

if(n<=0) return;//必须是n<=0是退出递归的条件

hano(n-1,a,c,b);

printf("第%d个盘子从%c到%c\n",n,a,c);

hano(n-1,b,a,c);

}

int main()

{

int n;//盘子数量

printf("input n:\n");

scanf("%d",&n);

hano(n,'A','B','C');

return 0;

}

6.main命令行作参数

//用命令行传递参数:在命令行中输入名字,判断是否是会员。

#include <stdio.h>

#include <string.h>

int main(int argc,char *argv[])

//argv[0]为执行的命令,后面依次为命令行中输入的字符串,argc为argv中的数据的个数。

{

char *s[5]={"susan","marlyn","helen","lucy","john"};

int i=0;

int j=0;

int flag=0;//为判断是否同s中名字相同的标志,0为不一样,1为一样。

for (i=1;i<argc;i++)

{

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

{

if (strcmp(argv[i],s[j]) == 0 )

{flag=1;break;}

}

if(1==flag) printf("%s同main函数中数组%d的数据一样。\n",argv[i],s[j]);

else printf("%s同main函数中数组的数据不一样。\n",argv[i]);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐