C语言程序设计24的问题Word文件下载.docx
- 文档编号:17443733
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:14
- 大小:80.46KB
C语言程序设计24的问题Word文件下载.docx
《C语言程序设计24的问题Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计24的问题Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
3详细设计。
包括主要功能模块的算法设计思路以及对应的工作流程图;
4主要源程序代码。
包括存储设计说明,以及完整源程序清单(放在附录中);
5调试分析过程描述。
包括测试数据、测试输出结果,以及对程序调试过程中存
在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等);
6总结。
包括课程设计过程中的学习体会与收获、对C语言和本次课程设计的认
识等内容。
7附录(完整源程序清单):
可以是手写或打印稿(注意:
不能和其他同学一样)
8报告最后附上评分表(见任务书末页)
四、检查要求:
1每个人必须有可运行的程序,每个人要通过答辩;
2每个人必须交《C语言课程设计报告》(打印稿)
五、评分
1根据平时上机考勤,且每个人必须自己动手编写程序,不得抄袭;
2根据程序运行结果;
3学生能熟练地解释清楚指导老师对自己程序的提问;
4课程设计报告完成的质量和规范;
一、课程设计的性质与目的………………………………1
二、课程设计题目…………………………………………1
三、功能分析和程序流程图………………………………2
四、源程序代码……………………………………………7
五、程序运行截图…………………………………………14
六、总结和个人心得………………………………………15
七、评分表…………………………………………………16
《C语言程序设计》是通信工程专业重要的基础课,通过本课程设计使学生进一步巩固课堂所学知识,全面熟悉、掌握C语言程序设计的基本方法和技巧,进一步提高编写程序、阅读分析程序及上机操作、调试程序的能力。
二、课程设计题目
计算24的问题
要求:
在屏幕上输入1-10范围内4个整数(可以有重复),对它们进行加减乘除四则运算后(可以任意的加括号限定计算的优先级),寻找计算结果等于24的表达式
三、功能分析和程序流程图
1.主函数流程图
开始
输入4个数
算出这4个数的全排列
运用+,-,*,/进行计算
是否有结果等于24的组合?
输出该组合及算法
结束
否
是
2.程序开始界面:
voidHello()
{
puts("
\n"
);
##################################################"
####"
##输入4个整数,用它们构造一个算术四则运算,##"
##使结果等于24。
每个数恰好利用一次。
##"
##(可输出有重复的全部解)##"
##设计者:
舒晨##"
##时间:
2012-7-2##"
}
3.操作数栈,生成n个数中取m个数的全排列。
m=n时即为n个数的全排列,每产生一个排列,放入b[]中。
STACK<
float,N>
opnstk;
//操作数栈
intb[N],K=0;
//a[]的备份/用于生产排列的工作区
voidgen(intn,intm)//生成n个数中取m个数的全排列。
m=n时即为n个数的全排列。
---
{//---每产生一个排列,放入b[]中。
voidgen24();
//函数声明
inti;
if(m==0)
{
for(i=0;
i<
K;
++i)printf("
%d"
b[i]);
putchar('
\n'
//如果只是为了输出排列
gen24();
//函数调用
}
else
n;
++i)if(a[i]!
='
.'
)
b[K++]=a[i];
a[i]='
;
gen(n,m-1);
a[i]=b[--K];
4.运用+,-,*,/运算符来计算着四个数所组成的各种组合并得出结果,判断结果是否等于24,若等于24,则输出这组排列式及算法,若没有等于24的组合,则重新输入4个数。
voidgen24()//用b[]中的4个数产生等于24的算式
boolcalc(float,char,float,float&
inti,jn,jo,p0,p1,p2;
charenumopr[3],op;
floata1,a2,c;
constchar*p;
5;
++i)//尝试每种栈模式
for(p0=0;
p0<
4;
++p0){enumopr[0]=opr[p0];
for(p1=0;
p1<
++p1){enumopr[1]=opr[p1];
for(p2=0;
p2<
++p2){enumopr[2]=opr[p2];
opnstk.reset();
for(jn=jo=0,p=stkmode[i];
*p!
'
++p)switch(*p){
case'
n'
:
opnstk.push(b[jn++]);
break;
#'
a2=opnstk.pop();
a1=opnstk.pop();
op=enumopr[jo++];
if(calc(a1,op,a2,c))opnstk.push(c);
elsegotoloc_1;
if(abs(c-24)<
eps){
while(*++p!
=0)switch(*p){
('
)'
putchar(*p);
break;
a'
b'
c'
d'
printf("
%d"
b[*p-'
]);
1'
2'
3'
%c"
enumopr[*p-'
putchar('
gotoloc_2;
loc_1:
continue;
}}}
loc_2:
return;
boolcalc(floata,charop,floatb,float&
c)
staticboolbRet;
switch(bRet=true,op){
+'
c=a+b;
-'
c=a-b;
*'
c=a*b;
/'
if(abs(b)>
eps)c=a/b;
elsebRet=false;
returnbRet;
四、源程序代码
#include<
stdio.h>
puts("
constintN=4;
//操作数的个数/栈的极限高度
#defineeps1E-6//浮点精度
inlinefloatabs(floatx){returnx>
=0.0?
x:
-x;
}//栈模板
template<
classT,intN>
classSTACK{
protected:
Ta[N];
//栈的存储体
intn;
//栈的高度/未来栈顶位置
public:
STACK(){reset();
}//栈初始化
voidreset(){n=0;
}//清空栈
voidpush(Tx){if(n<
N)a[n++]=x;
elseputs("
栈上溢"
}//压入数据到栈顶
Tpop(){if(n>
0)returna[--n];
栈下溢"
}//弹出栈顶数据
//Ttop(){if(n>
0)returna[n-1];
栈空"
}//查询栈顶元素
//boolisempty(){returnn==0;
}//查询栈是否为空
//intheigth(){returnn;
}//查询栈的高度
};
constcharopr[]="
+-*/"
inta[N];
//输入的4个数
{//---每产生一个排列,放入b[]中。
voidgen24();
inti;
if(m==0)
//for(i=0;
gen24();
//函数调用
}
for(i=0;
){
b[K++]=a[i];
a[i]='
gen(n,m-1);
a[i]=b[--K];
//用后缀表达式计算,用中缀表达式输出。
//---n表示将一个操作数压栈,#表示进行一步运算。
//---abcd指操作数的输出顺序,123指运算符的输出顺序。
constcharstkmode[5][22]={
"
nnnn###=a3(b2(c1d))"
nnn#n##=a3((b1c)2d)"
nnn##n#=(a2(b1c))3d"
nn#nn##=(a1b)3(c2d)"
nn#n#n#=((a1b)2c)3d"
boolcalc(float,char,float,float&
inti,jn,jo,p0,p1,p2;
charenumopr[3],op;
floata1,a2,c;
constchar*p;
for(jn=jo=0,p=stkmode[i];
case'
opnstk.push(b[jn++]);
a2=opnstk.pop();
if(calc(a1,op,a2,c))opnstk.push(c);
eps)
while(*++p!
case'
putchar(*p);
printf("
break;
case'
printf("
break;
{
staticboolbRet;
switch(bRet=true,op){
if(abs(b)>
}
intmain()
{
Hello();
while(true)
请输入%d个整数(用空白分隔。
结束程序请输入0):
"
N);
for(inti=0;
N;
++i){scanf("
&
a[i]);
if(a[i]==0)gotoloc_0;
K=0;
gen(N,N);
}
loc_0:
return0;
五、程序运行截图
1.程序开始界面:
2.输入1,5,8,9的运行结果:
3.输入的数字不能得出24的结果:
六、总结和个人心得
设计本程序,起因于儿时的游戏24点,游戏简单富有思考价值。
首先输入1-10范围内的任意4个数,通过不同的组合和运行不同的算法结合在一起反弹能不能是他算出的结果等于24。
课程设计是培养学生综合运用搜学的知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力和集体训练和考察的过程。
经过自己的努力终于做出来了,但是还是存在一些缺陷,这是我子经济对这个程序的思路:
先把各种组合和算法列出来,然后通过不同的算法搭配来计算每种排列所得到结果,若计算出来的结果等于24,直接输出,再计算下一个排列,一直循环知道算完所有的排列数。
但是后有一点小问题,就是输入有些数字后输出的式子有很多重复的,只是前后位置换了一下,此问题还没有解决,希望能从以后的学习中解决这个问题。
七、评分表
计算机与通信学院课程设计评分表
设计内容:
计算24的问题
项目
评价
课程设计期间表现情况
课程设计内容完成情况
课程设计答辩成绩
课程设计报告完成质量
综合成绩
日期:
2012年7月6日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 24 问题