Shanghai Dianji University
实训报告
课程名称: 计算机能力强化实训
姓 名: 老逼样
班级学号: BG080410
指导教师: 张艳
完成日期: 20##-10-15
电气学院
Electric School
20##年 10月
目录
Shanghai Dianji University. 1
第1章 实训目的及基本要求... 3
1.1实训目的... 3
1.2实训的基本内容和要求... 3
第2章 C语言实训课题演示系统的设计... 4
2.1需求分析... 4
2.2概要设计... 4
2.2.1 演示系统主控模块... 4
2.2.2 演示系统基本算法... 6
2.2.3 各子系统的函数名对照表... 6
第3章 学生成绩系统的设计... 7
3. 1需求分析... 7
3. 2概要设计... 7
3.2.1 学生成绩系统基本算法... 7
3.2.2 学生成绩系统中的函数名对照表... 7
3. 3详细设计... 8
3. 4学生成绩系统流程图分析... 9
3. 5调试分析... 11
第4章 找相同数的系统... 12
4. 1需求分析... 12
4. 2概要设计... 12
4.2.1找相同数系统基本算法... 12
4. 34.2.2 重组四位数系统中的函数名对照表... 12
4.3详细设计... 13
4. 4重组四位数系统流程图分析... 14
4. 5调试分析... 14
第5章求和的系统... 15
5. 1需求分析... 15
5. 2概要设计... 15
5.2.1求和系统的基本算法... 15
5. 3详细设计... 15
5. 4求和系统流程图分析... 16
5. 5调试分析... 16
第6章 实训小结... 17
参考文献... 18
附录... 19
附录一:学生成绩系统的设计... 19
附录二:重组四位数的系统... 20
附录三:求和的系统... 22
第1章 实训目的及基本要求
1.1实训目的
C语言程序设计是本科工科类各专业的重要基础课,主要学习程序设计的基本概念和方法,通过本门课程学习,使学生掌握C语言的基本原理,熟练掌握程序设计的基础知识、基本概念;掌握程序设计的思想和编程技巧。
实训是在学生已经具备了使用C语言编写简单的应用程序的能力,为使学生对C语言有更全面的理解,进一步提高运用C语言编程解决实际问题的能力,通过提出算法、指定输入输出来设计一个解决方案。并为参加计算机等级考试作准备。
1.2实训的基本内容和要求
参加实训的学生,应当认真完成实训的全部内容。最终提交实训成果来证明其独立完成各种实际任务的能力。从而反映出理解和运用本课程知识的水平和能力。具体如下:
1.代码编写规范,形成良好的编程习惯;
2.程序须有一定的健壮性和必要的提示信息,考虑问题的多种可能和边界数据。
3.提交实训报告电子稿、装订的打印稿。实训报告内容包括以下几个方面:
l 程序的总体设计和算法分析。
l 程序流程图、函数说明
l 源程序代码清单
l 测试数据和测试过程记录
l 遇到的问题及解决方法分析
l 实训小结
第2章 C语言实训课题演示系统的设计
2.1需求分析
功能:包括选择结构、循环结构、顺序结构程序、数组、函数、指针等,要求可以实现统计学生成绩系统、重组四位数系统、求和系统
任务:
2.2概要设计
2.2.1 演示系统主控模块
主控模块(图示):
图2.1 主控模块
子模块:
图2.2学生成绩模块
图2.3重组四位数模块
图2.4求和模块
主控模块代码:
#include <stdio.h>
#include <math.h>
#include "2.h"
#include "12.h"
#include "23.h"
void main()
{
int x;
char ch;
ch='y';
while (ch=='y'||ch=='Y')
{
printf("= = = = = = = = = = = = = = = = = = = = = = = =\n");
printf("| |\n");
printf("| = = = = = = = 选 择 菜 单 = = = = = = = = = |\n");
printf("| |\n");
printf("| = = = = = = 1 - 习 题 2 = = = = = = = = |\n");
printf("| = = = = = = 2 - 习 题 12 = = = = = = = = |\n");
printf("| = = = = = = 3 - 习 题 23 = = = = = = = = |\n");
printf("| = = = = = = 0 - 退 出 程 序 = = = = = = = |\n");
printf("| |\n");
printf("= = = = = = = = = = = = = = = = = = = = = = = =\n");
printf(" \n");
printf(" \n");
printf("请输入你想运行的程序编号(0 ~ 3):\n");
scanf("%d",&x);
getchar();
switch(x)
{
case 1:t2();break;
case 2:t12();break;
case 3:t23();break;
case 0:ch='n';break;
default:printf("菜单选择错误!请重新输入!");
}
}
}
2.2.2 演示系统基本算法
运行主程序,首先编译C语言的库函数,在编译各个子系统所在的头文件。
先后顺序:xscj.h 、zxts.h 、czsws.h。
主程序包含所有子程序中要用到的头文件。
2.2.3 各子系统的函数名对照表
表2.1 各子系统函数名对照表
第3章 学生成绩系统的设计
3. 1需求分析
功能:设计一个C语言程序,实现查找、统计学生成绩,求每个学生的平均分;每门课程的平均分;找出最高的分数所对应的学生和课程。
各模块的要求:
(1)主函数:
(2)各个学生成绩的平均分:
(3)每门课程的平均分:
(4)找出最高的分数所对应的学生和课程:
3. 2概要设计
3.2.1 学生成绩系统基本算法
用伪代码表示算法
3.2.2 学生成绩系统中的函数名对照表
表3.1学生成绩系统中的函数名对照表
3. 3详细设计
学生成绩系统主菜单:
输入菜单号1,则进入学生成绩系统,并输入各学生的成绩。
图3-1
输入菜单号1,则进入学生成绩系统,并输入各学生的成绩。
图3-2
输入完毕后,就显示各学生和各课程的平均分及最高成绩的分值和所属的学生和课程。
图 3-2
3. 4学生成绩系统流程图分析
Top赋值为score[0][0] *row=0 *col=0
以上是N—S流程图
3. 5调试分析
调试阶段发现了一些小问题,特别是型参和实参的传递上,花费相当长的时间进行调试分析和修改。
第4章 找相同数的系统
4. 1需求分析
1、功能:编写程序验证以下说法:输入一个4位数,该数个、十、百、千位上的数互不相等,由个、十、百、千位上的数组成一个最大数和一个最小数,最大数-最小数,构成一个新的4位数。反复以上运算,使其最终结果为:6174。
要求如下(下面的函数名为建议函数名):
① 用函数 int IsNumberEqual(int number) 检查输入的整数number各数码是否互不相等,全相等返回值为1否则为0;
② 用函数(void ntos (int number, int c[]) )把四位数整数number各位数码分别存入数组c
③ 用函数( void sort (int a[ ] )对4个元素的数组a排序(升序或降序都可以);
④ 由输入整数分解排序后的数组得到最大值和最小值:
int getmaxn(int a[ ]) 返回值为最大值
int getminn(int b[ ]) 返回值为最小值
各模块的要求:
(1)主函数:
(2)把四位数整数各位数码分别存入数组:
(3)排序得最大值和最小值求差值:
(4)反复以上直到得到6174:
4. 2概要设计
4.2.1找相同数系统基本算法
函数调用
4. 34.2.2 重组四位数系统中的函数名对照表
表4.1重组四位数系统中的函数名对照表
4.3详细设计
重组四位数系统主菜单
图4-1
输入菜单号2,则进入重组四位数系统,并输入一个四位数。
图4-2
输入完毕后,就显示数次计算过程及结果
4. 4重组四位数系统流程图分析
4. 5调试分析
在自己进行编程还是碰到不少问题,但通过同学帮助,这些问题还是迎刃而解了
第5章求和的系统
5. 1需求分析
功能描述:输入一个4位数,该数个、十、百、千位上的数互不相等,由个、十、百、千位上的数组成一个最大数和一个最小数,最大数-最小数,构成一个新的4位数。反复以上运算,使其最终结果为:6174。
5. 2概要设计
5.2.1求和系统的基本算法
用伪代码表示运算
5. 3详细设计
求和系统主菜单
图4-1
输入菜单号3,则进入重求和系统,并输入两个数
图4-2
输入完毕后,就显示其结果
5. 4求和系统流程图分析
5. 5调试分析
构想时,花了比较多的功夫
第6章 实训小结
做完这个课程设计,我们的自信一下子提高了;尽管对于有些人这种程序会很简单,可对我们C语言初学者来说,已经很不容易了。这次体验为以后的学习计算机的我们增强了信心。享受劳动成果的滋味实在很美妙啊!虽然对着电脑做程序,有点累有点热,可是当看到劳动成果时,真是别有一番滋味在心头啊!世上无难事,只怕有心人,的确如此。做完这个程序最大的收获就是感受到了集体的力量,当然个人的智慧也是很重要的哦!
忙碌了一个多星期,在大家的共同努力下,我们总算将此程序设计出来。尽管不是自己独立完成,但仍然很高兴,因为在设计的过程中,让我了解到要设计一个程序,查找资料是至关重要的,在他人的基础上,再根据自己所学进行修改与调试,最后设计出自己想要的程序,这过程艰辛,但只要你持之以恒,成功指日可待。
另外平时扎实的基础也很关键,因为如果你平时学得就不怎么样,那么你面对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难点,更别说让你自己去设计。为了解决此。类问题,最好就是多向同学,老师请教,不要怕难为情。
C语言课程设计和现代计算机技术的实际应用相结合,是我们在本阶段学完理论课程之后对自己该方面的能力的一次很好的检验,从开始的算法思路到运行调试后的美观的图形界面以及另人兴奋的可用程序,都是一个很好的学习和锻炼的过程。使我们巩固了原有的理论知识,培养了我们灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力。使我们体会到自身知识和能力能在实际中的应用和发挥。不但可以激发创新意识,还可以开发创造能力、培养沟通能力。这次实习时间虽然仅有一个星期,但确实使我受益非浅。通过实习我丰富了计算机操作经验,更加深了对C语言的了解,熟悉了其环境,
参考文献
谭浩强著 《C程序设计》(第三版) 清华大学出版社
夏耘 吉顺如主编 《大学程序设计(C)实践手册》 复旦大学出版社
附录
附录一:学生成绩系统的设计
#include<stdio.h>
int m=0,n=0;/*定义全局变量m,n*/
float average (float score[][6],int i)/* 求每个学生平均分*/
{ int j;
float ave=0,sum=0;;
for (j=1;j<6;++j)
sum+=score[i][j];
ave=sum/5;
return ave;
}
float perave (float score[][6],int j)/*求每门课程平均分*/
{ int i;
float aveper=0,sums=0;
for (i=1;i<11;++i)
sums+=score[i][j];
aveper=sums/10;
return aveper;
}
maxper (float score[][6])/*求最大分数所在学生和课程*/
{ int i,j;
float max;
max=score[1][1];
for (i=1;i<11;++i)
for (j=1;j<6;++j)
if (score[i][j]>max)
{max=score[i][j];
m=i;n=j;
}
return 0;
}
main()
{ float score[11][6];
int i;
for (i=1;i<11;++i)
{printf ("input score of student %d:",i);
scanf("%f%f%f%f%f",&score[i][1],&score[i][2],&score[i][3],&score[i][4],&score[i][5]);
}
for (i=1;i<11;++i)
{printf ("# %d:",i);
printf("%.2f %.2f %.2f %.2f %.2f",score[i][1],score[i][2],score[i][3],score[i][4],score[i][5]);
}
printf("\n");
for (i=1;i<11;++i)
{printf ("ave student %d:",i);
printf ("%.2f\n",average(score,i));
}
printf("\n");
for (i=1;i<6;++i)
{printf ("average %d lesson:",i);
printf ("%.2f\n",perave(score,i));
}
printf("\n");
maxper(score);
printf ("Max:No:%d Row:%d\n",m,n);
}
附录二:重组四位数的系统
#include <stdio.h>
int IsNumberEqual(int number)
{
int h,j,k,l;
h=number/1000;
j=number/100%10;
k=number%100/10;
l=number%10;
if(h==j&&j==k&&k==l&&l==h)/*判断i、j、k,n四位相同与否*/
return 1;
else
return 0;
}
void ntos(int number, int c[])
{
c[0]=number/1000;/*得到千位*/
c[1]=number/100%10;/*得到百位*/
c[2]=number%100/10;/*得到十位*/
c[3]=number%10;/*得到个位*/
}
void sort (int c[])
{
int m,n,s;
for(n=0;n<4;n++)
for(m=0;m<4-n;m++)
if(c[m]<c[m+1])
{
s=c[m];
c[m]=c[m+1];
c[m+1]=s;
}
}
int getmaxn(int c[])
{
int a,b,d,e;
a=c[0];
b=c[1];
d=c[2];
e=c[3];
return (a*1000+b*100+d*10+e);
}
int getminn(int c[])
{
int a,b,d,e;
a=c[0];
b=c[1];
d=c[2];
e=c[3];
return (a+b*10+d*100+e*1000);
}
void main()
{
int number,i,c[4],max,min,s;
printf("请输入一个个,十,百,千位数字互不相等的4位数:\n");
scanf("%d",&number);
p:i=IsNumberEqual(number);/*检查输入的整数number各数码是否互不相等*/
if(i!=1)
{
ntos(number,c);
sort(c);
max=getmaxn(c);
min=getminn(c);
s=max-min;
printf("max=%d,min=%d,s=%d\n",max,min,s);
if(s!=6174)
{
number=s;
goto p;
}
else
printf("%d\n",s);
}
else
printf("该数字个,十,百,千位数字相等\n",min);
}
附录三:求和的系统
#include<stdio.h>
#include<math.h>
double fun(int d,int n)
{
int i;
double s=0,sum=0;
for(i=0;i<n;i++)
{
s=s+d*pow(10,i);
sum+=s;
}
return sum;
}
void main()
{
int d,n;
double s;
printf("请输入数字和个数?");
scanf("%d%d",&d,&n);
s=fun(d,n);
printf("结果是%.0f\n",s);
}