最新C语言集中实训指导书.doc

上传人:1595****071 文档编号:34721686 上传时间:2022-08-18 格式:DOC 页数:28 大小:1,009KB
返回 下载 相关 举报
最新C语言集中实训指导书.doc_第1页
第1页 / 共28页
最新C语言集中实训指导书.doc_第2页
第2页 / 共28页
点击查看更多>>
资源描述

《最新C语言集中实训指导书.doc》由会员分享,可在线阅读,更多相关《最新C语言集中实训指导书.doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateC语言集中实训指导书Turbo C 上机操作重庆工贸职业技术学院C语言集中实训指导书计算机应用技术教研室目录实训内容31 C语言的基础知识32 简单的C程序设计33 选择结构程序设计34 循环结构程序设计35 一维数组36 二维数组37 函 数38 文 件39 综合练习-第一章 实训的总目的和要求程序设计是实践性很强的过程,任何程序最终都必须在计算机上运行,以检验程序

2、的正确与否。因此在学习完C程序设计后,一定要重视上机实践环节,安排一周的实习时间,即独立编写出程序,独立上机调试程序。通过上机实习可以加深理解C语言的有关概念,以巩固理论知识,另一方面也可以培养程序调试的能力与技巧。上机实习的目的,绝不仅是为了验证教材和讲课的内容或者验证自己所编的程序正确与否。应该说,学习程序设计,上机实习的目的为:(1) 加深对讲授内容的理解,尤其是一些语法规则,光靠课堂讲授和很少学时的实验。既枯燥又难以彻底消化吸收,但它们都很重要。通过实习,就能熟练地掌握。(2) 进一步熟悉所用的计算机系统的操作方法,也就是熟悉C语言程序的开发环境。一个程序必须在一定的外部环境下才能运行

3、,所谓“环境”,就是指所用的计算机系统的硬件和软件条件。使用者应该了解为了运行一个C程序,需要哪些必要的外部条件(例如硬件配置和软件配置),可以利用哪些系统的功能来帮助自己开发程序。(3) 熟练地掌握上机调试程序的方法。对程序设计来说,要求会编程序并上机调试通过。因此调试程序本身是程序设计课程的一个重要的内容和基本要求,应充分地重视。调试程序的经验固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来积累,而且有些经验是只能“会意”难以“言传”。因此,在实习中千万不要在程序通过后就认为万事大吉、完成任务了,而应当在已通过的程序基础上作一些改动(例如修改一些参数、增加程序一些功能、改变输入

4、数据的方法等),再进行编译、连接和运行。甚至于“自设障碍”,即把正确的程序改为有错的(例如用scanf函数函数输入变量时,漏写“&”符号,使数组下标趆界,使整数溢出等),观察和分析所出现的情况。这样的学习才会真正有收获,是灵活主动的学习而不是呆板被动的学习,也才能达到实习的目的。C语言程序的编译和运行按照C语言语法规则而编写的C程序称为源程序。源程序由字母、数字及其它符号等构成,在计算机内部用相应的ASCII码表示,并保存在扩展名为“C”的文件中。源程序是无法直接被计算机运行的,因为计算机的CPU只能执行二进制的机器指令。这就需要把ASCII码的源程序先翻译成机器指令,然后计算机的CPU才能运

5、行翻译好的程序。源程序翻译过程由两个步骤实现:编译与连接。首先对源程序进行编译处理,即把每一条语句用若干条机器指令来实现,以生成由机器指令组成的目标程序。但目标程序还不能马上交计算机直接运行,因为在源程序中,输入、输出以及常用函数运算并不是用户自己编写的,而直接调用系统函数库中的库函数。因此,必须把“库函数”的处理过程连接到经编译生成的目标程序中,生成可执行程序,并经机器指令的地址重定位,便可由计算机运行,最终得到结果。C语言程序的调试、运行步骤可以用图1表示:目标程序.obj可执行程序.exe结 果源程序.c编 译连 接运 行编 辑开 始图1 C语言程序的调试、运行步骤 图1中,虚线表示当某

6、一步骤出现错误时的修改路线。运行时,无论是出现编译错误、连接错误,还是运行结果不对(源程序中有语法错误或逻辑错误),都需要修改源程序,并对它重新编译、连接和运行,直至将程序调试正确为止。第三章 实训内容32 简单的C程序设计【目的与要求】 1理解C语言程序的顺序结构 2掌握常用的C语言语句,熟练应用赋值、输入、输出语句。【上机内容】【一般实例】 【例1】按格式要求输入/输出数据#include stdio.hmain() int a,b;flost x,y;char c1,c2;scanf(“a=%d,b=%d”,&a,&b);scanf(“%f, %e”,&x,&y);scanf(“&c &

7、c”,&c1,&c2);printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%cn”,a,b,x,y,c1,c2);运行该程序,必须按如下方式在键盘上输入数据a=3,b=7 8.5,71.82 a A 请同学们写出输出结果【例2】输入三角形三边长,求三角形面积。#include “math.h”main()float a,b,c,s,area;scanf(“%f ,%f,%f”,&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);printf(“area=%f”,area);【例3】已知圆半径,圆柱高,求圆周长,

8、圆柱体积。main()float r,h,l,v,pi;pi=3.1415926;scanf(“%f,%f”,&r,&h);l=2*pi*r;v=pi*r*r*h;printf(“圆周长为:%6.2fn”,l);printf(“%圆柱体积为:6.2f”,v);【例4】输入一个摄氏温度,要求输出华氏温度。公式为f=5/9*c+32.main()float c,f;scanf(“%f”,&c);f=5.0/9*c+32;printf(“%5.2fn”,c); 【作业】1. 已知圆半径r=1.5,圆柱高h=3, 求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。2. 输入一个华氏温度,要求输出摄氏温

9、度。公式为c=5/9*(f-32).33 选择结构程序设计【目的与要求】 1了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”); 2学会正确使用逻辑运算符和逻辑表达式; 3 熟练掌握if语句和switch语句。【上机内容】【一般示例】【例1】 已知三个数a,b,c,找出最大值放于max中。分析:由已知可得在变量定义时定义四个变量a,b,c和max,a,b,c是任意输入的三个数,max是用来存放结果最大值的。第一次比较a和b,把大数存入max中,因a,b都可能是大值,所以用if语句中ifelse 形式。第二次比较max和c,把最大数存入max中,用if语句的第一种形式if形式。Max即为

10、a,b,c中的最大值。include stdio.hmain() int a,b,c,max; /*定义四个整型变量*/scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);if (a=b)max=a; /*a=b*/else max=b; /*amax) max=c; /*c是最大值*/printf(max=%d,max); 若输入下列数据,分析程序的执行顺序并写出运行结果(1)a=1,b=2,c=3 (2)a=2,b=1,c=3 (3)a=3,b=2,c=1 (4)a=3,b=1,c=2 (5)a=3,b=3,c=2 (6)a=2,b=1,c=2 【例2】输入某学生的成绩,经处

11、理后给出学生的等级,等级分类如下: 90分以上(包括90): A 80至90分(包括80):B 70至80分(包括70):C 60至70分(包括60):D 60分以下: E方法一:(用if嵌套)分析:由题意知如果某学生成绩在90分以上,等级为A;否则,如果成绩大于80分,等级为B;否则,如果成绩大于70分,等级为C;否则,如果成绩大于60分为D;否则,如果成绩小于60分,等级为E;但当我们输入成绩时也可能输错,出现小于0或大于100,这时也要做处理,输出出错信息。因此,再用if嵌套前,应先判断输入的成绩是否在0100之间。#includestdio.hmain() int score; cha

12、r grade; printf(nplease input a student score:); scanf(%f,&score); if(score100|score=90) grade=A; else if(score=80) grade=B; else if(score=70) grade=C; else if(score=60) grade=D; else grade=E; printf(nthe student grade:%c,grade); 输入测试数据,调试程序。测试数据要覆盖所有路径,注意临界值,例如此题中得100分,60分,0分以及小于0和大于100的数据。 方法二:用sw

13、itch语句分析:switch 语句是用于处理多分支的语句。注意,case后的表达式必须是一个常量表达式,所以在以用switch语句之前,必须把0100之间的成绩分别化成相关的常量。所有A(除100以外),B,C,D类的成绩的共同特点是十位数相同,此外都是E类。则由此可得把score除十取整,化为相应的常数。#includestdio.hmain()int g,s;char ch;printf(ninput a student grade:);scanf(%d,&g);s=g/10;if(s10) printf(ninput error!);else switch (s) case 10: c

14、ase 9: ch=A; break; case 8: ch=B; break; case 7: ch=C; break; case 6: ch=D; break; default: ch=E; printf(nthe student scort:%c,ch); 输入测试数据,同方法一一样调试程序并写出结果。【例3】有一函数: x (x1) y= 2x-1 (1x10) 3x-11 (x10) 用scanf函数输入x的值(分别为x=10三种情况),求y值。分析:y是一个分段表达式。要根据x的不同区间来计算y的值。所以应使用If语句。main() int x,y;printf(“please i

15、nput x :”);scanf(“%d”,&x);if (x1)y=x;printf(“y=%dn”,y);else if (xc&b= =c(2) a|b+c&b-c(3) !(ab)&!c|1(4) !(x=a)&(y=b)&0(5) !(a+b)+c-1&b+c/23. 有3个整数a、b、c,由键盘输入,输出其中最大的数。4有一函数: x (x1) y= 2x-1 (1x10) 写一程序,输入x, 输出y。5给出一百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A,8089为B, 7079分为C,6069分为D,60分以下为E。6 给一个不多于5位的正整数,要求:a. 求出

16、它是几位数;b. 分别打出每一位数字;c. 按逆序打出各位数字,例如原数为321,应输出123。7输入4个整数,要求按由小到大的顺序输出。34 循环结构程序设计【目的与要求】 熟练掌握while、dowhile和for三种循环语句的应用。【上机内容】【一般示例】【例1】求5!main()int n,t;n=1;t=1;while(t=5) n=n*t; t=t+1; printf(“%d”,n);【例2】求和s=1!+2!+3!main() int n,s=0,t=1; for(n=1;n=3;n+) t=t*n; s=s+t;printf(“%d”,s);【例3】求和s=1!+3!+5!ma

17、in()int s=0,t,i,j;for(i=1;i=3;i+) t=1; for(j=1;j=2*i-1;j+) t=t*j; s=s+t; printf(“%d”,s); 【例4】求和s= 3+33+333 main()int s=0,t=3,i;for(i=1;i=3;i+) s=s+t; t=10*t+3;printf(“%d”,s);【例5】有一数列:2/1,3/2,5/3,8/5,求出这个数列的前10项之和。main()int n,t,;float a=2,b=1,s=0;for(n=1;n=10;n+) s=s+a/b; t=a; a=a+b; b=t;printf(“%f”,

18、s); 【例6】打印500以内的“水仙花数”。“水仙花数”是一个三位数,其各位数立方和等于该数本身。main() int i,j,k,n;for(n=100;n=500;n+)i=n/100;j=n/10-i*10;k=n%10;if(n= =i*i*i+j*j*j+k*k*k) printf(“ %d”,n);【例7】一个数如果恰好等于它的因子之和,这个数就称为完数。求100之内的所有完数。main() int n,s,j;for(n=1;n=100;n+) s=0; for(j=1;jn);其次,算法:使k为m除以n的余数,如果m能被n整除,则k值为0,n为这两个数的最大公约数,否则,使k

19、代替n,n代替m,重复以上过程,直到k值为0。#includestdio.hmain() int m,n,k,result; printf(Enter two numbers:); scanf(%d,%d,&m,&n); if(m0&n0) /*限定两个正整数*/ do k=n%m; if(k= =0) result=m; else n=m; m=k; while(k0); /*循环取余求出最大公因子*/ printf(The greatest common divistor is:%dn,result); else printf(Nonpositive values not allowedn

20、);【例2】用牛顿迭代求方程2x3-4x2+3x-6=0在1.0附近的根。#include “math.h”main()float x,x0,f,f1;x=1.0;do x0=x;f=(2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;x=x0-f/f1;while(fabs(x-x0)=1e-5);printf(“%6.2f”,x);【例3】打印下列图案* * * *main() int i,j; for(i=1; i=4;i+) for(j=1;j= 4-i;j+) printf(“ ”); for(j=1;j=2*i-1;j+) printf(“*”); print

21、f(“n”); 【例4】判断m是否是素数。程序:#include main()int m,i,k;scanf(“%d”,&m);k=sqrt(m+1);for(i=2;i=k+1) printf(“%d is a prime numbern”,m);else printf(“%d is not a prime numbern”,m); 【作业】1输入两个正整数m和n,求其最大公约数和最小公倍数。 2求Sn=a+aa+aaa+aaa 之值,其中a是一个数字。例如:2+22+222+2222+22222(此时n=5), n由键盘输入。3求和1!+2!+3!+4!+20!4 打印100-999之间所

22、有的“水仙花数”。“水仙花数”是一个三位数,其各位数立方和等于该数本身。5 一个数如果恰好等于它的因子之和,这个数就称为完数。求1000之内的所有完数。6 有一数列:2/1,3/2,5/3,8/5,求出这个数列的前20项之和。7 用迭代法求x= a 。求平方根的迭公式为xn+1=1/2(xn+a/xn)要求前后两次求出的x的差的绝对值小于10-58 用牛顿迭代求方程2x3-4x2+3x-6=0在1.5附近的根。9 打印下列图案* * * *35 一维数组【目的与要求】 1掌握一维数组的定义、赋值和输入输出的方法; 2掌握字符数组的使用; 3掌握与数组有关的算法(例如排序算法)。【上机内容】【一

23、般示例】【例1】在键盘上输入N个整数,试编制程序使该数组中的数按照从大到小的次序排列。分析:C中数组长度必须是确定大小,即指定N的值。排序的方法有多种,我们取出其中两种作为参考。 方法一:起泡排序 从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。第一遍的(N-1)次比较后,最大的数已放在最后,第二遍只需考虑(N-1)个数,以此类推直到第(N-1)遍比较后就可以完成排序。源程序如下:#define N 10#includestdio.hmain()int aN,i,j,temp;printf(please input %d numbersn,N);f

24、or(i=0;iN;i+) scanf(%d,&ai);for(i=0;iN-1;i+) for(j=0;jaj+1) temp=aj; aj=aj+1; aj+1=temp; printf(the array after sort:n);for(i=0;iN;i+)printf(%5d,ai);方法二:选择排序首先找出值最小的数,然后把这个数与第一个数交换,这样值最小的数就放到了第一个位置;然后,在从剩下的数中找值最小的,把它和第二个数互换,使得第二小的数放在第二个位置上。以此类推,直到所有的值从小到大的顺序排列为止。#includestdio.h#define N 10main() int

25、 aN,i,j,r,temp; printf(please input %d numbersn,N); for(i=0;iN;i+) scanf(%d,&ai); for(i=0;iN-1;i+) r=i; for(j=i+1;jN;j+) if(ajar) r=j; if(r!=i) temp=ar; ar=ai; ai=temp; printf(the array after sort:n); for(i=0;iN;i+) printf(%5d,ai); printf(n);【例2】青年歌手参加歌曲大奖赛,有10个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)

26、。分析:这道题的核心是排序。将评委所打的10个分数利用数组按增序(或降序)排列,计算数组中除第一个和最后一个分数以外的数的平均分,其中排序部分这里用选择法实现。main()int i,j,min; float temp,ave=0; float a11; printf(n输入评委所打的分数:n); for(i=1;i=10;i+) scanf(%f,&ai); for(i=1;i=9;i+) min=i; for(j=i+1;jaj) min=j; temp=ai; ai=amin; amin=temp; for(i=2;i=9;i+) /*注意i值的变化范围*/ ave=ave+ai; pr

27、intf(选手所得最后分数:%6.1f,ave/8); printf(n);【例3】输入一串字符,计算其中空格的个数。#include main( )char c30; int i,sum=0; gets(c); for(i=0;istrlen(c);i+) if(ci= ) sum=sum+1; printf(空格数为:%d n,sum);【作业】1已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。2将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。3有15个数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找

28、出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。4编一程序,将两个字符串连接起来,不要用strcat函数。36 二维数组【目的与要求】 1掌握二维数组的定义、赋值和输入输出的方法; 2掌握字符数组的使用; 3掌握与数组有关的算法(例如排序算法)。【上机内容】【一般示例】【例1】有一个34的矩阵,要求输出其中值最大的元素的值,以及它的行号和列号。#define M 3#define N 4main( )int max,i,j,r,c; static int aMN=123,94,-10,218,3,9,10,-83,45,16,44,-99; max=a00; for(i=

29、0;iM;i+) for(j=0;jmax) max= aij; r=i;c=j; printf(“max=%d , row =%d , colum=%d n”,max , r, c);【例2】打印以下图案:* * * * * * * * * * * * * * * * * * * * * * * *main()char a5= * , * , * , * , * ; int i,j,k; char space= ; for(i=0;i5;i+) /*输出5行*/ printf(n); /* 输出每行前先换行* / printf( ); /* 每行前面留5个空格 */ for (j=1;j=i

30、;j+) printf(%c,space); /* 每行再留1个空格*/ for ( k=0;k5;k+) printf(%c,ak); /*每行输入5个*号*/ 【例3】求矩阵下三角形元素之和。#define N 6main()int i,j,sum=0; int aNN=0; printf(input 55 data:n); for(i=1;iN;i+) printf(Input the %d line data:n,i); for(j=1;jN;j+) scanf(%d,&aij); for(i=1;iN;i+) for(j=1;jN;j+) printf(%5d,aij); print

31、f(n); for(i=1;iN;i+) for(j=1;j=i;j+) sum=sum+aij; printf(sum=%dn,sum);【作业】1. 求一个33矩阵对角线元素之和。2. 打印出以下的杨辉三角形(要求打印出10行)。11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1 3. 有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。37 函 数【目的与要求】1掌握C语言函数的定义方法、函数的声明及函数的调用方法。2了解主调函数和被调函数之间的参数传递方式。【上机内容】 【一般示例】【例1】写一个

32、判断素数的函数,在主函数输入一个整数,输出是否素数的信息。源程序如下: mian() int number;printf(“请输入一个正整数:n”);scanf(“%d”,&number);if (prime(number) printf(“n %d是素数.”,number);else printf(“n %d不是素数.”,number); int prime(number) /*此函数用于判别素数*/int number;int flag=1,n;for(n=2;nnumber/2&flag=1;n+) if (number%n=0) flag=0;return(flag);判断素数的算法,

33、我们在以前学习循环的时候已经学过了,在这里只是把这个算法用函数的形式表示出来。这里我们要注意函数的定义、声明的方法和格式。【例2】写一函数,是给定的一个二位数组(44)转置,即行列互换。源程序如下:/*矩阵的转置*/#define N 4int arrayNN;convert(array)int array44; int i,j,t;for (i=0;iN;i+)for (j=i+1;jN;j+)t=arrayij; arrayij=arrayji; arrayji=t; main()int i,j;printf(“输入数组元素:n”);for (i=0;iN;i+)for (j=0;jN;j

34、+) scanf(“%d”,&arrayij);printf(“n数组是:n”);for (i=0;iN;i+)for (j=0;jN;j+) printf(“%5d”,arrayij);printf(“n”);conver(array);printf(“转置数组是:n”);for (i=0;iN;i+)for (j=0;jv) t=u; u=v; v=t; a=u; b=v; while(r=b%a)!=0) b=a; a=r; return(a); lcd(u,v,h)int u,v,h; return(u*v/h); main()int u,v,h,l;scanf(%d,%d,&u,&v

35、);h=hcf(u,v);printf(H.C.F=%dn,h);l=lcd(u,v,h);printf(L.C.D=%dn,l);这是一个十分典型的算法,同学们一定要认真分析、学习。【例2】写一函数,用“起泡法”对输入的10个字符按由小到大顺序排序。源程序如下:/*起泡法排序*/#define N 10char strN;main()int i,flag;for (flag=1; flag = =1;)printf(“n输入字符串,长度为10:n”);scanf(“%s”,&str);if (strlen(str)N) printf(“超过长度,请重输!”);else flag = 0;sort(str);printf(“n排序结果:”):for (i=0;iN;i+)printf(“%c”,stri); sort(str)char strN;int i,j;char t;for (j=1;jN;j+) for (i=0;(istri+1)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 成人自考

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁