1.打印日历
//打印日历
//判断是否是闰年
#include
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
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
int isshu(int x)
{
int i;
for (i=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
{
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
#include
#include
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
#include
#include
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[n][n]的数组,但是vc6.0中不可以,办法,只好定义成20*20的,在打印的时候打前n行n列了。
//九宫格赋值
for (cnt=1;cnt<=n*n;cnt++)
{
a[i][j]=cnt;
i--;
j++;
if(i<0 && j
if(i>=0 && j>=n) j=0;//列越界
if(i<0 && j>=n) {i+=2;j-=1;}//行列都越界
if(i>=0 && j
{
if(a[i][j]!=0) {i+=2;j-=1;}
}
}
//打印九宫格
for (i=0;i
{
for (j=0;j
{
printf("%d\t",a[i][j]);
}
printf("\n");
}
return 0;
}
5.汉诺塔问题
//汉诺塔问题用递归(注意,盘子数量不要太多,不然运行时间会很长),汉诺塔问题是每次只能移动一个盘子,并且只能大盘子在下,小盘子在上。
#include
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
#include
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
{
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;
}