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);
}