1 / 54
文档名称:

C语言程序设计实训指导书.pdf

格式:pdf   大小:2,192KB   页数:54页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

C语言程序设计实训指导书.pdf

上传人:我是开始 2023/3/20 文件大小:2.14 MB

下载得到文件列表

C语言程序设计实训指导书.pdf

文档介绍

文档介绍:该【C语言程序设计实训指导书 】是由【我是开始】上传分享,文档一共【54】页,该文档可以免费在线阅读,需要了解更多关于【C语言程序设计实训指导书 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:.
C语言程序设计实训指导书
(内部使用)
主讲教师编写
:.
前言
C语言是一种编程灵活、特色鲜明的程序设计语言,是计算机专业学生的基础课程,学
好这种语言可以为后续的面向对象的语言打好坚实的基础,C语言除了学****必须的基本知识:
如概念、方法和语法规则之外,更重要的是进行实训,以提高学****者的动手和编程能力,这
才是学****语言的最终目的,结合多年来的教学经验,根据学生的学****情况,为配合教学过程,
使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C语言程序设计实训指导书》,
以在实训过程中给学生提供帮助。
本书分为三个部分:实训总要求、实训模块和项目拓展实例。第一部分为实训总要求,
目的是为了让学生编写规范的代码,从开始程序设计就进行规范练****为以后工作打下良好
的基础。第二部分为实训模块,有三个:(1)基础部分,为随堂实训,在分析案例的基础上,
使学生掌握该部分内容的知识要点,并能灵活运行在实训中,为使学生目标明确,在实训开
始给学生提出实训目的及要求;(2)深化部分,为综合实训,为提高学生的学****积极性,同
时为培养软件开发的合作精神,在随堂实训完成的基础上,给学生设计相对该内容综合运用
的实例,组织学生进行分组讨论,把每组的讨论结果同大家分享,由学生和老师共同给出评
价,该方法可以丰富学生解决问题的方法,拓宽思路;(3)课程设计,为期末的课程设计,
是对整个内容的一个综合设计,可以使学生从软件开发的角度开始思考问题、解决问题,形
式仍然为分组设计,各小组设定项目经理、技术经理和成员,一般为5人一组,由项目经理
组织人员、进行分工和协调工作,技术经理负责开发过程中遇到的疑难问题的解决,并进行
开发的全程控制。第三部分为案例拓展实例:学生成绩管理系统。通过该实例从一个简单的
顺序结构实例,根据内容逐步进行扩充,由小到大,由浅入深,使设计的功能越来越完善,
完成了分支结构、循环结构、数组、函数、指针、结构体和文件内容的应用,最后成为一个
完整的设计。
本书具有基础性、实用性和系统性,可以指导学生按照从浅入深,从低到高的训练过程,:.
逐步提高他们的编程和动手能力。
编者
2007年10月
实训要求及说明
C语言程序设计的实训是学生重要的实****环节。上机实训不仅要求学生掌握C语言程序设计的基本
知识,更重要的是培养学生掌握程序设计开发的基本素质、思维方法和技能,为学生综合素质的培养打下
坚实基础。实训的形式为教师制定出难易适中的设计题目,学生通过分组讨论进行设计,实训重点放在程
序设计开发的全过程上。
一、总要求
根据所选题目首先进行年算法分析,根据实现的功能进行数据分析,设计相应的数据结构,同时为贯
彻“程序设计=算法+数据结构”的思想,要求学生在课下完成流程图的设计,然后根据流程图写出实训代
码。
二、代码书写要求
为保证开发团队的协作和后期修改能有效进行,使学生遵照统一的排版风格、注释标准、命名规则及
编码诸原则进行C语言编程,特提出以下规范要求。
缩进:
1)程序块要采用缩进风格编写,缩进以4个空格(Space)键为单位,不使用"TAB键"。
2)函数体、结构体、循环体以及分支结构中的语句行都须采用缩进风格。
3)所有的if、while、for、do结构中的语句即使只有一行也须用括号括起来。
3)if、while、for、do语句单独占一行,左、右花括号也各占一行且不缩进。
例:
if(superHero==theTick)
{
printl("Spoon!");
}
间隔:
所有的标识符都必须被空白字符包围。
例如:
inttheTick=5;
if(theTick==5)
空行:代码段之间须以一个空行进行间隔;
空格的位置::.
1)在一个关键字和左括号“(”之间。注意:不要在函数名和左括号之间加空格;
2)在参数列表的每个逗号“,”之后;
3)二元操作符前后。注意:一元操作符前后都不加空格。例如:inta=10;a=a+1;a++;
4)for语句的每个表达式之间。例如:for(inti=0;i<20;i++)…。
代码行:
1)不允许把多个短语句写在一行中,即一行只写一条语句;
2)长语句、参数、表达式(超过80个ASCII字符)应分行书写,操作符放在新行之首,划分出的新
行要进行适当的缩进,使排版整齐,语句可读。
示例:
#=NO7_TO_STAT_PERM_COUNT_LEN
#002+STAT_SIZE_PER_FRAM;
#003act_task_table[STAT_TASK_CHECK_NUMBER+index].occupied
#004=stat_poi[index].occupied;
命名规则:
所有的标识符只能用字母(A-Z或a-z)和数字(0-9)。不得包含货币符号或其它非AS-CII字符。
1)变量的命名应尽可能采用有意义的名词,力求可顾名思义。
2)可以采用一个单词或多个单词的缩写作为名字,缩写单词的每个字母都要大写。
3)对于难以使用英文的情况,可以参考相关行业标准,比如使用国标。
4)采用约定俗成的****惯用法。
常见的****惯用法:
循环变量:i、j、k、m、n
长度:length
数量:count
位置:pos或position
下标或索引:i或index
设置/获取:set/get
大小:size
注释:
1)为确保程序易读性,注释语句不得小于全部代码行的30%。
2)说明性文件(、.inc文件、.def文件、)头部应进行注释,注
释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文
件的注释中还应有函数功能简要说明。
3)源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数
及其功能、修改日志等。
4)函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、
表)等。
5)边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要
删除。
6)注释的内容要清楚、明了,含义准确,防止注释二义性。
7)避免在注释中使用缩写,特别是非常用缩写。
8)注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,
不可放在下面,如放于上方则需与其上面的代码用空行隔开。
9)对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说
明其物理含义。变量、常量、宏的注释应放在其上方相邻位置或右方。
10)数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。
对结构中的每个域的注释放在此域的右方。:.
11)全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意
事项等的说明。
12)注释与所描述内容进行同样的缩排。
13)将注释与其上面的代码用空行隔开。
14)对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。
15)对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一个case处理,
必须在该case语句处理完、下一个case语句前加上明确的注释。
三、编码原则
1)注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。
2)避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的常量,不应
直接使用数字,必须用有意义的枚举或宏来代替。
3)去掉没必要的公共变量。
4)仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系。
5)明确公共变量与操作此公共变量的函数或过程的关系,如访问、修改及创建等。
6)当向公共变量传递数据时,要十分小心,防止赋予不合理的值或越界等现象发生。
7)防止局部变量与公共变量同名。
8)严禁使用未经初始化的变量。
9)对所调用函数的错误返回码要仔细、全面地处理。
10)明确函数功能,精确(而不是近似)地实现函数设计。
模块一:基础部分
第一部分c语言的基本认识
[实训目的及要求]通过本次实训内容,使学生对C语言程序有一个简单的认识,熟悉VC++
的运行环境,掌握C程序的执行方法,了解程序的结构和输出函数等。
程序1:
#include“”
main()
{
printf(“各位同学好!很高兴和大家一起学****C语言!\n");
}
运行结果:
各位同学好!很高兴和大家一起学****C语言!
其中,#include“”为一编译预处理命令,含义是文件包含,“”是一头文件,
标准输入和输出头文件,用来控制数据的输入或输出。main是主函数的函数名,表示这是一
个主函数。每一个C源程序都必须有,且只能有一个主函数(main函数)。printf的功能是把要
输出的内容送到显示器去显示,本质上也是一个函数,是一个由系统定义的标准函数。
程序2:
#include“”
main()
{
printf(“$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n”);:.
printf(“*ThisisaCprogram*\n");
printf(“$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n”);
}
运行结果:
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*ThisisaCprogram*
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
程序3:任给一半径,输出圆的周长.
#include<>/*include称为文件包含命令*/
#include<>/**/
main()
{
intr,l;/*定义两个整数变量r和l*/
printf("inputr:\n");/*输出提示信息*/
scanf(“%d”,&r);/*接收数据给变量r*/
l=2**r;/*进行数学运算把面积赋值给变量s*/
printf(“circleof%dis%d\n",r,l);/*输出变量r,l的值*/
}
实训题目
1、编一个小程序实现在屏幕上输出以下内容:
*********************************
*学生成绩管理系统*
*********************************
2、根据刚才的例题编写程序,通过键盘输入一个三角形的三边长,求三角形的面积(求一个
非负数算术平方根的函数为sqrt(x))。
第二部分c程序分析
[实训目的及要求]通过本次实训内容,使学生对C语言程序有一个系统的认识,并在此基础
上掌握三种基本数据类型、部分运算符号和常用函数的应用,体现在自己动手编写的小程序
中。
程序1:求三个整数的和。
#include“”/*文件包含命令*/
main()/*主函数*/
{floatf1,f2,f3,s;/*定义四个实型变量*/
printf(“inputthreefloats:”)/*显示提示信息*/
scanf(“%f%f%f”,&f1,&f2,&f3);/*接收三个整型变量*/
s=f1+f2+f3;/*求三个变量之和,存入变量s*/
printf(“sumoff1,f2,f3is%.2f”,s);/*输出求出的和*/
}
运行结果:
inputthreefloats:345
sumoff1,f2,
程序2:把输入的大写字母转换为小写字母。:.
#include“”/*文件包含命令*/
main()/*主函数*/
{charch1,ch2;/*定义两个字符型变量*/
printf(“inputanupperletter:”)/*显示提示信息*/
scanf(“%c”,&ch1);/*接收一个大写字母*/
ch2=ch1+32;/*把大写字母转换为小写字母*/
printf(“lowerofletter%cis%c”,ch1,ch2);/*输出*/
}
运行结果:
inputanupperletter:S
lowerofletterSiss
程序3:求一个四位整数的各个数据位。
#include“”/*文件包含命令*/
main()/*主函数*/
{intnum,bit1,bit2,bit3,bit4;/*定义四个实型变量*/
printf(“inputanumber:”)/*显示提示信息*/
scanf(“%d”,&num);/*接收一个整型数据*/
bit1=num%10;/*求个位数字*/
bit2=num/10%10;/*求十位数字*/
bit3=num/100%10;/*求百位数字*/
bit4=num/1000;/*求千位数字*/
printf(“%d个位:%d,十位:%d,百位:%d,千位:%d”,num,bit1,bit2,bit3,bit4);/*输出整数和各数
据位*/
}
运行结果:
inputanumber:2345
2345个位:5,十位:4,百位:3,千位:2
程序4:交换两个变量的值。
#include“”
main()
{inta,b,t;
printf(“inputtwonumbers:”)
scanf(“%d%d”,&a,&b);
printf(“a=%d,b=%d”,a,b);/*输出交换之前变量的值*/
t=a;a=b;b=t;/*交换处理*/
printf(“a=%d,b=%d”,a,b);/*输出交换之后变量的值*/
}
运行结果:
inputtwonumbers:3456
a=34,b=56
a=56,c=34
程序5:求一元二次方程的根。
#include“”
#include“”/*数学函数的头文件*/
main()
{:.
floata,b,c,disc,x1,x2,p,q;
scanf(“a=%f,b=%f,c=%f”,&a,&b,&c);
disc=b*b-4*a*c;
p=-b/(2*a);
q=sqrt(disc)/(2*a);
x1=p+q;
x2=p-q;
printf(“x1=%;x2=%\n”,x1,x2);
}
运行结果:
a=1,b=5,c=3
x1=-;x2=-
实训题目
1、编程求两个实数之差,保留两位小数。
2、编程把小写字母转换为大写字母。
3、编程把一个三位数倒序输出,如输入是123,输出为321。
第三部分结构化程序设计与算法认识
(分支结构程序设计)
[实训目的及要求]通过本次实训,掌握if语句的使用和switch多分支选择结构的实现,并能
熟练的进行应用。
程序1、任意输入一个年份,判断是否是闰年。闰年的条件是符合下面条件之一:
(1)能被4整除,但不能被100整除;
(2)能被4整除,又能被400整除。
算法思路:
(1)输入年份(如:2007);
(2)判断是否为闰年;
判断闰年的表达式:
条件一:
能被4整除:year%4==0
不能被100整除:year%100!=0
组合:(year%4==0&&year%100!=0)
条件二:
能被4整除:year%4==0
能被400整除:year%400==0
组合:(year%4==0&&year%400==0)
总条件式:(year%4==0&&year%100!=0)||(year%4==0&&year%400==0)
可改写为:((year%4==0)&&(year%100!=0))||(year%400==0)
(3)若是,输出“2007是闰年”信息;若不是,则输出“2007不是闰年”。
#include“”
main()
{intyear;
printf(“请输入年份:”);
scanf(“%d”,&year);:.
if((year%4==0)&&(year%100!=0))||(year%400==0)
printf(“%d是闰年\n”,year);
elseprintf(“%d不是闰年\n”,year);
}
程序2、输入三角形的三边长,求三角形的面积。
算法思路:
(1)通过键盘输入三边长的值a,b,c;
(2)判断是否构成三角形;
条件式:(a+b>c)&&(b+c>a)&&(a+c>b)
(3)若能构成,计算三角形的面积并输出;若不能构成则输出错误提示信息。
#include“”
#include“”
main()
{floata,b,c,l,s;
printf(“请输入三角形的三个边长:”);
scanf(“%f%f%f”,&a,&b,&c);
if((a+b>c)&&(b+c>a)&&(a+c>b))
{l=(a+b+c)/2;
s=sqrt(l*(l-a)*(l-b)*(l-c))
printf(“面积S=%.2f”,s);
}
elseprintf(“构不成三角形!\n”);
}
程序3、任意输入一个成绩,给出评语:
90-100:优秀;80-89:良好;60-79:及格;0-59:不及格。
算法思路:
(1)输入一个成绩数,存入变量score;
(2)判断score在哪个分数段中;
(3)根据所在分数段输出对应的评语。
#include“”
main()
{
intscore;
printf(“inputyourscore:”);
scanf(“%d”,&score);
if(score>100||score<0)printf(“inputerror.\n”);
elseif(score>=90)printf(“优秀.\n”);
elseif(score>=80)printf(“良好.\n”);
elseif(score>=60)printf(“及格.\n”);
elseprintf(“不及格.\n”);
}
实训题目
1、用if语句实现菜单功能。
*************************************
*1---成绩输入*:.
*2—成绩插入*
*3---成绩查询*
*4---成绩排序*
*5---成绩删除*
*6---成绩输出*
*0---退出*
*************************************
请输入你的选择(0---6):
2、任意输入三个数据按从大到小的顺序输出。
3、编程实现:读入两个整型数据及一个运算符(+-*/),计算表达式的值。
4、用switch语句实现菜单功能。
5、用switch语句编程实现:读入两个整型数据及一个运算符(+-*/),计算表达式的值。
6、用switch开关语句实现猜词游戏。
第三部分结构化程序设计与算法认识
(C循环结构程序设计)
[实训目的及要求]通过本次实训,掌握循环语句for、while和do-while的使用和break和continue
的功能,并能熟练的进行应用。
程序1、编程求1+2+3+···+100的和。
算法思路:
1、用变量sum作为累加器,存放和;
2、用变量i表示累加变量,分别存放1,2,3,…,100;
3、当i≤100时,执行sum=sum+i;(等价于sum+=i;);
4、当i的值超过100的时候,不再执行sum=sum+i;输出sum的值。
方法一(while结构)
#include“”
main()
{
intsum=0,i=1;/*变量初始化*/
while(i<=100)
{
sum=sum+i;
i++;
}
printf("sumis%d\n",sum);
}
方法二(do-while结构)
#include“”:.
main()
{
intsum=0,i=0;
do
{
sum=sum+i;
i++;
}while(i<=100)
printf("sumis%d\n",sum);
}
方法三(for结构)
#include“”
{
inti,sum=0;
for(i=0;i<=100;i++)
sum=sum+i;
printf(“sum=%d\n”,sum);
}
程序2、求1到100之间的奇数之和,偶数之积。
思路:
1、用变量sum存放奇数之和,用变量mul存放和;
2、用变量i表示累加变量,分别存放1,2,3,…,100;
3、当i≤100时,若i是奇数执行sum=sum+i;
是偶数执行mul=mul*i;
4、当i的值超过100的时候,不再执行求和和求积操作;输出sum和mul的值。
方法一(while结构)
#include“”
main()
{doublemul=1;/*双精度类型*/
inti=1,sum=0;
while(i<=100)
{
if(i%2!=0)sum=sum+i;
elsemul=mul*i;
i++;
}
printf("sum=%d\n",sum);
printf(“mul=%e\n”,mul);/*科学计数法输出*/
}
方法二(for结构)
#include“”
main()
{
inti,sum=0;
doublemul=1;
for(i=1;i<=100;i++):.
if(i%2==1)sum=sum+i;
elsemul=mul*i;
printf(“sum=%d,mul=%e\n”,sum,mul);
}
程序3、把输入的一行字符原样输出,若是大写字母需要转换成小写的。
思路:
1、通过键盘接收一个字符;
2、判断该字符是否为回车符;是转第4步,不是转到第3步;
3、判断接收的字符是否为大写字母,是转换为小写字母并输出,不是则直接输出,程序转回
到第1步;
4、程序结束。
#include“”
main()
{
charch;
while((ch=getchar())!=‘\n’)
{
if(ch>=‘A’&&ch<=‘Z’)
ch=ch+32;
putchar(ch);
}
}
程序4、编写程序求20+21+22+23+···+263的和。
算法思路:
变量设定:
s:存放累加和;
t:存放每项的值;
i:为循环次数;
算法分析:
1、循环累加,用s=s+t;或s+=t;
2、每项可递推计算,t=t*2;或t*=2;
3、初值s=1,t=1,循环63次。
#include“”
main()
{
inti;
floats=1,t=1;
for(i=1;i<=63;i++)
{
t*=2;
s+=t;
}
printf(“s=%e\n”,s);
}
程序5、从键盘上任意输入一个正整数,判断其是否为素数。
素数:除了1和它本身之外没有其他因子的数。换句话说只要有因子(除了1和它本身之外):.
则该数一定不是素数
算法思路:
1、从键盘输入一正整数,存入变量m中;
2、测定m是否有约数,利用变量i=2-m-1,逐个验证m%i是否等于0;
3、如果m%i==0,说明m有约数,不符合素数的条件,后续的i不必验证,退出验证
过程;
4、根据退出的条件判定m是否有约数,若非正常退出说明m有约数i,否则没有约
数,即为素数。
#include“”
main()
{
intm,i;
scanf("%d",&m);
for(i=2;i<=m-1;i++)
if(m%i==0)break;
if(i>m-1)printf("%disaprime",m);
elseprintf("%disnotaprime",m);
}
实训题目
1、任意输入两个整数,求它们的最大公约数。
2、打印形状为直角三角形的乘法口诀。
3、输入一个包含有三个数字字符的字符串,把该字符串转换为整形数据输出。(如:输入字
符串123,则输出整形数据123)
第三部分结构化程序设计与算法认识
(结构化程序设计与算法基本知识)
[实训目的及要求]简单掌握算法的概念,并在编程中进行具体算法的应用。
穷举法:
程序1:找出100之内的所有素数并输出。
算法分析:
这是一个穷举问题,通过对2-100之内的数据逐一进行验证是否是素数,从而解决
该问题。
1、设定变量n:2-100;
2、判断n是否为素数,是则输出当前的n,否则不输出;
3、更新n值,返回第1步;
4、以上3步重复执行,直到n的值超过100。
#include“”
main()
{
intm,i;
for(m=2;m<=100;m++)
{for(i=2;i<=m-1;i++)
if(m%i==0)break;
if(i>m-1)printf("%5d",m);:.
}
}
程序2:搬砖问题:36块砖,36人搬,男搬4,女搬3,两个小孩抬1砖,要求一次搬完,
问男、女和小孩各若干?
算法分析:
这是一个多重穷举问题,根据题意,可知:
1、男人(men)的可能取值范围为:0-9;
2、女人(women)的可能取值范围为:0-12;
3、孩子(children)的可能取值范围为:0-36;
要求这三个数的组合符合以下条件:
men*4+women*3+children/2==36
要求children为偶数。
采用穷举法,首先考虑men分别取0-8中的各值时,找符合题意的women和children,得到:
for(men=0;men<=9;men++)
找符合条件的women和children;
进一步细化:
for(women=0;women<=12;women++)
找符合条件的children;
#include“”