C语言程序设计实验报告
1 实验目的
掌握 C函数的定义方法、函数的调用方法、参数说明以及返回值。掌握实参与形参的对应关系以及参数之间的“值传递”的方式;掌握函数的嵌套调用及递归调用的设计方法。
掌握全局变量和局部变量、动态变量与静态变量的概念和使用方法。
在编程过程中加深理解函数调用的程序设计思想。
2 实验内容
1、 编写一个函数primeNum(int num),它的功能是判别一个数是否为素数。如果num是素数,返回该数;否则返回0值。
要求:(1)在主函数输入一个整数num,调用该函数后,输出num是否是素数的信息。输出格式为:num is prime或num is not prime。
(2)分别输入以下数据:0,1,2,5,9,13,59,121,运行程序并检查结果是否正确。
2、编写函数computNum(int num),它的功能是计算任意输入的一个正整数的各位数字之和,结果由函数返回(例如:输入数据是123,返回值为6)。
要求:num由主函数输入,调用该函数后,在主函数内输出结果。
3、 编写函数,mulNum(int a,int b),它的功能是用来确定a和b是否是整数倍的关系。如果a是b的整数倍,则函数返回值为1,否则函数返回值为0。
要求:(1)在主函数中输入一对数据a和b,调用该函数后,输出结果并加以相应的说明。例如:在主函数中输入:10,5,则输出:10 is multiple of 5.
(2)分别输入下面几组数据进行函数的正确性测试:1与5、5与5、6与2、6与4、20与4、37与9等,并对测试信息加以说明。
4、编写一个计算组合数的函数combinNum(int m,int n)。计算结果由函数返回。
计算组合数的公式是:
c(m,n)=m!/(n!*(m-n)!)
要求:(1)从主函数输入m和n的值。对m>n,m<n和m=n的情况作分别理后调用函数combinNum(m,n),在主函数内输出结果值。
(2)对m>n,m<n和m=n的情况各取一组数据进行测试,并检查程序的正确性。
(3)(*)修改程序,把两个函数分别放在两个程序文件中,作为两个文件进行编译、链接和运行。
3 算法描述流程图
4 源程序
(1)
(2)
(3)
(4)
5 测试数据
(1)0,1,2,5,9,13,59,121
(2)123
(3) 1,5,5 5,6 2,6 4,20 4,37 9
(4)10,20 20,10 15,15
6 运行结果
(1)
(3)
(4)
7 出现问题及解决方法
误将结束符“;”输为“,”误将头文件名输错,导致程序无法链接。
8 实验心得
这次试验我学会了C语言函数的定义方法、函数的调用方法、参数说明以及返回值。掌握实参与形参的对应关系以及参数之间的“值传递”的方式;掌握函数的嵌套调用及递归调用的设计方法。掌握全局变量和局部变量、动态变量与静态变量的概念和使用方法。
第二篇:C语言程序设计实验报告
C语言程序设计A 实验报告
实验名称 火车票订票系统
信息与通信学院 院(系)电子信息工程 专业
班 第2实验小组
作者
学号
实验日期 2011年12月29日
一.实验目的和要求
1.列车原始信息可以从文件导入或者控制台录入,包括车次、票数等;
2.客户可以按车次进行列车信息查询;
3.客户对某一天订票,订票成功后当日的票数能被更改;
4.客户能够退票;
5. 程序能够输出菜单,用户按照提示操作并最终能够得到相应操作结果;
6.熟练掌握并运用结构体。
二.实验内容
#include<stdio.h>
#include<string.h>
struct Piao
{
char b[4];
int shu;
}abc[30]={{"t1",55},{"t2",68},{"t3",15},
{"t1",55},{"t2",68},{"t3",15},
{"t1",5},{"t2",28},{"t3",35},
{"t1",51},{"t2",48},{"t3",35},
{"t1",55},{"t2",68},{"t3",15},
{"t1",5},{"t2",28},{"t3",35},
{"t1",55},{"t2",68},{"t3",15},
{"t1",5},{"t2",28},{"t3",35},
{"t1",51},{"t2",48},{"t3",35},
{"t1",45},{"t2",28},{"t3",11}};
/* 定义数组结构体,并输入原始班次和票数*/
void banci()//定义查询班次的函数
{
int j,c;
char s[32];
printf("请输入日期,1月");
scanf("%d",&c);
printf("请输入班次");
scanf("%s",s);
if(c>11)
j=-1;
else
if(strcmp(s,"t1")==0)
j=0;
else
if(strcmp(s,"t2")==0)
j=1;
else
if(strcmp(s,"t3")==0)
j=2;
else
j=-2;
switch(j)
{
case -2:printf("很抱歉,没有你所要查询的班次\n");break;
case -1:printf("很抱歉,还不能查询1月%d号的车票\n",c);break;
default:printf("1月%d日班次%s的车票还有%d\n",c,s,abc[(c-1)*3+j].shu);
}
}
void dingpiao()//定义订票函数
{
int j,c,f,i;
char s[54];
printf("请输入日期,1月");
scanf("%d",&c);
printf("请输入班次");
scanf("%s",s);
printf("请输入数量");
scanf("%d",&i);
if(c>11)
printf("很抱歉,还不能购买1月%d号的车票\n",c);
else
if(strcmp(s,"t1")==0)
j=0;
else
if(strcmp(s,"t2")==0)
j=1;
else
if(strcmp(s,"t3")==0)
j=2;
else
printf("很抱歉,没有你所要查询的班次\n");
if(i<abc[(c-1)*3+j].shu)
f=abc[(c-1)*3+j].shu-i;
else
f=0;
abc[(c-1)*3+j].shu=f;
switch(f)
{
case 0:printf("很抱歉,票数不够\n");break;
default:printf("以订票成功,1月%d号班次%s所剩票数%d\n",c,s, abc[(c-1)*3+j].shu);
}
}
void tuipiao()//退票函数
{
int j,c,i;
char s[24];
printf("请输入日期,1月");
scanf("%d",&c);
printf("请输入您所要退票的班次");
scanf("%s",s);
printf("请输入票数");
scanf("%d",&i);
if(c>11)
printf("很抱歉,系统无法识别\n");
else
if(strcmp(s,"t1")==0)
j=0;
else
if(strcmp(s,"t2")==0)
j=1;
else
if(strcmp(s,"t3")==0)
j=2;
else
printf("很抱歉,系统中无该班次\n");
abc[(c-1)*3+j].shu=abc[(c-1)*3+j].shu+i;
printf("以退票成功,1月%d号班次%s所剩票数%d\n",c,s,abc[(c-1)*3+j].shu);
}
void guanyu()
{
printf(" 制作小组 \n ");
printf(" \n ");
printf(" \n");
printf(" \n");
printf(" \n");
}
void tuichu()
{
printf("您已经退出系统\n");
}
void ab()
{
printf("系统无该选项\n");
}
void main()
{ int i;
printf(" 火车订票系统 \n");
printf(" ********************************* \n");
printf(" 1,查看班次(t1,t2,t3) \n");
printf(" 2,火车订票 \n");
printf(" 3,退票 \n");
printf(" 4,制作小组 \n");
printf(" 5,退出系统 \n");
printf(" ******************************** \n");
do
{
printf(" 请输入你要选择的功能");
scanf("%d",&i);
switch(i)
{
case 1: banci();break;
case 2: dingpiao();break;
case 3: tuipiao();break;
case 4: guanyu();break;
case 5: tuichu();break;
default:ab();break;
}
}while(i!=5);
}
实验结果:
三.分析与总结
分析:火车订票系统是利用了一下几种语法:
1:利用了函数的调用。我们先是把每个功能分开了编译,如void banci()//定义查询班次的函数,void dingpiao()//定义订票函数等等,然后用函数调用把整个函数调来使用,这样使得程序更加简单易懂,增加了可读性。
2:程序模块化。因为是使用函数调用,所以每个功能都是单独的一个程序。这样做出错的机会更小。如果出错,也便于检查是哪里出错。
3:使用数组结构体。在程序的开头我们用结构体,把字符串char b[4]和int shu合成一体。并用数组abc[30]作为结构体的参数名。把原始的班次和票数输入进去。这样以便调用。
4:在编写各个程序时多次用了if判断语句,for循环语句,switch条件判断语句。使得函数简单易懂。
5:程序在编写时把定义的函数放在开头处,而把主函数放在末尾,这样就可以免去在函数调用时区声明函数。使程序更加简洁。
总结:从拿到题目到整个编程的过程中,遇到或多或少的错误,我们发现了我们的不足之处,对以前学过的知识理解不够深,掌握得不够牢固,比如正如本题要求的结构体……通过了本小组成员的共同探讨,终于把问题一一克服,编出了该程序。回顾本次课程设计,我们从中学到了很多的东西,不仅可以巩固了以前所学到的知识,而且还可以提升自己的编程能力。通过了本次实验,我们明白了一个系统菜单和提示信息非常重要,如没有它们,用户根本不知道怎么运用你所设计的系统。同时也明白了理论和实际相结合时很重要的,只有理论知识是远远不够的,只有把所学的理论知识和实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力和独立思考能力。学会了设计一个简单的系统要注意哪些方面,也使我们知道了自己哪些方面做得还不够。
我们总结出了一点点的经验如下:
1. 要对系统的功能和要求做出详细的分析,并合理分解成几个模块;
2. 对分解出来的模块进行独立设计;
3. 设计之前要构想分析运行界面显示情况;
4. 针对构想出来的界面进行程序的编写。
心得体会:通过这次程序设计,增加了我们对软件技术的了解,在学习C语言的过程中也学到和巩固了许多计算机应用基本知识。在具体操作中对所学过的C语言理论知识得到巩固加强,达到实训目的,也发现了自己的不足之处,为以后我们学习C语言奠定基础,同时体会到C语言具有的语句简洁、使用灵活、执行效率高等特点。通过实际操作,学会C语言程序编程的基本步骤、基本方法,开发了自己逻辑思维能力,培养了分析问题、解决问题的能力。