资源描述
《C语言程序设计》实训大纲
实训一 C语言上机环境
知识要点
l C语言的标志符和保留字。
l C语言程序的结构特点和书写格式。
l C 语言程序的编辑及运行方法。
实验目的
(1)熟悉Turbo C2.0的软件环境,掌握使用Turbo C进行编辑,编译,连接和运行的方法。
(2)通过运行简单的C程序,掌握C语言源程序的特点。
实验内容
(1)安装并运行Turbo C 2.0程序,进入C语言程序设计环境。
(2)编辑源程序文件
选择“File”→‘‘Load”菜单命令,加载已经存在的C语言源程序文件.
选择“File”→“New”菜单命令建立新文件。
请输入下面的语言源程序,在编辑完成后,用“File”→“Save”菜单命令或键保存编辑结果到新文件中。
int a=4,b=2;
Main()
{
int e=1,f=2;
print(“%d\n”, max (a, b ));
print(“%d\n” , max( e, f ));
}
int max( int x, int y)
{
return x>y ? x:y;
}
(3)编译和连接程序文件。
源程序先经过编译,生成目标文件(. OBJ格式文件),然后将目标文件进行连接,生成可执行文件(.EXE格式文件)。
实训二 数据类型转换
知识要点
C语言提供的数据结构,是以数据类型形式出现的。具体分类如下:
1.基本类型
分为整型、实型(又称浮点型)、字符型和枚举型四种。
2.构造类型
分为数组类型、结构类型和共用类型三种。
3.指针类型。在第9章中介绍。
4.空类型
C语言中的数据,有常量和变量之分,它们分别属于上述这些类型。
实验目的
(1)了解C语言中数据类型的意义。
(2)了解C语言中数据类型的转换方式。
实验内容
(1)输入下面程序,观察它的运行结果。
Main()
{
ch1=‘a’;ch2=‘B’; /*字母的大小写转换*/
printf(``ch1=%c,ch2=%c\n``,ch1-32,ch2+32);
/*用字符形式输出一个大于256的数值*/
printf(``ch1+200=%d\n``,ch1+200);
printf(``ch1+200=%c\n``,ch1+200);
printf(``ch1+256=%d\n``,ch1+256);
}
C语言允许对字符数据进行运算,此时就是对它们的ASCII码值进行算术运算。
实训三 运算符与表达式
知识要点
(1) C语言的表达式。
(2) 算术运算符和算术表达式。
(3) 关系和逻辑运算符。
(4) Sizeof()运算符。
(5) 运算符的优先级和结合性。
实验目的
(1)掌握C语言的数据类型,熟悉如何定义整形、字符型、实型变量,以及对它们赋值的方法,了解以上数据类型并输出时所使用的格式转换符号。
(2)学会如何使用C语言的有关运算符以及包括这些运算符号的表达式,特别是自加(++)和自减(--)运算符的使用。
(3)进一步熟悉C程序的编辑、编译、连接和运用的过程。
实验内容
(1) 输入以下程序,在编译、运行,并分析运行结果。
Main()
{
char cl,c2;
printf(“%c%c”,cl,c2);
}
①在程序末尾加一个printf语句,并运行之。
(“%d,%d”,cl,c2);
②在①的基础上,将第2行改为:
int cl,c2;
再运行程序。
③将第3行改为:
cl=300;c2=400;
再运行,并分析结果。
⑵输入并运行以下程序。
Main()
{
int i,j,m,n;
i=8;j=10;
M=i++,n=j++
① 将第4行改为:
m=i++;n=++j;
② 将程序改为:
Main()
{
int i,j;
i=8;j=10;
Printf(“%d,%d”,++i,++j);
}
③ 在②的基础上,将orintf语句改为:
Printf(“%d,%d”,++i,++j);
④ 再将程序改为:
main()
{int i,j,m=0,n=0;
i=8;j=10;
M+=i++;n-=--j;
Peintf(“i=%D,j=%d,m+%d,n=%d,i,j,m,n);
}
(3)判断以下程序的输出结果,然后上机验证。
①Main()
{nit i=3,j=2,a,b,c,d;
d=(i*3,j=10)
a=(--i==j++)?--i:++j;
b=i++;
c=j;
printf(“%d,%d,%d,%d\n”,a,b,c,d):
}
②main()
{
int a=110,b=017
printf(“%x,%d\n”,a++,++b);
}
③main()
{
int a=-1;b=36,c;
c=(++a>0)||!(b--<=0);
printf(“%d,%d,%d\n”,a,b,c);
}
(4)对以下程序填空,使程序实现从键盘输入的任意大写字母转换为小写字母或小写字母转换为大写字母。
Main()
{
char c;
scanf(“%c); printf(“%c”,&c);
}
4.分析与讨论
分析总结运算符的优先级
实训四 顺序结构程序设计
知识要点
C语言中没有提供专门的输入、输出语句,所有的输入、输出都是通过调用标准库函数中的输入,输出函数来实现的。学习C语言不仅要学习语句和各种运算,而且要学习并掌握常用标准函数的使用。
l Scanf()和getchar()函数是输入函数,接受来自键盘的输入数据。
l Scanf()是格式输入函数,可按指定的格式输入任意类型数据。
l Getchar()函数是字符输入函数,只能接收单个字符。
l Printf()和putchar() 函数是输出函数,向显示器屏幕输出数据。
l Printf()是格式输出函数,可按指定的格式显示任意类型数据。
l Putchar()_是字符显示函数,只能显示单个字符。
实验目的
掌握c语言程序输入,输出的方法和格式。
实验内容
(1) 程序源代码:
# include<stdio.h>
main()
{
char a=176,b=219;
printf(“%c%c%c%c%c\n”,b,a,a,a,b);
prinft(“%c%c%c%c%c\n”,a,b,a,b,a);
prinft(“%c%c%c%c%c\n”,a,a,b,a,a);
prinft(“%c%c%c%c%c\n”,a,b,a,b,a);
printf(“%c%c%c%c%c\n:,b,a,a,a,b);
实训五 选择结构程序设计
知识要点
从程序执行的流程来看,程序可分为3种最基本的结构,分支结构以及循环结构。
C语言提供了多种形式的条件语句以构成分支结构:
l If语句只要用于单向选择。
l If-else语句主要用于双向选择。
l If-else-if语句和switch语句用于多向选择。
实验目的
(1)了解条件与程序流程的关系。
(2)了解用不同的数据使程序的流程覆盖不同的语句、分支和路径。
实验内容
(1)有如下程序段:
main()
{
int a,b,x;
scanf(“%d%d%d”,&b);
if(a>=b)x=b;
printf(“x=%d\n”,x);
}
要求分别使用下列组数据运行该程序并记录行结果。
①a=5,b=1,x=?
②a=1,b=5,x=?
③a=3,b=3,x=?
分析讨论:用哪组数据就可以使程序段中的每个分支都运行一次?
(2)下面程序要输出a,b,c3个数中的最大值,请改正其中的错误。
Main()
{
int a,b,c,max;
printf(“enter a,b,c:”);
scanf(“%d%d%d”,a,b,c);
if(a>=b && a>=c) printf(“max=a=%d\n”,a);
if(b>=a && b>=c) printf(“max=b=%d\n”,b);
else printf(“max=c=%d\n”,c);
}
实训六 循环控制
while和do-while循环语句
知识要点
·while(表达式){语句;}
·do{语句} while(表达式);
上述两种语句是C语言的条件循环语句,它门的区别是:用do-while语句至少要执行一次循环体;而while语句先判断括号内表达式的值若为0,则跳出循环,因此有可能循环一次也不执行。
实验目的
(1)掌握在设计条件循环结构程序时,如何正确地设定循环条件,以及如何控制循环的次数。
(2)了解条件型循环结构的基本测试方法。
实验内容
(1) 编辑并运行下面程序。
Main()
{
int i=1,s=1,n;
scanf(“‰d”.&n);
if(n<0)
printf(“ The input data is error!\n”);
ese
{
while(i<=n) \
{s=s*2;i++;}
praintf(“s=‰d\n”,s);
}
}
当n的值为以下各值时,输出结果分别是什么?
N为-5,输出_____。
n为1,输出_______。
N为5,输出______。
结合课本86页例提:用近以值e=1/1!+1/2!+…+1/n!(n越大,越接近e的真值),求自然对数e的值。下面是一个计算e的近以值的程序(使误差小于给定的&).
Main()
{
double e=1.0,x=1.0,y,detax;
int i=1
printf(“\n please input enter a error:”);
scanf(“%1f”,&detax);
y=1/x;
{
x=x*i;y=1/x;e=e=y;++i;
}
printf(“%12.10if”,e);
}.
①当输入的detax各是什么值时,能分别使程序按下面的要求运行:
不进入循环;
只循环一次;
只循环两次
进入死循环 (程序将永远循环下去)。
②如想要知道程序共循环了多少次,应该在程增加一条什么样的语句?
③在程序while的语句中的y>=detax,分别换 y>yetax,y =detax,y<detax,y<=detax,观察程序运行将会有什么化。
④把原程序中while语句之前y=1/xy语句去掉,观察程序的运行将会发生什么样的变花。
⑤如把原程序的++i换成i++,观察程次序的运行发生了什么变化。
⑥把原程序中的while结构改写成do___whilejg 结构,再分别按上述的2和3要求进行实验。
3.分析讨论
总结一下测试条件循环的一般方法。
实训七 典型算法及程序实现
知识要点
C语言提供了3 种循环语句
(1) For语句主要用语给定循环变量初值,步长以及循环条件的循环结构。
(2) 对于循环次数及控制条件要在循环过中才能确定的循环,可用while或do-while语句。
(3) 3种循环语句可以相互嵌套组成多种循环,循环之间可以并列但不能交叉。
(4) 在循环程序中应避免出现死循环,即应保障循环变量的值在运行过程中可以得到修改,并使循环条件逐步变为假,从而结束循环。
(5)可用转移语句把流程转出体外,但不能从外面转向循环体内。
(6) Break和continue语句:break语句立即结束包含它的循环或开关语句;continue语句只能用于循环语句中,它跳过循环体中下面的语句而从下一次循环开始。
实验目的
(1)掌握如何正确的控制计数型循环结构的次数。
(2)了解对计数型循环结构进行测试的基本方法。
实验内容
有下面程序段;
main()
{
int i,j;
ilng sum=0
for(i=1;i<=5;i++)
sum=sum+(i+1)*(i+1)
printf(“sumis:%D/N’,sum);\
}
(1)将程序中的for语句改为”for(i=1;i<+5;i++);”则程序结果是什么?
(2)将程序中的for语句改为“for(i=1;i<=5;i+=2)”则程序结果是什么?
(3) 将程序中的for语句改为“for(i=5;i>=1;i_=3)”则程序结果是什么?
(4) 将程序中的for语句其循环体改为 “for(i=1;i<=5;i++) i=i+(i+1)*(i+1)”则
程序结果是什么?
实训八 数组与函数构造
知识要点
1.一维数组的定义和引用
2.二维数组的定义和引用
3. 函数定义、返回值与函数类型
4. 函数的调用
实验目的
掌握数组的应用,以及双重循环程序设计对二维数组的应用。
掌握C语言函数定义及调用的规则。
理解参数传递的过程。
掌握变量的作用范围。
实验内容
1. 通过键盘输入10个整数,分别用选择法和冒泡法对这十个数排序。
2. 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。也可以有鞍点。
3. 打印以下图形
*
***
*****
*******
*********
4.上机调试下面的程序,记录系统给出的出错信息,并指出原因。
Main()
{
int x=1,y=2;
printf(``%d/n``,sum(x,y);
intsum(a,b)
{
inta,b;
return (a+b)
}
}
出错信息:__________。
原因:______________。
(1) 分析并运行下面的程序。
Aust()
int vauto=0; /*自动变量:没次调用都重新初始化*/
Static int vastatic=0; /*静态局部变量;只初始化1次*/
++vauto;
++vstatic;
printf(``vauto=%d/n”,vauto,vstatic);
}
main()
{
int i;
for(i=0;i<5;i++)aust();
}|
运行结果为_____________
(3)下面的程序利用函数pp输出给定的字符n次,请将pp函数补充完整。
Main()
{
char c;
int n;
scanf(“%c%d”,&c,&n);
pp(c,n);
}
pp(char c,int n)
{ }
实训九 位运算
知识要点
1. 数值在计算机中的表示
2. 位运算
3. 位段
实验目的
掌握位的的与、或、非、左移位和右移位的运算。
实验内容
(1)写一函数,对一16位的二进制数取出它的奇数位(即从左边起第1、3、5……15位)
(2)设计一个函数,使给出一个数的原码,能得到该数的补码。
键盘上输入1个正整数给int变量num,按二进制位输出该数。
#include "stdio.h"
main()
{ int num, mask, i;
printf("Input a integer number: ");
scanf("%d",&num);
mask = 1<<15;
/*构造1个最高位为1、其余各位为0的整数(屏蔽字)*/
printf("%d=" , num);
for(i=1; i<=16; i++)
{ putchar(num&mask ? ’1’ : ‘0’);
/*输出最高位的值(1/0)*/
num <<= 1; /*将次高位移到最高位上*/
if( i%4==0 ) putchar(‘,’);
/*四位一组,用逗号分开*/
}
printf("\bB\n");
}
程序运行情况:
Input a integer number:1000 ←┘
1000=0000,0011,1110,1000B
综合实训
一、目的与任务
通过实训,使学生掌握C语言的基本语法、基本知识、上机调试程序的基本技能,掌握结构化程序设计的基本方法,掌握并学会应用数据结构算法,具备设计、调试、编绎较为复杂C程序的能力。
二、适用专业
计算机系所有开设了《C语言程序设计》课程的相关专业
三、实训环境
开发工具:Turboc2.0、Dev-C++或Visual C++
运行环境:Ms-dos、Windows 9x、Windows NT 或Windows2000操作系统
四、推荐实训指导书
《C语言程序设计题解与上机指导》,谭浩强:清华大学出版社,2000
《C语言程序设计实训教程》,康英健,海洋出版社 2004.7
《数据结构题集》,严蔚敏、吴伟民,清华大学出版社 1999.2
《C语言程序设计习题解答与上机指导》谭浩强、林小茶,中国铁道出版社2004.9
五、实训项目、内容与课时分配
序
号
实训项目
实训内容
课时分配
1
讲座与案例发布
现场讲座、案例发布
2
2
模块一
实现链表的创建
4
3
模块二
实现数据输出
4
4
模块三
实现数据的添加与插入
4
5
模块四
实现数据的删除
4
6
模块五
实现数据的查找
4
7
模块六
实现数据的修改
4
8
模块七
保存数据,实现文件的读写
4
9
模块八
退出系统
2
10
指导老师点评、评分
在老师指导下完善作品
3
合计
35
六、实训流程安排
序号
主题
学时数
安排
1
讲座与案例发布
2
现场讲座、案例发布
2
实训案例制作
4
制作完成第一模块
4
制作完成第二模块
4
制作完成第三模块
4
制作完成第四模块
4
制作完成第五模块
4
制作完成第六模块
4
制作完成第七模块
2
制作完成第八模块
3
指导老师学生作品点评
2
学生完善作品
4
实训完毕
1
意见反馈 给出评分
5
35
七、校内实训评分标准
实训共计划35课时,共分八个部分完成,根据所完成部分的质量和所完成部分内容的难易度,特制定如下评分标准(指导老师还可适当考虑学生考勤情况给予评分)
序号
实训项目
实训内容
评分
1
模块一
实现链表的创建
优
15
良
12
中
10
及格
8
不及格
6
2
模块二
实现数据输出
优
10
良
8
中
7
及格
6
不及格
4
太差
0
3
模块三
实现数据的添加与插入
优
15
良
12
中
10
及格
8
不及格
6
4
模块四
实现数据的删除
优
10
良
8
中
7
及格
6
不及格
4
5
模块五
实现数据的查找
优
10
良
8
中
7
及格
6
不及格
4
6
模块六
实现数据的修改
优
10
良
8
中
7
及格
6
不及格
4
7
模块七
保存数据,实现文件的读写
优
20
良
18
中
15
及格
12
不及格
8
8
模块八
退出系统
优
10
良
8
中
7
及格
6
不及格
4
满分
100
16
展开阅读全文