C语言程序设计实训指导书--逐步深入学习参考_第1页
C语言程序设计实训指导书--逐步深入学习参考_第2页
C语言程序设计实训指导书--逐步深入学习参考_第3页
C语言程序设计实训指导书--逐步深入学习参考_第4页
C语言程序设计实训指导书--逐步深入学习参考_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、c语言程序设计实训指导书实训要求及说明c语言程序设计的实训是学生重要的实习环节。上机实训不仅要求学生掌握c语言程序设计的基本知识,更重要的是培养学生掌握程序设计开发的基本素质、思维方法和技能,为学生综合素质的培养打下坚实基础。实训的形式为教师制定出难易适中的设计题目,学生通过分组讨论进行设计,实训重点放在程序设计开发的全过程上。一、总要求根据所选题目首先进行年算法分析,根据实现的功能进行数据分析,设计相应的数据结构,同时为贯彻“程序设计=算法+数据结构”的思想,要求学生在课下完成流程图的设计,然后根据流程图写出实训代码。模块一:基础部分第一部分c语言的基本认识实训目的及要求 通过本次实训内容,

2、使学生对c语言程序有一个简单的认识,熟悉vc+6.0的运行环境,掌握c程序的执行方法,了解程序的结构和输出函数等。程序1:#include “stdio.h”main( ) printf(“各位同学好!很高兴和大家一起学习c语言!n);运行结果:各位同学好!很高兴和大家一起学习c语言! 其中,#include “stdio.h”为一编译预处理命令,含义是文件包含,“stdio.h”是一头文件,标准输入和输出头文件,用来控制数据的输入或输出。main是主函数的函数名,表示这是一个主函数。每一个c源程序都必须有,且只能有一个主函数(main函数)。printf的功能是把要输出的内容送到显示器去显示

3、,本质上也是一个函数,是一个由系统定义的标准函数。程序2:#include “stdio.h”main( ) printf(“$n”);printf(“* this is a c program *n);printf(“$n”);运行结果: $* this is a c program *$程序3:任给一半径,输出圆的周长.#include /* include称为文件包含命令*/#include /*扩展名为.h的文件称为头文件*/main() int r,l; /*定义两个整数变量r和l*/ printf(input r:n); /*输出提示信息*/ scanf(“%d”,&r); /*接

4、收数据给变量r*/ l=2*3.14*r; /*进行数学运算把面积赋值给变量s*/ printf(“circle of %d is %dn,r,l); /*输出变量r,l的值*/ 实训题目1、编一个小程序实现在屏幕上输出以下内容: * * 学生成绩管理系统 * *2、根据刚才的例题编写程序,通过键盘输入一个三角形的三边长,求三角形的面积(求一个非负数算术平方根的函数为sqrt(x) )。第二部分c程序分析实训目的及要求 通过本次实训内容,使学生对c语言程序有一个系统的认识,并在此基础上掌握三种基本数据类型、部分运算符号和常用函数的应用,体现在自己动手编写的小程序中。程序1:求三个整数的和。#i

5、nclude “stdio.h” /*文件包含命令*/main( ) /*主函数*/ float f1,f2,f3,s; /*定义四个实型变量*/ printf(“input three floats:”) /*显示提示信息*/ scanf(“%f%f%f”,&f1,&f2,&f3); /*接收三个整型变量*/ s=f1+f2+f3; /*求三个变量之和,存入变量s*/ printf(“sum of f1,f2,f3 is %.2f”,s); /*输出求出的和*/运行结果: input three floats:3 4 5 sum of f1,f2,f3 is 6.00程序2:把输入的大写字母

6、转换为小写字母。#include “stdio.h” /*文件包含命令*/main( ) /*主函数*/ char ch1,ch2; /*定义两个字符型变量*/ printf(“input an upper letter:”) /*显示提示信息*/ scanf(“%c”,&ch1); /*接收一个大写字母*/ ch2=ch1+32; /*把大写字母转换为小写字母*/ printf(“ lower of letter %c is %c”,ch1,ch2);/*输出*/运行结果: input an upper letter:s lower of letter s is s程序3:求一个四位整数的各

7、个数据位。#include “stdio.h” /*文件包含命令*/main( ) /*主函数*/ int num,bit1,bit2,bit3,bit4; /*定义四个实型变量*/ printf(“input a number:”) /*显示提示信息*/ scanf(“%d”,&num); /*接收一个整型数据*/ bit1=num%10; /*求个位数字*/ bit2=num/10%10; /*求十位数字*/ bit3=num/100%10; /*求百位数字*/ bit4=num/1000 ; /*求千位数字*/ printf(“%d个位:%d,十位:%d,百位:%d,千位:%d”,num

8、,bit1,bit2,bit3,bit4); /*输出整数和各数据位*/运行结果: input a number:2345 2345个位:5,十位:4,百位:3,千位:2程序4:交换两个变量的值。#include “stdio.h”main( ) int a,b,t; printf(“input two numbers:”) 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); /*输出交换之后变量的值*/运行结果: input tw

9、o numbers:34 56 a=34,b=56 a=56,c=34程序5:求一元二次方程的根。#include “stdio.h” # include “math.h” /*数学函数的头文件*/ main( ) float a,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=%5.2f; x2=%5.2fn”,x1,x2); 运行结果: a=1,b=5,c=3 x1=-0.70;

10、x2=-4.30实训题目1、编程求两个实数之差,保留两位小数。2、编程把小写字母转换为大写字母。3、编程把一个三位数倒序输出,如输入是123,输出为321。第三部分 结构化程序设计与算法认识(分支结构程序设计)实训目的及要求通过本次实训,掌握if语句的使用和switch多分支选择结构的实现,并能熟练的进行应用。程序1、任意输入一个年份,判断是否是闰年。闰年的条件是符合下面条件之一:(1)能被4整除,但不能被100整除;(2)能被4整除,又能被400整除。算法思路:(1)输入年份(如:2007);(2)判断是否为闰年;判断闰年的表达式:条件一:能被4整除:year%4= =0不能被100整除:y

11、ear%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 “stdio.h”main()int year;printf(“请输入年份:”); s

12、canf(“%d”,&year);if(year%4= =0) & (year%100!=0) | (year%400=0) printf(“%d 是闰年n”,year);else printf(“%d 不是闰年n”,year);程序2、输入三角形的三边长,求三角形的面积。算法思路:(1)通过键盘输入三边长的值a,b,c;(2)判断是否构成三角形; 条件式: (a+bc)&(b+ca)&(a+cb)(3)若能构成,计算三角形的面积并输出;若不能构成则输出错误提示信息。#include “stdio.h”#include “math.h”main()float a,b,c,l,s;printf(

13、“请输入三角形的三个边长:”); scanf(“%f%f%f”,&a,&b,&c);if((a+bc)&(b+ca)&(a+cb)l=(a+b+c)/2; s=sqrt(l*(l-a)*(l-b)*(l-c)printf(“面积s=%.2f”,s);else printf(“构不成三角形!n”);程序3、任意输入一个成绩,给出评语: 90-100:优秀; 80-89:良好; 60-79:及格; 0-59:不及格。算法思路:(1)输入一个成绩数,存入变量score;(2)判断score在哪个分数段中;(3)根据所在分数段输出对应的评语。#include “stdio.h”main() int s

14、core; printf(“input your score:”); scanf(“%d”,&score); if(score100|score=90) printf(“优秀.n”); else if(score=80) printf(“良好.n”); else if(score=60) printf(“及格.n”); else printf(“不及格.n”); 实训题目1、 用if语句实现菜单功能。* 1-成绩输入 * 2成绩插入 * * 3-成绩查询 * 4-成绩排序 * * 5-成绩删除 * * 6-成绩输出 * 0-退出 *请输入你的选择(0-6): 2、任意输入三个数据按从大到小的顺

15、序输出。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

16、100时,执行sum=sum+i;(等价于sum+=i;);4、当i的值超过100的时候, 不再执行sum=sum+i; 输出sum的值。方法一(while结构)#include “stdio.h”main( ) int sum=0, i=1; /*变量初始化*/ while (i=100) sum=sum+i; i+; printf(sum is %dn,sum); 方法二(do-while结构)#include “stdio.h”main( ) int sum=0, i=0; do sum=sum+i; i+; while (i=100) printf(sum is %dn,sum); 方

17、法三(for结构)#include “stdio.h” int i,sum=0; for(i=0;i=100;i+) sum=sum+i; printf(“sum=%dn”,sum);程序2、求1到100之间的奇数之和,偶数之积 。思路:1、用变量sum存放奇数之和,用变量mul存放和;2、用变量i表示累加变量,分别存放1,2,3,100;3、当i100时,若i是奇数执行sum=sum+i; 是偶数执行mul=mul*i;4、当i的值超过100的时候,不再执行求和和求积操作;输出sum和mul的值。方法一(while结构)#include “stdio.h” main( ) double mu

18、l=1; /*双精度类型*/ int i=1,sum=0; while (i=100) if (i%2!=0) sum=sum+i; else mul=mul*i; i+; printf(sum=%dn,sum); printf(“mul=%en”,mul); /*科学计数法输出*/ 方法二(for 结构)#include “stdio.h”main( ) int i,sum=0; double mul=1; for(i=1;i=a&ch=z) ch=ch+32; putchar(ch); 程序4、编写程序求 20+21+22+2 3+263 的和 。算法思路:变量设定: s:存放累加和; t

19、:存放每项的值; i:为循环次数;算法分析: 1、循环累加,用 s=s+t; 或 s+=t; 2、每项可递推计算, t=t*2; 或 t*=2; 3、初值 s=1,t=1,循环63次。#include “stdio.h”main( ) int i; float s=1,t=1; for (i=1;i=63;i+) t*=2; s+=t; printf(“s=%en”,s); 程序5、从键盘上任意输入一个正整数,判断其是否为素数。素数:除了1和它本身之外没有其他因子的数。换句话说只要有因子(除了1和它本身之外)则该数一定不是素数算法思路:1、 从键盘输入一正整数,存入变量m中;2、 测定m是否有

20、约数,利用变量i=2-m-1,逐个验证m%i是否等于0;3、 如果m%i=0,说明m有约数,不符合素数的条件,后续的i不必验证,退出验证过程;4、 根据退出的条件判定m是否有约数,若非正常退出说明m有约数i,否则没有约数,即为素数。#include “stdio.h”main( ) int m,i; scanf(%d,&m); for(i=2;im-1) printf(%d is a prime,m); else printf(%d is not a prime,m);实训题目1、任意输入两个整数,求它们的最大公约数。2、打印形状为直角三角形的乘法口诀。3、输入一个包含有三个数字字符的字符串,

21、把该字符串转换为整形数据输出。(如:输入字符串123,则输出整形数据123)第三部分 结构化程序设计与算法认识(结构化程序设计与算法基本知识)实训目的及要求简单掌握算法的概念,并在编程中进行具体算法的应用。穷举法:程序1:找出100之内的所有素数并输出。算法分析: 这是一个穷举问题,通过对2-100之内的数据逐一进行验证是否是素数,从而解决该问题。1、设定变量n:2-100;2、判断n是否为素数,是则输出当前的n,否则不输出;3、更新n值,返回第1步;4、以上3步重复执行,直到n的值超过100。#include “stdio.h”main( ) int m,i;for(m=2;m=100;m+

22、) for(i=2;im-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;m

23、en=9;men+)找符合条件的women和children;进一步细化:for(women=0;women=12;women+)找符合条件的children;#include “stdio.h”main() int men,women,children; men=0; while(men=8) women=0; while(women=11) children=36-men-women; if(men*4+women*3+children/2= =36)&children%2= =0) printf(“men=%d,women=%d,children=%dn”,men,women,child

24、ren); women+; men+; 程序3:要登上n阶楼梯,每一步允许跨1阶或2阶,问共有多少种登楼梯的方法?算法分析: 设每步1阶走了m1步,每步2阶走了m2步,则有方程: m1+2*m2=n能够满足上述方程式的m1和m2的一对组合就为一种方法,所有满足该方程式的组合数就是方法总数。#include “stdio.h”main() int m1,m2,count=0,n; for(m1=0;m=n;m1+) for(m2=0;m2=n/2;m2+) if (m1+2*m2= =n) count+; printf(“count=%dn”,count);程序4:计算和统计旅客运费程序 。由键

25、盘输入旅客行李重量(w),按公式 :若( w50kg)f=1.5*50 + 2.8*(w-50) ( w50kg ) 计算运费,要求: (1)打印每位旅客的顺序号,行李重量,应付运费 ; (2)假定每天最多办理100人的行李托运手续或当w0时循环结束, 下班时打印出全天的运费总收入和办理的总人数 。思路分析:(1) 输入行李重量(w);若w=0,转(5) (2) 计算运费(f); (3) 确定顺序号(num); (4) 打印 num , w , f;若num0&num100 ) if (w=50) f=1.5*w; else f=1.5*50+2.8*(w-50); num+; printf

26、( %d,%6.0f,%8.2fn,num,w,f); total+=f; scanf (%f,&w); printf (customers=%d totalincome=%10.2fn,num,total);方法二(do-while结构)#include “stdio.h”main( ) int num=0; float w,f,total=0; do scanf(%f ,&w); if (w=0) break; if (w=50) f=1.5*w; else f=1.5*50+2.8*(w-50); num+; printf ( %d %6.0f %8.2fn,num,w,f); tota

27、l+=f; while (num0&num=100;num+) if (w=50) f=1.5*w; else f=1.5*50+2.8*(w-50); printf ( %d %6.0f %8.2fn,num,w,f); total+=f; scanf(%f,&w); printf (customers=%d totalincome=%10.2fn,num,total); 实训题目1、 任意输入一行字符,分别统计字母、数字、空格和其它字符的个数。2、打印1000之内的所有完数。一个数如果正好等于它的因子之和,这个数就称之为完数。3、实现菜单功能,当输入为“退出”的控制时结束 。* 1-inp

28、ut * 2-search * 3-sort * 4-delete * 0-exit *please input your choice(0-4):); 4、编程实现10道+、-、*、/的运算。第四部分 数据类型构造与模块化程序设计(数组的构造与应用)实训目的及要求 数组是一种构造类型,在解决问题中使用非常普遍,通过本次实训内容,使学生对数组类型有一个系统的认识,并能灵活的在具体问题中进行应用。程序1:一个班有30个同学,通过键盘输入成绩,并打印输出,每行输出10个同学的成绩。算法分析:(1)定义一个数组用来存放30个成绩数据, int score30;(2)用循环结构实现成绩输入; for(

29、i=0;i30;i+) scanf(“%d”,&scorei);(3)用循环结构实现成绩输出,并控制换行; for(i=0;i30;i+) printf(“%5d”,scorei); if(i+1)%10=0) printf(“n”);#include “stdio.h”main() int i; int score30; /*成绩数组的定义*/ for(i=0;i30;i+) /*输入成绩*/ scanf(“%d”,&scorei); for(i=0;i30;i+) /*输出成绩*/ printf(“%5d”,scorei); if(i+1)%10=0) printf(“n”);/*输出10

30、个数据换行*/程序2:一个班有n个同学,通过键盘输入成绩,并进行以下处理:(1)求平均成绩;(数组求和)算法分析:1.输入n的值及n个成绩;2.对成绩进行汇总求和,存入变量s中;3.求平均数:average=s/n;4.输出平均分average。#include “stdio.h”main() int n,i,s=0;int score30;float average;printf(“请输入学生的人数:”);scanf(“%d”,&n);printf(“请输入%d学生的成绩:n”,n);for(i=0;in;i+) scanf(“%d”,&scorei); s=s+scorei; averag

31、e=(float)s/n; printf(“%.1f”,average); (2)添加m个同学的成绩;(数组添加) 算法分析:1.当前成绩个数设为n个;2.输入m的值;3.从第n个元素开始输入m个成绩;4.更新数组元素的个数: n=m+n;5.输出添加完后的成绩。(3)把不及格同学的成绩更新为60分;(数组更新) 算法分析:1.当前成绩个数设为n个;2.从第0个元素开始逐个元素进行测试:if(scoreimax) max=scorei;if(scoreimin) min=scorei;直到最后一个元素;4.输出max和min。(5)对成绩进行排序。(数组排序)两种基本算法:1.起泡法:将相邻两

32、个数比较,小的调到前面。 2.选择法:将前面的数和后面的所有数依次进行比较,记住小数的下标,当比较完一遍,用前面的数和该小数进行交换。起泡法排序:#include “stdio.h”main()int score10, i,j,k,n=10; printf(“ 输入成绩:n”); for(i=0;in;i+) scanf(“%d”,&scorei); for(i=0;in-1;i+) for(j=0;j scorej+1 ) k= scorej; scorej = scorej+1; scorej+1 =k; for(i=0;in;i+) printf(%5d, scorei ); print

33、f(n); 选择法排序:#include “stdio.h”main() int i,j,k,m,score10,n=10; for(i=0;in;i+) scanf(“%d”,&scorei); for(i=0;in-1;i+) k=i; for(j=i+1;j scorej) k=j; m=scorei; scorei=scorek; scorek=m; for(i=0;in;i+) printf(%5d, scorei); printf(n); 程序3:对已经排好序的成绩数组进行以下操作:把一个新成绩按照顺序插入到数组的合适位置。(提高)。算法分析:1. 从键盘接收一个数据,存入变量m;

34、2. 根据变量m的大小进行定位,其对应下标为k;3. 把score9到scorek的元素依次后移,为新数据腾出空间;4. 把m存入下标为k的空间中:scorek=m;5. 输出处理完后的新数组。程序4:编程实现求一个3行4列整型数组的平均数。算法分析:1.定义一个二维数组a34;2.为数组赋值;3.累加元素的和,存入变量s中;4.求平均数ave=s/12;5.输出平均数ave。#include “stdio.h”main() int a34,i,j,s=0; for(i=0;i3;i+) for(j=0;j4;j+) scanf(“%d”,&aij); for(i=0;i3;i+) for(j

35、=0;j4;j+) s+=aij; ave=s/12; printf(“average=%5dn”,ave);程序4:编程实现把一个三行三列的二维数组转置输出。算法分析:1.定义一个二维数组a33;2.为数组赋值;3.交换aij与aji的值;4.输出交换后的数组a。#include “stdio.h”main() int a33,i,j,s=0; for(i=0;i3;i+) for(j=0;j3;j+) scanf(“%d”,&aij); for(i=0;i3;i+) for(j=0;ji;j+) t=aij;aij=aji;aji=t; for(i=0;i3;i+) for(j=0;j3;

36、j+) printf(“%5dn”,aij); printf(“n”);程序5:某学习小组有4名同学,学习了5门课程,求每个同学的平均分和每门课程的平均分。算法分析:1.定义一个二维数组score56(最后一行和最后一列存放平均数);2.为数组赋值;3.求行平均数,把平均数存入scorei5中(i=0-3);4.求列平均数,把平均数存入score4j中(j=0-4);5.输出整个数组。程序6:从键盘输入一行字符,要求删除第一次出现的某个字符(要删除的字符也由键盘输入)。算法分析:1.定义存放字符串的字符数组str和存放单个字符的字符变量ch;2.输入字符串str和要删除的字符ch;3.对要删除

37、的ch定位;4.从该位置开始,开始把后续字符依次前移;5.检查字符串的结束标记。程序7:编一程序,将两个字符串连接起来。算法分析:1.定位:第一个字符串的0的位置;2.从0开始把第二个字符串的字符依次放入第一个字符串的后端,直至第二个字符串的0;3.检验第一个字符串的末端是否有结束符0,若没有,修正所得的字符串,在它的末端加上0。#include “stdio.h”main( ) char s180,s280; int i=0,j=0; gets(s1); gets(s2); while(s1i!=0) i+; while(s2j!=0) s1i=s2j;i+;j+; s1i=0; puts(

38、s1); 程序8:有三个字符串(长度不超过20),要求找出其中最大者。算法分析:1.输入三个字符串,存入二维字符数组中;2.先取前两个字符串比较,找出大的存入string 数组中;3.用string和后续的依次进行比较,当出现比string的时更新string的值;4.输出string中的字符串。#include stdio.h main( ) char string20,str320; int i; for(i=0;i0) strcpy(string,str0); else strcpy(string,str1); if (strcmp(str2,string)0) strcpy(strin

39、g,str2); printf(nthe largest string is:n%sn,string); 实训题目1、从键盘输入20个整型数据,统计其中正数的个数,并计算它们的求和。2、把1000之内的素数存放在数组中,并输出素数的个数和各个素数。3、在第一题的基础上找出最大数和最小数并输出对应的下标。4、任意输入10个数据,对其进行排序(用选择法小到大)。5、在第4题的基础上,从键盘上接收一个数据,如果该数不存在,把该数按照顺序放在数组中,若存在则把和该数相等的元素删除。6、某学习小组有4名同学,学习了5门课程,编程求出最高分和最低分及其对应的行号和列号。7、输入一行字符,统计字母、数字、空格和其它字符的个数。第四部分 数据类型构造与模块化程序设计(函数的应用)实训目的及要求 函数体现了程序设计的模块化思想,可以把复杂的问题简单化,并可实现代码共享。通过本次实训内容,使学生对函数的定义及应用能系统认识,并能熟练地在编程中体现出来。程序1:利用自定义函数输出两个数中的大数。#include “stdio.h”int max(int x,int y)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论