C语言实现计算器


附:

C语言实现迷宫类小游戏完整思路与代码实例:https://blog.csdn.net/qq_41915690/article/details/80463892

Design By 海与炜


效果图


完整代码


#include <stdio.h>
#include <math.h>
#include<malloc.h>
void jingtailianbiao();
void dongtailianbiao();
int stu_num;
#define LEN sizeof(struct student)
struct student
{
	long num;
	float score;
	struct student *next;
};
struct student_score
{
	long num;
	char name[10];
	float score;		
};
int main()
{
	int select;
	printf("*************************************************\n");
	printf("*       小小计算器  Design By 海与炜            *\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的倍数      *\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("*        20 统计单词个数                        *\n");
	printf("*        21 静态创建链表                        *\n");
	printf("*        22 动态创建链表                        *\n");
	printf("*        23 学生成绩排序                        *\n");
	printf("*        24 学生成绩普涨10分                    *\n");
	printf("*     输入任意非功能选项序号退出小小计算器      *\n");
	printf("*************************************************\n");
	printf("输入菜单项:\n");
	scanf("%d",&select);
	switch (select)
	{
	case 1:
		{
			float num1,num2;
			printf("做加法。\n");
			printf("输入两个数,逗号分隔。\n");
			scanf("%f,%f",&num1,&num2);
			printf("%f+%f=%f\n",num1,num2,num1+num2);
			break;
		}
	case 2:
		{
			float num1,num2;
			printf("做减法。\n");
			printf("输入两个数,逗号分隔。\n");
			scanf("%f,%f",&num1,&num2);
			printf("%f-%f=%f\n",num1,num2,num1-num2);
			break;
		}
	case 3:
		{
			float num1,num2;
			printf("做乘法。\n");
			printf("输入两个数,逗号分隔。\n");
			scanf("%f,%f",&num1,&num2);
			printf("%f*%f=%f\n",num1,num2,num1*num2);
			break;
		}
	case 4:
		{
			float num1,num2;
			printf("做除法。\n");
			printf("输入两个数,逗号分隔。\n");
			scanf("%f,%f",&num1,&num2);
			printf("%f/%f=%f\n",num1,num2,num1/num2);
			break;
		}
	case 5:
		{
			float num1,num2;
			printf("取模运算。\n");
			printf("输入两个数,逗号分隔。\n");
			scanf("%f,%f",&num1,&num2);
			printf("%f%%%f=%f\n",num1,num2,fmod(num1,num2));
			break;
		}
	case 6:
		{
			float r;
			double s;
			printf("计算圆面积。\n");
			printf("请输入半径:\n");
			scanf("%f",&r);
			if  (r >= 0)
			{
				s=3.14*r*r;
				printf("圆面积是:%lf\n",s);
			}
			else
				printf  ("半径输入错误!\n");
			break;
		}
	case 7:
		{
			int year,leap;
			printf("判断闰年。\n");
			printf("enter year");
			scanf("%d",&year);
			if((year%4==0&&year%100!=0)||(year%400==0))
				leap=1;
			else
				leap=0;
			if(leap)
				printf("%d is",year);
			else
				printf("%d is not",year);
			printf("a leap year\n");
			break;
		}
	case 8:
		{
			int a;
			printf("成绩转化。\n");
			scanf("%d",&a);
			if(a>=90)
				printf("优");
			else if(a>=80)
				printf("良");
			else if(a>=70)
				printf("中");
			else if(a>=60)
				printf("差");
			else printf("不及格");
			break;
		}
	case 13:
		{
			long int num,num_t;
			int digits=0,i=1;
			printf("判断数字位数。\n");
			printf("输入待判断数字:");
			scanf("%ld",&num);
			num_t=num;
			do
			digits++;
			while((num_t/=10)>0);
			printf("%ld是%d位数。\n",num,digits);
			while(digits>=i);
			{
				printf("%ld的第%d位数是:%d\n",num,i,(num/(long)pow(10,(digits-i)))%10);
				i++;
			}
			break;
		}
	case 9:
		{
			int n,sum=0,i;
			printf("输入一个数:\n");
			scanf("%d",&n);
			for(i=1;i<=n;i++)
				if(i%2!=0)
					sum+=i;
				printf("从1到输入数之间的奇数和是:%d\n",sum);
				break;
		}
	case 10:
		{
			int sum,i,n;
			i=1;
			sum=0;
			printf("输入一个数:\n");
			scanf("%d",&n);
			while(i<=n)
			{
				if(i%2==0)
					sum+=i;
				i++;
			}
			printf("从1到输入数之间的偶数和是:%d\n",sum);
			break;
		}
	case 12:
		{
			int n,i,m;
			printf("输入两个数:\n");
			scanf("%d,%d",&n,&m);
			for(i=n;i<=m;i++)
				if(i%3==0&&i%5==0)
				{
					printf("既能被3整除又能被5整除的数:%d\n",i);
				}
				break;
		}
	case 11:
		{
			int sum,i,m;
			i=1;
			sum=0;
			printf("输入一个数:\n");
			scanf("%d",&m);	
			do
			{
				if(i%3==0)
					sum+=i;
				i++;
			}
			while(i<=m);
			printf("从1到输入数之间所有3的倍数:%d\n",sum);
			break;
		}
	case 14:
		{
			int i=100;
			int a,b,c;
			for(i=100;i<1000;i++)
			{
				a=i/100;
				b=(i-a*100)/10;
				c=(i-a*100-b*10);
				if(a*a*a+b*b*b+c*c*c==i)
				{
					printf("水仙花数:%d\n",i);
				}
			}
			break;
		}
	case 15:
		{
			int a,b,c;
			printf("请输入两个数\n");
			scanf("%d,%d",&a,&b);
			if(a>=b)
				c=a;
			else
				c=b;
			printf("最大值为:%d\n",c);
			break;
		}
	case 16:
		{
			int a,b,c,d;
			printf("请输入两个数\n");
			scanf("%d,%d",&a,&b);
			if(a>=b)
			{
				c=a;
				d=b;
			}
			else
			{
				c=b;
				d=a;
			}
			printf("最大值为:%d\n",c);
			printf("最小值为:%d\n",d);
			break;
		}
	case 17:
		{
			int i,j,k;
			int a[10];
			printf("输入十个数: \n");
			for(i=0;i<10;i++)
				scanf("%d",&a[i]);
			printf("\n");
			for(j=0;j<9;j++)                
				for(i=0;i<9-j;i++)          
					if(a[i]>a[i+1])         
					{
						k=a[i];
						a[i]=a[i+1];
						a[i+1]=k;
					}
					printf("排序后: \n");
					for(i=0;i<10;i++)
						printf("%d ",a[i]);
					printf("\n");
					break;
		}
	case 18:
		{
			int i,j;
			int array[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
			int temp;
			printf("原矩阵:\n");
			for(i=0;i<4;i++)
			{
				for(j=0;j<4;j++)
				{
					printf("%d\t",array[i][j]);
				}
				printf("\n");
			}
			for(i=0;i<4;i++)
			{
				for(j=i;j<4;j++)
				{
					temp=array[i][j];
					array[i][j]=array[j][i];
					array[j][i]=temp;
				}
			}
			printf("转置矩阵:\n");
			for(i=0;i<4;i++)
			{
				for(j=0;j<4;j++)
				{
					printf("%d\t",array[i][j]);
				}
				printf("\n");
			}
			break;
		}
	case 19:
		{
			int i,j;
			int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
			int sum=0;
			printf("原矩阵:\n");
			for(i=0;i<3;i++)
			{
				for(j=0;j<3;j++)
				{
					printf("%d\t",a[i][j]);
				}
				sum+=a[i][i];
				printf("\n");
			}
			printf("对角线的和等于:%d\n",sum);
			break;
		}
	case 20:
		{
			char string[81],c;
			int i,num=0,word=0;
			printf("请输入一句话:\n");
			c=getchar();
			gets(string);
			for(i=0;(c=string[i])!='\0';i++)
			{
				if(c==' ')
					
				{
					word=0;
				}
				else if(word==0)
				{
					word=1;
					num++;
				}
			}
			printf("%d words\n",num);
			break;
		}
	case 21:
		{
			jingtailianbiao();
			break;
		}
	case 22:
		{
			printf("请输入两个数,逗号隔开。输入负数结束。\n");
			dongtailianbiao();
			break;
		}
				case 23:
					{
						float sum=0;
						struct student_score stu_temp,stu[10];
						printf("分别输入10位学生的学号姓名和成绩 ,用空格隔开。\n");
						
						for (int i=0;i<10;i++)
						{
							scanf("%d %s %f",&stu[i].num,&stu[i].name,&stu[i].score);
							sum+=stu[i].score;
						}			
						for (i=0;i<9;i++)
							for (int j=0;j<9-i;j++)
								if (stu[j].score>stu[j+1].score)
								{
									stu_temp = stu[j];
									stu[j] = stu[j+1];
									stu[j+1] = stu_temp;
								}
								printf("按成绩从低到高排序为:\n");
								for (i=0;i<10;i++)
								{		
									printf("学号:%d\t姓名:%s\t成绩:%.1f\n",stu[i].num,stu[i].name,stu[i].score);
								}			
								printf("成绩总和为:%.1f\n",sum);
								break;
					}
				case 24:{
					printf("将为d盘根目录下的文本文件my.txt内的10位学生的学生成绩分别加10分,请确保此文件存在!\n");
					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);
					fclose(fp);
					printf("保存完毕!\n");
					break;
						}
	}
	return 0 ;
}
void jingtailianbiao()
{
	struct student a,b,c,d,*head,*p;
	a.num=1;
	a.score=96;
	b.num=2;
	b.score=99.5;
	c.num=3;
	c.score=96;
	d.num=4;
	d.score=98;
	head=&a;
	a.next=&b;
	b.next=&c;
	c.next=&d;
	d.next=0;
    p=head;
	do
	{
		printf("%ld %5.1f\n",p->num,p->score);
		p=p->next;
	}
	while(p!=0);
}

struct student * creat()
{
	struct student *head;
	struct student *p1,*p2;
	stu_num=0;
    p1=p2=(struct student*)malloc(LEN);
    scanf("%ld,%f",&p1->num,&p1->score);
	head=0;
    while(p1->num>=0)
	{
		stu_num=stu_num+1;
        if(stu_num==1)
			head=p1;
		else
			p2->next=p1;
		p2=p1;
		p1=(struct student*)malloc(LEN);
		scanf("%ld,%f",&p1->num,&p1->score);
	}
	p2->next=0;
	return (head);
}

void print(struct student *head)
{
	struct student *p;	
	p=head;
	printf("你输入的动态链表为:\n",stu_num);
	if(head!=0)
		do
		{
			printf("%ld %5.1f\n",p->num,p->score);
            p=p->next;			
		}
		while(p!=0);
}
void dongtailianbiao()
{
	struct student *link;
	link=creat();
	print(link);
}


猜你喜欢

转载自blog.csdn.net/qq_41915690/article/details/80466865
今日推荐