《C语言实验指导书》.docx
《《C语言实验指导书》.docx》由会员分享,可在线阅读,更多相关《《C语言实验指导书》.docx(19页珍藏版)》请在冰点文库上搜索。
《C语言实验指导书》
C语言程序设计
实验指导书
(修订1)
张红梅编著
安徽电子信息职业技术学院
计算机科学系
2006年7月1日
目录
实验1运行简单的C程序2
实验2练习使用算术运算符5
实验3使用输入、输出函数6
实验4循环语句的使用——猜数字游戏7
实验5模拟ATM取款机界面8
实验6二维数组的应用9
实验7函数参数的传递10
实验8嵌套与递归调用的实现12
实验9结构体和共用体13
实验10文件15
实验1运行简单的C程序
一.实训目的:
1、熟悉TC运行环境
2、练习简单C程序的编写
3、熟练掌握C程序的上机运行步骤
二.实训内容:
1.实验要求:
编程求37+29的值,熟悉TC运行环境
2.分析与设计:
编写一个main()函数,将数据37和29分别用变量保存,然后用另一个变量存放两个变量的和,最后将和变量的值输出。
3.源代码:
main()
{
inta,b,sum;
a=37;
b=29;
sum=a+b;
printf(“sum=%d”,sum);
}
在TC环境中输入上面的代码后,先编译、连接,再保存,然后再运行。
具体操作步骤如下所示:
(1)编译
(2)连接
(3)保存F2
(4)运行CTRL+F9
(5)运行结果ALT+F5
按任意键返回
注意:
1、第
(1)步和第
(2)步可以合起来操作,使用快捷键F9
2、程序比较大时,最好边输入代码,边保存,以防止意外情况的发生。
实验2练习使用算术运算符
一.实训目的:
1.练习使用基本类型的变量进行编程
2.练习使用C的运算符
二.实训内容:
1.实验要求:
熟练使用运算符(%,++,--)
2.分析与设计:
求余运算符要求两个操作数都必须是整数;++和--要看清是先使用还是先自增(减)
3.源代码:
程序1:
取出一个三位整数的各个位,并输出
main()
{intx=123;charc1,c2,c3;
c1=x%10;
c2=x/10%10;
c3=x/100;
printf(“%d,%d,%d\n”,c3,c2,c1);
}
运行结果为:
1,2,3
程序2:
练习自增和自减运算符的使用
main()
{intx=2,y,z;
y=(++x)+(x++)+(++x);
z=(x--)+(--x)+(x--);
printf(“x=%d,y=%d,z=%d\n”,x,y,z);
}
运行结果:
x=2,y=12,z=12
实验3使用输入、输出函数
一.实训目的:
熟练使用格式输出函数printf()和格式输入函数scanf()
二.实训内容:
1.实验要求:
格式输入函数scanf()和格式输出函数printf()的使用
2.分析与设计:
输入函数中的普通字符需要原样输入,并注意分隔符的使用;输出函数中的格式控制符和输出项数要一一对应。
3.源代码:
程序1:
为使得a=1,b=2,c=‘A’,d=5.5,在键盘上如何输入?
#include
main()
{inta,b;
charc;
floatd;
scanf(“a=%db=%d”,&a,&b);
scanf(“%c%e\n”,&c,&d);
}
程序在运行时,输入:
a=1b=2A5.5
0
程序2:
判断下面程序的运行结果。
main()
{
intx=3,y=2,z=1;
printf(“%d,%d\n”,(++x,y++),z+2);
}
运行结果:
2,3
分析得到此结果的原因。
实验4循环语句的使用——猜数字游戏
一.实训目的:
1.熟练掌握各种循环程序设计的方法
2.利用循环结构解决一些实际问题
二.实训内容:
1.实验要求:
先利用randomize()产生一个随机数种子,再利用随机函数random(100)产生的一个0~100之间的整数,进行猜数字游戏
2.分析与设计:
利用循环,不断输入数字,与产生的随机数进行比较,直到猜中为止。
3.源代码:
#include
main()
{intr,x,n=0;
randomize();
r=random(100);
printf(“Pleaseinputanumber:
(0~100)”);
scanf(“%d”,&x);
while(x!
=r)
{if(x>r)printf(“\nbig,inputcontinue:
”);
if(x”);
scanf(“%d”,&x);
n++;
}
if(n<=5)printf(“\nverygood”);
if(n>5&&n<=10)printf(“\ngood”);
if(n>10)printf(“\nnormal”);
}
实验5模拟ATM取款机界面
一.实训目的:
1.熟练掌握分支结构if语句及其嵌套
2.掌握分析具体问题的方法
二.实训内容:
1.实验要求:
利用if语句和scanf函数模拟简单的ATM取款机界面
2.分析与设计:
用户先输入密码,密码正确后,可以进行帐户的操作,如查询,取款等。
3.源代码:
#include
main()
{
intpassword,p,number,count=1000;
printf(“pleaseinputpassword:
”);
scanf(“%d”,&password);
if(password!
=0000){
printf(“passworderror\n”);
return}
printf(“welcome!
Pleasechoiceoneoperate:
(1,2,3)\n”);
printf(“1:
count;2:
getmoney,3:
return\n”);
scanf(“%d”,&p);
switch(p)
{
case1:
printf(“\n%d”,count);break;/*帐户查询*/
case2:
printf(“\npleaseinputcountthatyouwanttoget”);
scanf(“%d”,&number);/*取款*/
if(number>count||number<0)printf(“\nerror”);
printf(“\nnow,youcantakemoney!
”);
break;
case3:
break;return;/*返回*/
default:
printf(“\nNOthisoperate”);
}
}
实验6二维数组的应用
一.实训目的:
1.掌握二维数组的定义、赋值和输入输出方法
2.熟练使用二维数组解决实际问题
二.实训内容:
1.实验要求:
利用二维数组进行矩阵的乘法运算
2.分析与设计:
×
=
3.源代码:
main()
{
inta[2][2]={{1,2},{3,4}},b[2][2]={{5,6},{7,8}};
intc[2][2]={0},i,j,k;
for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
c[i][j]+=a[i][k]*b[k][j];
for(j=0;j<2;j++)
{for(k=0;k<2;k++)
printf(“%d”,c[j][k]);
printf(“\n”);
}
}
实验7函数参数的传递
一.实训目的:
1.理解函数的形参和实参的概念和应用
2.掌握函数的值调用和引用调用的含义
3.掌握简单变量、数组和指针作为函数参数进行传递的形式
二.实训内容:
1.实验要求:
编写自定义函数:
求字符串的长度和字符串的查找
2.分析与设计:
利用字符数组保存字符串,然后根据下标解决问题
3.源代码:
程序1:
自定义函数求字符串长度
intlength(charstring[])
{intindex=0;
while(string[index]!
=’\0’)
index++;
return(index);
}
main()
{charstring[80];intlen;
printf(“pleaseinputastring:
\n”);
scanf(“%s”,string);
len=length(string);
printf(“%d”,len);
}
程序2:
自定义函数字符串的查找
intfind_string(charstring1[],charstring2[])
{chartemp;
intindex1=0,index2;
while(string1[index1]!
=’\0’)
{index2=0;
temp=string1[index1+index2];
while((string2[index2]!
=’\0’)&&(temp==string2[index2]))
{temp=string1[index1+++index2];}
if(string2[index2]==’\0’)
return(index1);
index1++;
}
return(-1);
}
main()
{charstring1[80],string2[80];
intfindresult;
scanf(“%s”,string1);
scanf(“%s”,stirng2);
findresult=find_string(string1,string2);
if(findresult)
{printf(“Find!
\n”);
printf(“positionis:
%d\n”,findresult+1);
}
elseprintf(“NotFind!
\n”);
}
实验8嵌套与递归调用的实现
一.实训目的:
1.掌握函数嵌套调用与递归调用的函数的含义
2.重点掌握函数嵌套调用与递归调用的实现过程
3.培养和锻炼解决较复杂C程序设计的能力
二.实训内容:
1.实验要求:
利用函数嵌套调用与递归调用求两个数的阶乘和
2.分析与设计:
先分别求出两个数的阶乘值,然后相加
3.源代码:
#include
#include
longsum(inta,intb)/*求两个数的阶乘和*/
{longc1,c2;
c1=factorial(a);
c2=factorial(b);
return(c1+c2);
}
longfactorial(intn)/*求一个数的阶乘*/
{longrtn=1;
inti;
for(i=1;i<=n;i++)
rtn=rtn*i;
returnrtn;
}
main()
{intn1,n2;
longresult;clrcsr();
printf(“pleaseinputtwonumber:
\n”);
scanf(“%d,%d”,&n1,&n2);
result=sum(n1,n2);
printf(“Result=%ld”,result);
getch();}
实验9结构体和共用体
一.实训目的:
1.掌握结构体类型变量的定义及使用
2.掌握结构体变量的引用形式,结构体数组的应用
3.理解结构体作为不同数据类型的一个整体在实际编程中的应用
二.实训内容:
1.实验要求:
输入6名学生的基本信息,每名学生的基本信息包括:
学号、姓名、性别、年龄、语文成绩、数学成绩、物理成绩、总分、平均分等数据项。
根据各科成绩计算总分和平均分,并输出这6名学生的信息。
2.分析与设计:
利用结构体类型数组元素存放6名学生的信息,并根据要求求出总分和平均分。
3.源代码:
#defineN6
#include“stdio.h”
structstudent
{
charnum[8];
charname[20];
charsex;
intage;
floatchi_score,math_score,phy_score;
floatsum;
floataverage;
};
main()
{
inti;
structstudentstud[N];
/*输入N名学生的基本信息*/
for(i=0;i{
printf(“\nThestudent_numberofnumber%dis:
“,i+1);
gets(stud[i].num);
printf(“\nThestudent_nameofnumber%dis:
“,i+1);
gets(stud[i].name);
printf(“\nThestudent_sexofnumber%dis:
“,i+1);
stud[i].sex=getchar();
printf(“\nThestudent_ageofnumber%dis:
“,i+1);
scanf(“%d”,&stud[i].age);
printf(“\nTheChinese_scoreofnumber%dis:
“,i+1);
scanf(“%f”,&stud[i].chi_score);
printf(“\nThemath_scoreofnumber%dis:
“,i+1);
scanf(“%f”,&stud[i].math_score);
printf(“\nThephysics_scoreofnumber%dis:
“,i+1);
scanf(“%f”,&stud[i].phy_score);
}
/*计算学生的总分和平均分*/
for(i=0;i{
stud[i].sum=stud[i.chi_score+stud[i].math_score+stud[i].phy_score;
stud[i].average=stud[i].sum/3;
}
/*输出学生的基本信息情况*/
printf(“\nNumberNameSexAgeChineseMathPhysicsSumAverage”);
printf(“\n----------------------------------------------------”);
for(i=0;i{
printf(\n%-8s%-20s%3c%3d”,stud[i].num,stud[i].name;stud[i].sex,
stud[i].age);
printf(%6.2f%6.2f%6.2f”,stud[i].chi_score,stud[i].math_score,
stud[i].phy_score);
printf(“%6.2f%6.2f”,stud[i].sum,stud[i].average);
}
printf(“\n----------------------------------------------------”);
}
实验10文件
一.实训目的:
1.掌握文件以及缓冲文件系统、文件指针的概念
2.掌握文件的打开、关闭、读、写等操作
3.学会用缓冲文件系统对文件进行简单的操作
二.实训内容:
1.实验要求:
有5个学生,每个学生有3门课的成绩,从键盘输入以下数据(包括学号、姓名、三门课成绩),计算出平均成绩,将原有数据和计算出的平均分存放在磁盘文件“student”中。
学生原有数据:
A2005001Wang89,98,67
A2005002Li70,80,90
A2005006Sun78,88,80
A2005012Zhang100,87,91
A2005020Zhao81,64,92
2.分析与设计:
用结构体数组保存学生的基本信息,利用文件的写操作将学生的基本信息写入文件“student.dat”中。
3.源代码:
#include
#dedineSIZE5
structstudent_type
{
charname[10];
intnum;
intscore[3];
intave;
}
structstudent_typestud[SIZE];
main()
{
voidsave();
inti,sum[SIZE];
FILE*fpt;
clrscr();
for(i=0;isum[i]=0;
for(i=0;i{
scanf(“%s%d%d%d%d”,stud[i].name,&stud[i].num,
&stud[i].score[0],&stud[i].score[1],&stud[i].score[2]);
sum[i]=stud[i].score[0]+stud[i].score[1]+stud[i].score[2];
stud[i].ave=sum[i]/3;
}
save();
fpt=fopen(“student.dat”,”rb”);
printf(“\n姓名学号成绩1成绩2成绩3平均分\n”);
printf(“--------------------------------------------------\n”);
for(i=0;i{
fread(&stud[i],sizeof(structstudent_type),1,fpt);
printf(“%-10s%3d%5d%5d%5d%5d\n”,stud[i].name,stud[i].num,
stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].ave);
}
fclose(fpt);
}
voidsave()
{
FILE*fp;
inti;
if((fp=fopen(“student.dat”,”wb”))==NULL)
{
printf(“本文件不能打开,出错\n”);
exit(0);
}
for(i=0;iif(fwrite(&stud[i],sizeof(structstudent_type),-1,fp)!
=1)
{
printf(“文件写入数据时出错!
\n”);
exit(0);
}
fclose(fp);
}