C语言的计算器

C语言的计算器

在这里插入图片描述

开发软件

Visual Studio 2017
在这里插入图片描述

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#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_s(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:
	{
		int i;
		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);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值