《C语言程序设计》实验大纲

发布者:syzx发布时间:2023-05-24浏览次数:551

 课程编号:B0800030                实验学时:18   
  实验个数:9                       适用专业:信息管理与信息系统
  教材及参考书:谭浩强编著.C程序设计(第三版).北京:清华大学出版社,2005                    
  大纲执笔人:章锋                 大纲审定人:许伟
  
  一、实验课的性质与任务
C语言程序设计是一门专业基础课程,也是学生必备的基本技能之一。本课程不仅仅是知识的讲述,更重要的是一种基本技能的训练。通过本课程的学习,使学生掌握程序设计的基本概念,了解计算机语言的基本知识;通过例题的讲述与编程实践培养学生掌握程序设计的基本技能。
  
  二、实验课程目的与要求
  1.实验目的
  通过实验课程的教学对学生进行全面综合训练,一方面达到使学生深化理解和灵活掌握理论课教学内容的目的;另一方面使学生学会如何把书上学到的知识用于解决实际问题,使书上的知识变活,培养软件工作所需要的动手能力。
  2.实验要求
  教学中首先要求学生对课程进行预习,了解实验内容、目的和要求,列出实验步骤;同时提出实验问题让学生思考,对需要解决的问题设计算法,根据算法写出源程序。上机实验让学生调试并运行程序,记录运行结果并进行分析,最后要求学生按照要求书写实验报告。实验课过程中教师要解决学生的疑难问题,帮助学生分析和处理实验结果。
  综合性实验是软件设计的综合训练,包括问题分析,总体结构设计,程序设计基本技能和技巧,以至一整套软件工作规范的训练和科学作风的培养。

  三、实验项目及学时分配
       

  四、实验内容安排
实验一C程序的运行环境(2学时)
   1、目的与要求
   (1)熟悉C语言程序的运行环境,了解所用计算机的软、硬件配置和使用方法。
   (2)初步了解运行一个C语言程序的过程。
   2、内容与步骤
   (1)开机:进入Windows操作系统下、点击tc.exe文件图标;
   (2)进Turbo C集成工作环境。(Windows操作系统下DOS环境)
   (3)了解Turbo C集成工作环境及其菜单的使用。
   (4)了解并掌握Turbo C目录环境的设置。
   (5)用文本编辑器建立如下C语言源程序,并以ex1-1.c存盘。
   main()
   {printf(“I am a student.”);
     printf(“I love China.”);}
   (6)用TC打开ex1-1.c,试编译、运行,并按Alt+F5查看运行结果。
   (7)再在Turbo C集成工作环境下编辑一文件,(习题1.5)编译并运行之。
   (8)退出。
实验二 数据类型(2学时)
   1、目的与要求
   (1)初步了解C语言程序的调试过程和调试方法。
   (2)掌握C语言各种基本数据类型的定义方法。
   2、内容与步骤
    (1) 下面程序企图计算由键盘输入的任意两个整数的平均值:
   并将调试通过的源程序以ex2-1.c存盘。
       #include<stdio.c>
       main()
       {int x,y,a;
        scanf(“%x,%y”,&x,&y);
        a=(x+y)/2;
        printf(“The average is:”,a);
   }
   调试无语法错误后,分别使用下列测试用例对上述程序进行测试:
   2,6                    1,3
   -2,-6                   -1,-3
   -2,6                    -1,3
   1,0                     1,6
   32800,33000             -32800,33000
   分析上述哪几组测试用例较好?通过测试,你发现程序有什么错误了吗?若有错误,请指出错误原因。
   (2)输入并运行下面的程序
   main()
   (int  a,b;
   unsigned c,d;
   long e,f;
   a=100;b=-100;e=50000;f=32767;
   c=a;d=b;
   printf(“%d,%d/n”,a,b);
   printf(“%u,%u/n”,a,b);
   printf(“%u,%u/n”,c,d);
   c=a=e;d=b=f;
   printf(“%d,%d/n”,a,b);
   printf(“%u,%u/n”,c,d);}
   请对照程序和运行结果分析:
   将一个负整数赋给一个无符号的变量,会得到什么结果。
   将一个长整数赋予无符号变量,会得到什么结果(分别考虑大于或等于65535以及小于65535的情况)。
   将一个大于32767的长整数赋给整型变量,会得到什么结果。
   (3)输入并运行下面程序
   main()
   {char c1,c2;
   c1=’a’;c2=’b’;
   printf(“%c,%c”,c1,c2);}
   运行此程序
   在此基础上增加一个语句:
   printf(“%d,%d”,c1,c2);
   将第2行改为:
   int c1,c2;
   再运行之,并观察结果。
   再将第3行改为:
   c1=a;c2=b;
   再运行之,并观察结果。
   再将第3行改为:
   c1=”a”;c2=”b”;
   再运行之,并观察结果
   再将第3行改为:
   c1=300;c2=400;
   再运行之,并观察结果。
   3、撰写实验报告
  记录实验运行结果,并分析结果。
实验三 简单的C程序设计(2学时)
   1、目的与要求
   (1)进一步熟悉C语言环境。
   (2)明确C语言程序的结构,掌握C语言程序的书写格式。
   2、内容与步骤
      (1)编写一个C语言程序,测试下列各表达式
      i,j      i+1,j+1          i++,j++
      ++i,++j                   i+++++j
      ++i+++++j++
   要求在各表达式中I和j都分别有相同的初值。在实验中,注意下列问题:
   哪些表达式是错误的,为什么?
   理解+,+1,++i,i++的意义和优先顺序。
   (2)输入并编辑下面的程序
      main()
      {int  a,b;
   float c,d;
   long e,f;
   unsigned int u,v;
   char c1,c2;
   scan(“%d,%d”,a,b);
   scan(“%f,%f”,c,d);
   scan(“%ld,%ld”,e,f);
   scan(“%o,o%”,u,v);
   scan(“%c,%c”,c1,c2);
   printf(“/n”);
   printf(“a=%7d,b=%7d/n”,&a,&b);
   printf(“c=%10.2f,d=%10.2f/n”,&c,&d);
   printf(“e=%17ld,f=%17ld/n”,&e,&f);
   printf(“u=%o,v=%o/n”,&u,&v);
   printf(“c1=%c,c2=%c/n”,&c1,&c2);
   这个程序有语法错误吗?为什么?
   调试上述程序无语法错误后,用下面的测试数据,对程序进行测试:
      a=123, b=456, c=17.6, d=71837.65, e=70000, f=217506, u=62000, v=58765, c1=’a’, c2=’b’
      分析运行结果。特别注意输出c1, c2的值是什么?什么原因?
   将输入e和f的语句改为:
   scanf(“%d,%d”,&e,&f);
   再用上述数据测试并分析结果。
   将输入u和v的语句改为:
   scanf(“%d,%d”,&u,&v);
   再用上述数据测试并分析结果。
   将输出e和f的语句改为:
   printf(“e=%17d,f=%17d/n”,e,f);
   再用上述数据测试并分析结果。
   将输出u和v的语句改为:
   printf(“u=%u,v=%u/n”,u,v);
   或 printf(“u=%d,v=%d/n”,u,v);
   再用上述数据测试并分析结果。
   请修改程序和改变数据输入的形式,分析各种情况下的输入与输出。
   在scan(“%c,%c”,c1,c2);语句之前加一个语句:
   getchar();
      再调试并分析编译信息。
   验证转义字符/n与/r的意义有何不同。
   3、撰写实验报告
   记录实验运行结果,并分析结果。

实验四 选择结构(2学时)
   1、目的与要求
   (1)掌握条件与程序流程的关系。
   (2)掌握不同数据将使程序的流程覆盖不同的语句、分支和路径。
   (3)了解分支结构的嵌套。
   2、内容与步骤
   (1)有如下程序段:
     {…
      if(a>1 && b= =0) x=x/a;
      if(a= =2 || x>1) x=x+1;}
   把上述程序段编成一个完整的程序,以便使上述程序段能在不同的a,b和x值下运行,并且能观察程序流程经过(覆盖)了哪些语句、哪些分支及哪些路径。
   实验步骤
   记下分别使用下列各组数据运行时的操作流程。
   a=1,b=1,x=1;
   a=1,b=1,x=2;
   a=3,b=0,x=1;
   a=2,b=0,x=4;
   a=2,b=1,x=1;
   a=1,b=0,x=2;
   a=2,b=1,x=1;
   a=3,b=0,x=2;
   要求如下:
   用if语句实现分支,自变量x与函数值均采用双精度类型.
   自变量x值从键盘输入,且输入前要有提示信息.
   数据的输出格式采用以下形式:
   x=输入值,f(x)=计算值
   记录运行结果;
   源程序以ex4-1.C存盘.
   (2)编程,将一个百分制成绩转换成等级制成绩.具体要求如下:
   百分制与等级制的对应关系如下:
   百分制    90—100    80--89    70--79    60--69    <60
   等级制       A       B       C       D      E
   用switch语句实现该功能.
   用键盘输入百分制成绩,输入前要有提示信息.
   要能判断输入数据的合理性,对于不合理的数据应输出错误信息.
   输出结果中应包含百分制成绩和等级.
   分别输入成绩-10,99,60,85,70,101,45,运行该程序.记录结果.
   源程序以ex4-2.C存盘.
   3、撰写实验报告
  记录实验运行结果,并分析结果。
实验五 循环控制(2学时)
   1、目的与要求
   掌握循环的概念。
   掌握三种常用的循环语句的格式和功能。
   掌握break和 continue 语句的功能。
   2、内容与步骤
   (1)编写求解不定方程15x+9y+z=30的正整数解。要求如下:
   对解按每行3组输出 。
   文件以ex5-1.C存盘。
   (2)打印九九乘法表。要求如下:
   for 循环完成该程序。
   打印形状为直角三角形。
   文件以ex5-2.C存盘。
   (3)猴子吃桃问题。猴子第一天摘下若干个桃子,当天吃一半,又多吃一个;第二天同样如此,到第十天时只吃一个就没了。求第一天共摘了多少个?
   编程,得到正确结果后,再修改:改为猴子每天吃一半,再吃二个。结果如何?
   3、撰写实验报告
  记录实验运行结果,并分析结果。
实验六 数组(2学时)
   1、目的与要求
   (1)掌握数组的定义、初始化和输入输出方法。
   (2)加深对数组的理解,培养解决实际问题的能力。
   2、内容与步骤
   (1)用一个一维数组存放10个实数,并求出它们的平均数,最大数。
   数据用一维数组存放,进行处理。
   算出平均值,找出最大数。
   数据的输入和输出要有提示信息;源程序以ex6-1
   (2)输入三个学生、五门课程的成绩,计算每学生的平均成绩。
   按二维数组进行处理,并由键盘按学生的各门成绩逐个输入。
   数据输入以矩阵形式存放。数据以二维表格形式输出 ,输出内容有表头(提示信息)、表体(学生序号、单科成绩、个人平均)。
   程序以ex6-2.C存盘。
   (3)编程:有17个围成一圈(编号为0—16),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去。直到最后只剩下一人为止。问此人原来是多少号。记录其结果。源程序以ex6-3.C存盘。
   3、撰写实验报告
  记录实验运行结果,并分析结果。
实验七 函数(2学时)
   1、目的与要求
   掌握C语言函数的定义和调用的形式及规则。
   掌握实参与形参的对应关系。
   掌握函数的嵌套调用和递归调用的设计方法。
   掌握各种变量的存储属性及其区别。
   2、内容与步骤
   (1)编程,求表达式1+2+3+……+n的值,要求如下:
   求值过程采用递归算法,并定义成函数sumofn(),供主函数调用。
   n的值在主函数中从键盘输入 ,调用sumofn(),并将计算结果输出。
   源程序以ex7=1.C存盘。
   (2)编程,求100至200之间的素数,用两个函数分别求素数与打印;(打印按每行6个输出。)源程序以ex7-2.C存盘。
   (3)分别用与不用全局变量的方法(两个源程序),用两个函数求最大公倍数与最小公约数,在主函数中输入两个整数,两个函数求出的数返回主函数,并在主函数中输出。源程序以ex7-3.C存盘。
   3、撰写实验报告
   记录实验运行结果,并分析结果。
实验八 编译预处理(2学时)
   1、目的与要求
   (1)掌握宏定义的方法;
   (2)掌握文件包含处理的方法;
   2、内容与步骤
   (1)计算函数   ,利用宏定义定义二个宏计算x=-2,-2-3,+2,2+3时的函数值。源程序以ex8-1.C存盘。
   (2)利用math.h中随机函数rand()产生10个0~100间的随机整数,先输出,再按由小到大排序后输出。源程序以ex8-2.C存盘。
   3、撰写实验报告
  记录实验运行结果,并分析结果。
实验九 指针(2学时)
   1、目的与要求
   (1)掌握指针的概念以及定义方法,掌握地址、指针和指针变量之间的区别与联系。
   (2)掌握指针变量与数组的关系,掌握如何使用指针来处理与数组相关的问题。
   2、内容与步骤
   (1)将一个3Х3的矩阵转置。(用指针处理)源程序以ex8-1.C存盘
   (2)利用math.h中随机函数rand()产生10个0~100间的随机整数,先输出,再按由小到大排序后输出。(用指针处理)源程序以ex9-2.C存盘。
   3、撰写实验报告
   记录实验运行结果,并分析结果。
  
  五、考核方式、方法及实验成绩评定方法
   C语言程序设计实验课成绩单独按五级记分。凡实验成绩不及格者,该门课程必须重修。学生的实验成绩应以平时考查为主,一般应占总分的70%,其平时成绩又要以实验实际操作的优劣作为主要考核依据。在学期末或课程结束时,为复习和巩固实验教学内容,进一步对学生作补充了解,也可举行一定的实验操作考试,但无论采取何种方式进行考核,都必须按实验课的目的要求,以实际实验工作能力的强弱作为评定成绩的主要依据。因此,最终的集中考试结果只能占总成绩的30%。
   2、实验成绩评定方法:
   评定各级成绩时,可参考以下标准:
   (一)优秀(90分及以上)
   能正确理解实验的目的要求,能独立、顺利而正确地完成各项实验操作,会分析和处理实验中遇到的问题,能掌握所学的各项实验技能,能较好地完成实验报告及其它各项实验作业,有一定创造精神和能力。有良好的实验工作作风和习惯。
   (二)良好(80分—89.5分)
   能理解实验的目的和要求,能认真而正确地完成各项实验操作,能分析和处理实验中遇到的一些问题。能掌握所学实验技能的绝大部分,对难点较大的操作完成有困难。能一般完成实验报告和其它实验作业。有较好的实验习惯和工作作风。
   (三)中等(70分—79.5分)
   能粗浅理解实验目的要求,能认真努力进行各项实验操作,但技巧较差。能分析和处理实验中一些较容易的问题,掌握实验技能的大部分。有30%掌握得不好。能一般完成各项实验作业和报告。处理问题缺乏条理。工作作风较好。能认真遵守各项规章制度。学习努力。
   (四)及格(60分—69.5分)
   只能机械地了解实验内容,能一般性地按实验步骤完成实验操作,能完成60%所学的实验技能,有些虽作但不准确。遇到问题常常缺乏解决的办法,在别人启发下能作些简单处理,但效果不理想。能一般完成实验报告,能认真遵守实验室各项规章制度,工作中有小的习惯性毛病(如工作无计划,处理问题缺乏条理)。
   (五)不及格(60分以下)
  盲目地操作,只掌握50%以下所学实验技能。有些实验虽能做,但一般效果不好,操作不正确。工作忙乱无条理。一般能遵守实验室规章制度,但常有小的错误。实验报告较多的时候有结果,遇到问题时说不明原因,在教师指导下也较难完成各项实验作业。或有些小聪明但不努力,不求上进。
  
  六、主要教材及参考书
  教  材:C程序设计题解与上机指导(第三版)(谭浩强主编)
  参考书:[1]谭浩强编著.C程序设计(第三版).北京:清华大学出版社,2005.
[2]谭浩强编著.C程序设计题解与上机指导(第三版).北京:清华大学出版社,2005.
   
   七、说明
  通过C程序上机实验,加深对讲授内容尤其是一些语法规则和概念的理解;熟悉所用的计算机系统的操作方法,熟悉C语言程序开发环境;学会上机调试程序。C语言程序设计是一门实践性很强的课程,学生应该在上机实验的基础上熟练地掌握程序设计的全过程,即独立编写源程序,独立上机调试,独立运行程序和分析结果。实验内容的安排应该是课后作业和上机实验题的统一。