工学C语言实验指导讲义2.docx
- 文档编号:29195046
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:55
- 大小:45.60KB
工学C语言实验指导讲义2.docx
《工学C语言实验指导讲义2.docx》由会员分享,可在线阅读,更多相关《工学C语言实验指导讲义2.docx(55页珍藏版)》请在冰豆网上搜索。
工学C语言实验指导讲义2
C语言实验指导讲义
石永华编
滁州学院机械与电子工程学院
二零一一年九月
前言
学习C语言程序设计应当充分注意实践环节,要求学生多编程序,多上机调试程序。
上机实验的目的决不仅是为了验证所编程序的正确性,其主要目的在于掌握上机操作要领和调试程序技术。
不要满足于通过自己所编的程序,在调通一个程序后,可以自己改变程序中某些部分,观察和分析在不同情况下的编译和运行结果。
上机实验的步骤如下:
1、按实验指示的要求,事先编好程序,准备好数据,经人工静态检查无误,并事先分析可能出现的问题,方可上机。
2、上机输入和调试程序。
3、整理上机实验结果,写出上机实验报告,报告应包括:
(1)题目要求
(2)算法说明(可以用流程图来表示)
(3)程序清单
(4)运行结果
(5)分析与思考,如果程序未能通过,应在事后找出程序中的错误,分析其原因。
第一章工作平台
一、目的和要求
1、熟悉C语言程序的支持运行环境,了解所用计算机系统的软、硬件配置和使用方法。
2、初步了解运行一个C语言程序的过程。
二、实验环境
硬件环境:
计算机(windowsxp系统)软件环境:
TurboC3.0或VC++6.0
三、实验内容
1、输入并运行下面程序。
实验程序:
main()
{
printf("Iamastudentinthedepartmentofphysics。
");
printf("Iwilldevotemyselfformystudy。
");
}
实验结果:
2、输入并运行下面程序,并分析结果是正确。
实验程序:
main()
{inta,b,sum;
a=200;b=345;
sum=a+b;
printf("Sumis%d\n",Sum);
}
实验结果:
3、编写一个求三个整数之和的程序。
参考程序:
(1)只用main函数
main()
{inta,b,c,sum;
a=100;b=200;c=300;
sum=a+b+c;
printf("sum=is%d\n",sum);
}
(2)用求两个整数之和的函数实现:
main()
{intadd(intx,inty);
inta,b,c,sum;
printf("Entertwonumbersa,b:
");
scanf("%d,%d",&a,&b);
sum=add(a,b);
printf("Enteronenumberc:
");
scanf("%d",&c);
sum=add(sum,c);
printf("sum=%d\n",sum);
}
intadd(intx,inty)
{intz;
z=x+y;
return(z);
}
4、编写一个求0~100之间全部偶数之和的程序:
参考程序:
main()
{intm,sum;
sum=0;
for(m=0;m<=100;m=m+2)
sum=sum+m;
printf("sum=%d\n",s);
}
5、编写一个程序,从5个整数中找出最小数,并显示此数。
参考程序:
main()
{inta,b,c,d,e,t;
scanf("%d,%d,%d,%d,%d,",&a,&b,&c,&d,&e);
if(a>b){t=a;a=b;b=t;}
if(a>c){t=a;a=c;c=t;}
if(a>d){t=a;a=d;d=t;}
if(a>e){t=a;a=e;e=t;}
printf("min=%d\n",a);
}
第二章C语言基础
一、目的和要求
1、进一步掌调试的方法
2、掌握数据的输入和输出方法
3、掌握有关运算符与表达式的运用
二、实验内容和步骤
1、上机运行以下程序,并分析结果。
main()
{intx;
x=-1+2*3-4;
printf("%d\n",x);
x=1+2%3-4;
printf("%d\n",x);
x=-1*2%-4/3;
printf("%d\n",x);
x=(5+4)%3/2;
printf("%d\n",x);
}
2、调试下面程序,分析结果。
main()
{intx,y,z;
x=y=z=0;
++x||++y&&++z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);
x=y=z=0;
++x&&++y||++z;
printf("x=5d\ty=%d\tz=%d\n",x,y,z);
x=y=z=0;
++x&&++y&&++z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);
x=y=z=-1;
++x&&++y&&++z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);
x=y=z=-1;
++x&&++y||++z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);
x=y=z=-1;
++x||++y&&++z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);
}
3、输入并运行下列程序。
main()
{inti,j,m,n;
i=8;j=10;
m=++i;n=j++;
printf("%d,%d,%d,%d",i,j,m,n);
}
分别以下改动并运行:
(1)将第4行改为:
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,n=%d,i,j,m,n);
}
4、编制一个程序,要求:
使用scanf()函数输入字符串和十六进制数。
读入后由printf()函数分别打印输出。
第一次由scanf("%s",a);读入字符串,第二次由scanf("%x",&b);读入十六进制数读入完毕后,由两个printf()函数输出。
#include"stdio.h"
main()
{chara[25];
intb;
scanf("%s,a);
scanf"%x",&b);
printf("****stringis:
%s****\n",a);
printf("****valueis:
%x****\n",b);
}
5、输入并运行下面程序。
main()
{inta,b;
floatc,d;
longe,f;
unsignedintu,v;
charc1,c2;
scanf("%d,%d",&a,&b);
scanf("%f,%f",&c,&d);
scanf(%ld,%ld",&e,&f);
scanf("%o,%o",&u,&v);
scanf("%c,%c",&c1,&c2);
printf("\n");
printf("a=%7d,b=%7d\n",a,b);
printf("c=%10.2f,d=%10.2f\n",c,d);
printf("e=%17ld,f=%17ld\n",e,f);
printf("u=%o,v=%o\n",u,v);
printf("c1=%c,c2=%c\n",c1,c2);
}
输入数据:
a=123,b=456,c=17.6,d=71837.65,e=70000,f=2174506,u=62000,v=58765,c1='a',c2='b'
分析运行结果,特别注意输出c1,c2的值是什么?
什么原因?
(1)在scanf("%c,%c",&c1,&c2);语句之前加一个语句:
getchar();再编译,分析编译信息,再在程序第一行加一个命令行:
#include"math.h"分析结果。
(2)将输入e和f的语句改为:
scanf("%d,%d",&e,&f);运行并输入上述数据,并分析结果。
(3)将输入u,v的语句改为:
scanf("%d,%d",&u,&v);运行并分析结果。
(4)将输出e,f的语句改为:
printf("e=%17d,f=17d\n",e,f);运行并分析结果。
(5)将输出u,v的语句改为:
printf("u=%u,v=%u\n",u,v);或printf("u=%d,v=%d\n",u,v);运行并分析结果。
6、思考题:
编写一个程序,用getchar函数读入两个字符给c1,c2。
然后分别用putchar函数和printf函数输出这两个字符。
并思考以下问题:
(1)变量c1,c2应定义为字符型或整型?
二者皆可?
(2)要求输出c1和c2值的ASCII码,应如何处理?
用putchar函数还是printf函数?
(3)整型变量与字符变量是否在任何情况下都可以互相代替?
如:
charc1,c2;与intc1,c2;是否无条件等价?
参考程序:
#include"stdio.h"
main()
{charc1,c2;
printf("请输入两个字符C1,C2:
\n");
scanf("%c,%c",&c1,&c2);
printf("用putchar语句输出结果为:
\n");
putchar(c1);
putchar(c2);
printf("\n");
printf("用printf语句输出结果为:
\n");
printf("%c%c\n",c1,c2);
}
(1)用字符或整型定义皆可
(2)用printf函数
(3)字符变量在计算机内占一个字节,而整型变量占两个字节因此整型变量在可输出字符范围内(微机上,ASCII码为0~255的字符)是可以与字符数据互相转换的。
第三章控制语句
一、目的和要求
1、熟悉掌握if语句的使用
2、熟悉掌握三种循环语句的使用
3、掌握break和continue语句的使用
二、实验内容和步骤
1、输入并运行下面的程序
#include"stdio.h"
main()
{intx;
scanf("pleaseinputaninteger:
%d\n",&x);
if(x>=0)
if(x==0)
printf("x=0,secondifexecuted\n");
else
printf("x>0,elseexecuted\n");
}
分别输入0,小于0和大于0的数,结果是什么?
else与哪个if匹配?
2、输入并运行下列程序
#include"stdio.h"
main()
{intx;
scanf("x=%d\n",&x);
switch(x){
case
(1):
printf("h:
\n");
case
(2):
printf("bye-bye\n");
case(3):
printf"now\n");
default:
printf("then\n");
}
(1)分别给x赋值1,2,3,4,结果如何?
(2)把default放于case
(2)之前,重复
(1);
(3)在case
(2)之前加上break语句,重复
(1);
(4)在前三种情形后都加上break语句,重复
(1)。
3、设计一个程序判断输入年份是否闰年的程序。
参考程序:
main()
{charch;
intyear;
do
{printf("pleaseenteryear\n");
scanf("%d",&year);
if(year%4==0&&year%100!
=0||year%400==0)
printf("%disLEAP!
\n",year);
else
printf("%disNOTleap!
\n",year);
printf("ifcontinued,pressY,otherwisepressanykeyabort\n");
scanf("%ld",&ch);
}while(ch=='Y'||ch=='y');
}
4、编写程序计算e=1+1/1!
+1/2!
+1/3!
+...+1/n!
,使误差小于给定的E。
设E=0.00001。
上机调试通过此程序。
参考程序:
main()
{inti=1;
doublee=1.0,y,x,datax;
printf("\npleaseentererror:
");
scanf("%lf",&datax);
x=1.0;
y=1/x;
while(y)=datax)
{x=x*i;
y=1/x;
e=e+y;
++i;
}
printf("%12.10lf",e);
}
5、编写程序求
参考程序:
main()
{intN1=100,N2=50,N3=10;
floatk;
floats1=0,s2=0,s3=0;
for(k=1;k<=N1;k++)
{s1=s1+k;
}
for(k=1;k<=N2;k++)
{s2=s2+k*k;
}
for(k=1;k<=N3;k++)
{s3=s3+1/k;
}
printf("总和=%8.2f\n",s1+s2+s3);
}
6、思考题:
企业发放的奖金根据利润提成。
利润(I)低于成或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分。
可提成7。
5%;利润高于20万元,低于40万元时,高于20万元的部分按5%提成;40万元100万元时,超过100万的部分按1%提成。
从键盘输入当月利润I,求应发放奖金总数。
要求:
(1)用if语句
(2)用switch语句编写程序。
参考程序:
(1)用if语句
main()
{longi;
floatbonus,bon1,bon2,bon4,bon6,bon10;
bon1=100000*0.;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+200000*0.015;
printf("请输入利润:
");
scanf("%ld",&i);
if(i<=1e5)
bonws=i*0.1;
elseif(i<=2e5)
bonus=bon1+(i-100000)*0.075;
elseif(i<=4e5)
bonus=bon2+(i-200000)*0.05;
elseif(i<=6e5)
bonus=bon4+(i-400000)*0.03;
elseif(i<=1e6)
bonus=bon6+(i-600000)*0.015;
else
bonus=bon10+(i-1000000)*0.01;
printf("奖金是%10.2f,bonus);
}
(2)用switch语句编写程序
main()
{longi;
floatbonus,bon1,bon2,bon4,bon6,bon10;
intbranch;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
printf("请输入利润:
");
scanf("%ld",&i);
branch=i/100000;
if(branch>10)
branch=10;
switch(branch)
{case0:
bonus=i*0.1;break;
case1:
bonus=bon1+(i-100000)*0.075;break;
case2:
case3:
bonus=bon2+(i-200000)*0.05;break;
case4:
case5:
bonus=bon4+(i-400000)*0.03;break;
case6:
case7:
case8:
case9:
bonus=bon6+(i-600000)*0.015;break;
case10:
bonus=bon10+(i-1000000)*0.01;
}
printf("奖金是%10.2f",bonus);
}
第四章函数与程序控制
一、目的和要求
1、掌握函数的定义和调用方法
2、学会使用递归方法进行程序设计,掌握递归函数编写的规律
3、学会使用宏替换编写程序,弄清"文件包含"的作用
二、实验内容与步骤
1、编写程序在屏幕上画一条正弦曲线
参考程序:
#include"stdio.h"
main()
{charp[30];
intts;
doublerd,n,sin(),cos();
printf("-101\n");
/*空9格*/
printf("III\n);
/*空10格*/
for(n=0;n<=360;n=n+15)
{strcpy(p,"I");/*空10格*/
ts=(int)(10+10*sin(n*rd));
p[ts]='*'。
printf("%5.0f%s\n",n,p);
}
}
2、编写一个函数,求出一个正整数的所有因子,如
。
参考程序:
#include"stdio.h"
viodfacters(intnumber)
{inti,factor;
for(i=z;i<=number;i++)
{if(number%i==0)
{factor=i;
break;
}
}
printf("%d\*",factor);
if(number!
=i)
{number=number/i;
factors(number);
}
else
{for(i=0;i {putcher('\b'); putcher(''); } } } main() {intaa; printf("\nPleaseenteranumber\n"); scanf("%d",&aa); printf("%d=",aa); facters(aa); } 3、写两个函数,分别求两个整数的最大公约数和最小公倍数, 用主函数调用这两个函数并输出结果。 两个整由键盘输入。 参考程序: 两个整数为u和v最小公倍数=u v/最大公约数 hcf(u,v) intu,v; {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); } led(u,v,h) intu,v,h; {return(u*v/h); } main() {intu,v,h,l; scanf("%d,%d",&u,&v); h=hef(u,v); printf("H.C.F=%d\n",h); l=led(u,v,h); printf("L.C.D=%d\n",l); } 4、定义一个宏,交换两个参数的值。 参考程序: 交换两个参数的值的宏定义为: #defineSWAP(a,b)(a)=(a)+(b);(b)=(a)-(b);(a)=(a)-(b); main() {floatx,y; inti,j; printf("\nPleaseenter2floatnumber: "); scanf("%f,%f",&x,&y); printf("x=%f,y=%f\n",x,y); SWAP(x,y); printf("x=%f,y=%f\n",x,y); printf("\npleaseenter2intnumbers: "); scanf("%d%d",&i,&j); printf("i=%d,j=%d\n",i,j); SWAP(i,j); printf("i=%d,j=%d\n",i,j); } 5、给出年、月、日,计算该日是该年的第几天? 参考程序: 主函数接收从键盘输入的日期,并调用sum_day和leap函数计算天数,其中sum_day计算输入日期的天数,leap函数返回是否是闰年的信息。 main() {intyear,moth,day; intdays; printf("\n请输入日期(年,月,日)\n"); scanf("%d,%d,%d",&year,&month,&day); printf("\n%d,年%d月%d日",year,month,day); days=sum_day(month,day); if(leap(year)&&month>=3) days=days+1; printf("是该年的%d天\n",day); } staticintday_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31} intsum_day(month,day) intmonth;day; {inti; for(i=1,i day+=day_tab[i]; return(day); } intleap(year) intyear; {intleap; leap=year%4==0&&year%100! =! ! year%400==0; return(leap); } 6、思考题: 用弦截法求方程的根 参考程序: #include: "math.h" floatf(x) f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工学 语言 实验 指导 讲义
![提示](https://static.bdocx.com/images/bang_tan.gif)