头文件.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;
}