C语言课程设计报告.docx
《C语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告.docx(20页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告
福建工程学院
《C语言课程设计》报告
班级:
机械1301
学号:
3130111103
姓名:
******
指导教师:
邝凌宏
日期:
2013/12/30-2014/1/3
第一部分
一、问题描述
题目1:
企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于或等于20万元时,低于10万元的部分按10%提成,高于10万元的部分可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润x,求应发放奖金总数?
1.解题分析
根据利润计算奖金时,要注意利润中不同的部分提取奖金的比例不同,即
利润中<=10万元的部分,按10%提成奖金;
利润中10~20万元的部分,按7.5%提成奖金;
利润中20~40万元的部分,按5%提成奖金;
利润中40~60万元的部分,按3%提成奖金;
利润中60~100万元的部分,按1.5%提成奖金;
利润中>=100万元的部分,按1%提成奖金;
应发奖学金总数是各部分奖金的和,例如,利润x达到40万到60万之间时,奖金y由四个部分组成:
(1)利润中<=10万元的部分(共10万元)奖金:
10e4*0.1;
(2)
利润中10~20万元的部分(共10万元)奖金:
10e4*0.075:
;(3)利润中20~40万元的部分(共20万元)奖金:
20e4*0.05;(4)利润中40~60万元的部分(共x-40万元)奖金:
(x-40e4)*0.03,于是,y=10e4*0.1+10e4*0.075+20e4*0.05+(x-40e4)*0.03.
2.流程图
3.编码
#include
main()
{
floatx,y;
printf("\ninputtheprofitx:
");
scanf("%f",&x);
if(x<=0)
printf("noprize.\n");
else
{
if(x<=10e4)
y=x*0.1;
elseif(x<=20e4)
y=10e4*0.1+(x-10e4)*0.075;
elseif(x<40e4)
y=10e4*0.1+(x-10e4)*0.075+(x-20e4)*0.05;
elseif(x<=60e4)
y=10e4*0.1+(x-10e4)*0.075+(x-20e4)*0.05+(x-40e4)*0.03;
elseif(x<=100e4)
y=10e4*0.1+(x-10e4)*0.075+(x-20e4)*0.05+(x-40e4)*0.03+(x-60e4)*0.015;
else
y=10e4*0.1+(x-10e4)*0.075+(x-20e4)*0.05+(x-40e4)*0.03+(x-60e4)*0.015+(x-100e4)*0.01;
printf("\ntotalprizey=%.2f",y);
}
}
4.测试运行结果
二、
问题描述
题目2:
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
1.解题分析、方法等:
1.定义变量i,j,k,flag;
2.令j是变量i加上100后的一个完全平方数;k是变量i加上268后的一个完全平方数;
4.比较转化为整形的j*j=?
i+100;k*k=?
i+268求出变量i。
2.流程图:
3.源程序:
#include
main()
{
inti,j,k,flag=0;
for(i=-100;;i++)
{
for(j=0;j
for(k=0;k
if(i+100==j*j&&i+268==k*k)
{
printf("%d",i);
flag=1;
}
if(flag==1)
break;
}
}
4.运行结果:
三、问题描述
题目5:
有36块砖,共36人搬,成年男子一次搬4块砖,成年女子一次搬3块砖,儿童两人抬1块砖,恰好一次全部搬完,编程求出成年男子成年女子和儿童各有多少人。
1.解题分析、方法等
1、定义成年男子、成年女子、儿童分别为变量x,y,z;
2、男子人数可搬x*4块砖,女子人数可搬y*3块砖,儿童人数可搬z/2块砖;
3、共36人和36块砖,故x+y+z=36,x*4+y*3+z/2=36;
4、求x,y,z。
2.流程图:
3.源程序:
#include
voidmain()
{
intx,y,z;
for(x=0;x<=36;x++)
for(y=0;y<=36-x;y++)
{
z=36-x-y;
if((4*x+3*y+z/2==36)&&(z%2==0))
printf("x=%d,y=%d,z=%d\n",x,y,z);
}
}
4.测试结果:
四、问题描述
题目10:
有100盏灯,由100个开关控制,现在有100个人顺序从每个开关走过,第1个人将所有开关拨一下,第2个人将偶数开关拨一下,第3个人将3的倍数的开关拨一下,依次类推。
问,100人过后,哪些灯是亮的,哪些灯是灭的?
1.解题分析、方法等:
所有的灯一开始是暗的,每一个人经过开关都会改变。
然后按下述步骤完成:
(1)一开始所有的灯都暗,故为-1;
(2)每个人一经过开关,值会改变;
(3)输出时,负值的灯是暗的,正值的灯是亮的
2.流程图:
3.编码
#include"stdio.h"
main()
{
intq[101],i,j;
for(i=1;i<=100;i++)
q[i]=-1;/*一开始的灯是暗的,q[i]是“非”*/
for(i=1;i<=100;i++)
for(j=i;j<=100;j++)
{
if(j%i==0)q[j]=-q[j];/*每改变一次开关,q[i]变成非q[i]*/
}
printf("以下的灯是亮的:
");/*打印出何盏灯是亮的及暗的*/
for(i=1;i<=100;i++)
{
if(q[i]==1)printf("%d",i);
}
printf("\n以下的灯是暗的:
");
for(i=1;i<=100;i++)
{
if(q[i]!
=1)printf("%d",i);
}
}
4.测试结果:
第二部分
五、问题描述
课题二恺撒(Caesar)及改进的恺撒密码加、解密实现。
恺撒加密方法就是把明文中所有字母都用它右边的第k个字母替代,并认为Z后边又是A。
这种映射关系表示为如下函数:
F(a)=(a+k)modn
其中:
a表示明文字母;n为字符集中字母个数;k为密钥。
例如:
明文attack,密钥k=3,密文dwwdfn
改进的恺撒密码
明文中的字符换成另一个字符即单字母替换
如:
abcdefghijklmnopqrstuvwxyz
QWERTYUIOPASDFGHJKLZXCVBNM(密钥)
例如:
明文attack,密文QZZQEA
1.解题分析、方法等:
1、在主函数中,定义三个数组存放明文和转换后的密文;
2、调用自定义的函数fun(),通过输入密钥,得到改进的恺撒密码;
2.流程图:
1、主函数流程图:
主函数流程图
3.编程:
#include
#include
voidfun(char*p,char*q)
{
chara[26]="abcdefghijklmnopqrstuvwxyz",b[26];
inti,j,flag=0;
char*tp=p,*tq=q;
while(flag==0)
{printf("\nmingwenbiao:
abcdefghijklmnopqrstuvwxyz\n");
printf("\ninputmiyao:
");/*输入明文和密钥(改进的恺撒密码)*/
scanf("%s",b);
flag=1;
for(i=0;i<26;i++)
if(b[i]=='\0')
{
flag=0;
printf("\nwrongmiyao,nend26chars!
!
");/*检错,如果密钥个数不是26,就提示错误*/
break;
}
}
for(j=0;tp[j]!
='\0';j++)
{
for(i=0;i<26;i++)
{
if(tp[j]==a[i])
{
tq[j]=b[i];
}
}
}
tq[j]='\0';
printf("\nmiwentwo:
%s\n",q);/*输出密文2:
*/
}
voidmain()
{
charm[100],c[100],d[100];
intk,i;
printf("\ninputmingwen:
");/*输入明文*/
gets(m);
printf("\ninputthekey:
");/*输入密钥*/
scanf("%d",&k);
printf("\n");
for(i=0;m[i]!
='\0';i++)
{
c[i]=(m[i]-'a'+k)%26+'a';
}
c[i]='\0';
printf("miwenoneis:
%s\n",c);/*输出密文1是:
*/
fun(m,d);
}
4.测试结果:
二、
学习心得
C语言的收获
刚开始学习C语言的时候不知该从何下手,以前没有学过,有些同学都学过,老师上课也很快,有点赶不上的节奏,有时候在上机的时候虽说程序能看明白,但要让自己去写一个程序那真的是一个头两个大。
最后自己一个人慢慢找学习的方法,自己在课余时间试着去自己上机操作,对着课本自己练习编程,最后再只看题,不对着课本,有时候尝试用课本上没有用过的方法去解决一些问题,自己也会去想一些问题,然后想出方法再去编写程序解决。
通过这样不断的操作实践着实让我的C语言有了很大的提高,就是在这次的C语言等级考试中也是相当得心应手。
同时C语言的学习是一个需要耐心和细心的工作,到目前为止,有些时候一些编程还是会有一些小问题出现,有些时候会将“=”和“==”等效了,有时候会将“a*b”写成“ab”,为了克服这个缺点,每次在编完程序试运行之前,我都会自己去检查一次,把电脑要做的事情自己先做一次,久而久之,感觉编程出现问题的地方和次数都少了很多。
我对C语言的学习的感受就是操作(也就是解题)比一味的去看课本效率更高,也学的更快更轻松,这次的C语言报告再一次给了我一个锻炼自己的机会,以前没有写过流程图,通过这次的实习报告让我对流程图的编写也变的更加熟悉。
但同时流程图也是最麻烦的,思路不是太难,可要想在WORD里表达出来还需要CAD去画图,再截图黏贴。
总的来说,这周的C语言实习让我过的很充实,无论是C语言的编程还是解决问题的思路,甚至还让我复习了一下CAD的操作。
同时也加深了我对C语言的理解与认识。
对我而言,这是一次很有价值的锻炼。