哈工大威海c语言实验报告册答案.docx

上传人:b****5 文档编号:4602854 上传时间:2022-12-07 格式:DOCX 页数:59 大小:753.67KB
下载 相关 举报
哈工大威海c语言实验报告册答案.docx_第1页
第1页 / 共59页
哈工大威海c语言实验报告册答案.docx_第2页
第2页 / 共59页
哈工大威海c语言实验报告册答案.docx_第3页
第3页 / 共59页
哈工大威海c语言实验报告册答案.docx_第4页
第4页 / 共59页
哈工大威海c语言实验报告册答案.docx_第5页
第5页 / 共59页
点击查看更多>>
下载资源
资源描述

哈工大威海c语言实验报告册答案.docx

《哈工大威海c语言实验报告册答案.docx》由会员分享,可在线阅读,更多相关《哈工大威海c语言实验报告册答案.docx(59页珍藏版)》请在冰豆网上搜索。

哈工大威海c语言实验报告册答案.docx

哈工大威海c语言实验报告册答案

实验1简单判定性问题求解

一、实验学时

完成本实验需4学时。

二、实验目的

1、阅读程序题

(1)掌握C语言数据类型,熟悉如何定义一个整型、字符型的变量,以及对它们赋值的方法;

(2)掌握不同的类型数据之间赋值的规律;

(3)掌握数据在内存中的存储方式;

(4)学会输入、输出函数的基本格式和使用方法;

(5)学会使用有关算术运算符、逻辑运算符、关系运算符,以及包含这些运算符的表达式。

2、编程题

(1)如何运用判定性结构进行程序设计;

(2)如何运用判定性结构进行程序设计。

3、调试题

(1)熟悉C程序的编辑、编译、连接和运行的过程。

三、实验指导

为了达到最佳的实验效果,以下提供几条适于编程的指导意见,可供参考。

1、阅读程序题应先运用自己在课堂所学的知识,推导出结果,在上机时输入计算机,印证自己推导的结果,注意观察数据在内存中的存储方式、含不同种运算符表达式的输出结果。

2、编程题必须首先画出流程图,并反复思考判断程序设计的正确性,完成程序的设计。

要注意简单判定性问题的结构选择。

3、调试题应明确程序的调试、测试是一项非常烦琐的工作,也是非常重要的工作。

对于初学者来说应该建立良好的习惯,在调试程序的时候,应该尽可能考虑到程序运行时各种可能情况。

四、实验内容

1、阅读程序题

(1)()

{/*定义字符型变量*/

c12;/*向字符变量赋以整数*/

c1=97;

c2=98;

("\n"12);/*以字符形式输出*/

("\n"12);/*以整数形式输出*/

}

该程序的输出结果是ab(换行)9798。

思考:

可否改成c1,c2;输出结果是?

相同

(2)()

{

75;

("\n");

}

该程序的输出结果是0。

思考:

若将语句中变为,可否输出分式的值?

可以

(3)()

{

9;

;/*包含复合的赋值运算符的赋值表达式*/

("\n");

}

该程序的输出结果是-18。

思考:

赋值表达式a+=a-=a+a的求解步骤?

第一步:

()9第二步18

(4)()

{

1;

("\n");

}

该程序的输出结果是-14294967295。

思考:

-1在内存中的存储形式?

取反加一111111*********11111111111111111(32个)

(5)()

{

x1;

1;

x1;/*有符号数据传送给无符号变量*/

(""1);

}

该程序的输出结果是4294967295。

思考:

不同类型的整型数据相互赋值时,规则是什么?

(有符号赋值给无符号)

(6)()

{

345;

("\n",(!

(a

(1));

("");

}

该程序的输出结果是0(换行)5。

思考:

若将第一个语句中变为,结果将如何?

1(换行)6

(7)()

{123;

()("\n");

("\n");

}

该程序的输出结果是1。

2、编程序并上机调试运行(包括题目及要求、流程图、程序清单、测试数据及结果)

(1)将一个百分制成绩转换成等级制成绩,百分制与等级制的对应关系如下表:

百分制

90-100

80-89

70-79

60-69

<60

等级制

具体要求如下:

1)用语句实现该功能;

2)用键盘输入百分制成绩,输入前要有提示信息,对于不合理的数据应输出错误信息;

3)输出结果应包含百分制成绩和成绩等级;

4)分别输入成绩-10,30,60,68,75,83,95,102,查看记录运行结果。

 

见下页

 

测试数据:

100,50,-20

 

输出结果:

优,劣,成绩输入错误

 

(2)银行整存整取存款不同期限的月息利率分别为:

输入存款的本金和年限,求到期时能从银行得到的利息与本金的合计。

(利息的计算公式为:

利息=本金×月息利率×12×存款年限。

见下页

 

测试数据:

4,10004,-10

输出结果:

133.12本金金额不能为负!

 

 

 

(3)调试下面程序,使之具有如下功能:

输入a、b、c三个整数,求最小值。

()

{

;

("");

((a>b)(a>c))

(b

("\n");

("\n");

((a

("\n");

}

程序中包含有一些错误,按下述步骤进行调试。

1)设置断点。

2)通过单步执行,观测变量,发现程序中的错误。

程序调试记录

1、程序出现的错误及改正

第四行,前都加&,在中两个之间加空格;{}括住六到九行;把第十行改成;

2、程序的改进

1.每个<或>后加一个=;

2.在程序末尾添加如下指令

((a<)(a>)(a>)(a<))

{

(b<)

("\n");

("\n");

}

实验2循环结构及其应用

一、实验学时

完成本实验需4学时。

二、实验目的

1、熟练掌握,—,语句实现循环的方法,包括如何正确地设定循环条件,如何控制循环的次数。

2、掌握语句与语句的使用方法。

3、熟悉循环的嵌套以及从循环体内退出循环的处理。

4、理解什么是循环程序结构。

三、实验指导

为了达到最佳的实验效果,以下提供几条适于模块化编程的指导意见,可供参考。

1、阅读程序题应先运用自己在课堂所学的知识,推导出结果,在上机时输入计算机,印证自己推导的结果,注意循环语句的一般使用方法,以及复合运算符的使用。

2、编程题必须首先画出流程图,并反复思考判断程序设计的正确性,以面向过程的、模块化设计方法完成程序设计。

【例题解析】

编写一个程序,输出半径为1到10的圆的面积,若面积在40到90之间则予以输出,否则,不予输出。

1)解题分析:

解决问题的关键算法为求圆的面积并按要求输出。

循环求圆的面积,若<40,则用语句提前结束本次循环并开始新一轮循环,若>90,则用语句跳出循环。

2)算法流程图如图2-1:

3)综合分析

需要从循环体中提前跳出循环,或者在满足某种条件下,不执行循环中剩下的语句而立即从头开始新的一轮循环,这时就要用到和语句。

 

 

图2-1输出半径为1到10且面积在40到90之间的圆面积的流程图

4)程序代码

<>

(){

0.03.14;

r;

(1<11){

*r*r;

(<40)

;

(>90)

;

("5.2f\n");

}

}

四、实验内容

1、阅读程序题。

(1)

<>

(){

1;

{

*x;

}();

("\n");

}

该程序的输出结果是1=。

(2)

<>

(){

0;

(<=2){

;

("\n");

}

}

该程序的输出结果是1(换行)2(换行)3。

(3)

<>

(){

;

(11;a<=100;){

(b>=20);

(31){3;;}

5;

}

(“\n”);

}

该程序的输出结果是8。

(4)

<>

(){

21;

(1)

{

a*;

;

}();

(“\n”);

}

该程序的输出结果是1,-2。

2、编程序并上机调试运行(包括题目及要求、流程图、程序清单、测试数据及结果)

(1)输入整数n,求n!

(1

 

 

(2)打印出所有“水仙花数”。

所谓“水仙花数”是指一个三位数,其各位数字的立方之和正好等于该数本身。

例如:

153是一个“水仙花数”,因为153=13+53+33

【提示】根据题目要求只要分别求出一个三位数的个位、十位、百位上的数字,然后判断是否满足(某一三位数的百位的立方的十位的立方的个位的立方)这个公式,满足这个条件的三位数就是“水仙花数”。

 

(3)一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

【提示】在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。

 

3、程序选做题

(1)

第二题

<>

<>

()

{

000;

(a<=15)

{

(0<=25)

{

14*8*b;

100;

(200)

("\n");

;

}

;

}

}

猴子吃桃问题。

猴子第一天摘下若干个桃子,当即吃掉了一半,还不过瘾,又多吃了一个。

第二天早上又将剩下的桃子吃掉一半,又多吃了一个。

以后每天早上都吃了前一天剩下的总数一半零一个。

到第10天早上想再吃时,见只剩一个桃子了。

求第一天共摘了多少桃子。

【提示】使用逆向推导的方式,设后一天的桃子为N个,则其前面一天的桃子为

(1)*2个,以此类推。

(2)“百钱买百鸡”问题:

公鸡每只5元,母鸡每只3元,小鸡每3只1元;用100元买100只鸡,问公鸡,母鸡,小鸡各买多少只?

【提示】设公鸡x只,母鸡y只,小鸡z只;则有1<<=18,1<<=31,1<<=98,且同时满足533=100,100,3=0这三个条件。

通过数学运算可改变条件,从而可用不同的方法来解决此问题,请尝试不同的循环次数解决该问题。

五、程序调试记录

要求:

写出题号,并编写顺序号。

如四

(1)出现的错误

(1)······

(2)······

1、程序出现的错误及改正

 

2、程序的改进

 

实验3模块化设计与应用

一、实验学时

完成本实验需要4学时。

二、实验目的

1、阅读程序题

(1)掌握函数实参和形参的对应关系以及“值传递”的方式;

(2)理解函数调用的过程以及函数的返回值;

(3)弄清楚带参函数和带参的宏之间的异同。

2、编程题

(1)深刻理解模块化程序设计的思想及如何进行模块划分;

(2)掌握定义函数的方法以及函数原型的声明;

(3)灵活运用函数调用(有参函数和无参函数、有返回值的函数和无返回值的函数)。

三、实验指导

为了达到最佳的实验效果,下面提出几点指导意见或要求以供参考:

1、阅读程序题应先运用自己在课堂所学的知识,推导出结果。

上机时输入计算机,验证自己推导的结果是否正确。

若不正确,应分析原因。

2、编程题注意事项:

(1)一个模块(或函数)应有一个入口点和一个退出点。

(2)一般每个模块(或函数)只执行一个任务。

不要将无关的任务放于同一模块中,只将完成同一任务的语句组合在一起。

(3)先画流程图,后写程序代码;

(4)变量和函数标示符尽量“见名知义”;

(5)程序中应有适当注释。

3、应记录调试程序时出现的错误,以便经验的积累。

四、实验内容

1、阅读程序题

(1)下面程序的输出结果是5,8。

<>

f(m)

{

2;

;

;

}

()

{

s;

(2);

(",\n",s,f(s));

}

 

(2)下面程序的输出结果是777。

<>

f(a)

{

0;

3;

1;

1;

();

}

()

{

2;

(i=0<3)

(""(a));

}

 

(3)下面程序的输出结果是3(空格)5。

<>

(*a,*b)

{

*t;

;

}

()

{

35,*,*;

();

("\n",*p,*q);

}

(4)下面程序的输出结果是12。

<>

M()x*

()

{

123;

("\n",M());

}

(5)下面程序的输出结果是19。

<>

M(x,y,z)

{

p;

*;

(p);

}

()

{

123;

("\n",M());

}

2、编程序并上机调试运行。

(1)请设计一个函数(),它的功能是:

判断是否是素数。

若是素数,返回1;若不是素数,返回0。

的值由主函数从键盘读入。

函数():

 

主函数():

 

测试数据及输出结果:

330

371

 

(2)请设计一个函数(),它的功能是:

将两个两位数的正整数a、b合并形成一个整数放在c中。

合并的方式是:

将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。

例如,当a=45,12。

调用该函数后,4152。

函数():

 

主函数():

 

测试数据及输出结果:

921输入数字错误!

21232123

(3)请设计两个函数()和(),它们的功能是:

前者用于求两个正整数的最大公约数,后者用于求两个正整数的最小公倍数。

函数():

 

函数():

 

函数():

 

测试数据及输出结果:

242(换行)4

351(换行)15

-15数字输入错误!

五、程序调试记录

要求记录以下内容:

1、程序出现的错误及改正

2、程序的改进

实验4相同数据类型集合

一、实验学时

完成本实验需4学时。

二、实验目的

1、阅读程序题

(1)掌握一维和二维数组的定义、赋值和输入输出

(2)学会使用一维数组、二维数组

(3)学会使用多维数组、字符数组

(4)学会使用字符串处理函数

2、编程题

(1)如何运用数组进行程序设计

(2)了解字符串处理函数

三、实验指导

为了达到最佳的实验效果,以下提供几条适于模块化编程的指导意见,可供参考。

1、阅读程序题应先运用自己在课堂所学的知识,推导出结果,在上机时输入计算机,印证自己推导的结果,注意数组下标的使用方法。

2、编程题必须首先画出流程图,并反复思考判断程序设计的正确性,注意数组下标不要越界(为了加深认识,自己可以尝试一下下标越界的情况)。

3、调试程序要有耐心,反复的调试过程,虽然表面看起来费时费力,但是你一定会受益非浅。

四、实验内容

1、阅读程序题

(1)()

{[7]={"6521"};

0;

(0[i]>='0'[i]<='9'2)

10*[i]-'0';

("\n");}

该程序的输出结果是6。

(2)5

()

{a[];

(0<5)

a[i];

("\n*****a*****\n");

(0<5)

{

("a[]=");

("\n"[i]);

*****a*****

a[0]=0

a[1]=1

a[2]=2

a[3]=3

a[4]=4

}

}

该程序的输出结果是。

(3)""

N10

()

{

;

a[1];

0;

(":

\n");

(1<)

(""[i]);

("****************\n");

(1<)

{

;

(1<)

(a[j]>a[1])

{

[j];

a[j][1];

a[1];

}

("%3d:

");

(1<)

(""[j]);

("\n");

}

(":

\n");

(1<)

(""[i]);}

该程序的输出结果是冒泡排序显示过程,并最终把输入的十个数字由小到大无空格排列。

(4)""

N20

()

{

f[N];

f[0]=1;

f[1]=1;

(2<)

f[i][1][2];("\\n");

(0<)

{

(40)("\n\n");

("f[2d]5d"[i]);

 

f[0]=1f[1]=1f[2]=2f[3]=3

f[4]=5f[5]=8f[6]=13f[7]=21

f[8]=34f[9]=55f[10]=89f[11]=144

f[12]=233f[13]=377f[14]=610f[15]=987

f[16]=1597f[17]=2584f[18]=4181f[19]=6765

}

}

该程序的运行结果为。

(5)""

()

{

;

a[3][3]={{11,12,13},{21,22,23},{31,32,33}};

("\n");

(0<3)

{

(0<3)

("%3d"[i][j]);

("\n\n");

}

(0<3)

(0<)

{[i][j];

a[i][j][j][i];

a[j][i];

}

("a\n");

(0<3)

{

(0<3)("%3d"[i][j]);

111213

212223

313233

a

112131

122232

132333

("\n\n");

}

}

该程序的输出结果是。

(6)""

()

{s[40];

i;

(":

");

(0;(s[i]())'\n');

s[i]='\0';

("\:

");

(0[i]'\0')

{(s[i]>='a'[i]<='z')

s[i][i]-32;

(s[i]>='A'[i]<='Z')

s[i][i]+32;

(""[i]);

}

""

()

{s[3][4];

00;

("请按顺序输入12个数字,以空格或回车分隔:

\n");

(i<=2)

{(0<=3)

{(""[i][j]);}

;}

("\n");

(0<=2)

{(0<=3)

{(""[i][j]);}

("\n");}

("\n\n");

(0<3)

{(1<4)

{(s[i][j]>s[i][0])

{[i][0];

s[i][0][i][j];

s[i][j];}}}

(0<=2)

{(0<=3)

{(""[i][j]);}

("\n");

}}

}该程序的运行结果为将输入大写字母转变为小写,小写字母转变为大写。

2、编程序并上机调试运行(包括题目及要求、流程图、程序清单、测试数据及结果)

(1)编写一个3*4矩阵,找出每行中最大元素并与第一列元素交换。

具体要求如下:

(a)使用二维数组存放该3*4矩阵;

(b)定义并初始化该二维数组;

(c)输出原矩阵和变换后的矩阵进行比较;

(d)有必要的提示信息。

 

见下页

 

(2)编程实现如下功能:

将字符数组1中的全部字符拷贝到字符数组2中,具体要求如下:

(a)不能使用字符串拷贝函数();

(b)必须将1中的字符串结束标志‘\0’一起拷贝,但其后的字符不拷贝;

(c)1的长度不超过80,2的长度必须足够大;

(d)有必要的提示信息。

 

(3)设某班共有10名学生,为了平定某门课程的奖学金,按照规定超过全班平均成绩10%者发给一等奖,超过全班平均成绩5%者发给二等奖。

编写程序,输出学生学号、成绩和奖学金等级。

见下页

 

主函数中调用代码:

 

五、程序调试记录

(1)调试下面程序。

N10

()

{[]={12,15,23,29,30,31,34,45,56,70};

/*存放被查找的整数,数组存放有序数列*/

01;

/*、和分别标记查找区间的下界和上界及中间位置*/

("\:

\n");

("");/*输入要查找的整数*/

(":

\n");

(1<)

(""[i]);/*输出有序数列*/

(<)/*使用折半法查找数据*/

{()/2;

([])

("\[]!

");

;/*若等于数列中间位置的数据则查找成功*/

(>[])

1;

/*若小于中间位置的数据,等于1*/

1;

/*若大于中间位置的数据,等于1*/

}

(>)

("\n[]");

/*若大于,则查找失败*/

}

程序中包含有一些错误,按下述步骤进行调试。

 

程序调试记录

1、程序出现的错误及改正

1.用{}把十四十五行括起来

2.第十行1改成0;

 

2、程序的改进

1.把七八九三行与十十一两行换一下位置,方便用户操作;

实验5深入模块化设计与应用

一、实验学时

完成本实验需4学时。

二、实验目的

1、阅读程序题

(1)学会使用函数嵌套调用的使用方法

(2)学会使用一维数组做为函数参数

(3)递归调用的设计与使用

(4)学会使用指针做为函数的参数

2、编程题

(1)如何运用指针进行程序设计

(2)如何以一维数组、二维数组做为函数参数进行程序设计

(3)冒泡排序、选择排序的灵活应用

三、实验指导

为了达到最佳的实验效果,以下提供几条适于模块化编程的指导意见,可供参考。

1、阅读程序题应先运用自己在课堂所学的知识,推导出结果,在上机时输入计算机,印证自己推导的结果,注意观察函数嵌套调用、一维数组做为函数参数、指针做为函数的参数、递归调用的使用方法。

2、编程题必须首先画出流程图,并反复思考判断程序设计的正确性,以面向过程的、模块化设计方法完成程序设计。

要注意变量设置、函数参数及返回值在数据传递或共享中的重要作用。

四、实验内容

1、阅读程序题

(1)(a,b)

{();}

()

{258;

(());

(“\n”);

}

该程序的输出结果是15。

(2)f(b[],n)

{;

1;

(0<)*b[i];

r;

}

()

{[]={2,3,4,5,6,7,8,9};

(a,3);

(“\n”);

}

该程序的输出结果是120。

(3)(n)

{(n>2)(

(1)

(2));

(2);

}

()

{(“\n”(3));}

该程序的输出结果是4。

(4)f(*s)

{0;

(*s)*10+*‘0’;

(k);

}

以f(“1234”)方式调用该函数,结果1234。

(5)(*n)

{;

(0<1){

;

(1<)

(*()<*());

()

{*();*()=*();*();}

}

}

()

{*[10];

;

(0<10)

(“”);

;

(p,10);

(0<10)

(“”,*p);

(“\n”);

}

该程序的输出结果是将输入数字按照从小到大顺序排列后组成一个新数字。

2、编程序并上机调试运行(包括题目及要求、流程图、程序清单、测试数据及结果)

(1)编写一个函数(*s),函数的功能是把字符串中的内容逆置。

例如,字符串中原有的内容为,则调用该函数后,字符串中的内容为

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1