编写程序,以菜单的形式完成算术运算和逻辑运算。制作小小计算器

期末大实验,完成计算器22个程序:

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<math.h>
#define m 10
#define n 100
#define q 3
#define w 4
# define PI 3.14
int paixu(int []); 
int *daxiao(int*s,int*z);
struct student 
{
	int xuehao;
	char name[20];
	int score;
};
int main()
{
	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 计算从1到输入数之间的奇数和(for)         *\n");
	printf("*10 计算从1到输入数之间的偶数和(while)      *\n");
	printf("*11 输出从1到输入数之间所有3的倍数(do-while)*\n");
	printf("*12 求即被3整除又被5整除的数                *\n");
	printf("*13 求水仙花数                              *\n"); 
	printf("*14 退出                                    *\n");
	printf("*15 求最大最小值                            *\n");
	printf("*16 冒泡排序                                *\n");
	printf("*17 矩阵转置                                *\n");
	printf("*18 求对角线和                              *\n");
	printf("*19 统计单词个数                            *\n");
	printf("*22 学生成绩排序                            *\n"); 
	printf("*********************************************\n");
	int j,i,a,b,r,e,arr[n],brr[3][4],drr[q][w],stu[m];
	char crr[n];
	int num=0,v=1;
	int *p=arr;
	int *s,*z; 	
	float c,d;
	double t;
	while(1)
	{
	scanf("%d",&i);
	if(i<=0||i==20||i==21||i>22) {
		printf("输入错误\n");
	}else
	switch(i){
		case 1:
			scanf("%d %d",&a,&b);
			printf("加法结果的十进制形式是:%d\n",a+b);
			printf("加法结果的八进制形式是:%o\n",a+b);
			printf("加法结果的十六进制形式是:%x\n",a+b);
			break;
		case 2:
			scanf("%d %d",&a,&b);
			printf("减法结果的十进制形式是:%d\n",a-b);
			printf("加法结果的八进制形式是:%o\n",a-b);
			printf("加法结果的十六进制形式是:%x\n",a-b);
			break;
		case 3:
			scanf("%f %f",&c,&d);
			printf("乘法结果的小数形式是:%f\n",c*d);
			printf("乘法结果的指数形式是:%e\n",c*d);
			break;
        case 4:
        	scanf("%f %f",&c,&d);
			if(d==0)
			{
				printf("除数为0,无法进行除法运算\n");
			} 
			else{
				printf("除法结果的小数形式是:%f\n",c/d);
				printf("除法结果的指数形式是:%e\n",c/d);
			}
			break;
		case 5:
				scanf("%d",&a);
			if(a<0)
			{
				printf("要求输入的数为整数\n");
			}else if(a>999)
			{
				printf("要求输入的数为3位以内的正整数");
			}else {
				b=a%10;
				r=a/10%10;
				e=a/100;
			if(e==0){
				printf("该数为2位数,十位是%d,个位是%d\n",r,b);
			}else{
				printf("该数为3位数,百位是%d,十位是%d,个位是%d\n",e,r,b);
			}
			}
				break;
		case 6:
				scanf("%d",&r);
				t=double(PI*r*r);
				printf("该圆面积是:%f",t);
				break;
		case 7:	
			scanf("%d",&a);
			if((a%4==0&&a%100!=0)&&(a%400==0)) 	{
				printf("%d年是闰年\n",a);
			}else {
				printf("%d年是平年\n",a);
			}
			break;
		case 8:
			scanf("%d",&a);
			if(a<0||a>100){
				printf("成绩输入错误\n");
			}
			 else
			switch(a/10){
				case 0:
				case 1:
				case 2:
				case 3:
				case 4:
				case 5:	
					printf("不及格\n");
					break;
				case 6:
					printf("及格\n");
					break;
				case 7:
					printf("中\n");
					break;
				case 8:
					printf("良\n");
					break;
				case 9:
				case 10:
					printf("优秀\n");
					break;
			} 
			break;
        case 9:
        	scanf("%d",&a);
        	for(b=1;b<=a;b++)
        	{
        		if(b%2!=0){
        			num+=b;
				}	
			}
			printf("%d\n",num);
			break;
		case 10:
			scanf("%d",&a);
			while(v<=a){
				if(v%2==0){
					num+=v;
				}
				v++;
			}
			printf("%d\n",num);
			break;
		case 11:
			scanf("%d",&a);
			do{
				if(v%3==0){
        			printf("%d\t",v);
				}	
				v++;
			}while(v<=a);
			printf("\n");
			break;
		case 12:
			scanf("%d",&a);
        	for(b=1;b<=a;b++)
        	{
        		if(b%3==0&&b%5==0){
        			printf("%d\t",b);
				}	
			}
			break;
		case 13:
				for(a=100;a<=999;a++){
				b=a%10;
				r=a/10%10;
				e=a/100;
				if((e*e*e+r*r*r+b*b*b)==a){
					printf("%d\t",a);
				}
			}
			break;
			case 14:
				printf("%d\n",i);
				break;
		case 15:
			scanf("%d %d",&a,&b);
			s=&a;
			z=&b;
			daxiao(s,z);
        	break;
        case 16:
        	for(a=0;a<10;a++){
        		scanf("%d",&arr[a]); 
			}
			printf("\n排序后:\n");
			 paixu(arr);
			 for(i=0;i<10;i++){
			 	 printf("%d\t",arr[i]);
			 }
			 printf("\n指针排序后:\n");
			 paixu(arr);
			 for(i=0;i<10;i++){
			 	 printf("%d\t",*(p+i));
			 }
			 break;
		case 17:
			for(a=0;a<3;a++){
				for(b=0;b<4;b++){
					scanf("%d",&brr[a][b]);
				}				
			}
			printf("原数组为:\n");
			for(a=0;a<3;a++){
				for(b=0;b<4;b++){
					printf("%d\t",brr[a][b]);
				}
				printf("\n");				
			}
			printf("数组转置后:\n");
			for(a=0;a<4;a++){
				for(b=0;b<3;b++){
					printf("%d\t",brr[b][a]);
				}
				printf("\n");				
			}
			break;
		case 18:
			for(a=0;a<3;a++){
				for(b=0;b<3;b++){
					scanf("%d",&brr[a][b]);
				}				
			}
			printf("原数组为:\n");
			for(a=0;a<3;a++){
				for(b=0;b<3;b++){
					if(a==b){
						num+=brr[a][b];
					}
					printf("%d\t",brr[a][b]);
				}
				printf("\n");				
			}
				printf("对角线和等于%d\n",num);
				break;
		case 19:
			{
			int i,num,leap;				
			char crr[n];
			getchar();
			gets(crr);
			a=strlen(crr);
			for(i=0,num=1;i<a;i++)
			{
				if(crr[i]==' ')
				leap=0;
				else if(leap==0)
				{
					leap=1;
					num++;
				}
			}
			printf("单词个数:%d\n",num);
			break;
		}
		case 22:
				struct student stu[15],o;
				int num=0,i,j;
				printf("请输入学号 姓名 成绩\n");
				for(i=0;i<10;i++)
					scanf("%d%s%d",&stu[i].xuehao,stu[i].name,&stu[i].score);
					for(i=0;i<9;i++)
					for(j=0;j<9-i;j++)
					{
						if(stu[j].score>stu[j+1].score)
						{
							o=stu[j+1];stu[j+1]=stu[j];stu[j]=o;
						}
					}
					printf("\n"); 
					for(i=0;i<10;i++)
					{
						printf("%d %s %d\n",stu[i].xuehao,stu[i].name,stu[i].score);
						num+=stu[i].score;
					}
					printf("总成绩%d 平均成绩%d",num,num/10);
   			break; 	
	}
	if(i==14){
		break; 
	} 
}
	return 0;
}
int paixu(int arr[])
{
	int i,j,tem;
	for(i=0;i<9;i++){
		for(j=0;j<9-i;j++){
			if(arr[j]>arr[j+1]){
				tem=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=tem;
			} 
		}
	}
	return 0;
}
int *daxiao(int*s,int*z)
{
	int *r; 
	if(*s<*z){
		r=s;
		s=z;
		z=r;
		printf("最大值:%d 最小值:%d\n",*s,*z);
	}else{
		printf("%d %d\n",*s,*z);
	}
	return 0;
} 


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值