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

更新时间:2024-04-05 20:26:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

兰州职业技术学院信息工程系

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

兰州职业技术学院编写

编写说明

《C语言程序设计》是计算机类专业的一门专业基础课。通过C语言中的数据类型,运算,语句结构及其程序设计的基本方法的学习,使学生掌握一门高级程序设计语言,为后续的专业课程奠定程序设计基础,特别是软件方面的课程打下了厚实的知识基础,同时也提供了必要的技能训练。因此,采用理论教学和学生实训相结合方式,使学生掌握程序设计的基本原理和编程方法,达到提高学生分析问题和解决问题的能力的目的。在教学中应该既重视课堂理论教学,又重视实验动手能力的培养。

目 录

1.实训项目一 C语言的运行环境和运行过程 ???????1 2.实训项目二 C语言的基础知识 ????????3 3.实训项目三 4.实训项目四 5.实训项目五 6.实训项目六 7.实训项目七 8.实训项目八 9.实训项目九 10.实训项目十 简单的C程序设计 顺序结构程序设计 选择结构程序设计 循环结构程序设计 一维数组 二维数组 函数 指针 ????????5 ?????????7 ???????9 ????????12 14 16 18 20

??????????? ??????????? ??????????? ???????????兰州职业技术学院C语言程序设计实训指导书

实训项目一 C语言的运行环境和运行过程

一、 实训参考课时: 2课时 二、实训目的及要求

1、了解Dos、Windows环境下C语言的运行环境,了解所用的计算机系统的

基本操作方法,学会独立使用该系统。

2、了解在该系统上如何编辑、编译、连接和运行一个C程序。 3、通过运行简单的C程序,初步了解C源程序的特点

三、实训条件要求简述

PC机, Turbo C集成环境

四、实训内容

(一)Turbo C的启动以及工作环境介绍。

1、从DOS环境进入:

在DOS命令行上键入: C>CD \\TC↙(指定当前目录为TC子目录)

C>TC↙ (进入Turbo C环境)

2、从Windows环境进入:

在Windows环境中,如果本机中已安装了Turbo C,可以在桌面上建立一个快捷方式,双击该快捷图标即可进入C语言环境。或者从开始菜单中找到“运行”,在运行对话框中键入“C:\\TC\\TC”,“确定”即可。

(1)主菜单

显示屏的顶部是主菜单条,它提供了8个选择项:

File :处理文件(装入、存盘、选择、建立、换名存盘、写盘),目录操

作(列表、改变工作目录),退出Turbo C,返回DOS状态。

Edit :建立、编辑源文件。

Run :自动编辑、连接并运行程序。

Compile :编辑、生成目标文件组合成工作文件。

Project :将多个源文件和目标文件组合成工作文件。

Option :提供集成环境下的多种选择和设置(如设置存储模式、选择编

参数、诊断及连接任选项)以及定义宏;也可记录Include、

Output及Library:文件目录,保存编译任选项和文件加载任选项。 Debug :检查、改变变量的值、查找函数,程序运行时查看调用栈。选

择程序编译时是否在执行代码中插入调试信息。

Break/Watch :增加、删除、编辑监视表达式,及设置、清除、执行至

断点。

3、 Turbo C环境中运行C语言源程序的步骤 (1) 编辑源文件

(2) 源程序的编译、连接

若有错误,则在信息窗口显示出相应的信息或警告,按任意键返回编辑窗口,光标停在出错位置上,可立即进行编辑修改。修改后,再按F9键进行编辑、连接。如此反复,直到没有错误为止,即可生成可执行文件。 注意:C程序的连接是在编译后自动完成的。

1

兰州职业技术学院C语言程序设计实训指导书

(3) 执行程序

(4) 退出Turbo C集成环境

(二)在Turbo C环境中运行C语言源程序

【例1】编程实现在屏幕上显示如下三行文字 Hello, world !

Wolcome to the C language world! Everyone has been waiting for.

在Turbo C的集成环境下,键入如下源文件。Alt+F组合键打开File菜单,File菜单中Write to选项可将默认noname.c文件名改为任意文件名。程序如下: main() {

printf(\

printf(\printf(\}

然后用Ctrl+F9编辑执行example.c,用Alt+F5查看结果,即在屏幕上显示题目要求的三行文字。按回车键重新返回Turbo C的编辑环境。注意,在运行 程序之前最好先存盘。

【例2】输入并运行程序,写出运行结果。

main() {

int a,b,sum; a=123;b=456; sum=a+b;

printf(“sum is %d\\n”,sum); }

运行方法同上,最后结果为:sum is 579。 【例3】

输入并运行程序,写出运行结果。 main() {

int a,b,c;

scanf(“%d,%d”,&a,&b); c=max(a,b);

printf(“max=%d”,c); }

int max(int x,int y) {

int z;

if (x>y) z=x; else z=y; return(z); }

2

兰州职业技术学院C语言程序设计实训指导书

这个程序的功能是对于任意输入的两个整数,输出较大的那个数。所以程序运行之后,光标将停留在用户屏幕上,等待用户输入两个整数,比如输入“3, 5” ,回车,在用户屏幕上就会输出“max= 5” 。

(三)、实训思考题

1、输入并运行例题中程序,熟悉调试C程序的的方法与步骤。

2、写出一个C程序的构成。

五、实训考核标准

理解实训原理,完成实训内容,记录分析实训结果,完成实训报告

实训项目二 C语言的基础知识

一、实训参考课时: 2课时 二、实训目的及要求

1、掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用的格式转换符。

2、学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。

1、进一步熟悉C程序的编辑、编译、连接和运行的过程。

三、实训条件要求简述

PC机, Turbo C集成环境

四、实训内容

(一)调试运行课本中第二章示例程序 (二)上机练习

1、输入程序,运行出结果。 mian() {

char c1 , c2; c1=97;c2=98;

printf(“%c %c”, c1, c2);

}

2、分析下程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。

3

兰州职业技术学院C语言程序设计实训指导书

main() {

char c1=’a’,c2=’b’,c3=’c’,c4=’\\ 101’ ,c5=’\\ 116’ ; printf(“a%c b%c\\tabc\\n”,c1,c2,c3); printf(“\\t\\b%c %c”,c4,c5); }

3、分析下程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。

main() {

int i , j , m , n ; i=8; j=10; m=++i; n=j++;

printf(“%d,%d,%d,%d”,i,j,m,n); }

4、在此基础上

(1)加一个printf语句,并运行 printf(“%d,%d”, c1, c2 ); (2)再将第二行改为: int c1, c2; 再使之运行。

(3)再将第三行改为: c1=300; c2=400; 再运行并分析其运行结果。 说明:

1、在该程序中,说明了字符型数据在特定情况下可作为整型数据处理,整型数据有时也可以作为字符型数据处理。

2、在该程序中,主要考查对转义字符的掌握情况。

3、此程序主要考查自加、自减运算符以及复合运算符的用法。

(三)实训思考题

1、“=”和“==”有什么区别?

2、“&”和“&&”、“|”和“||”有什么区别

五、实训考核标准

理解实训原理,完成实训内容,记录分析实训结果,完成实训报告

4

兰州职业技术学院C语言程序设计实训指导书

实训项目三 简单的C程序设计

一、实训参考课时: 2课时 二、实训目的及要求

1.理解C语言程序的顺序结构

2.掌握常用的C语言语句,熟练应用赋值、输入、输出语句。

三、实训条件要求简述

PC机, Turbo C集成环境

四、实训内容

(一)调试并运行以下程序 1、按格式要求输入/输出数据 #include \ main() { int a,b; flost x,y; char c1,c2;

scanf(“a=%d,b=%d”,&a,&b); scanf(“%f, %e”,&x,&y); scanf(“&c &c”,&c1,&c2);

printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\\n”,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);

5

兰州职业技术学院C语言程序设计实训指导书

s=1.0/2*(a+b+c);

area=sqrt(s*(s-a)*(s-b)*(s-c)); printf(“area=%f”,area); }

3、已知圆半径,圆柱高,求圆周长,圆柱体积。 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.2f \\n”,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.2f \\n”,c); }

(二)实训思考题

编程序,并上机运行。用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf函数输出这两个字符。上机运行程序,比较用printf和putchar函数输出字符的特点。

五、实训考核标准

理解实训原理,完成实训内容,记录分析实训结果,完成实训报告

6

兰州职业技术学院C语言程序设计实训指导书

实训项目四 顺序结构程序设计

一、 训参考课时: 2课时 二、实训目的及要求

1.掌握C语言程序的顺序结构

2.掌握常用的C语言语句,熟练应用赋值、输入、输出语句。

三、实训条件要求简述

PC机, Turbo C集成环境

四、实训内容 (一)实训练习

1、调试并运行下列程序

【案例】用*号输出字母C的图案。

编程分析:可先用'*'号在纸上画出字母C,再分行输出。程序如下: #include \main()

{ printf(\); printf(\); printf(\); printf(\); printf(\); }

【案例】从键盘输入一个大写字母,要求改用小写字母输出。 #include \main()

{ char c1,c2;

printf(\); c1=getchar();

putchar(c1);printf(\);

c2=c1+32; /*将小写字母转换成对应的大写字母*/ printf(\); }

在此基础上,做以下改动: ①将程序第5~7行改为

a=61; b=62; c1=a; c2=b;

f=3157.890121; g=0.1234567893; d=f ; e=g; m=p=a=50000; n=b=q=-60000; 运行程序,分析结果。

②在①的基础上将printf语句改为: printf(”a=%d,b=%d,c1=%c,c2=%c, d=.6f,e=.12f\\n”,a,b,c1,c2,d,e);

printf(”f=%f,g=%f,m=%d,n=%d,p=%d,q=%d\\n”,f,g,m,n,p,q);

7

兰州职业技术学院C语言程序设计实训指导书

运行程序。

③将p,q改用%o格式符输出。

④改用 scanf函数输入数据而不用赋值语句,scanf函数如下:

scanf(“%d,%d,%c,%c,%f,%f,%lf,%lf,%ld,%ld,%u,%u”,&a,&b,&c1,&c2,&d,&e,&f,&g,&m,&n,&p,&q); 输入的数据如下:

62,a,b,3.56,-6.87,3,157.890121,0.123456789,50000,-60000,37678,4

0000(说明:lf和ld格式符分别用于输入double型和long型数据)分析运行结果。

⑤将scanf函数中的%lf和%ld改为%f和%d,运行程序并观察分析结果。

(二)实训作业

1、编程序,并上机运行。用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf函数输出这两个字符。上机运行程序,比较用printf和putchar函数输出字符的特点。

2、是将一个3位数(假设个位数不为0)的个位数和百位数进行交换的算法

流程图,该数通过键盘输入得到。例如,输入3位数123〈回车〉,经交换后,输出的数为321。请根据算法编写相应代码。

开始 定义整形变量x,a,b,c,t 给x输入3位数 输出交换前的数 a=百位数 b=十位数 c=个位数 交换个位数和百位数 x=交换后的3位数 五、实训考核标准

8

输出交换后的数 结束 兰州职业技术学院C语言程序设计实训指导书

理解实训原理,完成实训内容,记录分析实训结果,完成实训报告

实训项目五 选择结构程序设计

一、参考课时: 4课时 二、实训目的及要求

1、了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”); 2、学会正确使用逻辑运算符和逻辑表达式;

三、实训条件要求简述

PC机, Turbo C集成环境

四、实训内容 (一)实训练习

1、已知三个数a,b,c,找出最大值放于max中。

编程分析:由已知可得在变量定义时定义四个变量a,b,c和max,a,b,c是任意输入的三个数,max是用来存放结果最大值的。第一次比较a和b,把大数存入max中,因a,b都可能是大值,所以用if语句中if——else 形式。第二次比较max和c,把最大数存入max中,用if语句的第一种形式if形式。Max即为a,b,c中的最大值。 #include \main() {

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(\}

若输入下列数据,分析程序的执行顺序并写出运行结果 (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、输入某学生的成绩,经处理后给出学生的等级,等级分类如下: 90分以上(包括90): A 80至90分(包括80):B 70至80分(包括70):C

9

兰州职业技术学院C语言程序设计实训指导书

60至70分(包括60):D 60分以下:E

方法一:(用if嵌套`)

分析: 由题意知如果某学生成绩在90分以上,等级为A;否则,如果成绩于

80分,等级为B;否则,如果成绩大于70分,等级为C;否则,如果成绩大于60分为D;否则,如果成绩小于60分,等级为E;但当我们输入成绩时也可能输错,出现小于0或大于100,这时也要做处理,输出出错信息。因此,再用if嵌套前,应先判断输入的成绩是否在0~100之间。

#include\main() {

int score; char grade;

printf(\ scanf(\ if(score>100||score<0)

printf(\ else

{ if(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(\ }

}

输入测试数据,调试程序。测试数据要覆盖所有路径,注意临界值,例如此题中得100分,60分,0分以及小于0和大于100的数据。 方法二:用switch语句

分析: switch 语句是用于处理多分支的语句。注意,case后的表达式必须是

一个常量表达式,所以在以用switch语句之前,必须把0~100之间

10

兰州职业技术学院C语言程序设计实训指导书

的成绩分别化成相关的常量。所有A(除100以外),B,C,D类的成绩的共同特点是十位数相同,此外都是E类。则由此可得把score除十取整,化为相应的常数。 #include\main() {

int g,s; char ch;

printf(\scanf(\s=g/10;

if(s<0||s>10)

printf(\else

{ switch (s) { case 10:

case 9: ch='A'; break; case 8: ch='B'; break; case 7: ch='C'; break; case 6: ch='D'; break; default: ch='E'; }

printf(\ }

}

输入测试数据,同方法一一样调试程序并写出结果。

(二)实训作业

1、函数:

x

y=

x<1 1==10

2x-1 3x-11

用scanf函数输入x的值(分别为x<1,1~10,>=10三种情况),求y值。

2、输入三个数,按由小到大的顺序输出。 3、判断下面程序段的运行结果

(1)int a=5,b,i=57;

b=(i>10 && i%2 || i%3 ? a++ :a--);

printf(“b=%d\\n”,b); (2)int a=2,b=2,c;

c=a= =b;

printf(“c=%d\\n”,c); (3)nt a=5 ,x=6;

if(x=a)

printf(“1:%d\\n”,x);

11

兰州职业技术学院C语言程序设计实训指导书

else

printf(2:%d\\n”,x); (4)int a,x=65;

if(x%3) a=1; else a=0;

printf(“%d”,a); (5)int x,a=1;

if(x=5&& a--)

printf(“%d\\n”,a); else

printf(“%d\\n”,x);

(6) 运行程序时若键盘输入F<回车>,则以下程序段的运行结果是______. c=getchar();

if(c>=’A’&&c<=‘Z’||c>=’a’&&c<=’z’)

{ c=c(c>=’A’&&c<=’Z’? c+32:c); putchar(c); } else

printf(“Error\\n”);

}

五、实训考核标准

理解实训原理,完成实训内容,记录分析实训结果,完成实训报告

实训项目六 循环结构程序设计

一、参考课时: 4课时 二、实训目的及要求

熟练掌握while、do—while和for三种循环语句的应用。

三、实训条件要求简述

PC机, Turbo C集成环境

四、实训内容 (一)实训练习

12

兰州职业技术学院C语言程序设计实训指导书

1、调试并运行下列程序

【案例】用while循环语句求1*2*3*?*100的值。 编程分析:算法可参见案例5.2。程序如下: #include main()

{ int i=1;  double m=1; 

while (i<=100)  { m*=i;  i++; } 

printf(″1*2*3*?*100=%f″, m); }

程序运行结果:

1*2*3*?*100= 9.332 621 544 394 410 22e+157 程序说明:

(1)在循环体中,要有改变循环控制变量值的操作,否则循环将变为死循环。 (2)改变循环控制变量值的语句应放在合适的位置,如果把语句“i++”放在“m*=i”的前面,循环少执行一次。

(3)本案例while语句与for 语句的功能相同。在C语言中不同循环语句之间可以相互转换。

【案例】编写程序,从键盘输入若干学生的成绩,并输出在屏幕上(要求每行输

出三个成绩),用-1结束循环的执行。 (1)用while循环语句实现。 #include main()

{ int a,n=0;

scanf(“%d”,&a); while(a!=-1)

{ printf(M,a);n++;

if (n%3= =0)printf(“\\n”); scanf(“%d”, &a);}

}

(2) 用do-while循环语句实现。 #include main()

{ int a,n=0;

do

{ scanf(“%d”,&a); printf(M,a);n++;

if (n%3= =0) printf(“\\n”); }

while(a!=-1); }

(3)用for 循环语句实现。

13

兰州职业技术学院C语言程序设计实训指导书

#include main()

{ int a,n=0;

for(scanf(“%d”,&a); a!=-1; scanf(“%d”, &a)) { printf(M,a);n++;

if (n%3= =0)printf(“\\n”); }

}

(二)实训作业

1、求5!

2、求和s=1!+2!+3! 3、求积s=1!*3!*5! 4、求和s= 3+33+333

5、有一数列:2/1,3/2,5/3,8/5,?求出这个数列的前10项之和。 6、打印500以内的“水仙花数”。“水仙花数”是一个三位数,其各位数立方和等于该数本身

7、编程求100之内的所有完数。(一个数如果恰好等于它的因子之和,这个

数就称为完数)

五、实训考核标准

理解实训原理,完成实训内容,记录分析实训结果,完成实训报告

实训项目七 一维数组

一、参考课时: 4课时 二、实训目的及要求

1、掌握一维数组的定义、赋值和输入输出的方法; 2、掌握字符数组的使用;

3、掌握与数组有关的算法(例如排序算法)。

三、实训条件要求简述

PC机, Turbo C集成环境

四、实训内容 (一)实训练习

1、在键盘上输入N个整数,试编制程序使该数组中的数按照从大到小的次序排列。

方法一:起泡排序

14

兰州职业技术学院C语言程序设计实训指导书

从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。第一遍的(N-1)次比较后,最大的数已放在最后,第二遍只需考虑(N-1)个数,以此类推直到第(N-1)遍比较后就可以完成排序。

#define N 10

#include\main() {

int a[N],i,j,temp;

printf(\for(i=0;i

if(a[j]>a[j+1]) {

temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } }

printf(\for(i=0;i

方法二:选择排序

首先找出值最小的数,然后把这个数与第一个数交换,这样值最小的数就放到了第一个位置;然后,在从剩下的数中找值最小的,把它和第二个数互换,使得第二小的数放在第二个位置上。以此类推,直到所有的值从小到大的顺序排列为止。

#include\#define N 10 main() {

int a[N],i,j,r,temp;

printf(\for(i=0;i

for(j=i+1;jif(r!=i)

15

兰州职业技术学院C语言程序设计实训指导书

{

temp=a[r]; a[r]=a[i]; a[i]=temp; } }

printf(\for(i=0;i

(二)实训作业

输入一串字符,计算其中空格的个数 #include main( )

{char c[30]; int i,sum=0; gets(c);

for(i=0;i

printf(\空格数为:%d \\ n\}

(二)实训作业

1、已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。

2、输入一行字符存入在数组中,并将其中所有大写字母改为对应的小写字母后按逆序输出。

3、输入一个字符串(至少含有6个有效字符)存入在一维数组中,然后将前6个字符逆序存放,例如,输入abcdefgh,则数组中最终存放fedcbagh.

五、实训考核标准

理解实训原理,完成实训内容,记录分析实训结果,完成实训报告

实训项目八 二维数组

一、参考课时: 2课时 二、实训目的及要求

1、掌握二维数组的定义、赋值和输入输出的方法; 2、掌握字符数组的使用;

三、实训条件要求简述

16

兰州职业技术学院C语言程序设计实训指导书

PC机, Turbo C集成环境

四、实训内容

(一)实训练习:调试并运行下列程序

1、有一个3×4的矩阵,要求输出其中值最大的元素的值,以及它的行号和列号。

#define M 3 #define N 4 main( ) {

int max,i,j,r,c;

static int a[M][N]={{123,94,-10,218},{3,9,10,-83},{45,16,44,-99}}; max=a[0][0];

for(i=0;imax) { max= a[i][j]; r=i; c=j; }

printf(“max=%d , row =%d , colum=%d \\n”,max , r, c); }

2、打印以下图案: * * * * * * * * * * * * * * * * * * * * * * * * * main()

{ char a[5]={' * ' , ' * ' , ' * ' , ' * ' , ' * '}; int i,j,k;

char space=' ';

for(i=0;i<5;i++) /*输出5行*/

{ printf(\输出每行前先换行* / printf(\每行前面留5个空格 */ for (j=1;j<=i;j++)

printf(\每行再留1个空格*/ for ( k=0;k<5;k++)

printf(\每行输入5个*号*/ } }

3、求矩阵下三角形元素之和。 #define N 6

17

兰州职业技术学院C语言程序设计实训指导书

main()

{ int i,j,sum=0; int a[N][N]={0};

printf(\\\n\for(i=1;i

{ printf(\for(j=1;j

scanf(\}

for(i=1;i

printf(\printf(\}

for(i=1;i

printf(\}

(二)、实训作业

1、 求一个3×3矩阵对角线元素之和。

4、输入两个字符串,并将其中较小的字符串连接到大的字符串后面。

5、定义2×4二维数组,并输入前3列数据赋给各元素,最后将每行总和放在最后一列。

五、实训考核标准

理解实训原理,完成实训内容,记录分析实训结果,完成实训报告

实训项目九 函数

一、参考课时: 4课时 二、实训目的及要求

1、掌握C语言函数的定义方法、函数的声明及函数的调用方法。 2、了解主调函数和被调函数之间的参数传递方式。

三、实训条件要求简述

PC机, Turbo C集成环境

四、实训内容

(一)实训练习

【案例】计算s=22!+32!

编程分析:可用两个函数,实现求解。一个是用来计算平方值的函数f1,另一个是用来计算阶乘值的函数f2。主函数先调f1计算出平方值,再在f1中以平方值为实参,调用 f2计算其阶乘值,然后返回f1,再返回主函数,在循环程序中

18

兰州职业技术学院C语言程序设计实训指导书

计算累加和。程序如下:

long f1(int p) /*定义求平方值的函数*/ { int k; long r; long f2(int); k=p*p; r=f2(k); return r; }

long f2(int q) /*定义求阶乘值的函数*/ { long c=1; int i;

for(i=1;i<=q;i++) c=c*i; return c; }

main() /*主函数*/ { int i; long s=0;

for (i=2;i<=3;i++)

s=s+f1(i); /*调用函数,进行累加,参数为i*/ printf(\

}

程序运行结果:s=362904

【案例】编写函数arer求出10个数的平均值,并找出其中的最大值和最小值。返回主函数输出其结果(允许增添和改动语法成分,但不得删除整条语句)。

main ( )

{ float ave , a [10] ; int i ;

for (i=0 ; i<10 ; i++ )

scanf ( “%f” , a++ ) ; ave =aver (a , 10 ) ;

printf ( “max=%6.2f\\n min=%6.2f\\n” , max , min ) ; printf ( “average =%6.2f\\n” , ave); }

19

兰州职业技术学院C语言程序设计实训指导书

float aver (b , n ) float b [ ] ; int n ;

{ int i ; float max , min , sum ; max=min=sum=b[0] ; for (i=1 ; imax ) max=b[i] ; else if ( b[i]

return (sum/n ) ; }

(二)实训作业

1、写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。 2、定义求圆球的体积、求圆球的表面积、求圆柱体的体积、求圆柱体的表面积的函数。

3、定义函数:double tmax(double, double, double),它返回三个参数中最大的一个。写一个主函数试验各种参数情况。

4、写函数,它以两个电阻的值作为参数,求出并联的电阻值。

五、实训考核标准

理解实训原理,完成实训内容,记录分析实训结果,完成实训报告

实训项目十 指针

一、参考课时: 4课时 二、实训目的及要求

1、掌握指针变量的定义与引用。 2、掌握指针变量对数组的访问实现

三、实训条件要求简述

PC机, Turbo C集成环境

四、实训内容 (一)实训练习

【案例】输出数组的全部元素(设10个元素,整型)。 编程分析:访问各元素有三种方法。程序如下: (1)下标法(常用,很直观)

20

兰州职业技术学院C语言程序设计实训指导书

main ()

{ int a[10]; int i;

for(i=0;i<10;i++) scanf(\); printf(\);

for(i=0;i<10;i++) printf(\); }

(2)用数组名计算数组元素的地址。(效率与下标法相同,不常用) main () { int a[10]; int i;

for(i=0;i<10;i++) scanf(\); printf(\);

for(i=0;i<10;i++) printf(\(a+i)); }

(3)用指针访问各元素。(常用,效率高) main () { int a[10]; int *p, i;

for(i=0;i<10;i++) scanf(\); printf(\);

for(p=a;p<(a+10);p++) /* p++使p指向下一个元素 */ printf(\); }

【案例】 从10个数中找出其中最大值和最小值。只找出其中最大值和最小值,不能改变元素的排列顺序。

(1)实参和形参均用数组变量

int max, min; /*定义最大值和最小值为全局变量 */ void max_min_value(int array[], int n)

{ int *p, *array_end; /* p是数组元素指针 */ array_end = array + n; /* 指向数组尾 */ max = min = *array; /* 第一个元素array[0] */ for(p=array+1; p max) max = *p;

else if (*p < min) min = *p; return; } main ()

{ int i, number[10];

printf(\);

21

兰州职业技术学院C语言程序设计实训指导书

for(i=0;i<10;i++)

scanf(\); max_min_value(number,10);

printf(\); } (2)形参和实参均使用指针变量

int max, min; /* 全局变量,最大值和最小值 */ void max_min_value(int *array, int n) { int *p, *array_end; /* p是数组元素指针 */ array_end = array + n; /* 指向数组尾 */

max = min = *array; /* 第一个元素array[0] */ for(p=array+1; p max) max = *p;

else if (*p < min) min = *p; return; } main ()

{ int i, number[10],*p; p = number; * 指针p指向数组number首地址 */ printf(\); for(i=0;i<10;i++)

scanf(\); printf(\);

for(p=number,i=0; i<10; i++,p++) printf(\); p = number; / * for循环后,p指向数组尾,因此应为p重新赋值 */ max_min_value(p,10);

printf(\);

}

结论:数组作函数的参数,实参和形参之间传送数组的首地址,首地址可以用指针表示,也可以用数组名表示,因此,实参和形参有以下四种组合情况

组合情况 实 参 形 参 1 数组名 数组名 2 数组名 指 针 3 指 针 指 针 4 指 针 数组名

(二)实训作业

1、用指针的方法将字符串a复制到字符串b。

2、 设计一个函数,对10个字符串数按由小到大顺序排序。字符串的输人和输出都在main函数中进行。

3、 有一个数列,有15个整数,今要求编一个函数,它能够对从指定位置开始的n个数按相反顺序重新排列。例如数列原为:

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

22

兰州职业技术学院C语言程序设计实训指导书

若要求对从第5个数开始的10个数进行逆序处理,则得到的新数列为:

1,2,3,4,14,13,12,11,10,9,8,7,6,5,15

数列中的数在main函数中输人,在调用函数时应给出从第几个位置开始(以m表示)和要求处理的是多少个数(以n表示),例如对上面的情况,m=5,n=l0。

在main函数中输出新的数列。

五、实训考核标准

理解实训原理,完成实训内容,记录分析实训结果,完成实训报告

23

兰州职业技术学院C语言程序设计实训指导书

若要求对从第5个数开始的10个数进行逆序处理,则得到的新数列为:

1,2,3,4,14,13,12,11,10,9,8,7,6,5,15

数列中的数在main函数中输人,在调用函数时应给出从第几个位置开始(以m表示)和要求处理的是多少个数(以n表示),例如对上面的情况,m=5,n=l0。

在main函数中输出新的数列。

五、实训考核标准

理解实训原理,完成实训内容,记录分析实训结果,完成实训报告

23

本文来源:https://www.bwwdw.com/article/k4or.html

Top