C语言课设Word下载.docx

上传人:b****3 文档编号:16413327 上传时间:2022-11-23 格式:DOCX 页数:14 大小:186.40KB
下载 相关 举报
C语言课设Word下载.docx_第1页
第1页 / 共14页
C语言课设Word下载.docx_第2页
第2页 / 共14页
C语言课设Word下载.docx_第3页
第3页 / 共14页
C语言课设Word下载.docx_第4页
第4页 / 共14页
C语言课设Word下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C语言课设Word下载.docx

《C语言课设Word下载.docx》由会员分享,可在线阅读,更多相关《C语言课设Word下载.docx(14页珍藏版)》请在冰豆网上搜索。

C语言课设Word下载.docx

二、总体设计

1、因为计算机存储的都是ASCII码,查表可知空格符、制表符、换行符的ASCII码值分别为32、9、10。

要判断是否输入完毕,所以也需要知道CTRL+Z输入的字符在计算机中对应什么,查询可知CTRL+Z输入的字符在计算机中对应EOF结束标志。

(经过操作输入CTRL+Z无法结束,所以改为输入为1时结束)

流程图如下:

2、达依尔要求:

第一个格子1粒麦子,第二个格子2粒麦子,第三个格子4粒麦子,……以后每一小格都比前一个小格的麦粒数增加一倍,直到64个小格子为止。

可知:

第i个格子的麦粒数为

(i=1,2,...,64),所以总数为:

可以用for循环做。

(在c语言中有两种方法计算

,直接调用pow函数或者采用for循环)

流程图:

3、因为要大盘在上,小盘在下。

所以这样移动:

(1)现将第1~63个盘子移到B针上,保证大盘在下小盘在上。

(2)再将最下面的盘子移动到C针上。

(3)将B针上的63个盘子移到C针上。

关键在于第

(1)步和第(3)步,由于每次只能移动一个圆盘,所以在移动过程中必须要借助另外一根针,即第

(1)步将第1~63个盘子借助C针移到B针上;

第(3)步将B针上的63个盘子借助A针移到C针上。

这又是两个新的汉诺塔问题。

将上第1~63个盘子借助C针移到B针上:

(1)将A针第1~62个盘子借助B针移到C针上,保证大盘在下小盘在上。

(2)再将最下面的(第63个)盘子移动到B针上。

(3)将C针上的62个盘子借助A针移到B针上。

将B针上的63个盘子借助A针移到C针上:

(1)将B针第1~62个盘子借助C针移到A针上,保证大盘在下小盘在上。

(2)再将最下面的(第63个)盘子移动到C针上。

(3)将A针上的62个盘子借助B针移到C针上。

这明显是一个递归问题。

4、梯形法计算

定步长:

若有

,则用梯形法有

 

5、本题要求输入的字符串中多于一个的空格符合并为一个,因此可以在输入每个字符时判断它是否为空格符。

若是,则接下来的空格符不输出输出。

6、注意数组的大小,因为要插入一个字母。

将输入的字母和原序列的字母按顺序比较ascii码值大小。

确定好位置后,将该位置后的字母按顺序后移一个单位,然后插入该字母。

三、详细设计

1、程序及注释

#include<

stdio.h>

string.h>

main()

{

charc;

//定义字符变量

intSpace=0,Tab=0,Enter=0;

//定义整型变量

printf("

Pleaseinputastring:

\n"

);

//在运行窗口显示“Pleaseinputastring:

(请输入一段字符串)”

scanf("

%c"

&

c);

//输入一个字符

while(c!

=’1’)//当输入字符不为ctrl+z时,运行while里面的语句

{

if(c==32)Space++;

//当输入的字符的ASCII码等于32(即空格键的ASCII码值)时,Space加一

elseif(c==9)Tab++;

//当输入的字符的ASCII码等于9(即制表键的ASCII码值)时,Tab加一

elseif(c==10)Enter++;

//当输入的字符的ASCII码等于10(即回车键的ASCII码值)时,Enter加一

scanf("

//输入一个字符

}

thenumberofSpace:

%d\n"

Space);

//输出显示这串字符串的空格键个数

thenumberofTab:

Tab);

//输出显示这串字符串的制表键个数

thenumberofEnter:

Enter);

//输出显示这串字符串的回车键个数

system("

pause"

//加上这句语句,可以看到结果;

否则运行界面只会闪一下

}

2、程序及注释

①采用pow函数计算2的i次方。

math.h>

voidmain()

doublesum=0;

//定义双精度变量

inti;

for(i=0;

i<

64;

i++)//进行64次循环

sum=sum+pow(2,i);

//累加求和

thenumberofqrainis:

%lf\n"

sum);

//显示结果

②采用for循环方式计算2的i次方。

doublex,sum=0;

inti,n;

for(n=0;

n<

n++)//进行64次循环计算sum

x=1;

for(i=0;

i<

n;

i++)//进行循环计算2的i次方

x=2*x;

//循环结束后x=2的i次方

sum=sum+x;

//循环结束后sum为最后结果

3、

move(intn,charx,chary,charz)//定义调用函数move()

if(n==1)

movediskfromposition%cto%c\n"

x,z);

else

move(n-1,x,z,y);

//调用move()函数

printf("

move(n-1,y,x,z);

intmain(void)

intn;

inputdiskesnumber:

%d"

&

n);

//从键盘上输入n的值

thesteptomoving%ddiskes:

n);

move(n,'

A'

'

B'

C'

4、程序及注释

doublefunc(doublex)//定义调用函数func(),计算sin(x)/x的值

if(x!

=0)

returnsin(x)/x;

return1;

doublei,y,h,n;

y=0;

%lf/n"

h);

//输入步长值

n=1/h;

i++)

y=y+0.5*h*(func(i*h)+func((i+1)*h));

//梯形法计算

thehis:

%lf\n"

h);

//显示步长

theresultofintegrationis:

%.10lf\n"

y);

//显示求和结果

5、程序及注释

charc,lastc='

c'

;

//定义字符变量,给lastc初值为“c”

printf("

scanf("

while(c!

=EOF)//当输入ctrl+z时结束循环

{

if(c!

=32)

putchar(c);

//输出字符

lastc=c;

//将输入的字符值给lastc

&

if(lastc!

=32)putchar(c);

//当lastc的ascii码值不为32(即输入空格键)时,输出字符

//输入一个字符

}

6、程序及注释

{

charstr[10]={'

a'

b'

d'

f'

h'

j'

l'

p'

t'

};

inti,j,k;

pleaseinputaalpha\n"

if((c<

'

)||(c>

z'

))return(0);

if((c>

Z'

)&

&

(c<

))c=c+32;

//当输入的字符为大写字母时,转换为小写字母

8;

=str[i])&

str[i+1]))

k=i+1;

if(c>

=str[8])

k=9;

for(j=8;

j>

=k;

j--)

str[j+1]=str[j];

str[k]=c;

theresultis:

);

%s"

str);

四、程序运行结果测试与分析

1、结果:

分析:

由于当我使用EOF作为结束符时,当我在窗口输入ctrl+Z时并不能结束,当我把结束符改为数字1就可以了,所以我用数字1作为结束符。

2、两种方法结果一样:

一开始定义x,sum为整型变量,结果答案出来有问题(结果为0);

经过计算发现结果非常大,所以定义x,sum双精度型变量。

3、因为当n=64结果太多不好观察,下面取n=2和n=4

n=2:

n=4:

因为如果n=64的话,结果就非常长,所以我用n=2和4做为示范。

4、结果:

当步长h=0.0001时:

当步长h=0.01时:

由书上可知实际值为0.946081;

我采用的是定步长梯形法,所以当h越小越接近实际值。

5、结果:

6、结果:

五、结论与心得

总的来说,本次C语言课程设计的小题都比较简单。

其实一开始我是想选大题的,不过由于时间关系和大题的程序编写比较复杂,所以我只看了下理解了一下,报告选择做小题。

在做第一个小题字符类型统计器时,我遇到了个问题:

就是结束符为EOF时,我在运行窗口输入ctrl+Z无法结束程序(以前我用win32位平台的vc++和win-tc能成功,但现在用win64位平台的democ、vc++和vs2013就不能成功)。

这个问题始终没能解决,我觉得有可能是操作平台的原因。

所以最后结束符我用数字1代替。

在做第三个小题汉诺塔时,对递归操作理解并不深刻,所以花了不少时间做。

在做第四个小题梯形法时,一开始我用的定步长,到最后的时候我想用变步长(加倍减半法)试试,加倍减半法确定步长循环结束有点复杂,由于时间关系并没有做。

这次实验相当于让我重新学习了一遍C语言的知识,把不熟悉的变熟悉了(如递归、数组、指针)。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1