华中科技大学C语言实验与课程设计上机实验报告汇总18全部Word下载.docx
- 文档编号:16525966
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:84
- 大小:528.58KB
华中科技大学C语言实验与课程设计上机实验报告汇总18全部Word下载.docx
《华中科技大学C语言实验与课程设计上机实验报告汇总18全部Word下载.docx》由会员分享,可在线阅读,更多相关《华中科技大学C语言实验与课程设计上机实验报告汇总18全部Word下载.docx(84页珍藏版)》请在冰豆网上搜索。
shortp,k;
doublec,r,s;
/*fortask1*/
printf(“InputFahrenheit:
”);
scanf(“%d”,f);
c=5/9*(f-32);
printf(“\n%d(F)=%.2f(C)\n\n”,f,c);
/*fortask2*/
printf("
inputtheradiusr:
"
);
scanf("
%f"
&
r);
s=PI*r*r;
\nTheacreageis%.2f\n\n"
&
s);
/*fortask3*/
inputhexintk,p:
%x%x"
k,&
p);
newint=(p&
0xff00)|(k&
0xff00)<
<
8;
newint=%x\n\n"
newint);
}
【分析及改正】本程序共存在9处错误,分析如下:
(1)#definePI3.14159;
错误原因:
宏定义在预处理时会将后续程序中的标示符展开为对应全部字符串,而PI不需要分号。
改正:
去掉其后分号
(2)voidmain(void){
函数返回值与函数名之间应加空格,C90标准建议main函数应返回一个int作为状态值
intmain(void){
(3)shortp,k;
后续用到了newint变量但并未声明
shortp,k,newint;
(4)scanf(“%d”,f);
应该把要读入的变量的地址传递给scanf才能正确写入
%d"
f);
(5)c=5/9*(f-32);
5和9是整型常数,相除会截断小数部分,应该将其中任意一个输表示为或转换为浮点数类型
c=5.0/9*(f-32);
(6)scanf("
double类型对应的占位符是%lf
%lf"
(7)printf("
要输出s的值应该将s作为参数传递给printf,不应传递其地址
s);
(8)scanf("
printf("
k,p为short类型,对应十六进制占位符应为%hx
%hx%hx"
k,&
p);
newint=%hx\n\n"
(9)newint=(p&
要求将k的高字节作为结果的低字节,应该将k的高字节提取出后右移至低字节
newint=(p&
0xff00)|(((k&
0xff00)>
>
8)&
0x00ff);
1.2.2源程序修改替换
下面的程序利用常用的中间变量法实现两数交换,请改用不使用第3个变量的方法实现。
该程序中t是中间变量,要求将定义语句中的t删除,修改下划线处的语句,使之实现两数对调的操作。
voidmain()
inta,b,t;
printf(“Inputtwointegers:
”);
scanf(“%d%d”,&
a,&
b);
t=a;
a=b;
b=t;
prinf(“\na=%d,b=%d”,a,b);
【分析】将a,b中的任何一个看做原码,另一个当做密钥进行加密,再将加密过的内容与密钥做加密运算即得到原码。
由此使用异或运算进行交换。
流程图如下:
【程序】
#include<
stdlib.h>
intmain(){
inta,b;
inputtwointegers:
scanf("
%d%d"
a^=b;
b^=a;
\na=%d,b=%d"
a,b);
return0;
【测试】如果输入a=1,b=7,应该输出:
a=7,b=1,程序运行结果如下,程序正确。
1.2.3程序设计
1、编写一个程序,输入字符c,如果c是大写字母,则将c转换成对应的小写,否则c的值不变,最后输出c。
【分析】因为同一个字母的大小写字母的ASCII码值相差32,若ch为大写字母,则ch+32为对应的小写字母。
intmain()
Inputyourcharx:
\n"
charx;
%c"
x);
if(x>
='
a'
&
x<
z'
)
{
%c\n"
x);
}
elseif(x>
A'
Z'
x-'
0'
+32+'
else{
Pleaseinputtherightchar."
【测试】
(1)测试大写变小写。
若输入D,应输出d,程序运行结果如下,程序正确。
(2)测试其他字符。
若输入a,应输出a,程序运行结果如下,程序正确。
2、编写一个程序,输入无符号短整数x,m,n(0≤m≤15,1≤n≤16-m),取出x从第m位开始向左的n位(m从右至左编号为0~15),并使其向左端(第15位)靠齐。
【分析】将x首先右移m位,再左移(16-n)位,则末尾会补0,即可将第m位开始向左的n位且向最高位靠齐
unsignedshortx,m,n;
puts("
Pleaseinputx,m,n:
%hu%hu%hu"
x,&
m,&
n);
x>
=m;
x<
=(16-n);
%hx\n"
【测试】若x=58207,m=4,n=4,因为(58207)10=(1110001101011111)2,处理后为(101000000000000)2=(5000)16,程序应该输出十六进制数:
5000,运行结果如下,程序正确。
3、IP地址通常是4个用句点分隔的小整数(即点分十进制),如32.55.1.102。
这些地址在机器中用无符号长整形表示。
编写一个程序,以机器存储的形式读入一个互联网IP地址,对其译码,然后用常见的句点分隔的4部分的形式输出。
例如,整形676879571二进制表示就是:
00101000010110000101110011010011,按照8位一组可表示为:
408892211,由于CPU处理数据的差异,它的顺序是颠倒的,所有最终格式为211.92.88.40。
【分析】分别利用逻辑尺取出读入的长整形数的四部分,从最低位起每8位(1个字节)为一个部分,然后按照正常顺序输出其对应的十进制IP地址。
程序框图如下:
unsignedlongIP;
unsignedshortfirst,second,third,fourth;
InputtheIPinunsignedlongintform:
%lu"
IP);
first=(IP&
0xFF000000)>
24;
second=(IP&
0xFF0000)>
16;
third=(IP&
0xFF00)>
fourth=IP&
0xFF;
%hu.%hu.%hu.%hu"
fourth,third,second,first);
【测试】若输入676879571,应输出211.92.88.40。
运行结果如下,表明程序正确。
1.3实验体会
在做改错题时,先浏览一遍,找出明显的错误,然后将初步修改后的代码输入编译器并编译,再根据编译器的警告与错误提示修改程序至完全正确,这个过程很需要细心和耐心,这个过程能够很好的帮助我再今后不犯类似错误。
源程序修改与替换题锻炼我们举一反三的能力,我们在平时写程序时就应该思考对于一个问题有没有多钟解决方案,不使用中间变量交换两个整数是很常见的问题,我利用一个数异或自身等于0,0异或任意位保留原位的原理来交换。
程序设计题提高了我们对所学知识的熟练度和理解程度,只有实践才能学会C语言,在亲手编写代码的过程中发现问题,理解概念。
2流程控制实验
2.1实验目的
(1)掌握复合语句、if语句、switch语句的使用,熟练掌握for、while、do-while三种基本的循环控制语句的使用,掌握重复循环技术,了解转移语句与标号语句。
(2)熟练运用for、while、do-while语句来编写程序。
(3)练习转移语句和标号语句的使用。
(4)使用集成开发环境中的调试功能:
单步执行、设置断点、观察变量值。
2.2实验内容及要求
2.2.1.源程序改错
下面是计算s=n!
的源程序,在这个源程序中存在若干语法和逻辑错误。
要求在计算机上对这个例子源程序进行调试修改,使之能够正确完成指定任务,例如,8!
=40320。
inti,n,s=1;
Pleaseentern:
n);
for(i=1;
i<
=n;
i++)
s=s*i;
%d!
=%d"
n,s);
【分析及改正】本程序共存在3处错误,分析如下:
(1)ints=1;
在计算阶乘的时候,由于阶乘值会上升很快,所以不建议使用int类型,可以改为long或者double型。
改为long型变量。
(2)scanf(“%d”,n);
scanf函数获取输入值时,引用的是一个变量地址,而不是变量本身。
scanf(“%d”,&
(3)}return0;
return返回值应该在main函数内部
return0;
2.2.2源程序修改替换
(1)修改上述计算s=n!
的源程序,要求分别用while和do-while语句替换for语句。
(2)修改上述计算s=n!
的源程序,要求输入改为“整数S”,输出改为“满足n!
>
=s的最小整数n”。
例如,输入整数40310,输出结果为n=8.
【分析】
(1)相同循环内容利用不同循环结构实现,需要注意不同语句的格式及根据循环方式对循环体做些许变动。
while型do-while型
(2)同样计算n!
并将n!
赋值给不是s的值(比如说m),然后令m和s比较大小,找到符合条件的第一个m值,并返回n值。
(1)while型
inti=1,n,s=1;
while(i<
=n){
i++;
do-while型
do{
=n);
(2)
inti,n=0,s,m=1;
Pleaseenters:
;
i++){
m=m*i;
n++;
if(m>
=s){
n=%d"
break;
(1)如果输入8,应该输出:
40320,程序运行结果如下,程序正确。
(2)如果输入40310,应该输出:
8,程序运行结果如下,程序正确。
2.2.3程序设计
编写并上机调试运行能实现下列功能的程序:
(1)假设工资税金按以下方法计算:
1000元,不收取税金;
1000<
=x<
2000,收取5%的税金;
2000<
3000,收取10%的税金;
3000<
4000,收取15%的税金;
4000<
5000,收取20%税金;
x>
5000,收取25%的税金。
编写一个程序,输入工资金额,输出应收取税金额度,要求分别用if语句呵switch语句来实现。
(2)编写一个程序,将输入的一行字符复制到输出,复制过程中将一个以上的空格字符用一个空格代替。
(3)编写一个程序,打印如下的杨辉三角形。
1
11
121
1331
14641
15101051
1615201561
172135352171
18285670562881
193684126126843691
(4)编写一个程序,将用户输入的任意正整数逆转。
例如,输入1234,输出4321。
(1)数学中的分段函数问题,可以用if-else-if结构进行控制。
在应用switch语句的时候,结合分段区间的特点设置合适的间断点。
流程图分别如下:
if型
switch型
(2)使用状态机通过判断空格的个数选择不同状态,从而实现消去空格的作用。
(3)根据所给公式利用循环实现杨辉三角数的计算,注意题目中特别提到的输出格式,将每个数字设置为四个字符位,并循环输出空格符,实现金字塔效果。
(4)多次除10取余,每次都分别输出余数,然后除以10并赋给原数重复计算,流程图如下:
(1)if型
floattax(floatx);
floatx;
Pleaseinputyoursalary:
Youshouldpay%fyuan.\n"
tax(abs(x)));
floattax(floatx){
floatn;
if(x<
1000){n=0;
elseif(x<
2000){n=0.05;
3000){n=0.1;
4000){n=0.15;
5000){n=0.2;
else{n=0.25;
returnn*x;
switch((int)(x/1000)){
case0:
n=0;
break;
case1:
n=0.05;
case2:
n=0.1;
case3:
n=0.15;
case4:
n=0.2;
default:
n=0.25;
enum{COPY,START,SPACE};
charc;
intstate=COPY;
Pleaseinputachar:
while((c=getchar())!
\n'
){
switch(state){
caseCOPY:
if(c=='
'
)state=START;
elseputchar(c);
caseSTART:
putchar('
)state=SPACE;
else{state=COPY;
putchar(c);
caseSPACE:
if(c!
state=COPY;
putchar(c);
elsestate=SPACE;
(3)
#definen10
intmain(void)
inti,j,k,c,m;
for(i=0;
n;
for(m=0;
m<
=n-i;
m++){
"
for(j=0;
j<
=i;
j++)
if(j==0)c=1;
else
c=c*(i+1-j)/j;
%4d"
c);
(4)
longn,m;
Pleaseinputanintegern(n>
0):
%ld"
\nThenewintegeris:
while(n>
=10){
m=n%10;
m);
n/=10;
(1)
2.3实验体会
源程序改错中,依赖于平时良好的输入习惯,在输入过程中已经可以检查出大多数语法错误,或者拼写错误。
接下来再检查一下逻辑是否有误,无误则进行多组数据的编译检验,确认最终无误。
源程序修改与替换题锻炼我们举一反三触类旁通的能力,在平时写程序时就应该思考对于一个问题有没有多钟解决方案,使用不同的逻辑结构多种尝试寻求最优解。
程序设计题则是自主的设计实践,在练习中获得进一步提升,增强对于所学知识的熟练度和理解程度,锻炼能力。
3函数与程序结构实验
(1)熟悉和掌握函数的定义、声明,函数调用与参数传递方法,以及函数返回值类型的定义和返回值使用。
(2)熟悉和掌握不同存储类型变量的使用。
(3)熟悉多文件编译技术。
下面是计算s=1!
+2!
+3!
+…+n!
要求在计算机上对这个例子源程序进行调试修改,使之能够正确完成指定任务。
intk;
for(k=1;
k<
6;
k++)
k=%d\tthesumis%ld\n"
k,sum_fac(k));
longsum_fac(intn)
longs=0;
inti;
longfac;
for(i=1;
i<
i++)fac*=i;
s+=fac;
returns;
(1)}return0;
(2)longfac;
fac未赋予初始值,会导致接下来计算错误。
longfac=1;
(3)s+=fac;
语句s+=fac;
不在函数for内部,逻辑出错。
fac*=i;
s+=fac;
(1)修改上术源程序中的sum_fac函数,使其计算量最小。
(2)修改上述源程序中的sum_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华中科技大学 语言 实验 课程设计 上机 报告 汇总 18 全部