C语言课程设计报告-模板
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言课程设计报告
班级:16 物联网
一、题目说明
(1)读取输入信息,能正确进行数字运算
(2)拥有记忆功能,可查询最近几次计算结果并继续进行数字运算。
二、基本功能实现
(1)能实现两个数之间的加减,乘,除,乘方,开方等运算。
(2)实现记忆功能,可保留近十位结果,可用#键查看。
(3)*键作为清0键,清除当前屏幕上的值为0表示重新开三、设计流程(可以画流程图,可以直接写说明)
四、代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
double yunsuan(double a, char operate, double b); //处理数值之间的运算void PutRes(double array[], double res, int *i); //保存该次运算结果
int main()
{
char str[40];
double a = 0;
double b = 0;
double res = 0;
double history[10] = {0,0,0};
char opt;
int i = 0;
printf("欢迎进入计算功能(eg: 1 \n+ 1 ; '#':查询历史结果; 'q':退出程序)·\n");
while(1){
fgets(str,40,stdin); //将从键盘的一整行标准输入保存在字符串str中
if(sscanf(str,"%lf", &a) == 1){ //将str以长浮点型的格式放入a中,如果返回值为1,说明输入的是数值,
scanf("%c %lf", &opt, &b); //获取操作符的值和另外一个操作数的值
res = yunsuan(a,opt,b); //调用yunsuan()函数计算,并将结果给res
printf("%lf %c %lf = %lf\n\n",a, opt, b, res);
PutRes(history, res, &i); //调用函数PutRes()将本次结果保存到数组history中(i用引用传递)
// printf("%d\n", i);
}else if(sscanf(str,"%c",&opt) == 1){ //将str以字符型的格式放入opt中,如果返回值为1,说明输入的是字符
if(opt == '#'){ //如果opt为‘#’,则显示history 中的数值
int j = 0;
for(j = 0; j < i; ++j){ //i为history中存放的数值个数
printf(" %lf ", history[j]);
}
printf("\n");
}else if(opt == '+' || opt == '-' || opt == '*' || opt == '/' || opt == '^'){ //如果为操作符,则为连续运算,则下面秩序获得b的值,a的值则为上次运算结果
scanf("%lf", &b);
opt = str[0]; //因为str是字符串,而opt是字符,所以不能直接赋值,上句判断出str是字符,所以是只有一个字符的字符串,故可以这样赋值
a = res;
res = yunsuan(a,opt,b);
printf("%lf %c %lf = %lf\n\n",a, opt, b, res);
PutRes(history, res, &i);
}else if(opt == 'q'){ //‘q’退出程序
printf("Bye Bye.....");
return 0;
}
}
}
return 0;
}
/*
功能:处理数值之间的运算
参数1:操作数1
参数2:操作方式
参数3:操作数2
返回值:两数值的运算结果。
*/
double yunsuan(double a, char operate, double b) {
switch(operate){
case '+':
a += b;
break;
case '-':
a -= b;
break;
case '*':
a *= b;
break;
case '/':
a /= b;
break;
case '^':
a = pow(a, b);
break;
case '~':
a = sqrt(a);
break;
default: //如果不满足上面所有分支则结束程序break;
}
return a;
}
/*
功能:保存该次运算结果
参数1:用来保存结果的数组
参数2:本次要存放的结果
参数3:数组中目前存放的个数
返回值:无
*/
void PutRes(double array[], double res, int *i)
{
int j = *i; //i用引用传递,确保在调用该函数式,形参和实参都能发生改变
if(j < 10){ //如果数组内当前的值少于十个直接存入,并将个数加1 array[j] = res;
j++;
}else{
for(j = 1; j < 10; ++j){ //如果数组内有十个数,则从第二个数开始前移,再讲本次结果存放在下标为9的位置
array[j-1] = array[j];
}
array[9] = res;
}
*i = j; //更新当前数组内数值个数
}
五、运行效果(截图)
六、bug调试(调试过程中遇到的问题和解决方法):
六、心得体会
在这为期两个星期的时间内,通过我们小组之间成员的相互讨论和合作,我们完成了老师要求的程序设计,更值得高兴的事我们的程序取得了成功,在这一个学期的c语言学习中,我们平时所学的知识最多也就是在做作业时才能用到,平时没什么练习的机会,这次的课程设计是我们第一次通过自己的构思和小组成
员讨论并且不断查阅资料来设计一段程序,这次的设计不仅巩固了以前所学的知识,还让我对c语言有了更深一部的了解掌握了更多的技巧和技能。
C语言是计算机程序设计的重要理论基础,在我们以后的学习和工作中占有重要的作用,要学好这种语言,仅仅学习课本上的知识是不够的,还要经常自己动手才能锻炼自己实践能力,只有多动手,经常编写程序,才能不断提高自己转化知识的能力。
在此次活动总结中,我们小组相互合作,相互帮助,不断进步,不断提高,不但加强了个人能力,也提高了团队协作能力,最终完成了老实交代的任务,希望以后能有更多的这样的机会,我相信以后会取得更大的进步!
班级:16届物联网1班。