小小计算器

小小计算器

#include<iostream>
#include<iomanip>
#include<math.h>
#include<string> 
#include <stdio.h>
#include<stdlib.h>
using namespace std;
//%d 十进制有符号整数
//%u 十进制无符号整数
//%f 浮点数
//%s 字符串
//%c 单个字符
//%p 指针的值
//%e 指数形式的浮点数
//%x, %X 无符号以十六进制表示的整数
//%0 无符号以八进制表示的整数
//%g 自动选择合适的表示法
//一些特殊规定字符
//\n 换行
//\f 清屏并换页
//\r 回车
//\t Tab符
//\xhh 表示一个ASCII码用16进表示,
//其中hh是1到2个16进制数

void function_1 ();
void function_2 ();
void function_3 ();
void function_4 ();
void function_5 (int num); 
void function_6 (float a);
void function_7 (int year);
void function_8 (int grade);
void function_9 (int n);
void function_10 (int n);
void function_11 (int n);
void function_12 (int sum1,int sum2);
void function_13 ();
int  function_14 (int x,int y);
void  function_15 (int *max,int *min);
void function_16 (int n,int a[]);
void function_17 ();
void function_18 (int a[][100] ,int x) ;
void function_19 (char c[]);
void function_20 ();
void function_21 ();

struct students                                      //typedef结构体重命名 
{
	int num;
	char name[20];
	float grade;
};
void function_22 (struct students person[],float sum_grade);

void function_23( );

int c; 
void function_24(int n,char x,char y,char z);
int  function_25(char *s);




int main()
{
	//初始化 
//C语言中以 ; 作为语句的结束,不以行为单位结束,
//当一行的内容太长不方便卸载一行时可使用反斜杠"\"作为继续符,分为多行书写
	cout<<"********************************************\n\
*          小小计算器             \n\
*            1 加法                 \n\
*            2 减法                 \n\
*            3 乘法                 \n\
*            4 除法                 \n\
*            5 判断数字的位数       \n\
*            6 计算圆面积           \n\
*            7 判断闰年             \n\
*            8 成绩转换             \n\
*            9 计算从1到输入数之间的奇数和      \n\
*            10 计算从1到输入数之间的偶数和     \n\
*            11 输出从1到输入数之间所有3的倍数  \n\
*            12 求即被3整除又被5整除的数        \n\
*            13 求水仙花数 		   			  \n\
*            14 求最大值			    		 \n\
*            15 求最大最小值			   		  \n\
*            16 数组—冒泡排序				 \n\
*            17 数组-矩阵转置			    	  \n\
*            18 数组-求矩阵对角线和			  \n\
*            19 统计单词输入个数			 	 \n\
*            20 静态创建链表			    	  \n\
*            21 动态创建链表			    		\n\
*            22 学生成绩排序					\n\
*            23 学生成绩普涨10分     \n\
*            24 汉诺塔    \n\
*            25 统计句子中单词个数   \n\ 
*            26 输入-1退出本程序    \n\
***********************************************\n" ;

	
	
	
	while(1)
	{
	
	int choose;
    //计算类型选择
    cout<<" "<<'\n';
	cout<<"请选择计算类型:"<<'\n';
	cout<<"输入1即表示执行上述1代表的运算,并输出不同进制的结果"<<'\n';
	cout<<"输入-1结束本程序" <<'\n';
	//C语言   scanf("%d", &int_choose); 
	//选择后开始运算 
    cin>>choose;
    if(choose==-1)
	{cout<<"欢迎下次使用!";break;}
	switch (choose) 
	{
		case 1: function_1(); break;
		case 2: function_2(); break;
		case 3: function_3(); break;		
		case 4: function_4(); break;
		case 5: {
			while(1)
			{
			cout<<"请输入一个整数"<<endl;
			int num;
			cin>>num;
			if (num<0)
			cout<<"请输入一个正整数"<<endl; 
			else
			if (num/1000>=1)
			cout<<"请输入一个3位以下的数";
			else 
			{
			function_5 (num);
			break;}
			
		}
		} break;
		case 6: {
				//数据输入区 
		float a;
	    cout<<"请输入所计算圆的半径:";
	    cin>>a ;
			function_6(a);
		} break;
		case 7:	{
		int year; //定义输入的年份 
	    //年份的输入 
	    cout<< "请输入要判断的年份:";
        cin>>year;
		function_7(year);	
		} break;
		case 8: {
			int grade;
			cin>>grade;
			function_8(grade);break;
		} 
		case 9:{int n;	
		cout<<"请输入一个正整数n:";
	    cin>>n;
		function_9(n);
		} break;
		case 10: {
			//输入 
			int n;
			cout<<"请输入一个正整数:";
            cin>>n;
            function_10(n); break;
		}
		case 11:{
		//定义计数值,输入值,输出的值
		int n; 
	    cout<<"请输入一个正整数:";
	    cin>>n;
	    function_11(n); break;
		} 
		case 12:{
			int sum1, sum2;        //定义两个输入的数sum1,sum2
	        cout<<"请输入两个不同的数:(6 7) ";
	        cout<<"注意!请按从小到大排列,如果中间没有符合条件的数,将不会返回结果!"<<'\n';
            cin>>sum1;cin>>sum2;
            function_12(sum1,sum2); break;
		} 
		case 13: function_13(); break;
		case 14: {
			int x, y,max;
		    cout<<"请输入要比大小的数字:";
		    cin>>x;cin>>y;
			max=function_14(x,y);
			cout<<"两个数的最大值是";
			cout<<max;
			break;
		}
		case 15:{
			int x, y,max,min;
			cout<<"请输入要比大小的数字:";
			cin>>x;cin>>y;
			max=x;min=y; 
			function_15(&max,&min);
			cout<<"最大值是"<<max<<endl;
			cout<<"最小值是"<<min<<endl; 
			break;
		} 
		case 16: {

			cout<<"输入你要排序的个数"<<'\n'; 
            int n;
            cin>>n;
			int a[100];
			for(int j=0;j<n;j++)
            cin>>a[j];
		    function_16(n,a); break;
	    }
	    
		case 17: function_17(); break;
		case 18: 
		{
			int x,y,i,j,a[100][100];
			cout<<"请输入需要转置的数列为几行几列(4 6)"; 
	        cin>>x;cin>>y;
	        cout<<"请按行输入矩阵:";
	    //矩阵的输入。 
		    for (i=0; i<x; i++){
			for (j=0; j<y; j++){
				cin>>a[i][j];
			}
		    }
		    function_18(a,x); break;
		}
		case 19: {
		cout<<"输入要判断的语句"<<'\n';	
		char c[1000];	         
        getchar(); 
        gets(c);       
		function_19(c); break;}
		case 20: function_20(); break;
		case 21: function_21(); break;
		case 22:{
	struct students person[10];	
	int i;	
	float sum_grade = 0;	
	for ( i=0; i<10; i++) 
	{
		 
		cout<<"请输入第"<<i+1<<"组数据" <<'\n' ;
		cout<<"请输入学号:";  //依次赋值 
		cin>>person[i].num;
		cout<<"请输入姓名:";
		cin>>person[i].name;
		cout<<"请输入成绩:";
		cin>>person[i].grade;
		cout<<'\n'; 
		sum_grade += person[i].grade;
	};
		function_22(person,sum_grade);
		break;
		} ;
		case 23: function_23(); break;
		case 24:{int n;
            char x='A',y='B',z='C';
            cout<<"请输入传递的总个数" ;
            cin>>n; 
            function_24(n,x,y,z);
            cout<<c;}; 
		case 25:{
	    char zf[100];
	    cout<<"请输入一行连续的单词";
	    getchar(); 
	    gets(zf);
	    cout<<"单词个数"<<function_25(zf); 
        break;
		}
		
		default:cout<<"错误!请输入1-22的数字!" ;  
		
	}
        
	}
	return 0;

}
//功能函数区 
	//1加法
	
	/*头文件iostream中提供控制符:
	dec: 指示cout以10进制输出。
    hex: 指示cout以16进制输出。
    oct: 指示cout以8进制输出。*/
    
    /*"加法结果的十进制形式是%d\n"
	"加法结果的八进制进制形式是%o\n"
	"加法结果的十六进制形式是%x\n"*/ 
	void function_1 ()
	{
		int a, b, result;
		cout<<"请输入需要计算的数据(整数),如 1 3"<<'\n';
		cin>>a;
		cin>>b; 
		//运算区	
		result = a + b;
		//结果输出区	
		cout<<"加法结果的十进制形式是"<<dec<<result<<endl;
		cout<<"加法结果的八进制形式是"<<oct<<result<<endl;
		cout<<"加法结果的十六进制形式是"<<hex<<result<<endl;
	}
	
	
	//2减法 
		void function_2 ()
	{
		int a, b, result;
		cout<<"请输入需要计算的数据(整数),如 6 4"<<'\n';
		cin>>a;
		cin>>b; 
		//运算区	
		result = a - b;
		//结果输出区	
		cout<<"加法结果的十进制形式是"<<dec<<result<<endl;
		cout<<"加法结果的八进制形式是"<<oct<<result<<endl;
		cout<<"加法结果的十六进制形式是"<<hex<<result<<endl;
	}
	
		
	//3乘法
	//printf("乘法结果的小数形式是%.6f\n", result);
	//printf("乘法结果的指数形式是%e\n", result);
	void function_3 ()
	{
	float a, b, result;
	//数据输入区 
	cout<<"请输入需要计算的数据(浮点数),如 6 7";
	cin>>a;cin>>b; 
	//运算区	
	result = a * b;
	//结果输出区	
	
	cout<<"乘法结果的指数形式是"<<setiosflags(ios::scientific)<<result<<endl;   //指数形式输出
    cout<<"乘法结果的小数形式是"<<setiosflags(ios::fixed)<<result<<endl;        //小数形式输出

	}
	
	
	
	//4 除法
	void function_4 () 
	{
	float a, b, result;
	//数据输入区 
	cout<<"请输入需要计算的数据(浮点数),如 6 7";
	cin>>a;cin>>b; 
	//检验区
	if (b == 0)
	{
		cout<<"除数为0,无法进行除法运算\n";
	} 
	//运算区	
	else{
	result = a / b;
	//结果输出区	
    cout<<"除法运算的结果是"<<result<<endl; 
		}
	}
	
	//5 数字位数
	void function_5 (int num) 
	{
		int m[3] ,longs=0,num2=num;
		while(num!= 0)
		{
		num/= 10;
		longs++;
		}
		cout<<"该数的位数是"<<longs<<endl; 
		//运算区	
		m[1] = num2 / 100;
		m[2] = (num2/10) % 10;
		m[3] = num2 %10;
		//结果输出区	
		cout<<"百位是"<<m[1]<<endl;
		cout<<"十位是"<<m[2]<<endl;
		cout<<"个位是"<<m[3]<<endl;
}
	//6 计算圆面积 
	void function_6 (float a)
	{
	float  result;
	const float P = 3.14;
	//运算区	
	result = a * a * P;
	//结果输出区	
	cout<<"该圆面积是"<< result;
	}
	
	//7 判断闰年 
	void function_7 (int year)
	{
	//运算区
	if ((year%4==0&&year%100!=0)||(year%400==0))
	cout<<year<<"是闰年" ;
	else
	cout<<year<<"不是闰年"; 				
	}
	
    //8 成绩转换 
    void function_8 (int grade)
	{
    switch(grade/10){
    case 10:	
	case 9: cout<<"A";break;
	case 8: cout<<"B";break;
	case 7: cout<<"C";break;
	case 6: cout<<"D";break;
	case 5: cout<<"E";break;
	default: cout<<"太差了"; 
	} 
    }
    
    //9 计算从1到输入数之间的奇数和
	void function_9 (int n)
	{
	int i, sum; 
	//for语句实现功能,对每个i求除以2的余数,检验是否能被2整除 
	for(i = 1;i <= n; i++);
	{
		if (i % 2 == 1){
		sum += i;
		}
	}
	cout<<"1到n之间所有奇数和是"<<sum;
	//结束了 
	} 
	
	
	//10 计算从1到输入数之间的偶数和
	void function_10 (int n)
	{
	int i = 1,  sum = 0; 
	//定义计数值,输出的偶数和 
	//while语句实现功能,对每个i求除以2的余数,检验是否能被2整除 
	while ( i <= n)
	{
		if (i % 2 == 0){
		sum += i;
		cout<<i<<'\t';	
		}		
	i++;
	}
	cout<<"1到输入值之间所有偶数和是"<<sum;
	}
	
	
	//11 输出从1到输入数之间所有3的倍数
	void function_11 (int n)
	{
	int i = 1; 
	//do while语句实现功能
	cout<<"从1到输入值之间所有3的倍数";
        do {
			if (i % 3 == 0) 
			{
			cout<<i<<'\t';
			}
			i++;
		}
		while ( i<=n );

	} 
	
	
	//12 求即被3整除又被5整除的数
	void function_12 (int sum1,int sum2)
	{
	int i;
	//运算区
	for (i=sum1; i <= sum2; i++){
		if (i%3==0&&i%5==0)
		{
		cout<<i<<'\t';
		}	
		}	
	} 
    //13 求水仙花数 
    void function_13 ()
    {   
    int g,s,b, n=100;
    for(n;n<1000;n++)
    {
       g=n%10;
       s=n/10%10;
       b=n/100;
    if(n==g*g*g+s*s*s+b*b*b)
    cout<<n<<'\t';
    }
    }
    
    //14 求最大值
	int function_14(int x,int y){
		int r;
	if(x>y){
		r=x;
		x=y;
		y=r;
	}
	return y;	
	} 
	
	//15 指针求最大最小值
	void function_15(int *max,int *min){
		int temp;
		if(*min>*max){
		temp=*min;
		*min=*max;
		*max=temp;
	}
	} 
    //16 冒泡排序
    void function_16 (int n,int a[])
    {   
    int i,j,t;
    for(i=1;i<n;i++)
    {
    	for(j=0;j<n-i;j++)
    	if(a[j]>a[j+1])
    	   {
		   t=a[j];
		   a[j]=a[j+1];
		   a[j+1]=t;	
		   }	 
	}
	for(j=0;j<n;j++)
	cout<<a[j]<<endl;}
	//17 矩阵转换
	 void function_17()
	 {
	 	int x, y, i, j, a[100][100], b[100][100];
	 	cout<<"请输入需要转置的数列为几行几列:(4 5)"<<"  "; 
	    cin>>x;
	    cin>>y;
	    cout<<"请按行输入矩阵:"<<'\n';
	    //矩阵的输入 
	    for(i=0; i<x; i++){
	    	for(j=0; j<y; j++){
	        cin>>a[i][j]; 
	    	}	
		}
		//转置
		for (i=0; i<x; i++){
			for (j=0; j<y; j++){
				b[j][i] = a[i][j];
			}
		} 
		//输出矩阵
		cout<<"转制后的矩阵是:"<<'\n'; 
		for (i=0; i<y; i++){
			for (j=0; j<x; j++)
			{
				cout<< b[i][j]<<'\t';			
			}
			
		} 
	}	
		 //矩阵转置算法,原理是对换矩阵行和列,但只能转置n阶方阵,不知为何不能转置n*m矩阵 
		 
	//18 数组 求对角线和
	void function_18(int a[][100],int x)
	{
		int  i, j, result=0;

		//矩阵求主对角线和算法,原理是列出每行中对应行数的列的数相加
		for (i=0; i<x; i++){
			result += a[i][i];
		}
		cout<<"矩阵主对角线和为"<<result;
			 	
	} 
	  
		 //19 统计26个英文字母 
        void function_19 (char c[])
        {
        int count[26]={0} ,i;

        for(i=0;c[i]!='\0';i++)
        count[c[i]-'a']++;
        for(i=0;i<26;i++)
       cout<<count[i]<<endl;
        }
        
        //20静态创建链表
	void function_20()
	{
		struct student
		{
			char name[10];
			int age;
			student *next; //节点数据类型的指针	
		};
		
		student d = {"one",1,NULL}; //尾指针null 
		student c = {"two",2,&d};
		student b = {"three",3,&c};
		student a = {"four",4,&b};
		student *head = &a; //头指针 
		//访问
		student *point = head;
		while (point)
		{
			cout<<point->name<<" "<<point->age<<endl;
			point = point ->next;
		}
	}
	
	    //21动态创建链表
	void function_21()
	    {
		typedef struct node {
		int data;
		struct node* next;
	    } *nodes;
	
	int count;
	nodes head, p;
	p = (nodes)malloc(sizeof(node));
	p->next = NULL;
	head = p;
	p = head;
	cout << "请输入链表数据,输入负数为截至标志:" << endl;
	while (cin >>count && count > 0)
	{
		nodes q = (nodes)malloc(sizeof(node));
		q->data = count;
		q->next = NULL;
		p->next = q;
		p = q;
	}
	cout << "输出链表:" << endl;
	p = head->next;
	while (p != NULL)
	{
		cout << p->data << " ";
		p = p->next;
	}
	 } 
        
        //22 学生成绩排序 
	    void function_22(struct students person[],float sum_grade)
	{
	
	struct students z;
	int i, j, t;
	float aver_grade;
	
	for (i=1;i<11;i++)
	{
		for(j=0;j<11-i;j++)
		if(person[j].grade>person[j+1].grade)
		{
			z = person[j];
	        person[j] = person[j+1];
	        person[j+1] = z;
		}
	}    
	//输出
	for (j=0; j<10; j++)
	{
		cout<<"学号是"<<person[j].num<<"姓名是"<< person[j].name<<"成绩是"<<person[j].grade<<'\n';
	} 
	cout<<'\n' ;
	cout<<"总成绩是"<<sum_grade<<"平均成绩是"<<sum_grade/10<<'\n';
	}
	
	//23 成绩普涨10分 
	void function_23()
	{
		int i,a[10];
		
		FILE *fp;
		fp=fopen("d:\\my.txt","r+"); //读写方式打开 
    	
		for(i=0;i<10;i++){
			fscanf(fp,"%d",&a[i]);	  //文件读取 
			}
		rewind(fp);   //重回开头 
		for(i=0;i<10;i++)
		fprintf(fp,"%d\n",a[i]+10);  //加10分并重新写入 
		fclose(fp); //记得关闭文件 
		printf("已完成操作\n"); 
	}
	
	//24 汉诺塔
	void function_24(int n,char x,char y,char z)
   {
    //当传递的个数为1时,只用传递一次。	 
    if(n==1)
    {
    cout<<x<<"---->"<<z<<endl;c++;
    }
     //当N不等于0 
    else
   {
	//将上一步C与B交换 
    function_24(n-1,x,z,y);
    cout<<x<<"---->"<<z<<endl;c++;
    //上一步A与B交换 
    function_24(n-1,y,x,z);
    } 
    }
	
    //25统计单词个数 
    int function_25 (char *s)
    {
	int i;
	int flat=1,c=0;
	for(i=0;s[i]!='\0';i++){
		if(s[i]==' ')
		flat=1;
		else if(flat==1&&s[i]!=' '){
		flat=0;
	     c++;	
		}
	}
	return c;
    }
    26将B的值赋给A
    #include<iostream>
#include<string.h>
using namespace std;
void fun(char *a,char *b);
int main()
{  int i;
char a[10],b[10];
	 cin>>b;	
	fun(a,b);
	for(i=0;a[i]!='\0';i++)	
	cout<<a[i];
 }
 void fun(char *a,char *b)
 { while((*a=*b)!='\0')
  { a++,b++;}
 }


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河哭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值