C程序设计实验指导书文档格式.docx
《C程序设计实验指导书文档格式.docx》由会员分享,可在线阅读,更多相关《C程序设计实验指导书文档格式.docx(52页珍藏版)》请在冰豆网上搜索。
#include<
stdio.h>
main()
{
printf("
HelloWorld!
\n"
)
}
按功能键F9进行编译和连接,观察屏幕显示的编译信息。
如果出现出错信息,信息窗口中将显示错误内容及定位错误时的语句行号,修改错误,再进行编译。
如果编译无错,按Ctrl+F9运行程序,按Alt+F5切换到用户屏,观察运行结果。
改变源程序中双引号内的字符串内容,重新编译和连接,并查看运行结果。
保存文件,查看你的工作目录下是否有该文件。
编译连接的中间文件应该在Output设置的目录中。
如果没有设置Output目录,中间文件应该在当前工作目录中。
4、输入并运行下面一个需要在运行时输入数据的程序,程序要求从键盘输入三个浮点数,输出它们的和。
{floata,b,c,sum;
printf("
inputa,b,c:
"
scanf("
%f%f%f"
&
a,&
b,&
c);
sum=a+b+c;
\nsum=%f\n"
sum);
输入该程序,然后进行编译和连接,如果出错,仔细检查并修改错误,再进行编译连接,直到没有错误为止。
按Ctrl+F9运行程序,按照屏幕提示输入a、b、c三个变量的值,变量值之间用空格分隔,输入完毕按回车键【Enter】。
查看运行结果,判断结果正确与否。
5、指出下列程序中的错误,并编译,查看给的出错信息,并改正错误,运行程序给出结果。
1)#include“stdio.h”
mian();
/*mainfunction*/
floatr,s;
/*/*risradius*/,/*sisareaofcircular*/*/
r=5.0;
s=3.1419*r*r;
printf(“%f\n”,s)
2)#include“stdio.h”;
main/*mainfunction*/
{floata,b,c,v;
/*a,b,caresides,visvolumeofcube*/
a=2.0;
b=3.0;
c=4.0;
v=a*b*c;
printf(“%f\n”,v)
}
三、分析与讨论
1.记下在调试过程中所发现的错误、系统给出的出错信息和对策。
分析讨论对策成功或失败的原因。
2.总结C程序的结构和书写规则。
3.实验中遇到的问题与解决的办法
实验二 表达式与输出函数
1.掌握C语言基本数据类型的概念,理解数据类型与运算的关系。
2.熟悉简单变量的定义和赋值方法,掌握不同类型数据之间赋值的规律。
3.学习C语言运算符优先级和结合性的概念,掌握算术表达式的计算方法及表达式计算中的类型转换方法。
4.掌握数学表达式的程序表示方法。
5.掌握printf()函数的使用
6.进一步熟悉C程序的编辑、编译、连接和运行的过程。
1.输入下面程序并运行
#include<
main()
{inta,b,c;
scanf(“%d”,&
a);
b);
a=%db=%dc=%d\n"
a,b,c);
a=%cb=%cc=%c\n"
输入:
1【Enter】
ab【Enter】
分析本题程序的输出结果,解释scanf函数的工作过程,试用其他输入数据验证你的分析结果。
2.下面表达式计算中,哪些地方会发生类型转换?
各个转换从什么类型转换到什么类型?
表达式计算的结果是什么?
试编程进行验证。
(1)2.5+2*7%2/4
(2)4*(2L+6.5)-12
(3)10/(5*3)(4)2*10.0/(5*3)
3.设:
x=2.7,a=8,y=4.5,编程计算下面表达式的值:
y+a%5*(int)(x+y)/2%4
4.输入并运行下面程序,对照程序分析运行结果:
(1)将一个大于32767的长整型数赋给整型变量,会得到什么结果。
(2)将一个负整数赋给一个无符号的变量,会得到什么结果。
(3)将一个字符型变量赋给一个整型变量,会得到什么结果。
程序如下:
{inta,b;
longd,e;
unsignedf,g;
a=100;
b=-100;
d=50000;
e=32767;
%d,%d\n"
a,b);
%ld,%ld\n"
d,e);
f=a;
g=b;
%u,%u\n"
f,g);
a=’c’;
%d\n"
a);
a=d;
b=e;
5.分析下程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。
{
inti,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(“%d,%d,%d,%d”,i,j,m,n);
分别作以下改动之后,先分析再运行:
1)将第四行改为:
m=i++;
n=++j;
2)程序改为:
{
inti,j;
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)程序改为:
inti,j,m=0,n=0;
m+=i++;
n-=--j;
printf(“i=%d,j=%d,m=%d,n=%d”,i,j,m,n);
6.求下面算术表达式的值。
(1)x+a%3*(int)(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
先自己分析,再试着用程序求解,看得到的结果是否一致。
7.写出下面表达式运算后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
8.输入x,y,编写程序求z=x+|y|的值。
实验步骤与要求:
(1)程序中用scanf函数输入x和y的值,请分析以下两个语句
scanf(“%f%f”,x,y);
scanf(“%f%f”,&
x,&
y);
哪一个是正确的,分别运行之,分析程序运行结果。
如果scanf函数改为scanf(“%f,%f”,&
应该怎样输入数据。
9.编写程序,使用格式输入函数,从键盘按顺序输入下列数据,再将其用合适的格式分类输出到屏幕上。
注意scanf函数的格式要求。
‘a’、15、‘c’、100、20.6、60000、3500、32768、450.34、126.3455568
10.输入并编辑下面的程序
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”,&
printf(“c=%10.2f,d=%10.2f\n”,&
c,&
d);
printf(“e=17ld,f=%17ld\n”,&
e,&
f);
printf(“u=%o,d=%o\n”,&
u,&
v);
printf(“c1=%c,d=%c\n”,&
c1,&
c2);
这个程序有语法错误吗?
为什么?
(1)调试上述程序无语法错误后,用下面的测试数据,对程序进行测试:
a=123,b=456,c=17.6,d=71837.65,e=70000,f=2174506,u=62000,v=58765,c1=’a’,c2=’b’
分析运行结果。
特别注意输入c1,c2的值是什么?
什么原因?
(2)将输入e和f的语句改为:
scanf(“%d,%d”,&
再用上述测试数据测试并分析结果。
(3)将输入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)请读者自己修改程序和改变数据输入的形式,分析各种情况下的输入与输出。
在scanf(“%c,%c”,&
c2);
语句之前加一个语句:
getchar();
(7)验证转义字符\n与\r的意义有何不同。
1.数学表达式与C语言表达式的区别是什么?
在进行转换时应注意什么问题?
2.学过的运算符的优先级别是什么顺序?
3.自加(自减)运算符的前缀表达式与后缀表达式有什么区别?
4.浮点型数据与整型数据在进行除法运算时,有什么区别?
(例如5.0/3和5/3有什么区别)
5.printf()函数有哪些输入格式符?
怎样使用?
6.scanf()函数的输入格式符中的字符与printf()函数中的格式符有何不同?
在输入数据时,需要注意哪些问题?
(例如scanf(“%d,%f:
%d”&
c)在输入数据时应该怎样输入?
7.总结在printf函数中格式符%C的使用,并给出样例。
8.总结在printf函数中可以使用的各转义字符及其功能。
9.用putchar()和getchar()函数有哪些注意事项?
10.在scanf()函数中,特别是数值型数据与字符型的混合输入时,应注意哪些问题?
举例说明。
11.实验中遇到的问题与解决的办法。
实验三顺序结构
一、目的和要求
1.熟练掌握格式输入与格式输出函数的使用,理解scanf函数的工作过程。
2.熟练掌握赋值语句的使用方法。
3.进一步体会C程序的结构组成,体会主函数main的作用。
4.熟悉顺序结构的程序设计方法
二、实验内容
1.编写输入三角形的三边长a、b、c,求三角形面积area的程序。
(1)输入前要加提示语句。
(2)输出结果前要有必要的文字说明。
(3)输入一组数据3,4,5,观察运算结果。
(4)输入另外一组数据3,4,8,观察运算结果,分析这个运算结果是否有效。
2.编写程序,输入两个整数:
1500和350,求出它们的商数和余数并进行输出。
3.编写程序,读入三个整数a,b,c,然后交换它们中的数,把a中原来的值给b,把b中原来的值给c,把c中原来的值给a。
4.编程计算半径r=2.5的圆面积、圆周长、球体积及球表面积。
如果高h=4.5,计算圆柱体的表面积和体积。
显示结果保留两位小数。
5.编写程序,输入一行字符(用回车结束),输出每个字符以及与之对应的ASCII码,每行输出3对。
6.编写程序,输入一行数字字符(用回车结束),每个数字字符的前后都有空格,编程实现把这一行数字转换成一个整数。
例如:
2468(CR)
输出:
2468
1.以下C程序的功能是:
从键盘依次输入4个整数,计算并输出这4个数的平均值。
{inta,b,c,d,av;
Inputa,b,c,d:
);
%d,%d,%d,%d"
av=(a+b+c+d)/4;
av=%f\n"
av);
观察运行结果,想一想为什么,将最后一句中的“%f”改为“%d”,观察结果有什么变化,如果想使计算结果为实数,如何修改程序?
如果想计算4个实数的平均数,如何修改程序?
2.在实验过程中遇到的问题及解决的办法。
实验四 选择结构
1.理解C语言表示逻辑量的方法,学会正确使用逻辑运算符和逻辑表达式。
2.掌握利用if结构实现选择结构的方法。
3.掌握利用switch结构实现多分支选择结构。
4.掌握若干简单算法。
5.学习选择结构程序的调试。
1.用scanf函数输入一个年份year,计算这一年2月份的天数days,然后用输出函数printf输出days。
(1)有变量定义为整型。
(2)输入前要加提示语句。
(3)输出结果前要有必要的文字说明。
说明:
(1)闰年的条件是:
year能被4整除但不能被100整除,或者year能被400整除。
(2)如果year是闰年,则2月份的天数为29天,不是闰年则为28天。
2.编写程序计算下面分段函数的值:
2x+5(x<
0)
f(x)=x2-x+3(0≤x<
10)
x3-7x(x≥10)
具体要求如下:
(1)用if语句实现分支,自变量和函数值均用双精度类型。
(2)自变量用scanf函数输入,给一些输入提示。
(3)分别输入三种区间中x的值,检查输出函数值是否正确。
3.已知三个数a,b,c,找出最大值放于max中。
4.scanf函数输入一个百分制成绩,输出成绩等级A、B、C、D、E,其中90~100分为A,80~89分为B,70~79分为C,60~69分为D,60分以下分为E。
要求百分制成绩用整数输入,在输入前要有提示,输入后要判断成绩的合理性,对不合理的成绩,应输出出错信息。
输出结果中应包括百分制和等级成绩,并要有文字说明。
使用if语句和switch语句分别实现。
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)&
(5)!
(a+b)+c-1&
b+c/2
3.对于多分支选择结构何时使用if语句的嵌套,何时使用switch语句?
4.在实验过程中遇到的问题及解决的办法。
实验五循环结构
(一)
1.练习并掌握利用while语句、do_while语句实现循环结构的方法。
2.掌握循环结构的程序设计方法。
3.调试和修改循环结构的程序。
1.求5!
2.编写程序,分别用while循环和do_while循环计算12+22+...+n2的值。
比较三个程序在循环控制上的特点。
3.计算两个数的最大公约数与最小公倍数。
(先求出最大公约数,再求最小公倍数。
根据最大公约数的定义求:
能同时被这两个数整除的最大数)
4.判断m是否是素数。
(根据素数的定义来判断:
除了1和它本身以外,不能被其他的数整除)
5.编写程序,求1-3+5-7+……-99+101的值。
1.如何正确地设定循环条件,以及如何控制循环的次数。
2.While循环和do-while循环的区别
3.在实验中遇到的问题及解决的办法。
四、思考题
1.如果一个数恰好等于它的所有因子(包括1但不包括自身)之和,则称之为“完数”。
例如6的因子是1,2,3,且6=1+2+3,因此6是完数。
编写程序找出1000之内的所有完数及这些完数的和。
(1)要求使用for循环
(2)输出形式为:
完数1+完数2...=和值
算法说明:
(1)sum=0,m=2
(2)当m<
=1000时,反复执行(2.1)(2.2)(2.3)(2.4),否则转(3)
(2.1)k=m/2,n=0,j=1
(2.2)当j<
=k时,反复执行(2.2.1)(2.2.2),否则转(2.3)
(2.2.1)ifj是m的因子则执行n=n+j
(2.2.2)j++
(2.3)ifm=n则输出完数m,sum=sum+m
(2.4)m++
(3)输出m值
2.
给一个不多于5位的正整数,要求:
a.
求出它是几位数;
b.
分别打出每一位数字;
c.
按逆序打出各位数字,例如原数为321,应输出123。
实验六循环结构
(二)
1.练习并掌握三种循环语句的应用。
2.练习多重循环的设计方法
3.练习控制语句break、continue、goto语句的使用方法。
4.练习调试与修改程序
1.输入并运行下面的程序,观察程序的运行结果。
#include"
stdio.h"
main()
{intn;
while
(1)
{printf("
Enteranumber:
"
scanf("
%d"
n);
if(n%2==1)
Isaid"
continue;
break;
printf("
Thanks.Ineededthat!
2.观察下面的C程序。
inti,j;
longsum=0;
for(i=1,i<
=20,i++)
for(j=1;
j<
=3;
j++)
sum=sum+(i+1)*(i+1)*(j+2)
printf(“sumis:
%d\n”,sum);
(1)将上述程序中的和分别做什么样修改,能使程序按如下要求运行:
.不循环;
.外循环1次,不进入内循环;
.外循环,内循环各1次;
.外循环1次,内循环2次;
.外循环2次,内循环1次;
.外循环19次,内循环3次;
.外循环20次,内循环2次;
.外循环21次,内循环3次。
(2)试修改程序,以便能知道控制表达式
i=1;
=20;
i++和j=1;
3;
j+=各执行了多少次?
(3)内循环与外循环的控制表达式进行对换,观察程序的执行结果有无变化,并且观察对换后的外循环与内循环控制表达式执行的总次数有无变化?
(4)将(3)中程序写为
inti,j,k;
for(j=1.j<
=3.j++)
k=j+2;
for(i=1;
i<
i++)
sum=sum+(i+1)*(i+1)**k;
printf(“sumis:
观察程序的执行结果有无变化?
(5)将(3)中程序改写为
intI,j,m,n;
longsum=0;
m=j+2;
for(I=1;
I++)
{
n=I+1;
sum=sum+m*m*k;
(6)在(5)的程序中,若将外循环控制表达式分别做如下修改:
.j=1;
j++
j=3;
j>
j--
.j=1