1、printf(Input two integers a, b:); scanf(%d,%d, &a,&b); printf(nSUM=%dn the difference between square of a and square of b is:%d,SUM, SUM*DIF); SWAP(a,b); Printf(nNow a=%d,b=%dn,a,b);源程序在code:blocks上运行后出现修改后为:运行测试为:2源程序修改替换下面是用函数实现求三个数中最大数、计算两数之和的源程序。在这个源程序中存在若干语法和逻辑错误,要求:(1) 对这个例子程序进行调试修改,使之能够正确完成指定
2、任务。(2) 用带参数的宏替换函数max,来实现求最大数的功能。int a, b, c; float d, e;Enter three integers:%d,%d,%d,&b,&c);nthe maximum of them is %dn,max(a,b,c);Enter two floating point numbers:scanf(%f,%fd,&e);nthe sum of them is %fn,sum(d,e);int max(int x, int y, int z)int t; if (xy)t=x; elset=y;if (tz)t=z;return t;float sum(
3、float x, float y) return x+y;(1)源程序修改后为:(2)按要求修改源程序如下:运行测试为3跟踪调试程序下面程序的功能是利用R计算圆的面积s,以及面积s的整数部分。现要求:(1) 修改程序,使程序编译通过且能运行。源程序修改如下:(2) 单步执行。进入函数integer_fraction时,watch窗口中x为何值?在返回main时, watch窗口中i为何值?单步执行,进入integer_fraction时,watch窗口中x=254.468796.返回main时,watch中i=254.(3) 排除错误,使程序能正确输出面积s值的整数部分,不会输出错误信息ass
4、ertion failed。程序代码:#define Rfloat r,s;int s_integer=0;printf (input a number: %fr); #ifdef Rs=3.14159*r*r;area of round is: %fn,s);s_integer= integer_fraction(s);the integer fraction of area is %dn, s_integer);assert(s-s_integer)1.0); #endifint integer_fraction(float x)int i=x; return i;实验2数组实验(1)掌握
5、数组的说明、初始化和使用。(2)掌握一维数组作为函数参数时实参和形参的用法。(下面是用来将数组a中元素按升序排序后输出的源程序。分析源程序中存在的问题,并对源程序进行修改,使之能够正确完成任务。 int a10 = 27, 13, 5, 32, 23, 3, 17, 43, 55, 39; void sort(int ,int); int i; sort(a0,10); for(i = 0; i 10; i+)%6d,ai);nvoid sort(int b, int n) int i, j, t; for (i = 0; n - 1; for ( j = 0; j n - i - 1; j+
6、) if(bj 1; i-)/* i表示圈中人个数,初始为M个,剩1个人时结束循环;j表示当前报数人的位置 */ for(k = 1; k i - 1) j = 0;/* 最后一个人报数后第一个人接着报,形成一个圈 */ bM-i = j? aj-1 : ai-1 ; /* 将报数为N的人的编号存入数组b */ if(j)for(k = -j; i; k+) /* 压缩数组a,使报数为N的人出圈 */ak=ak+1 ;i M 1; i+) /* 按次序输出出圈人的编号 */ printf(“%6d”, bi); printf(“%6dn”, a0); /* 输出圈中最后一个人的编号 */(2)
7、 上面的程序中使用数组元素的值表示圈中人的编号,故每当有人出圈时都要压缩数组,这种算法不够精炼。如果采用做标记的办法,即每当有人出圈时对相应数组元素做标记,从而可省掉压缩数组的时间,这样处理效率会更高一些。因此,请采用做标记的办法修改(1)中的程序,并使修改后的程序与(1)中的程序具有相同的功能。源程序为:3跟踪调试源程序在下面所给的源程序中,函数strncat(s,t,n)本来应该将字符数组t的前n个字符连接到字符数组s中字符串的尾部。但函数strncat在定义时代码有误,不能实现上述功能。请按下面的要求进行操作,并回答问题和排除错误。(1) 单步执行源程序。进入函数strncat后观察表达
8、式s、t和i。当光条落在for语句所在行时,i为何值?当光条落在strncat函数块结束标记(右花括号 )所在行时, s、t分别为何值?光条落在for语句所在行时,i=22光条落在strncat函数块结束标记所在行时(2) 分析函数出错的原因,排除错误,使函数正确实现功能,最后写出程序的输出结果。void strncat(char ,char ,int); char a50=The adopted symbol is ,b27=abcdefghijklmnopqrstuvwxyz;strncat(a, b, 4);%sn,a);void strncat(char s,char t, int n
9、) int i = 0, j;while(si+) ;for(j = 0; n & tj;)si+ = tj+; si = 0(2)调试发现s,t和i值有误,修改后源程序为:运行输出结果为:程序设计:编写并上机调试运行能实现以下功能的程序。(1) 已知三角形的面积是,其中,a,b,c为三角形的三边。定义两个带参数的宏,一个用来求s,另一个用来求area,试编写一程序,用带参数的宏来计算三角形的面积。(1)源程序如下:结果正确。(2) 使用条件编译方法编写一程序,其功能要求是,输入一行电报文字,可以任选两种输出:一为原文输出;二为变换字母的大小写(如小写a变成大写A,大写D变成小写d),其他字符
10、不变。用#define命令控制是否变换字母的大小写。例如,#define CHANGE 1 则输出变换后的文字,若#define CHANGE 0则原文输出。(2)源程序如下:将#define CHANGE 1换为#define CHANGE 0后源程序为:(3) 编写一个程序,从键盘读取数据,对一个34矩阵进行赋值,求其转置矩阵,然后输出原矩阵和转置矩阵。(3)源程序如下:运行测试如下:实验心得与体会:编程时要多看多做多改。暂时没有思路的程序,可以看一些类似的例题,多看看别人是怎么做的,可以用什么方法。做出来的程序,不能认为自己已经完全会了,而不去理会,应该试着用其他句型修改一下程序,看看会产生什么效果,尽量简化程序,让程序看起来简单易懂,且让人不会产生误解。选做题给定n位(n100)正整数a,去掉其中任意k个数字(kn)后,剩下的数字按原次序排列组成一个新的正整数。对于给定的n位正整数a和正整数k,设计一个算法找出剩下数字组成的新数最大的删除方案。具体任务为,对于给定的正整数a,编程计算删除k个数字后得到的最大数。数据输入:由键盘输入两个数据,两个数据之间以空格隔开,前面一个数据是正整数a,第2个是正整数k。结果输出:程序运行结束时,将计算出的最大数输出到屏幕。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1