C语言实验指导.docx

上传人:b****5 文档编号:28053795 上传时间:2023-07-07 格式:DOCX 页数:44 大小:120.83KB
下载 相关 举报
C语言实验指导.docx_第1页
第1页 / 共44页
C语言实验指导.docx_第2页
第2页 / 共44页
C语言实验指导.docx_第3页
第3页 / 共44页
C语言实验指导.docx_第4页
第4页 / 共44页
C语言实验指导.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

C语言实验指导.docx

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

C语言实验指导.docx

C语言实验指导

C语言实验指导书

实验一:

简单的C语言程序

一、实验目的

1.了解C语言的语法结构和书写格式;

2.掌握C语言数据类型以及变量的定义和赋值;掌握运算符的种类、运算优先级和结合性;掌握不同类型数据间的转换和运算。

2.掌握C语言的表达式。

3.掌握C程序的编辑、编译、连接和运行的过程。

二、实验内容

1.输入并运行以下程序:

#include

voidmain()

{charc1,c2;

c1=97;

c2=98;

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

printf(“%d%d\n”,c1,c2);

}

在此基础上

①将第三行、第四行改为:

c1=321;c2=353;(类型转换)

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

②将第二行改为:

intc1,c2;

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

2.输入并运行以下程序:

①#include

voidmain()

{

inta,b,x;

x=(a=3,b=a--);

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

}

x=3,a=2,b=3

②#include

voidmain()

{floatf1,f2,f3,f4;

intm1,m2;

f1=f2=f3=f4=2;

m1=m2=1;

printf(“%d\n”,(m1=f1>=f2)&&(m2=f3

}

③#include

voidmain()

{floatf=13.8;

intn;

n=(int)f%3;

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

}

3.输入并运行以下程序:

#include

voidmain()

{inti=8,j=10,m,n;

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

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

}

分别作以下改动并运行:

①将程序改为:

#include

voidmain()

{inti=8,j=10;

printf(“%d,%d\n”,i++,j++);(8,10)

}

②在①的基础上,将printf语句改为:

printf(“%d,%d\n”,++i,++j);(9,11)

③再将printf语句分别改为:

printf(“%d,%d,%d,%d\n”,i,j,i++,j++);(8,10,8,10)

printf(“%d,%d,%d,%d\n”,++i,++j,i,j);(9,11,8,10)

④程序改为:

main()

{inti=8,j=10,m=0,n=0;

m+=i++;

n-=--j;

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

}

(i=9,j=9,m=8,n=-9)

4.请将下列给出的两个程序段分别输入计算机后,分析其运行结果:

①voidmain()

{intnum;

num=32767;

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

}

②voidmain()

{inta=-2;

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

}

实验二、输入输出函数的使用

一、实验目的

掌握数据的输入输出的方法,能正确使用各种格式转换符。

二、实验内容

1.上机输入以下程序:

#include

voidmain()

{

inta,b;

floatd,e;

charc1,c2;

doublef,g;

longm,n;

unsignedintp,q;

a=61;b=62;

c1='a';c2='b';

d=3.56;e=-6.87;

f=3157.890121;g=0.123456789;

m=50000;n=-60000;

p=32768;q=40000;

printf("a=%d,b=%d\nc1=%c,c2=%c\nd=%6.2f,e=%6.2f\n",a,b,c1,c2,d,e);

printf("f=%15.6f,g=%15.12f\nm=%ld,n=%ld\np=%u,q=%x\n",f,g,m,n,p,q);

}

运行此程序并分析结果。

2.键盘输入与屏幕输出练习

问题1:

要使下面程序的输出语句在屏幕上显示1,2,34,则从键盘输入的数据格式应为以下备选答案中的哪一个?

#include

main()

{

chara,b;

intc;

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

printf("%c,%c,%d\n",a,b,c);

}

A)1234B)1,2,34

C)’1’,’2’,34D)1234

问题2:

与上面程序的键盘输入相同的情况下,要使上面程序的输出语句在屏幕上显示1234,则应修改程序中的哪条语句?

怎样修改?

问题3:

要使上面程序的键盘输入数据格式为1,2,34,输出语句在屏幕上显示的结果也为1,2,34,则应修改程序中的哪条语句?

怎样修改?

问题4:

要使上面程序的键盘输入数据格式为1,2,34,而输出语句在屏幕上显示的结果为’1’,’2’,34,则应修改程序中的哪条语句?

怎样修改?

问题5:

要使上面程序的键盘输入无论用下面哪种格式输入数据,程序在屏幕上的输出结果都为’1’,’2’,34,则程序应修改程序中的哪条语句?

怎样修改?

第一种输入方式:

1234↙(以空格作为分隔符)

第二种输入方式:

1234↙(以Tab键作为分隔符)

第三种输入方式:

1↙

2↙

34↙(以回车符作为分隔符)

答案:

D

printf("%c%c%d\n",a,b,c);

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

printf("%c,%c,%d\n",a,b,c);

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

printf("'%c','%c',%d\n",a,b,c);

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

printf("'%d','%d',%d\n",a,b,c);

3.编程:

由键盘输入学生三门课(英语、数学和程序设计)成绩,计算并输出总成绩、平均成绩。

【编程解析】

(1)程序的输入与输出:

输入三门课的成绩English、math、program,输出总成绩sum及平均成绩average。

(2)数据结构:

intEnglish,math,program,sum;floataverage;

(3)

解决问题的关键算法:

求总成绩:

三门课成绩相加;求平均成绩:

总成绩除以3。

#include

voidmain()

{

intenglish,math,program,sum;

floataverage;

printf("Enterthescoreofenglish,mathandprogram:

\n");

scanf("%d%d%d",&english,&math,&program);

sum=english+math+program;

average=sum/3.0;

printf("sum=%d\t",sum);

printf("average=%5.1f\n",average);

}

程序运行结果如下:

EnterthescoreofEnglish,mathandprogram:

806997↙

sum=246average=82.0

实验三:

选择结构程序设计

【实验目的】

1.了解C语句表示逻辑量的方法,0代表假和1代表真;

2.正确使用关系表达式和逻辑表达式表达条件。

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

1.有一个函数,定义如下。

用分支结构编写一程序,根据用户输入的自变量

的值,计算函数值。

【参考源程序】

#include"stdio.h"

voidmain()

{floatx;

pintf(“inputx:

\n”);

scanf(“%f”,&x);

if(x<0.0)

printf(“y=0\n”);

elseif(x>=0.0&&x<=50.0)

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

else

printf(“y=%f\n”,x*x);

}

2.编写一个程序,要求输入一个字符并判断它是字母字符、数字字符、还是其他字符。

【编程解析】

(1)程序的输入与输出:

程序要求输入一个字符ch。

程序要求输出字符的类型,即字母(alpha)、数字(numeric)或其他字符。

(2)数据结构:

charch

(3)解决问题的关键算法:

判断字符的类别:

若字符在’a’到’z’之间或者在’A’到’Z’之间,则字符为字母字符;若字符在'0'到'9'之间,则为数字字符;否则,为其他字符。

【算法流程图】如图2-3所示。

【参考源程序】

#include

main()

{

charch;

printf("Enterancharacter:

");

scanf("%c",&ch);

if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')

printf("%cisanalpha\n",ch);

else

if(ch>='0'&&ch<='9')

printf("%cisanumeric\n",ch);

else

printf("%cisothercharacter\n",ch);

}

程序运行结果如下:

Enterancharacter:

a↙

aisanalpha

或者

Enterancharacter:

*↙

*isothercharacter

此问题求解是比较简单的分支问题,熟悉简单的分支语句就可以为解决复杂的分支语句奠定基础。

3.用switch语句编写程序:

某托儿所收2岁到6岁的孩子,2岁、3岁孩子进小班(Lowerclass);4岁孩子进中班(Middleclass);5岁、6岁孩子进大班(Higherclass)。

编写程序(分别用switch语句和IF语句两种方式编程),输入孩子年龄,输出年龄及进入的班号。

如:

输入:

3,输出:

age:

3,enterLowerclass。

【参考源程序】

#include

main()

{

intage;

printf("Entertheageofchild(2~6):

");

scanf("%d",&age);

switch(age)

{

case2:

case3:

printf(“age:

%d,enterlowerclass”,age);

break;

case4:

printf(“age:

%d,entermiddleclass”,age);

break;

case5:

case6:

printf(“age:

%d,enterhigherclass”,age);

break;

default:

printf(“theageerror\n”);

}

}

4.设计作业

输入整数a和b,若a2+b2大于100,则输入a2+b2百位以上的数字,否则输出两数之和。

实验四 循环结构程序设计

【实验目的】

  1.学习循环语句for、while和do-while语句的使用方法;

  2.学习用循环语句实现各种算法

  3.进一步熟悉TC集成环境的使用方法。

【实验内容】

1.使用while循环求两个正整数的最小公倍数。

【参考源程序】

#include"stdio.h"

voidmain()

{intm,n,result;

printf(“inputtwointegers:

”);

scanf(“%d%d”,&m,&n);

result=m

n:

m;

while(!

(result%m==0&&result%n==0))

result++;

printf(“Theleastcommonmultipleofmandnis%d\n”,result);

}

2.打印500以内的“水仙花数”。

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

#include

voidmain()

{

inti,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",n);

}

}

3.编写一个程序,把用户输入的数据累加,直到输入零为止,输出累加的结果。

【编程解析】

(1)程序的输入与输出:

输入若干个数(正数或负数),以0结束输入。

输出输入数据的累加和。

  

(2)数据结构:

floatsum,d。

(3)关键算法:

求累加和,先将sum初始化为0,每输入一个数d,判断它是否为0,若为0就跳出循环,否则将其累加到sum中。

【算法流程图】如图2-4所示。

【参考源程序】

#include

voidmain()

{

floartsum=0,d;

printf("Enteraserialofnumbersendedby0:

\n");

for(;;)

{

scanf("%f",&d);

if(d==0)break;

sum+=d;

}

printf("sum=%g\n",sum);

}

程序运行结果如下:

Enteraserialofnumbersendedby0:

12 45.624.5306 9 0↙

sum=127.1

该程序实现了累加器的功能。

此思路可扩展到实现任意数的累加、连乘等功能。

4.编写一个程序,输入一个正整数n,求sum=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。

【编程解析】

(1)程序的输入与输出:

输入一个正整数n,输出1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。

  

(2)数据结构:

inti,j,n,s1,sum

(3)解决问题关键算法:

求和。

采用两层循环求解,外层循环i从1到n,内层循环j从1到i。

【算法流程图】如图2-5所示。

【参考源程序】

#include

main()

{

inti,j,n,s,sum=0;

printf("Enteraninteger:

");

scanf("%d",&n);

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

{

s=0;

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

s+=j;

sum+=s;

}

print("sum=%d\n",sum);

}

程序运行结果如下:

Enteraninteger:

10↙

sum=220

此题用到循环的嵌套。

多重循环中要处理好各循环之间的依赖关系。

5.设计作业

1键盘输入字符,分别统计字符(不分大小写)、数字、空格和其它符号的个数,遇!

号结束。

相关函数:

getchar()

2输出图案:

 *  ******

*********

***********

*********

*

实验五函数

【实验目的】

  1.学习C语言中函数的定义和调用方法。

2.掌握通过参数在函数间传递数据的方法。

3.学习递归程序设计,掌握递归函数的编写规律。

4.熟悉包含函数调用的程序的调试方法。

5.实验目的:

掌握宏定义、宏调用,以及宏展的处理过程,掌握文件包含的概念和使用。

【实验内容】

程序示例:

功能:

fun函数是一个判断整数是否为素数的函数,使用该函数求1000以内的素数的个数以及它们的平均值。

#include"math.h"

main()

{inta=0,k;/*a保存素数之和*/

floatav;/*av保存1000以内素数的平均值*/

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

if(fun(k))/*判断k是否为素数*/

a+=k;

av=a/1000;

printf("av=%f\n",av);

}

fun(intn)/*判断输入的整数是否为素数*/

{inti,y=0;

for(i=2;i

if(n%i==0)y=1;

elsey=0;

returny;

}

编程实现:

1.编制求两数相乘的函数。

【参考源程序】

#include"stdio.h"

floatmul(floatx,floaty)

{

floatz;

z=x*y;

return(z);

}

main()

{

floatx,y,z,m;

scanf("%f,%f",&x,y);

z=mul(x,y);

printf("Theresultis%f",&z);

}

2.写两个函数,分别求两个正数的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果。

两个正数由键盘输入。

【参考源程序】

#include"stdio.h"

inthcf(intu,intv)

{

inta,b,t,r;

if(u>=v)

{

t=u;u=v;v=t;

}

a=u;b=v;

while((r=b%a)!

=0)

{

b=a;a=r;

}

return(a);

}

intlcd(intu,intv,inth)

{

return(u*v/h);

}

mian()

{

intu,v,h,l;

scanf("%d,%d",&u,&v);

h=hcf(u,v);

printf("H.C.F=%d\n",h);

l=lcd(u,v,h);

print("L.C.D=%d\n",l);

}

******3~4是递归调用练习*****

3.求x的n次方。

采用递归调用方法计算。

1当n=0时

xn=

x*xn-1当n>0时

本题比较简单,可以直接按照数学公式进行编写。

#include

#include

main()

{

intx,n;

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

printf("%d**%d=%d\n",x,n,power(x,n));

}

intpower(intx,intn)

{

if(n==0)

return

(1);

else

return(x*power(x,n-1));

}

4.倒序输出26个英文大写字母。

#include

voidprintletter(charc)

{

if(c>='A')

{

putchar(c);

c--;

printletter(c);

}

}

main()

{charc='Z';

printletter(c);

}

5.全局变量与局部变量,计算运行结果

#include

inta,b=5;

voidmain()

{

inta=10,c;

c=a+b;

printf(“%d%d%d”,a,c,b);

}

6.试分析以下宏替换后的形式,计算输出结果。

要求:

先计算运行结果,然后利用程序验证。

#include"stdio.h"

#defineCX(y)2.5+y

#definePR(a)printf("%d",(int)(a))

#definePR1(a)PR(a);putchar('\n')

main()

{intx=2;

PR1(CX(5)*x);

}

7.定义一个带参数的宏,使两个参数的值互换。

设计主函数调用宏将一维数组a和b的值进行交换。

#include

#definechang(x,y)t=x;x=y;y=t

voidmain()

{

intx,y,t;

printf("Inputtwonumbers:

");

scanf("%d%d",&x,&y);

chang(x,y);

printf("x=%d,y=%d\n",x,y);

}

实验六一维数组

【实验目的】

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

2.掌握字符数组和字符串处理函数的使用;

3.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等);

【实验内容】

1.调试程序实现功能:

青年歌手参加歌曲大奖赛,有10个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。

分析:

本题的核心是排序。

将评委所打的10个分数利用数组按增序(或降序)排列,计算数组中除第一个和最后一个分数以外的数的平均分,其中排序部分这里用选择法实现。

【参考源程序】

voidmain()

{

inti,j,min,max;

floattemp,ave=0;

floata[11];

printf("\n输入评委所打的分数:

\n");

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

scanf("%f",a[i]);

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

{

min=i;

for(j=i+1;j<=10;j++)

if(a[min]>a[j])

min=j;

temp=a[i];

a[i]=a[min];

a[min]=temp;

}

for(i=2;i<=9;i++)/*注意i值的变化范围*/

ave=ave+a[i];

printf("选手所得最后分数:

%6.1f",ave/8);

printf("\n");

}

2.输入一串字符,计算其中空格的个数。

【参考源程序】

#include

main()

{charc[30];

inti,sum=0;

gets(c);

for(i=0;i

if(c[i]=='')

sum=sum+1;

print("空格数为:

%d\n",&sum);

}

3.有一递推数列,满足:

使用数组编写程序,顺序打印出

的值。

【参考源程序】

#include"stdio.h"

voidmian()

{

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

当前位置:首页 > PPT模板 > 商务科技

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

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