n的阶乘:
main()
{int n,i=1,b=1;
scanf("输入n的值:",&n);
if(i<n)
{b=b*i;
i++;}
printf("输出n的值:",b);
}
晚上看到的,一时兴趣就写了3个程序,都在机子上调试过了,应该问题不大,如有问题恳请指正
1.求n的阶乘
#include<stdio.h>
long int jiecheng(int n)/*这个函数用来计算n的阶乘*/
{long int re=1;
int i;
for(i=2;i<=n;i++)
re=re*i;
return re;
}
main()
{int x;
long int result;
printf("\n\nPlease input [n]:");/*输入数值n*/
scanf("%d",&x);
result=jiecheng(x); /*计算*/
printf("\nThe answer is : %ld",result);
getchar();
}
2.求学生成绩 如果不及格 就给+5分 60-70及格 70-90良好 90-100优秀
#include<stdio.h>
#define NUM 10 /*定义学生人数,这个可以自己改*/
/*定义一个结构体记录学生的成绩和信息*/
struct students
{int no;/*学生序号*/
float data; /*学生分数*/
char *inf;/*学生信息*/
};
main()
{struct students std[NUM];
int i,temp;
printf("\n\nPlease input the score of all the students:\n");
printf("ATENTION:Once input a number please press [ENTER] !\n");
for(i=0;i<NUM;i++)
{std[i].no=i+1;
scanf("%f",&(std[i].data)); /*注意:输入一个分数按一次回车*/
}
for(i=0;i<NUM;i++)
{temp=(int)(std[i].data/10);/*temp为整型*/
switch(temp)
{case 10:
case 9:std[i].inf="Excellent";break; /*90=<score<=100优秀*/
case 8:
case 7:std[i].inf="Good";break; /*70=<score<90良好*/
case 6:std[i].inf="Passed";break; /*60=<score<70及格*/
default:std[i].data=std[i].data+5; /*不及格+5分*/
std[i].inf="Incresed 5 points";
break;
}
}
printf("\n\nThe statistica result is:\n");
for(i=0;i<NUM;i++)
{printf("N0.%d--score:%.1f ",std[i].no,std[i].data);
puts(std[i].inf);
}
getchar();
}
3.接受一个日期的输入判断日期的有效性 输出这一天的下一天的日期 输出这一天是当前年的第几天
#include<stdio.h>
int judge_year(int year) /*判断输入的年份是不是闰年*/
{if(year%4==0)
{if(year%100!=0)return 1;
else if(year%400==0)return 1;
else return 0;
}
else return 0;
}
int judge(char *da)/*判断输入的日期是否合法*/
{int y,m,d;
if(strlen(da)!=10)return 0;/*判断输入年份的长度*/
if(da[4]!='-'||da[7]!='-')return 0;/*判断有没有分隔号-*/
/*下面判断输入的为数字*/
if(!((da[0]<=57)&&(da[0]>=48)&&(da[1]<=57)&&(da[1]>=48)
&&(da[2]<=57)&&(da[2]>=48)&&(da[3]<=57)&&(da[3]>=48)
&&(da[5]<=57)&&(da[5]>=48)&&(da[6]<=57)&&(da[6]>=48)
&&(da[8]<=57)&&(da[8]>=48)&&(da[9]<=57)&&(da[9]>=48)))return 0;
/*把输入的字符串转化为10进制数*/
y=(da[0]-48)*1000+(da[1]-48)*100+(da[2]-48)*10+da[3]-48;
m=(da[5]-48)*10+da[6]-48;
d=(da[8]-48)*10+da[9]-48;
/*下面判断大月为1-31号,小月为1-30号,闰年时2月为1-29号,非闰年时为1-28号*/
if((m==1||m==3||m==5||m==7||m==8||m==11)&&(d<=31&&d>=1))return 1;
else if((m==4||m==6||m==9||m==12)&&(d<=30&&d>=1))return 1;
else if(m==2&&judge_year(y)&&d<=29&&d>=1)return 1;
else if(m==2&&(!judge_year(y))&&d<=28&&d>=1)return 1;
else return 0;
}
int judge_again(int y,int m,int d)/*判断年月日的合法性*/
{/*下面判断大月为1-31号,小月为1-30号,闰年时2月为1-29号,非闰年时为1-28号*/
if((m==1||m==3||m==5||m==7||m==8||m==11)&&(d<=31&&d>=1))return 1;
else if((m==4||m==6||m==9||m==12)&&(d<=30&&d>=1))return 1;
else if(m==2&&judge_year(y)&&d<=29&&d>=1)return 1;
else if(m==2&&(!judge_year(y))&&d<=28&&d>=1)return 1;
else return 0;
}
main()
{char c[20];
int yy,mm,dd;
int order1[12]={1,32,60,91,121,152,182,213,244,274,305,335};
/*定义闰年时每个月的第一天是一年中的第多少天*/
int order0[12]={1,32,61,92,122,153,183,214,245,275,306,336};
/*定义非闰年时每个月的第一天是一年中的第多少天*/
printf("\n\nPlease input the date(xxxx-xx-xx):\n");
gets(c);
if(judge(c))/*若输入的日期合法*/
{yy=(c[0]-48)*1000+(c[1]-48)*100+(c[2]-48)*10+c[3]-48;
mm=(c[5]-48)*10+c[6]-48;
dd=(c[8]-48)*10+c[9]-48;
if(judge_again(yy,mm,dd+1))
{printf("\nThe next day is:%4d-%2d-%2d",yy,mm,dd+1);
if(judge_year(yy))printf("\nIt is the %dth day of year %d.",order1[mm]+dd,yy);
else if(!judge_year(yy))printf("\nIt is the %dth day of year %d.",order0[mm]+dd,yy);
}
else if(!judge_again(yy,mm,dd+1)&&judge_again(yy,mm+1,dd))/*若当天为月末则下一天应该是月数+1,而天数应为1号*/
{printf("\nThe next day is: %4d-%2d-01",yy,mm+1);
if(judge_year(yy))printf("\nIt is the %dth day of year %d.",order1[mm]+dd,yy);
else if(!judge_year(yy))printf("\nIt is the %dth day of year %d.",order0[mm]+dd,yy);
}
else if(!judge_again(yy,mm,dd+1)&&!judge_again(yy,mm+1,dd))
{printf("\nThe next day is: %4d-01-01",yy+1);
printf("\nIt is the 1th day of year %d.",yy+1);
}
}
else {printf("Input Error!");exit(0);}
getchar();
}