小小计算器

头文件.h

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
void Print();
void Add();
void Sub();
void Mul();
void Div();
void Mod();
void Cir();
void Year();
void Poi();
void Num();
void Odd();
void Eve();
void ThreeandFive();
void Wha();
int Mix();
int M(int* pa, int* pb);
void Hub();
void Cha();
void Dia();
void Cho();

函数实现文件.c

void Print()
{
	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到输入数之间的奇数和  (for)\n");
	printf("          11 输出从1到输入数之间的偶数和  (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("          20 创建静态链表\n");
	printf("          21 创建动态链表\n");
	printf("          22 学生成绩排序\n");
	printf("          23 学生成绩普涨10分\n");
	printf("          24 学生成绩链表\n");
	printf("          25 退出\n");
	printf("**************************      \n");
}

void Add(void)
{
	int x, y;
	printf("加法,请输入相加的两个数字\n");
	scanf("%d%d", &x, &y);
	printf("加法结果的十进制形式是:%d\n", x + y);
	printf("加法结果的八进制形式是:%o\n", x + y);
	printf("加法结果的十六进制是:%x\n", x + y);
}

void Sub(void)
{
	int x, y;
	printf("减法,请输入相减的两个数字\n");
	scanf("%d%d", &x, &y);
	printf("减法结果的十进制是:%d\n", x - y);
	printf("减法结果的八进制是:%o\n", x - y);
	printf("减法结果的十六进制是:%x\n", x - y);
}

void Mul()
{
	printf("乘法,请输入相乘的两个数字\n");
	float a = 0, b = 0;
	scanf("%f%f", &a, &b);
	float c = a * b;
	printf("乘法结果的小数形式是:%.6f\n", c);
	printf("乘法结果的指数形式是:%e\n", c);
}

void Div()
{
	printf("除法,请输入相除的两个数字\n");
	float a = 0.0f, b = 0.0f;
	while (1)
	{
		scanf("%f%f", &a, &b);
		if (b == 0)
		{
			printf("除数不可为0\n");
		}
		float c = a / b;
		printf("除法结果的小数形式是:%.6f\n", c);
		printf("除法结果的指数形式是:%e\n", c);
		break;
	}
}

void Mod()
{
	printf("取模运算,请输入被取模与取模\n");
	int x = 0, y = 0;
	scanf("%d%d", &x, &y);
	int c = x % y;
	printf("取模结果的十进制形式是:%d\n", c);
	printf("取模结果的八进制形式是:%o\n", c);
	printf("取模结果的十六进制形式是:%x\n", c);
}

void Cir()
{
	printf("求圆面积,请输入半径\n");
	float PI = 3.14f;
	float r = 0.0f;
	scanf("%f", &r);
	printf("该圆面积是%.6f\n", PI * r * r);
	printf("该圆面积保留两位小数的结果是%.2f\n", PI * r * r);
}

void Year()
{
	printf("判断闰年,请输入年份\n");
	int x = 0;
	scanf("%d", &x);
	if (x / 4 == 0 && x / 100 != 0 || x / 400 == 0)
	{
		printf("%d是闰年\n", x);
	}
	else
	{
		printf("%d不是闰年\n", x);
	}
}

void Poi()
{
	printf("成绩段位查询,请输入成绩\n");
	int a = 0;
	while (1)
	{
		scanf("%d", &a);
		if (a < 0 || a>100)
		{
			printf("成绩输入错误,请重新输入\n");
			continue;
		}
		if ((90 <= a) && (a <= 100))
		{
			printf("优秀\n");
		}
		if ((80 <= a) && (a <= 89))
		{
			printf("良\n");
		}
		if ((70 <= a) && (a <= 79))
		{
			printf("中\n");
		}
		if ((60 <= a) && (a <= 69))
		{
			printf("及格\n");
		}
		if ((0 <= a) && (a <= 59))
		{
			printf("不及格\n");
		}
		break;
	}
}

void Num()
{
	printf("判断数字的位数,请输入数字\n");
	int x = 0, i = 0;
	int arr[3] = { 0 };
	while (1)
	{
		scanf("%d", &x);
		int y = x;
		if (y <= 0)
		{
			printf("要求输入的数是整数,请重新输入\n");
			continue;
		}
		if (y >= 1000)
		{
			printf("要求输入的数是三位以内的正整数,请重新输入\n");
			continue;
		}
		for (x; x != 0; i++)
		{
			arr[i] = x % 10;
			x = x / 10;
		}
		if (i == 1)
		{
			printf("该数是1位数,是%d\n", y);
		}
		if (i == 2)
		{
			printf("该数是2位数,十位是%d,个位是%d\n", arr[1], arr[0]);
		}
		if (i == 3)
		{
			printf("该数是3位数,百位是%d,十位是%d,个位是%d\n", arr[2], arr[1], arr[0]);
		}
		break;
	}
}

void Odd()
{
	printf("计算1到此数间的所有奇数之和,请输入此数\n");
	int x = 0, y = 0, sum = 0;
	scanf("%d", &x);
	for (y = 1; y <= x; y++)
	{
		if (y % 2 == 1)
		{
			sum = sum + y;
		}
	}
	printf("1到此数间的所有奇数之和为%d\n", sum);
}

void Eve()
{
	printf("计算1到此数间所有的偶数之和,请输入此数\n");
	int x = 0, y = 1, sum = 0;
	scanf("%d", &x);
	while (y <= x)
	{
		if (y % 2 == 0)
		{
			sum = sum + y;
		}
		y++;
	}
	printf("1到此数间所有的偶数之和为%d\n", sum);
}

void ThreeandFive()
{
	printf("求既可以被3和5整除的数,请输入两个数\n");
	int x = 0, y = 0, a = 0;
	scanf("%d%d", &x, &y);
	if (x <= y)
	{
		a = x;
	}
	if (y < x)
	{
		a = y;
	}
	do
	{
		if (a % 3 == 0 && a % 5 == 0)
		{
			printf("%d ", a);
		}
		a++;
	} while (x <= a && a <= y);
	printf("\n");
}

void Wha()
{
	printf("求所有水仙花数\n");
	int x = 150, y = 0, a = 0, b = x;
	for (x = b; x < 1000; x = b)
	{
		b = x + 1;
		a = 0;
		y = 0;
		for (x; x != 0; x = x / 10)
		{
			y = x % 10;
			a = (y * y * y) + a;
		}
		if (a == (b - 1))
		{
			printf("%d ", a);
		}
	}
	printf("\n");
}

int Mix()
{
	int a = 0, b = 0;
	scanf("%d%d", &a, &b);
	if (a <= b)
	{
		return b;
	}
	else
	{
		return a;
	}
}

int M(int* pa, int* pb)
{
	if (*(pa) <= *(pb))
	{
		int c = 0;
		c = *(pa);
		*(pa) = *(pb);
		*(pb) = c;
	}
	return 0;
}

void Hub()
{
	int a = 0;
	int arr[10] = { 0 };
	for (a = 0; a < 10; a++)
	{
		scanf("%d", &arr[a]);
	}
	for (a = 0; a < 10; a++)
	{
		int i = 0;
		for (i; i < 9 - a; i++)
		{
			if (arr[i] > arr[i + 1])
			{
				int b = 0;
				b = arr[i];
				arr[i] = arr[i + 1];
				arr[i + 1] = b;
			}
		}
	}
	for (a = 0; a <= 9; a++)
	{
		printf("%d ", arr[a]);
	}
	printf("\n");
}

void Cha()
{
	int arr1[3][4] = { 0 };
	int i = 0;
	int j = 0;
	for (i = 0; i <= 2; i++)
	{
		for (j = 0; j <= 3; j++)
		{
			scanf("%d", &arr1[i][j]);
		}
	}
	printf("\n转置矩阵是\n");
	int arr2[4][3] = { 0 };
	for (i = 0; i <= 3; i++)
	{
		for (j = 0; j <= 2; j++)
		{
			arr2[i][j] = arr1[j][i];
		}
	}
	for (i = 0; i <= 3; i++)
	{
		for (j = 0; j <= 2; j++)
		{
			printf("%d  ", arr2[i][j]);
		}
		printf("\n");
	}
}

void Dia()
{
	int arr[3][3] = { 0 };
	int i = 0, j = 0;
	for (i = 0; i <= 2; i++)
	{
		for (j = 0; j <= 2; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}
	printf("主对角线和是:%d\n", arr[0][0] + arr[1][1] + arr[2][2]);
}

void Cho()
{
	int i = 0, sum = 1;
	char arr[100] = { 0 };
	gets_s(arr, 100);
	for (i = 0; i <= 98; i++)
	{
		if (arr[i] != '\0' && arr[i] == ' ' && arr[i + 1] > 'A')
		{
			sum++;
		}
	}
	printf("单词的个数是 %d\n", sum);
}

主文件.c

#include ".h"

struct LinkNode
{
	int data;
	struct LinkNode* next;
};
void test1()
{
	struct LinkNode node1 = { 10,NULL };
	struct LinkNode node2 = { 20,NULL };
	struct LinkNode node3 = { 30,NULL };
	struct LinkNode node4 = { 40,NULL };
	node1.next = &node2;
	node2.next = &node3;
	node3.next = &node4;
	struct LinkNode* pCurrent = &node1;
	while (pCurrent != NULL)
	{
		printf("%d ", pCurrent->data);
		pCurrent = pCurrent->next;
	}
	printf("\n");
}

struct LinkNode* chushihua()
{
	struct LinkNode* header = (struct LinkNode*)malloc(sizeof(struct LinkNode));
	header->data = 0;
	header->next = NULL;
	struct LinkNode* pRear = header;//尾指针
	int val = 0;
	printf("输入插入的数据(输入-1截止输入):\n");
	while (1)
	{
		scanf("%d", &val);
		if (val == -1)
		{
			break;
		}
		struct LinkNode* newnode = (struct LinkNode*)malloc(sizeof(struct LinkNode));//创建新节点
		newnode->data = val;
		newnode->next = NULL;
		pRear->next = newnode;//新节点插入链表中
		pRear = newnode;//更新尾部指针指向
	}
	return header;
}
void foreach(struct LinkNode* header)
{
	if (NULL == header)
	{
		return;
	}
	struct LinkNode* pCurrent = header->next;
	while (pCurrent != NULL)
	{
		printf("%d ", pCurrent->data);
		pCurrent = pCurrent->next;
	}
	printf("\n");
}

struct Student
{
	char number[10];
	char name[20];
	int point;
};
void Fir()
{
	struct Student arr[10] = { 0 };
	struct Student z[10] = { 0 };
	int a = 0; char b[20] = { 0 }; int c = 0;
	int i = 0;
	for (i = 0; i <= 9; i++)
	{
		scanf("%s%s%d", &arr[i].number, &arr[i].name, &arr[i].point);
	}
	int j = 0;
	for (i = 0; i <= 9; i++)
	{
		for (j = 0; j <= 8 - i; j++)
		{
			if (arr[j].point > arr[j + 1].point)
			{
				z[j] = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = z[j];
			}
		}
	}
	printf("\n");
	int sum = 0;
	for (i = 0; i <= 9; i++)
	{
		printf("学号是%s  姓名是%s  成绩是%d\n", arr[i].number, arr[i].name, arr[i].point);
		sum = sum + arr[i].point;
	}
	printf("总成绩是%d\n", sum);
	sum = sum / 10;
	printf("平均成绩是%d\n", sum);
}

void Up()
{
	FILE* fp = fopen("D:\\my.txt", "r+");
	if (fp == NULL)
	{
		printf("open error!\n");
	}
	int arr[10] = { 0 };
	int i = 0;
	for (i = 0; i <= 9; i++)
	{
		fscanf(fp, "%d", &arr[i]);
		arr[i] = arr[i] + 10;
		printf("%d\n", arr[i]);
	}
	rewind(fp);
	for (i = 0; i <= 9; i++)
	{
		fprintf(fp, "%d\n", arr[i]);
	}
	fclose(fp);
	fp = NULL;
}

struct Student1
{
	int point;
	struct Student1* next;
};
struct Student1* Lian()
{
	struct Student1* header1 = (struct Student1*)malloc(sizeof(struct Student1));
	header1->point = 0;
	header1->next = NULL;
	struct Student1* pRear = header1;
	int val = 0, i = 0;
	int arr[10] = { 0 };
	FILE* fp = fopen("D:\\my.txt", "r");
	for (i = 0; i <= 9; i++)
	{
		fscanf(fp, "%d", &arr[i]);
	}
	fclose(fp);
	for (i = 0; i <= 9; i++)
	{
		val = arr[i];
		struct Student1* newnode = (struct Student1*)malloc(sizeof(struct Student1));//创建新节点
		newnode->point = val;
		newnode->next = NULL;
		pRear->next = newnode;;//新节点插入链表中
		pRear = newnode;//更新尾部指针指向
	}
	return header1;
}
void foreach1(struct Student1* header1)
{
	if (NULL == header1)
	{
		return;
	}
	struct Student1* pCurrent=(struct Student1*)malloc(sizeof(struct Student1));
	 pCurrent = header1->next;
	while (pCurrent != NULL)
	{
		printf("%d ", pCurrent->point);
		pCurrent = pCurrent->next;
	}
	printf("\n");
}
void charu(struct Student1* header1, int oldval, int newval)
{
	if (header1 == NULL)
	{
		return;
	}
	struct Student1* pPrev = header1;
	struct Student1* pCurrent = pPrev->next;
	while (pCurrent != NULL)
	{
		if (pCurrent->point == oldval)
		{
			break;
		}
		pPrev = pCurrent;
		pCurrent = pCurrent->next;
	}
	if (pCurrent == NULL)//为空则不存在这个节点
	{
		return;
	}
	//先创建节点
	struct Student1* newnode = malloc(sizeof(struct Student1));
	newnode->point = newval;
	newnode->next = NULL;

	//节点插入链表
	newnode->next = pCurrent;
	pPrev->next = newnode;
}
void Clear(struct Student1* header1)
{
	if (NULL == header1)
	{
		return;
	}
	struct Student1* pCurrent = header1->next;
	while (pCurrent != NULL)
	{
		//保存当前节点地址的下一个节点地址
		struct Student1* pNext = pCurrent->next;
		//释放
		free(pCurrent);
		//pCurrent指向下一个节点
		pCurrent = pNext;
	}
	header1->next = NULL;
}
int main()
{
	Print();
		int  c;
		while (1)
		{
			printf("\n请选择模式:\n");
			scanf("%d", &c);
			getchar();
			switch (c)
			{
			case 1:
				Add();
				break;
			case 2:
				Sub();
				break;
			case 3:
				Mul();
				break;
			case 4:
				Div();
				break;
			case 5:
				Mod();
				break;
			case 6:
				Cir();
				break;
			case 7:
				Year();
				break;
			case 8:
				Poi();
				break;
			case 9:
				Num();
				break;
			case 10:
				Odd();
				break;
			case 11:
				Eve();
				break;
			case 12:
				ThreeandFive();
				break;
			case 13:
				Wha();
				break;
			case 14:
				printf("求最大值,请输入两个数\n");
				printf("最大值是%d\n", Mix());
				break;
			case 15:
				printf("求最大最小值\n");
				int a = 0, b = 0;
				scanf("%d%d", &a, &b);
				M(&a, &b);
				printf("最大值是%d,最小值是%d\n", a, b);
				break;
			case 16:
				printf("冒泡排序,请输入十个数\n");
				Hub();
				break;
			case 17:
				printf("矩阵转置,请输入一个三行四列的矩阵\n");
				Cha();
				break;
			case 18:
				printf("求主对角线的和,请输入三成三的矩阵\n");
				Dia();
				break;
			case 19:
				printf("统计单词个数,请输入单词\n");
				Cho();
				break;
			case 20:
				printf("静态链表\n");
				test1();
				break;
			case 21:
				printf("动态链表的创建\n");
				struct LinkNode* header = chushihua();
				foreach(header);
				break;
			case 22:
				printf("学生成绩排序,请输入学号,姓名,成绩\n");
				Fir();
				break;
			case 23:
				printf("学生成绩普涨十分\n");
				Up();
				break;
			case 24:
				printf("链表,读取,遍历,清除,插入,销毁\n");
				struct Student1* header1 = Lian();
				foreach1(header1);
				int n = 0, d = 0;
				printf("请输入在哪个数字前插入数字:");
				scanf("%d", &a);
				printf("\n请输入插入的数字:");
				scanf("%d", &n);
				charu(header1, a, n);
				foreach1(header1);
				Clear(header1);
				break;
			case 25:
				printf("已退出");
				return 0;
			default:
				printf("请重新输入\n");
				break;
			}
		}
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值