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;
}
相关文章推荐
- C程序实现整数的素数和分解问题
- java 循环问题 大全 求2~100a之内的素数。求水仙花数:(1~1000)。有1、2、3、4四个数字,输出所有能组成的互不相同且无重复的三位数。打印空心菱形
- 素数距离问题 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数
- 用java写的打印日历小程序
- mini2440裸机程序时ADS调试开始全速运行不进main断点问题
- C程序设计语言练习1-16 修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多的打印文本
- 1.16 修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本。
- 程序控制打印word文档超出页边距的问题
- PAT 1096. Consecutive Factors (20) 最长连续因子乘积 ,素数判断, 连续乘积问题的幂优化
- sys模块的问题,深浅COPY的应用场景,元祖与购物车程序练习-打印彩色\033[31;1m--------\033[0m
- 汉诺塔问题的解决程序的实现
- 可视化打印一个整数的素数乘积
- SDUT-1135 C/C++经典程序训练5---图形打印问题
- C#.NET常见问题(FAQ)-程序不包含适合于入口点的静态“Main”方法怎么办
- Eclipse中运行MapReduce程序时控制台无法打印进度信息的问题
- java程序运行时出现问题:Could not find the main class: test_jena. Program will exit.
- 在汇编程序中获得命令行参数(已经解决了以前遇到的问题)
- 打印内存变量定位 程序出现内存方面的问题
- 练习1-16 修改打印最长文本行的程序的主程序main, 使之可以打印任意长度的输入行的长度, 并尽可能多的打印文本。
- 用一门非常小众的语言REBOL写日历(万年历)打印的程序