C语言程序设计课程实验报告2Word文档下载推荐.docx
《C语言程序设计课程实验报告2Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言程序设计课程实验报告2Word文档下载推荐.docx(108页珍藏版)》请在冰点文库上搜索。
编者著
2014年6月于华中科技大学
2第一次实验
2.1实验目的
1.掌握C程序的编辑、链接、和运行方法。
2.通过运行简单的C程序,学会在集成开发环境中调试程序的方法。
3.熟练掌握各种运算符的运算功能,操作数的类型,运算结果的类型及运算过程中的类型转换,重点是C语言特有的运算符,例如位运算符,问号运算符,逗号运算符等等;
熟记运算符的优先级和结合型。
4.掌握getchar,putchar,scanf和printf函数的用法。
5.掌握简单的C程序的编写方法。
2.2实验内容
(一)设计一个程序,在字符模式下,以某个字符拼出“王”汉字图形,显示输出。
【源程序2.1】
#include<
stdio.h>
intmain(void)
{
puts("
oooooooo"
);
oo"
return0;
}
运行结果:
在显示屏上以字符o的形式输出“王”,如图2.1所示。
图2.1程序2.1运行结果
(二)输入一个华氏温度,要求输出摄氏温度。
公式为c=5/9*(f-32)。
【源程序2.2】
#include<
intmain(void)
{
floatf,c;
printf("
InputtheFahrenheit:
"
scanf("
%f"
&
f);
c=(f-32)*5/9;
TheCelsiusis%f."
c);
}
运行结果如表2.1所示。
表2.1程序2.2测试数据
输入
输出
理论值
-13
-25.000000
-17.777778
32
0.000000
49.9
9.944445
过程记录:
刚开始时“c=(f-32)*5/9;
”这个语句写的是“c=5/9*(f-32);
”,发现结果都是0,原来根据运算顺序最先计算5/9,取整后变为0,故需调整一下顺序。
(三)设计3种算法,完成交换整型两个变量值的程序。
【源程序
intmain(void)
{
inta,b,t;
printf("
Inputtwointegers:
scanf("
%d%d"
a,&
b);
t=a,a=b,b=t;
printf("
%d,%d"
a,b);
return0;
}
运行结果如表
表2.2.1程序
0-1
-1,0
-90
0,-9
-107
7,-10
inta,b;
a=a+b;
b=a-b;
a=a-b;
%d,%d"
运行结果如表
表2.2.2程序
89
9,8
90
0,9
-3-8
-8,-3
scanf("
a=a^b;
b=a^b;
表2.2.3程序
0-7
-7,0
8-9
-9,8
99
9,9
本实验中分别用中间变量、算术运算和位运算三种方法实现了交换两个整型变量的值。
(四)设计一个程序,完成如下功能:
输出一个三位数,将它反向输出。
如输入127,输出721。
【源程序2.4】
inta,b,c,x;
Inputthreefiguresplease!
\n"
%d"
x);
a=x/100;
b=(x-a*100)/10;
c=x%10;
%d%d%d"
c,b,a);
运行结果如表2.3所示
表2.3程序2.4的测试数据
127
721
999
979
(五)设计2种完成计算MAX{x,y,z}的程序。
{
floata,b,c,max;
Inputthreeintegers:
%f%f%f"
b,&
c);
if(a>
=b&
&
a>
=c)max=a;
if(b>
=a&
b>
=c)max=b;
if(c>
c>
=b)max=c;
max=%f"
max);
表2.4.1程序
-9-1-5
-1.000000
90-7
9.000000
-998
max=a>
b?
(a>
c?
a:
c):
(b>
b:
表2.4.2程序
-9.9-6-563846
-6.000000
79.088.9
88.900000
-9-8-7
-7.000000
本实验中分别用if语句和条件运算符实现了求三个数中最大值。
(六)设计一个程序,完成计算3个数的居中数。
【源程序2.6】
floata,b,c,m;
m=a>
((a>
c)?
a):
c:
b));
middle=%f"
m);
运行结果如表2.5所示
表2.5程序2.6的测试数据
123
2.000000
-80-7
099.9
(七)设计计算一元二次方程的根的程序。
【源程序2.7】
math.h>
floata,b,c;
doublex,y,m;
Inputa,b,cplease!
m=b*b-4*a*c;
if(a!
=0)
if(m>
{
x=(sqrt(m)-b)/2/a;
y=(-sqrt(m)-b)/2/a;
printf("
x=%lf,y=%lf\n"
x,y);
}
else
Noanswer!
else
printf("
Theequationisn'
tquadratic.\n"
运行结果如表2.6所示
表2.6程序2.7的测试数据
056
tquadratic.
132
x=-1.000000,y=-2.000000
256
121
x=-1.000000,y=-1.000000
亮点:
能够判断方程是否为二次方程,也能判断有无实根。
(八)根据任意三角形的面积公式(海伦公式):
S=√p(p-a)(p-b)(p-c),其中,p=(a+b+c)/2,,设计一个程序计算任意三角形的面积。
【源程序2.8】
{
floata,b,c,s,t;
doublearea;
Inputthreeedgeofthetriangle\n"
if(a+b>
c&
a-b<
b-a<
c)
s=(a+b+c)/2;
t=s*(s-a)*(s-b)*(s-c);
area=sqrt(t);
area=%f\n"
area);
Thetriangleisn'
tlegal!
运行结果如表2.7所示
表2.7程序2.8的测试数据
345
6.000000
126
789
26.832816
亮点:
能够判断输入的三角形是不是合法的。
(九)编写一个程序,输入字符c。
如果c是大写字母,则将c转换成对应的小写,否则c的值不变,最后输出c。
【源程序2.9】
charc;
Inputaletter:
c=getchar();
c=(c>
='
A'
c<
Z'
)?
(c+'
a'
-'
):
c;
putchar(c);
运行结果:
输入‘a’时输出‘a’,输入‘A’时输出‘a’。
(十)编写一个程序,输入无符号短整数x,m,n(0≤m≤15,1≤n≤16-m),取出x从第m位开始向左的n位(m从右至左编号为0~15),并使其向左端(第15位)靠齐。
【源程序2.10】
unsignedshortx,m,n,y;
Inputx,mandnplease!
%hu%hu%hu"
x,&
m,&
n);
if(m>
=0&
m<
=15&
n>
=1&
n<
=16-m)
{
y=(x<
<
16-m-n)&
(0xffff<
16-n);
0x%x"
y);
}
else
error"
运行结果如表2.8所示
表2.8程序2.10的测试数据
输入
输出
理论值
x
m
n
255
3
4
0xf000
15236
6
0xe000
45462
9
8
error
能够判断m,n输入是否合法,若不合法输出提示信息“error”。
(十一)IP地址通常是4个用句点分隔得小整数(即点分十进制),如,以及其存储的形式的形式是读入一个互联网IP地址对其译码,然后用常见的句点分隔的4部分的形式输出。
【源程序2.11】
unsignedlongx,a,b,c,d;
d=x&
0xff;
c=(x&
0xff00)>
>
8;
b=(x&
0xff0000)>
16;
a=(x&
0xff000000)>
24;
%lu.%lu.%lu.%lu\n"
d,c,b,a);
输入1,输出
2.3实验小结
第一次编程,感觉是挺新奇的,不过毕竟是第一次实践,总是有这样或那样的问题,比如总是忘记在scanf语句中加“&
”表示变量的内存地址,时不时少个“;
”或“}”,这种小毛病还真要上机才能改过来。
算法方面也总是有这样那样的问题,不过经过自己的检查和与同学的讨论总算是都解决了,最后看着自己编的程序一个个都能运行时那种欣喜的感觉,我想就像母亲看到孩子成才了一样吧。
这是我编程生涯的开始,希望以后能越做越好!
3第二次实验
3.1实验目的
1.掌握复合语句、if语句、switch语句的使用;
2.熟练运用for、while、do-while语句来编写程序;
3.掌握重复循环技术。
3.2实验内容
(一)设计一个计算个人所得税的程序。
【源程序3.1】
doublex,y;
do{
Inputtheamountofyourincome:
%lf"
y=x-3500;
}while(y<
-3500);
if(y<
0)
y=0;
elseif(y<
1500)
y=y*0.03;
4500)
y=y*0.1-105;
9000)
y=y*0.2-555;
35000)
y=y*0.25-1005;
55000)
y=y*0.3-2755;
80000)
y=y*0.35-5505;
elsey=y*0.45-13505;
printf("
Theindividualincometaxis%lf"
return0;
运行结果如表3.1所示。
表3.1程序3.1测试数据
实际输出
理论输出
-4000
2000
Theindividualincometaxis0.000000
4000
Theindividualincometaxis15.000000
6000
Theindividualincometaxis145.0000000
9999
Theindividualincometaxis744.800000
20000
Theindividualincometaxis3120.000000
46578
Theindividualincometaxis10168.400000
79868.8
Theindividualincometaxis21224.080000
100000
Theindividualincometaxis29920.000000
如果输入收入为负值,则会要求再次输入。
(二)计算两个自然数的最大公约数和最小公倍数。
【源程序3.2】
intm,n,i,j,x,y,a,b;
Inputtwonaturalnumbers:
scanf("
if(m<
=0||n<
Inputerror!
else{
i=(m>
n)?
n:
m;
j=(m>
m:
n;
for(;
x||y;
--i){
x=m%i;
y=n%i;
a||b;
++j){
a=j%m;
b=j%n;
%dand%d'
sGCDis%dandLCMis%d\n"
m,n,i+1,j-1);
运行结果如表3.2所示。
表3.2程序3.2测试数据
-32
03
10060
100and60'
sGCDis20andLCMis300
3.57
能够判断输入的是否是自然数。
(三)输入一个数n(≥2),判定n是否为素数。
【源程序3.3】
in