C语言实验指导书创新班.docx

上传人:b****6 文档编号:3729781 上传时间:2022-11-25 格式:DOCX 页数:35 大小:47.32KB
下载 相关 举报
C语言实验指导书创新班.docx_第1页
第1页 / 共35页
C语言实验指导书创新班.docx_第2页
第2页 / 共35页
C语言实验指导书创新班.docx_第3页
第3页 / 共35页
C语言实验指导书创新班.docx_第4页
第4页 / 共35页
C语言实验指导书创新班.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

C语言实验指导书创新班.docx

《C语言实验指导书创新班.docx》由会员分享,可在线阅读,更多相关《C语言实验指导书创新班.docx(35页珍藏版)》请在冰豆网上搜索。

C语言实验指导书创新班.docx

C语言实验指导书创新班

《程序设计技术基础》

实验指导书

 

计算机科学与技术学院

二○一二年三月

目录

实验一简单程序的编辑、编译、调试和运行..........1

实验二三种基本结构程序设计......................9

实验三数组程序设计..............................16

实验四指针程序设计..............................20

实验五函数程序设计..............................22

实验六结构体、文件程序设计......................26

 

实验学时:

12实验内容:

6个实验,2学时/每个实验

实验要求:

每次从练习中选择2-3题进行实验,实验结束后,整理出实验报告。

实验报告应包括以下内容:

①题目;

②程序清单(手写或打印);

③程序运行结果(与程序清单对应);

④对实验内容的分析和取得的经验;

⑤遇到的问题。

实验一简单程序的编辑、编译、调试和运行

【目的与要求】

1.了解DOS、Windows环境下C语言的运行环境,了解所用的计算机系统的基本操作方法,学会独立使用该系统。

2.了解在该系统上如何编辑、编译、连接和运行一个C程序。

3.通过运行简单的C程序,初步了解C源程序的特点。

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

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

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

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

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

【上机内容】

一、C语言的运行环境和运行过程

【基础知识】

通过课堂上学习,我们对C语言已有了初步了解,对C语言源程序结构有了总体的认识,那么如何在机器上运行C语言源程序呢?

任何高级语言源程序都要“翻译”成机器语言,才能在机器上运行。

“翻译”的方式有两种,一种是解释方式,即对源程序解释一句执行一句;另一种是编译方式,即先把源程序“翻译”成目标程序(用机器代码组成的程序),再经过连接装配后生成可执行文件,最后执行可执行文件而得到结果。

C语言是一种编译型的程序设计语言,它采用编译的方式将源程序翻译成目的程序(机器代码)。

运行一个C程序,从输入源程序开始,要经过编辑源程序文件(.C)、编译生成目标文件(.obj)、连接生成可执行文件(.exe)和执行四个步骤。

【示例】

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

Hello,world!

WolcometotheClanguageworld!

Everyonehasbeenwaitingfor.

程序example.c如下:

main()

{

printf("Hello,World!

\n");

printf("WolcometotheClanguageworld!

\n");

printf("Everyonehasbeenwaitingfor.\n");

}

然后用编辑执行example.c,查看结果,即在屏幕上显示题目要求的三行文字。

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

main()

{

inta,b,sum;

a=123;b=456;

sum=a+b;

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

}

运行方法同上,最后结果为:

sumis579

【例3】

输入并运行如下程序,写出运行结果。

main()

{

inta,b,c;

scanf("%d,%d",&a,&b);

c=max(a,b);

printf("max=%d\n",c);

}

intmax(intx,inty)

{

intz;

if(x>y)z=x;

elsez=y;

return(z);

}

这个程序的功能是对于任意输入的两个整数,输出较大的那个数。

所以程序运行之后,光标将停留在用户屏幕上,等待用户输入两个整数,比如输入“3,5”,回车,在用户屏幕上就会输出:

max=5

【练习一】

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

2.参照例题,编写一个C程序,输出以下信息:

****************************

Hello,World!

****************************

3.编写一个C程序,输入a、b、c三个数,输出其中最大者。

试想,如果求四个数中的最大者,则程序该如何编写。

二、运算符和表达式

【示例】

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

main()

{

charc1,c2;

c1=97;c2=98;

printf("%c%c\n",c1,c2);

}

在此基础上

1)加一个下面printf语句,并运行之。

printf("%d,%d\n",c1,c2);

2)再将第3行改为:

intc1,c2;

再使之运行。

3)再将第4行改为:

c1=300;c2=400;

再使之运行,分析其运行结果。

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

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

main()

{

charc1='a',c2='b',c3='c',c4='\101',c5='\116';

printf("a%cb%c\tab%c\n",c1,c2,c3);

printf(“\t\b%c%c”,c4,c5);

}

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

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

main()

{

inti,j,m,n;

i=8;j=10;

m=++i;n=j++;

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

}

分别作以下改动之后,先分析再运行:

1)将第四行改为:

m=i++;n=++j;

2)程序改为:

main()

{

inti,j;

i=8;j=10;

printf(“%d,%d”,i++,j++);

}

3)在2)的基础上,将printf语句改为:

printf(“%d,%d”,++i,++j);

4)再将printf语句改为:

printf(“%d,%d,%d,%d”,i,j,i++,j++);

5)程序改为:

main()

{

inti,j,m=0,n=0;

i=8;j=10;

m+=i++;n-=--j;

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

}

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

【练习二】

1.要将“China”译成密码,密码规律是:

用原来的字母后面第5个字母代替原来的字母。

例如,字母“A”后面第5个是“F”,用“F”代替“A”。

因此,“China”应译为“Hmnsf”。

请编一程序,用赋初值的方法使c1、c2、c3、c4、c5五个变量的值分别为’C’、’h’、’i’、’n’、’a’,经过运算,使其分别变为’H’、’m’、’n’、’s’、’f’,并输出。

2.求下面算术表达式的值。

(1)x+a%3*(x+y)%2/4

设x=2.5,a=7,y=4.7

(2)(float)(a+b)/2+(int)x%(int)y

设a=2,b=3,x=3.5,y=2.5

先自己分析,再试着用程序求解,看得到的结果是否一致。

3.写出下面表达式运算后a的值,设原来a=10。

设a和n已定义成整型变量。

(1)a+=a

(2)a-=2

(3)a*=2+3(4)a/=a+a

(5)a%=(n%=2),n的值等于5(6)a+=a-=a*=a

先自己分析,再试着用程序求解,看得到的结果是否一致。

三、简单的C程序设计

【示例】

【例1】按格式要求输入/输出数据。

#include"stdio.h"

main()

{

inta,b;

floatx,y;

charc1,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↙

aA↙

请同学们写出输出结果

【例2】输入三角形三边长,求三角形面积。

#include“math.h”

main()

{

floata,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】已知圆半径,圆柱高,求圆周长,圆柱体积。

main()

{

floatr,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=9/5*c+32

main()

{

floatc,f;

scanf(“%f”,&c);

f=9.0/5*c+32;

printf(“c=%5.2f,f=%5.2f\n”,c,f);

}

【练习三】

1. 已知圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。

2.输入一个华氏温度,要求输出摄氏温度。

公式为c=5/9*(f-32)

实验二三种基本结构程序设计

【目的与要求】

1.了解C语句中表示逻辑量的方法(以0代表“假”以1代表“真”);

2.学会正确使用关系运算符、逻辑运算符和关系表达式、逻辑表达式;

3.熟练掌握if语句和switch语句的使用。

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

【上机内容】

一、选择结构程序设计

【示例】

【例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"stdio.h"

main()

{

inta,b,c,max;/*定义四个整型变量*/

scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);/*注意输入数据的格式*/

if(a>=b)max=a;/*若a>=b,则max=a*/

elsemax=b;/*否则max=b*/

if(c>max)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】输入某学生的成绩,经处理后给出学生的等级,等级分类如下:

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嵌套结构,先判断输入的成绩是否在0~100之间。

#include"stdio.h"

main()

{

intscore;

chargrade;

printf("\nPleaseinputastudentscore:

");

scanf("%f",&score);

if(score>100||score<0)printf("\ninputerror!

\n");

else

{

if(score>=90)grade='A';

elseif(score>=80)grade='B';

elseif(score>=70)grade='C';

elseif(score>=60)grade='D';

elsegrade='E';

printf("\nthestudentgrade:

%c\n",grade);

}

}

输入若干测试数据,调试程序。

测试数据要覆盖所有路径,注意临界值,例如此题中得100分,60分,0分以及小于0和大于100的数据。

方法二:

用switch语句

分析:

switch语句是用于处理多分支的语句。

注意,case后的表达式必须是一个常量表达式,所以在以用switch语句之前,必须把0~100之间的成绩分别化成相关的常量。

所有A(除100以外),B,C,D类的成绩的共同特点是十位数相同,此外都是E类。

则由此可得把score除10取整,化为相应的常数。

#include"stdio.h"

main()

{

intg,s;

charch;

printf("\ninputastudentgrade:

");

scanf("%d",&g);

s=g/10;

if(s<0||s>10)

printf("\ninputerror!

");

else

{

switch(s){

case10:

case9:

ch='A';break;

case8:

ch='B';break;

case7:

ch='C';break;

case6:

ch='D';break;

default:

ch='E';

}

printf("\nthestudentscort:

%c",ch);

}

}

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

【例3】有一函数:

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

分析:

y是一个分段函数表达式。

要根据x的不同区间来计算y的值,所以应使用if语句。

main()

{

intx,y;

printf(“pleaseinputx:

”);

scanf(“%d”,&x);

if(x<1)y=x;

elseif(x<10)y=2*x-1;

elsey=3*x-11;

printf(“y=%d\n”,y);

}

【练习一】

1.C语言如何表示“真”与“假”?

系统如何判断一个量的“真”与“假”?

2.写出下面各逻辑表达式的值。

设a=3,b=4,c=5

(1)a+b>c&&b==c

(2)a||b+c&&b-c

(3)!

(a>b)&&!

c||1

(4)!

(x=a)&&(y=b)&&0

(5)!

(a+b)+c-1&&b+c/2

3.有3个整数a、b、c,由键盘输入,输出其中最大的数。

4.给出一百分制成绩,要求输出成绩等级A、B、C、D、E。

90分以上为A,80~89为B,70~79分为C,60~69分为D,60分以下为E。

5.给一个不多于5位的正整数,要求:

a.求出它是几位数;

b.分别打出每一位数字;

c.按逆序打出各位数字,例如原数为321,应输出123。

6.输入4个整数,要求按由小到大的顺序输出。

二、循环结构程序设计

【示例】

【例1】求5!

main()

{

intn,t;

n=1;t=1;

while(t<=5)

{

n=n*t;

t=t+1;

}

printf("%d!

=d\n",5,n);

}

【例2】求和s=1!

+2!

+3!

main()

{

intn,s=0,t=1;

for(n=1;n<=3;n++)

{

t=t*n;

s=s+t;

}

printf("s=%d",s);

}

【例3】求和s=1!

+3!

+5!

main()

{

ints=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("s=%d\n",s);

}

【例4】求和s=3+33+333

main()

{

ints=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()

{

intn,t,;

floata=2,b=1,s=0;

for(n=1;n<=10;n++)

{

s=s+a/b;

t=a;

a=a+b;

b=t;

}

printf(“%f”,s);

}

【例6】打印所有的“水仙花数”。

“水仙花数”是一个三位数,其各位数立方和等于该数本身。

main()

{

inti,j,k,n;

for(n=100;n<=999;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",n);

}

}

【例7】一个数如果恰好等于它的因子之和,这个数就称为完数。

求100之内的所有完数。

main()

{

intn,s,j;

for(n=1;n<=100;n++)

{

s=0;

for(j=1;j

if(n%j==0)s=s+j;

if(s==n)

printf("%d\n",s);

}

}

【例8】计算两个数的最大公约数。

分析:

随机输入两个整数m,n(默认m>n),使k为m除以n的余数,如果m能被n整除,则k值为0,n为这两个数的最大公约数,否则,使k代替n,n代替m,重复以上过程,直到k值为0。

#include"stdio.h"

main()

{

intm,n,k;

printf("Entertwonumbers:

");

scanf("%d,%d",&m,&n);

if(m>0&&n>0)/*限定两个正整数*/

{

k=m%n;

while(k!

=0)

{

m=n;

n=k;

k=m%n;

}

printf("Thegreatestcommondivistoris:

%d\n",n);

}

elseprintf("Nonpositivevaluesnotallowed\n");

}

【例9】用牛顿迭代法求方程2x3-4x2+3x-6=0在1.0附近的根。

#include"math.h"

main()

{

floatx,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\n",x);

}

【例10】打印下列图案

*

***

*****

*******

main()

{

inti,j;

for(i=1;i<=4;i++)

{

for(j=1;j<=4-i;j++)

printf("");

for(j=1;j<=2*i-1;j++)

printf("*");

printf("\n");

}

}

【例11】判断m是否是素数。

#include

main()

{

intm,i,k;

scanf("%d",&m);

k=sqrt(m+1);

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

if(m%i==0)break;

if(i>=k+1)printf("%disaprimenumber\n",m);

elseprintf("%disnotaprimenumber\n",m);

}

【练习二】

1.输入两个正整数m和n,求其最大公约数和最小公倍数。

2.求Sn=a+aa+aaa+…+aa…a之值,其中a是一个数字。

例如:

2+22+222+2222+22222(此时n=5),n由键盘输入。

3.求和1!

+2!

+3!

+4!

+…20!

4.用迭代法求x=

求平方根的迭公式为:

要求前后两次求出的x的差的绝对值小于10-5

5.用牛顿迭代求方程2x3-4x2+3x-6=0在1.5附近的根。

6.打印下列图案

*

***

*****

***

*

实验三数组程序设计

【目的与要求】

1.掌握数组的定义、赋值和输入输出的方法;

2.掌握字符数组的使用;

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

【上机内容】

【示例】

【例1】在键盘上输入N个整数,将这些数按照从小到大的次序排列输出。

分析:

C中数组长度必须是确定大小,即指定N的值。

排序的方法有多种,在此使用“起泡排序”和“选择排序”法设计算法。

方法一:

起泡排序

从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。

第一遍的(N-1)次比较后,最大的数已放在最后,第二遍只需考虑前(N-1)个数,以此类推直到第(N-1)遍比较后就可以完成排序。

源程序如下:

#include"stdio.h"

#defineN10

main()

{

inta[N],i,j,temp;

printf("pleaseinput%dnumbers\n",N);

for(i=0;i

scanf("%d",&a[i]);

for(i=0;i

for(j=0;j

{

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

{

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

}

}

printf("thearrayaftersort:

\n");

for(i=0;i

printf("%5d",a[i]);

}

方法二:

选择排序

首先找出值最小的数,然后把这个数与第一个数交换,这样值最小的数就放到了第一个位置;然后,在从剩下的数中找

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1