You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pzwuifyt5 69b34f9aa2
Update README.md
2 years ago
23044326--宋沛泽 综合项目(一).docx ADD file via upload 2 years ago
README.md Update README.md 2 years ago

README.md

#include <stdio.h> #include<math.h> #include<string.h> #define PI 3.1415926535 #define N 1000 #define M 0.00000001 #define ull unsigned long long int choose(void);//菜单选项输入函数 void output_hand(void);//菜单内容输入函数 void add(void);//加法函数 void sub(void);//减法函数 void mul(void);//乘法函数 void div(void);//除法函数 void remainde(void);//求模运算函数 void factorial(void);//阶乘函数 void prime(void);//判断素数函数 void volume(void);//求球的体积 void fibonacci(void);//斐波那契数列函数 void power(void);//求次方 void minmul(void);//最小公倍数 void maxdiv(void);//最大公约数 void Swap(void);//交换函数 void Sort(void);//排序函数 double input_decimal(int flag);//输入双精度小数的函数 long long input_integer(int flag);//输入整数的函数 int choose(void) { int flag=1,ch;//flag标记输入格式是否正确 printf("请输入需要进行操作的编号\n"); ch=input_integer(&flag); if(flag) return ch; else { printf("输入有误\n"); return choose(); } } void output_hand(void) { printf("1----两个数的加法\n"); printf("2----两个数的减法\n"); printf("3----两个数的乘法\n"); printf("4----两个数的除法\n"); printf("5----两个数的求模运算\n"); printf("6----求一个数的阶乘\n"); printf("7----判断一个数是否为素数\n"); printf("8----已知半径求其球的体积\n"); printf("9----求斐波那切数列的某项\n"); printf("10----求一个数的n次方\n"); printf("11----求两个数的最大公约数\n"); printf("12----求两个数的最小公倍数\n"); printf("13----交换两个数\n"); printf("14----对输入的若干个数进行排序\n"); printf("0----结束程序\n"); } void add(void) { int flag1=1,flag2=1,t,flag=1;//flag1,flag2和flag标记输入格式是否正确 printf("请选择输入格式1为整数0为小数结果保留两位有效小数\n"); while(1) { t=input_integer(&flag); if((t==1||t==0)&&flag) break; else printf("输入有误\n请重新输入\n"); } printf("请输入两个加数\n"); if(!t) { double a,b; do { if((flag1+flag2)<2) printf("输入有误\n请重新输入\n"); a=input_decimal(&flag1); b=input_decimal(&flag2); }while(flag1==0||flag2==0); printf("%.2lf\n",a+b); } else { long long a,b; do { if((flag1+flag2)<2) printf("输入有误\n请重新输入\n"); a=input_integer(&flag1); b=input_integer(&flag2); }while(flag1==0||flag2==0); printf("%lld\n",a+b); } } void sub(void) { int flag1=1,flag2=1,t,flag=1;//flag1,flag2和flag标记输入格式是否正确 printf("请选择输入格式1为整数0为小数结果保留两位有效小数\n"); while(1) { t=input_integer(&flag); if((t==1||t==0)&&flag) break; else printf("输入有误\n请重新输入\n"); } printf("请依次输入被减数和减数\n"); if(!t) { double a,b; do { if((flag1+flag2)<2) printf("输入有误\n请重新输入\n"); a=input_decimal(&flag1); b=input_decimal(&flag2); }while(flag1==0||flag2==0); printf("%.2lf\n",a-b); } else { long long a,b; do { if((flag1+flag2)<2) printf("输入有误\n请重新输入\n"); a=input_integer(&flag1); b=input_integer(&flag2); }while(flag1==0||flag2==0); printf("%lld\n",a-b); } } void mul(void) { int flag1=1,flag2=1,t,flag=1;//flag1,flag2和flag标记输入格式是否正确 printf("请选择输入格式1为整数0为小数结果保留两位有效小数\n"); while(1) { t=input_integer(&flag); if((t==1||t==0)&&flag) break; else printf("输入有误\n请重新输入\n"); } printf("请输入两个乘数\n"); if(!t) { double a,b; do { if((flag1+flag2)<2) printf("输入有误\n请重新输入\n"); a=input_decimal(&flag1); b=input_decimal(&flag2); }while(flag1==0||flag2==0); printf("%.2lf\n",ab); } else { long long a,b; do { if((flag1+flag2)<2) printf("输入有误\n请重新输入\n"); a=input_integer(&flag1); b=input_integer(&flag2); }while(flag1==0||flag2==0); printf("%lld\n",ab); } } void div(void) { int flag1=1,flag2=1,t,flag=1;//flag1,flag2和flag标记输入格式是否正确 printf("请选择输入格式1为整数0为小数结果保留两位有效小数\n"); while(1) { t=input_integer(&flag); if((t==1||t==0)&&flag) break; else printf("输入有误\n请重新输入\n"); } printf("请依次输入被除数和除数\n"); if(!t) { double a,b=1; do { if((flag1+flag2)<2||fabs(b)<M)//除数不能为0 printf("输入有误\n请重新输入\n"); a=input_decimal(&flag1); b=input_decimal(&flag2); }while(flag1==0||flag2==0||fabs(b)<M); printf("%.2lf\n",a/b); } else { long long a,b=1; do { if((flag1+flag2)<2||b==0)//除数不能为0 printf("输入有误\n请重新输入\n"); a=input_integer(&flag1); b=input_integer(&flag2); }while(flag1==0||flag2==0||b==0); printf("%lld\n",a/b); } } void remainde(void) { long long a,b; int flag1=1,flag2=1;//flag1,flag2标记输入格式是否正确 printf("请输入两个正整数\n"); do { if((flag1+flag2)<2||a<1||b<1) printf("输入有误\n请重新输入\n"); a=input_integer(&flag1); b=input_integer(&flag2); }while(flag1==0||flag2==0||a<1||b<1); printf("%lld\n",a%b); } void factorial(void) { long long a; ull s=1; int flag=1,i; printf("请输入一个自然数\n");//flag标记输入格式是否正确 do { if(flag==0||a<0) printf("输入有误\n请重新输入\n"); a=input_integer(&flag); }while(flag==0||a<0); if(a==0) printf("1\n"); else { for(i=1;i<=a;i++) s*=i; printf("%llu\n",s); } } void prime(void) { long long a; double t; int flag=1,i; printf("请输入一个正整数\n");//flag标记输入格式是否正确 do { if(flag==0||a<1) printf("输入有误\n请重新输入\n"); a=input_integer(&flag); }while(flag==0||a<1); if(a==1) printf("NO\n"); else if(a==2) printf("YES\n"); else { t=sqrt(a); for(i=2;i<=t;i++) if(a%i==0) { printf("NO\n"); break; } if(i>t) printf("YES\n"); } } void volume(void) { double a; int flag=1;//flag标记输入格式是否正确 printf("请输入一个正数(结果保留两位小数,圆周率取3.1415926535\n"); do { if(flag==0||a<0) printf("输入有误\n请重新输入\n"); a=input_decimal(&flag); }while(flag==0||a<0); printf("%.2lf\n",4PIaaa/3); } void fibonacci(void) { long long a,f1=1,f2=1,t;//第一项和第二项为1 int flag=1,i;//flag标记输入格式是否正确 printf("请输入一个正整数\n"); do { if(flag==0||a<1) printf("输入有误\n请重新输入\n"); a=input_integer(&flag); }while(flag==0||a<1); if(a==1||a==2) printf("1\n"); else { for(i=3;i<=a;i++) { t=f1+f2; f1=f2; f2=t; } printf("%lld\n",f2); } } void power(void) { double a,s=1; int b,i; int flag1=1,flag2=1;//flag1,flag2标记输入格式是否正确 printf("请依次输入底数和指数(指数须为自然数,结果保留两位小数)\n"); do { if(flag2==0||flag1==0||b<0) printf("输入有误\n请重新输入\n"); a=input_decimal(&flag2); b=input_integer(&flag1); }while(flag2==0||flag1==0||b<0); for(i=0;i<b;i++) s*=a; printf("%.2lf\n",s); } void minmul(void) { long long a,b,t=1,i,min,max;//t为最大公约数min存放ab中的最小值 int flag1=1,flag2=1;//flag1,flag2和标记输入格式是否正确 printf("请输入两个正整数\n"); do { if((flag1+flag2)<2||a<=0||b<=0) printf("输入有误\n请重新输入\n"); a=input_integer(&flag1); b=input_integer(&flag2); }while(flag1==0||flag2==0||a<=0||b<=0); min=a<b?a:b; max=a>b?a:b; while(max%min) { t=max%min; max=min; min=t; } printf("%lld\n",a*b/min); } void maxdiv(void) { long long a,b,t=1,i,min,max;//t为最大公约数min存放ab中的最小值 int flag1=1,flag2=1;//flag1,flag2和标记输入格式是否正确 printf("请输入两个正整数\n"); do { if((flag1+flag2)<2||a<=0||b<=0) printf("输入有误\n请重新输入\n"); a=input_integer(&flag1); b=input_integer(&flag2); }while(flag1==0||flag2==0||a<=0||b<=0); min=a<b?a:b; max=a>b?a:b; while(max%min) { t=max%min; max=min; min=t; } printf("%lld\n",min); } void Swap(void) { long long a,b; int flag1=1,flag2=1;//flag1,flag2标记输入格式是否正确 printf("请输入两个整数\n"); do { if((flag1+flag2)<2) printf("输入有误\n请重新输入\n"); a=input_integer(&flag1); b=input_integer(&flag2); }while(flag1==0||flag2==0); printf("%lld %lld\n",b,a); } void Sort(void) { long long a[N]; int flag1=1,flag2=1,n=1,t=1,flag=1,i,s;//flag1,flag2和flag标记输入格式是否正确s是输入合格数据的个数t判定排序方式 printf("请输入需要排序的数的个数不超过1000的正整数和需要排序的方式0代表升序1代表降序\n"); do { if((flag1+flag2)<2||(t!=0&&t!=1)||n>N||n<=0) printf("输入有误\n请重新输入\n"); n=input_integer(&flag1); t=input_integer(&flag2); }while(flag1==0||flag2==0||(t!=0&&t!=1)||n>N||n<=0); do { s=0; for(i=0;i<n;i++) { a[i]=input_integer(&flag); if(flag) s++; flag=1; } if(s!=n) printf("输入有误\n请重新输入\n"); }while(s!=n); while(s--&&flag) { flag=0; for(i=0;i<s;i++) { if(a[i]>a[i+1]) { flag=1; int temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } } } if(t==0) for(i=0;i<n;i++) { if(i==n-1) printf("%lld\n",a[i]); else printf("%lld ",a[i]); } else for(i=n-1;i>=0;i--) { if(i) printf("%lld ",a[i]); else printf("%lld\n",a[i]); } } double input_decimal(int *flag) { char a[N]; *flag=1;//先默认输入格式合格为1不合格为0 int i=0,symbol=1,point=0;//symbol判定正负号point判定小数点是否出现过 double s=0,t=0.1;//t为小数点后部分转化s存放总值 scanf("%s",a); if((a[0]=='-'&&strlen(a)==1)||(a[0]=='0'&&a[1]=='0'))//防止输入"00" "-"判定输入合格 { flag=0; return 0; } else if(a[0]=='-')//检测并处理正负号 { symbol=-1; i=1; } while(a[i]!='\0') { if((a[i]>='0'&&a[i]<='9')&&point==0)//处理整数部分数字字符 s=s10+(a[i]-'0'); else if((a[i]>='0'&&a[i]<='9')&&point)//处理小数部分数字字符 { s+=(a[i]-'0')t; t=0.1; } else if(a[i]=='.'&&point==0)//处理第一次出现的小数点 point=1; else//处理非法字符 { flag=0;//标记输入了无效字符 return 0; } i++; } return ssymbol; } long long input_integer(int *flag) { char a[N]; *flag=1;//先默认输入格式合格为1不合格为0 long long i=0,s=0,symbol=1;//symbol判定正负号 scanf("%s",a); if((a[0]=='-'&&strlen(a)==1)||(a[0]=='0'&&strlen(a)>1))//防止输入前导零和'-'判定输入合格 { flag=0; return 0; } else if(a[0]=='-')//检测并处理正负号 { symbol=-1; i=1; } while(a[i]!='\0') { if(a[i]>='0'&&a[i]<='9')//处理数字字符 s=s10+(a[i]-'0'); else//处理非法字符 { flag=0;//标记输入了无效字符 return 0; } i++; } return ssymbol; } int main() { int temp,flag=1,i=1,t=1; double a; output_hand(); while(1) { temp=choose(); switch(temp) { case 0://0表示结束程序 return 0; case 1: add(); break; case 2: sub(); break; case 3: mul(); break; case 4: div(); break; case 5: remainde(); break; case 6: factorial(); break; case 7: prime(); break; case 8: volume(); break; case 9: fibonacci(); break; case 10: power(); break; case 11: maxdiv(); break; case 12: minmul(); break; case 13: Swap(); break; case 14: Sort(); break; default: printf("输入有误\n"); break; } } }