C++小小计算器(25个功能)

仅供参考!

注意:同路径文件夹下放置名为 学生成绩.txt文件

如图:

 

 

            #include<bits/stdc++.h>
			using namespace std;
			#include<iostream>
			#define PI 3.14
			void page();					//用于页面的制造 
			void function();				//负责主菜单的显示和用户进行功能的选择 
			void add();						//两数进行加法 
			void subtract();				//两数进行减法 
			void absolute();		//两数之间取模 
			void multiply();		//计算两数的乘积 
			void divide();			//计算两数的商 
			void area();			//求圆的面积 
			void place();			//判断数字的位数 
			void year();				//判断闰年 
			void chengji();				//百分制成绩转换为五分制 
			void shi();					//计算范围内奇数的和 
			void shiyi();				//计算范围内偶数的和 
			void shier();				//计算范围内3的倍数的和 
			void integer();				//计算范围内15的倍数的和
			void daffodil();			//水仙花数 
			int max( int x,int y );			//求最大值 
			void max_f();
			void max_min( int *p,int *q );	//求最大最小值 
			void shiliu();
			void sort( float *a );			//冒泡排序 
			void sort_f();
			void transpose();				//矩阵转置 
			void diagonal();				//求对角线上数字的和 
			void ershi();
			typedef struct node{			//定义链表的节点 
				int num;
				struct node * next;
			}node;
			node * head_f();				//定义头指针 
			void j_chain();					//定义静态链表 
			void output( node * head );		//输出链表 
			void insert( node * head );		//插入链表中的节点 
			void delet( node * head );		//删除链表中的节点 
			void s_menu( node * head );		//动态链表的二级菜单 
			void d_chain();					//定义动态链表
			struct student{					//定义学生信息的结构体 
				int sno;
				char name[10];
				float score;
			};
			void grade();			//对学生成绩进行排序 
			void score();			//利用文件实现学生成绩普涨10分的操作 
			char sushu();
			void ershiwu();			//判断素数 
			
			int main()
			{
				function();
				return 0;
			}
			
			void function()
			{
				int n;
				while( 1 )
				{
					page();
					printf("请选择要进行第几项功能:");
					scanf("%d",&n);
					system("cls");
					if( n==26 )					//n得到输入的数然后进行判断执行哪段代码 
						break;
					switch( n )
					{
						case 1:
							add();break;
						case 2:
							subtract();break;
						case 3:
							absolute();break;
						case 4:
							multiply();break;
						case 5:
							divide();break;
						case 6:
							area();break;
						case 7:
							place();break;
						case 8:
							year();break;
						case 9:
							chengji();break;
						case 10:
							shi();break;
						case 11:
							shiyi();break;
						case 12:
							shier();break;
						case 13:
							integer();break;
						case 14:
							daffodil();break;
						case 15:
							max_f();break;
						case 16:
							shiliu();break;
						case 17:
							sort_f();break;
						case 18:
							transpose();break;
						case 19:
							diagonal();break;
						case 20:
							ershi();break;
						case 21:
							j_chain();break;
						case 22:
							d_chain();break;
						case 23:
							grade();break;
						case 24:
							score();break; 
						case 25:
							ershiwu();break;
						
					}
					printf("\n");
					system("pause");
					getchar();
					system("cls");
				}
			}
						
			void page()
			{
			
				printf("		*************************************\n");
				printf("		*       小小计算器                  *\n");
				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 计算从1到n的奇数和       *\n");
				printf("		*       11 计算从1到n的偶数和       *\n");
				printf("		*       12 计算从1到n的3的倍数的和  *\n");
				printf("		*       13 求即被3整除又被5整除的数 *\n");
				printf("		*       14 求水仙花数               *\n");
				printf("		*       15 求最大值                 *\n");
				printf("		*       16 求最大最小值             *\n");
				printf("		*       17 冒泡排序                 *\n");
				printf("		*       18 矩阵转置                 *\n");
				printf("		*       19 求对角线和               *\n");
				printf("		*       20 统计单词个数	            *\n");
				printf("		*       21 创建静态链表             *\n");
				printf("		*       22 创建动态链表             *\n");
				printf("		*       23 学生成绩排序             *\n");
				printf("		*       24 成绩普涨10分             *\n");
				printf("		*       25 素数判断                 *\n");
				printf("		*       26 退出程序                 *\n");
				printf("		*************************************\n");
			}
			
			void add()
			{
				int a,b;
				printf("请输入两个整数进行加法(中间以空格隔开):");
				scanf("%d %d",&a,&b);
				printf("\n加法结果的十进制形式是:%d\n",a+b);//十进制形式输出 
				printf("加法结果的八进制形式是:%o\n",a+b);//八进制形式输出 
				printf("加法结果的十六进制形式是:%x\n",a+b);//十六进制形式输出 
			}
			
			void subtract()
			{
				int a,b;
				printf("请输入两个整数进行减法(中间以空格隔开):");
				scanf("%d %d",&a,&b);
				printf("\n加法结果的十进制形式是:%d\n",a-b);
				printf("加法结果的八进制形式是:%o\n",a-b);
				printf("加法结果的十六进制形式是:%x\n",a-b);
			}
			
			void absolute()
			{
				int a,b,value;
				printf("请输入两个整数进行取模运算(中间以空格隔开):");
				scanf("%d %d",&a,&b);
				value=abs(a-b);
				printf("\n取模结果的十进制形式是:%d\n",value);
				printf("取模结果的八进制形式是:%o\n",value);
				printf("取模结果的十六进制形式是:%x\n",value);
			}
			
			void multiply()
			{
				float a,b;
				printf("请输入两个数进行乘法(中间以空格隔开):");
				scanf("%f %f",&a,&b);
				printf("\n乘法结果的小数形式是:%f\n",a*b);
				printf("乘法结果的指数形式是:%e\n",a*b);
			}
			
			void divide()
			{
				float a,b;
				printf("请输入两个数进行除法(中间以空格隔开):");
				scanf("%f %f",&a,&b);
				if( b==0.0 )
					printf("\n除数为0,无法进行除法运算\n"); 
				else
				{ 
					printf("\n除法结果的小数形式是:%f\n",a/b);
					printf("除法结果的指数形式是:%e\n",a/b);
				} 
			}
			
			void area()
			{
				float r;
				printf("请输入圆的半径:");
				scanf("%f",&r);
				printf("\n该圆面积是%f\n",PI*r*r);
				printf("该圆的面积保留两位小数结果是:%1.2f\n",PI*r*r);
			}
			
			void place()
			{
				int a,x,y,z;
				printf("请输入一个3位以内正整数进行位数的判断:");
				scanf("%d",&a);
				if( a<=0 )
					printf("\n要求输入的数为正整数");
				else if( a>=1000 )
					printf("\n要求输入的数为3位以内的正整数"); 
				else if( a>=100 && a<=999 )
					{
						x=a/100;
						y=a/10-x*10;
						z=a%100-y*10;
						printf("\n该数为3位数,百位是%d,十位是%d,个位是%d",x,y,z);
					}
				else if( a>=10 && a<=99 )
					{
						x=a/10;
						y=a%10;
						printf("\n该数为2位数,十位是%d,个位是%d",x,y);
					}
				else if( a>=0 && a<=9 )
					printf("\n该数为1位数,它是%d",a);
			}
			
			void year()
			{
					int y;
				printf("请输入年份:");
				scanf("%d", &y);
				if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
					printf("%d是闰年\n",y);
				else
					printf("%d不是闰年\n",y);
			}
			
			void chengji()
			{
				int x;
				printf("请输入成绩:");
				scanf("%d",&x);
				if( x>100 || x<0 )
					printf("成绩输入错误");
				else
					switch(x/10)
					{
						case 10:
						case 9:
							printf("优秀");break;
						case 8:
							printf("良");break;
						case 7:
							printf("中");break;
						case 6:
							printf("及格");break;
						default:
							 printf("回家种地!");
					}
			}
			
			void shi()
			{
				int a,su=0,l;
				printf("输入数据:");
				scanf("%d",&l);
				for(a=1;a<l;){
					a=2*a+1;
					su=a+su;
					printf("\n1到%d之间所有奇数的和为%d",su);}
			}
			
			void shiyi()
			{
				int p,su2=0,l2;
			printf("输入数据:");
			scanf("%d",&l2);
			for(p=1;p<l2;){
				p=2*p;
				su2=p+su2;
			printf("\n1到%d之间所有偶数的和为%d",su2);
			}
		}
			
			void shier()
			{
				int n,i=3,sum=0;
				printf("请输入n的值:");
				scanf("%d",&n);
				if( n>=3 )
					do
					{
						sum+=i;
						i+=3;
					}while( i<=n );
				printf("\n1到%d之间所有3的倍数的和为%d",n,sum);
			}
			
			void integer()
			{
				int a,b,i,sum=0,t;
				printf("用两个数之间的数进行求和:");
				scanf("%d %d",&a,&b);
				if( a>b )
				{
					t=a;
					a=b;
					b=t;
				}
				for( i=a;i<=b;i++ )
					if( i%3==0 && i%5==0 )
						sum+=i;
				printf("\n和是:%d",sum);
			}
			
			void daffodil()
			{
				int a,b,c;
				printf("水仙花数有:"); 
				for( a=1;a<=9;a++ )
					for( b=0;b<=9;b++ )
						for( c=0;c<=9;c++ )
							if( a*100+b*10+c==a*a*a+b*b*b+c*c*c )
								printf("%6d",a*100+b*10+c);
			}
			
			int max( int x,int y )
			{
				int ret;
				if( x>y )
					ret=x;
				else
					ret=y;
				return ret;
			}
			void max_f()
			{
				int a,b;
				printf("请输入两个整数(中间以空格隔开):");
				scanf("%d %d",&a,&b);
				printf("\n最大值是:%d",max(a,b));
			}
			
			void max_min( int *p,int *q )
			{
				int *t;
				if( *p<*q )
				{
					t=p;
					p=q;
					q=t;
				}
				printf("\n最大的数是%d,最小的数是%d",*p,*q);
			}
			void shiliu()
			{
				int a,b;
				int *p,*q;
				printf("输入两个正整数即可求出最大与最小(中间以空格隔开):");
				scanf("%d %d",&a,&b);
				max_min(&a,&b);
			}
			
					void sort( float *a )
					{
						float t;
						int i,j;								
                        //定义两个变量 从第一位开始对其一个个做比较 
						for( j=0;j<9;j++ )
							for( i=0;i<9-j;i++ )				
                                //把数大的 往后挪 第二次从第二个数开始依次 重复 
								if( a[i]>a[i+1] )
								{
									t=a[i];						
                                //直到最后一次重复把所有大的数放到了小数后 
									a[i]=a[i+1];
									a[i+1]=t;
								}
						printf("\n从小到大的排序结果为:\n");
						for( i=0;i<10;i++ )
							printf("%1.4f    ",a[i]);
					}
				void sort_f()
				{
					float a[10];
					int i;
					printf("请输入10个数,即可得到排序结果:\n");
					for( i=0;i<10;i++ )										
                    //先定义数组然后对其输入 
						scanf("%f",&a[i]);
					sort(a);
				}
			
			void transpose()
			{
				int a[4][4]={0},i,j,t;
				printf("请输入一个3*4的整数矩阵,进行转置操作:\n");
				for( i=0;i<3;i++ )
					for( j=0;j<4;j++ )
						scanf("%d",&a[i][j]);
				printf("转置后的整数矩阵为:\n");
				for( i=0;i<4;i++ )
					for( j=i;j<4;j++ )
						if( i!=j )
						{
							t=a[i][j];
							a[i][j]=a[j][i];
							a[j][i]=t;
						}
				for( i=0;i<4;i++ )
				{
					for( j=0;j<3;j++ )
						printf("%4d",a[i][j]);
					printf("\n");
				}
			}
			
			void diagonal()
			{
				int a[3][3],i,j,sum=0;
				printf("请输入一个3*3的整数矩阵:\n");
				printf("(同一行的数字用空格隔开,不同行的数字用回车隔开)"); 
				for( i=0;i<3;i++ )
					for( j=0;j<3;j++ )
						scanf("%d",&a[i][j]);
				for( i=0;i<3;i++ )
					sum+=a[i][i];
				printf("\n对角线上的和为:%d",sum);
			}
			
			void ershi()
			{
					char string[81];                          
			    int i,num=0,word=0;                
			    gets(string);
			    for(i=0;(string[i]!='\0');i++)
			        if(string[i]==' ') word=0;
			        else if(word==0)
			        {
			            word=1;
			            num++;
			        }
			    printf("共有有%d个字母。\n",num);
			}
			
			node * head_f()
			{
				node *head;
				head=(node*)malloc(sizeof(node));
				head->next=NULL;
				return head;
			}
			void j_chain()
			{
				node *head,*p,*pre;
				int a[4]={5,6,7,8},i;
				head=head_f();
				pre=head;
				for( i=0;i<=3;i++ )
				{
					p=(node*)malloc(sizeof(node));			
                //申请空间 头节点定义两个区 一个是数值区 
					p->num=a[i];
					p->next=NULL;							
                //一个指针域 然后让上一个节点的地址域指向下一个节点的数值区 
					pre->next=p;
					pre=p;
				}
				printf("该链表所含的数字为:\n");
				p=head->next;
				while( p!=NULL )
				{
					printf("%d",p->num);				//最后一个节点为空才停止 
					p=p->next;
				}
			}
			
			void output( node * head )
			{											//输出链表视频讲解 
				node *p;
				cout<<"该链表所含数字为:\n";		
				p=head->next;
				while( p!=NULL )
				{
					printf("%4d",p->num);
					p=p->next;
				} 
			}
			void insert( node * head )
			{
				int n,x,count;
				output(head);
				cout<<"\n请输入要插入的位置:\n";
				cin>>n;
				cout<<"请输入要插入的数:\n";
				cin>>x;
				node *p,*q;
				p=head;
				count=1;
				while( count<n && p->next )
				{
					p=p->next;
					count++;
				}
				if( count!=n )
					cout<<"输入的位置有错误\n";
				else
				{
					q=(node*)malloc(sizeof(node));
					q->num=x;
					q->next=p->next;
					p->next=q;
				}
				output(head);
			}
			void delet( node * head )
			{
				output(head);
				int n,count;
				cout<<"\n请输入要删除的位置:\n";
				cin>>n;
				node *p,*q;
				p=head;
				count=1;
				while( count<n && p->next->next )
				{
					p=p->next;
					count++;
				}
				if( count!=n )
					cout<<"输入的位置有错误\n";
				else
				{
					q=p->next;
			    	p->next=q->next;
					free(q);
				}
				output(head);
			}
			void s_menu( node * head )
			{
				int n=0;
				while( 1 )
				{
					cout<<"*************************************\n";
					cout<<"*       1.输出链表                  *\n";
					cout<<"*       2.链表中插入数字            *\n";
					cout<<"*       3.删除节点                  *\n";
					cout<<"*       4.退出                      *\n";
					cout<<"*************************************\n";
					cout<<"请选择功能:";
					scanf("%d",&n);
					system("cls");
					if( n==4 )
						break;
					switch( n )
					{
						case 1:
							output(head);
							cout<<"\n按任意键继续......";
							break;
						case 2:
							insert(head);
							cout<<"\n按任意键继续......";
							break;
						case 3:
							delet(head);
							cout<<"\n按任意键继续......";
							break;
					}
					getchar();
					getchar();
					system("cls");
				}
			}
			void d_chain()			//动态链表视频讲解 
			{
				node *head,*p,*pre;
				int x;
				printf("请输入一些数:(输入负数即可结束输入)\n");
				head=head_f();
				pre=head;
				while( 1 )
				{
					cin>>x;
					if( x<0 )
						break;
					p=(node*)malloc(sizeof(node));
					p->num=x;
					p->next=NULL;
					pre->next=p;
					pre=p;
				}
				system("cls");
				s_menu(head);
			}
			
			void grade()
			{
				struct student stu[10],t;
				int n=0,i,j;
				float sum=0.0;
				printf("请输入10位学生的学号,姓名,分数:\n");
				for( n=0;n<10;n++ )
				{
					scanf("%d",&stu[n].sno);
					scanf("%s",&stu[n].name);
					scanf("%f",&stu[n].score);			
				}
				for( i=0;i<9;i++ )
					for( j=0;j<9-i;j++ )
					{
						if( stu[j].score>stu[j+1].score ) 
						{
							t=stu[j];
							stu[j]=stu[j+1];		//冒泡法排序 
							stu[j+1]=t;
						}
					}
				printf("\n从小到大的结果为:\n");
				for( n=0;n<10;n++ )
				{
					printf("%d  ",stu[n].sno);
					printf("%s  ",stu[n].name);			//定义结构体 
					printf("%1.2f\n",stu[n].score);
					sum+=stu[n].score;
				}
				printf("这10个学生的总成绩为:%1.2f",sum);	//结构体的输出 格式 
				printf("\n平均成绩为:%1.2f",sum/10);
			}
			
			void score()
			{
				int i=0;
				FILE *fp;
				int s[10]={0};
				if((fp=fopen("成绩.txt","r+"))==NULL)
				{
					cout<<"Error!";
					exit(1); 
				}
				cout<<"分数普涨前是:(最高100分)\n";
				while( !feof(fp) && i!=10 )
				{
					fscanf(fp,"%d",&s[i]);			
                //首先判断一下在90~100直接变为100 否则+10 
					printf("%4d",s[i]);
					if( s[i]>=90 )
						s[i]=100;
					else
						s[i]+=10;
					i++;
				}
				cout<<"\n分数普涨后是:\n"; 
				for(i=0;i<10;i++)
					printf("%4d",s[i]);
				rewind(fp);
				for( i=0;i<10;i++ )
				{
					fprintf(fp,"%d",s[i]);
					fprintf(fp,"\n");
				}
				rewind(fp);
				fclose(fp);
			}
			
			char sushu(int i)
				{int n; 
				for(i=2;i<=n;i++)
			    if(n%i==0)break;
			    if(i>n)return 0;
			    if(i<n)return 1;}
			void ershiwu(){	
				printf("请输入要判断的数字:");
					int i,x;
					scanf("%d",&i);
					x=sushu(i);
					if(x=1) printf("是素数");
					if(x=0) printf("不是素数");
				 } 

  • 3
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值