2、两道函数编程题

更新时间:2023-12-04 13:04:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

两道函数编程题

[要求在下堂课(11.22)上交书面作业0822、0823抽上台]

填空题课堂提问

(3谢晓伟、13徐州琛、23潘佳君、29吕杨松、57周黄冬、60钱俊)

一、2010秋C01上机编程题(字符指针改为字符串数组)

?程序功能? 字符串变换。 ?编程要求? 1. 编写函数void change(char a[], char b[], char c[])。函数功能是首先把b的字符串逆向存放,然后将a字符串和c字符串按排列顺序交叉合并到c的数组中,两个字符串中过长的剩余字符接在c数组的尾部。例如a字符串为“abcdef”,b字符串为“1324”时,c数组中字符串应为“a4b2c3d2efg”。 2. 编写main函数。函数功能是声明字符数组s1、s2和t,用测试数据初始化数组s1和s2,再用s1、s2和t作为实参调用函数change,将s1、s2和t中的字符串输出到屏幕。 ?测试数据与运行结果? 测试数据:s1=abcdefg s2=1324 屏幕输出: s1=abcdefg s2=4231 The result is :a4b2c3d1efg 〖编程提示〗等同(实验六),不同的是采用函数传递方式编程。 二、2010秋C02上机编程题

?程序功能? 在所有三位整数中找出平方数中有连续的三位数字是该数本身的数。例如,250的平方是62500,250便是所要找的一个满足条件的三位整数。 ?编程要求? 3. 编写函数int find(long a[][2])。函数功能是将三位数中所有满足上述条件的数及其平方数存入a指向的二维数组中,函数返回满足上述条件的三位数的个整数。 4. 编写main函数。函数功能是声明二维数组a,用数组a作为实参调用函数find,输出满足条件的三位整数及其平方数到屏幕。 ?测试数据与运行结果? 屏幕输出: i power 100 10000 250 62500 376 141376 500 250000 600 360000 625 390625 760 577600 〖编程提示〗这是一个嵌套调用(§8.5)题目。函数int find(long a[][2])要两次调用一个长整型量i和i*i第 1 页 共 5 页

分别变为两个一维字符串数组x[],y[]的函数void reverse(long h, char y[]),然后比较,若x数组在y数内,且恰好为三位,则将两长整型数存入a数组内。

一个长整型量h变为一维字符串数组y[]函数的参考程序: void reverse(long h, char y[]) { long x=h; int k=0,i; char c; while(x>0)

{ y[k++]=x+'0'; x/=10; } /*参见十种典型自编函数汇集.doc中第7点*/ for(i=0;i

{ c=y[i];y[i]=y[k-i-1];y[k-i-1]=c;} /*参见十种典型自编函数汇集.doc中第8点*/ y[k]='\\0'; } 函数int find(long a[][2])中判别i是否在i*i之内的部份程序段(n为返回符合条件的记录数) int i,j,k,m,n=0; char x[10],y[10]; for(i=100;i<999;i++) { reverse(i,x); reverse(i*i,y); k=0,m=0;

for(j=0;j

if(y[j]==x[m]&&y[j+1]==x[m+1]&&y[j+2]==x[m+2]) {a[n][0]=i;a[n][1]=i*i;n++;} }

第八章填空题: 3、已知方程x2-x-2=0在1.0附近有一实根。以下程序中root为递归函数,采用牛顿法计算方程在已知实数x附近的一个近似实根。算法提示:计算方程在f(x)=0在x0附近的一个近似实根的牛顿迭代公式为:

xi?1f(xi)?xi?' ;若|f(xi+1)|<ε

f(xi),则认为xi+1是方程f(x)=0在允许误差ε范围内的一个实根。ε取

值为0.000001

#include #include double f( double x) { return x*x-x-2; } double f1( double x) { return 2*x-1; } double root( double x) { double y;

if(fabs(f(x))<=1e-6)

y=_______(19)______; else

y=root(_______(20)______); return y; }

main()

{ printf(\ } 13、以下程序运行时输出结果是_____(7)_____。

第 2 页 共 5 页

#include int sum(int k)

{ static int x=0; return x+=k; } void main()

{ int s,i,sum();

for(i=1;i<=5;i++) s=sum(i); printf(\}

23、以下程序运行时输出结果为__(6)___。/*第八章书P189用static声明局部变量*/

#include int a;

int m(int a) { static int s;

return (++s)+(--a); }

void main() { int a=2;

printf(\}

29题(递归调用):以下程序运行后的输出结果为_____(8)_____。

#include void f(long x)

{ if(x<100) printf(\

else {f(x/100); printf(\}

main()

{ f(123456); } 57题(递归调用):以下程序运行时输出到屏幕的结果是_____(12)____。

#include void fun(int m, int n) { if(m>=n)

printf(\ else

fun(m+1,n); printf(\}

void main()

{ fun(1,2); } 60题(递归调用):以下程序运行时输出到屏幕的结果是_____(11)____。

#include int f(int x)

{ if(x==0||x==1) return 3; return x*x-f(x-2); }

void main()

{ printf(\ }

第九章填空题: 第 3 页 共 5 页

7、执行以下程序段中的语句\k=M*M+1\后k的值是_______(4)_________。 #define N 2 #define M N+1 k=M*M+1

8、以下程序运行时输出到屏幕的结果为_______(6)___。

#include

#define MAX(A,B) A>B?2*A:2*B void main()

{ int a=1,b=2,c=3,d=4,t; t=MAX(a+b,c+d); printf(\}

9、若有以下宏定义:

#define M(a,b) -a/b

则执行语句\printf(\\后输出结果为__(4)_。

第 4 页 共 5 页

附录:调用函数的四种典型组合:

1、空函数(P157):例main()等效于 void main(void)、void fun(void) 调用格式简化为:fun(); 2、函数返回值(P163):被调函数中应有return语句;被调函数本身应定义类型;主调函数可直接调用函数。(适用于单个变量传递) 例:int max(int x,int y) {return x>y?x:y;} main() {int a=2,b=3; printf(“max=%d”, max(a,b));} 3、形参与实参结合传递数据(多个变量或数组传递): 地址共享法: ①利用指针变量和取地址操作方法: 例1:int max(int x,int y,int *z) {*z=x>y?x:y;} main() {int a=1,b=2,c; max(a,b,&c);printf(“max=%d”, c));} ②利用数组名或任一个元素地址是数组数据的首址特点,共享内存同一地址方法(P178数组元素例8.10; P179数组名例8.11): #include int y(int x[]) int y(int x[]) { int t; t=x[0];x[0]=x[1];x[1]=t;} { int t; t=x[0];x[0]=x[1];x[1]=t;} void main() main() { int i,z[3]={1,2,3}; y(z); for(i=0;i<3;i++) { int i,z[3]={1,2,3}; y(&z[1]); printf(\ for(i=0;i<3;i++) printf(\ ③全局变量法(P184) 注意:采用指针变量和取地址操作方法受到一定的限制,表达式*z++;或*z--;按照运算符优先权法则,自增或自减运算符与指针运算符同处2级,而不能获得正确结果,根据书P224第(3)提示,正确写法是为*z=*z+1;或*z=*z-1;或(*z)++;或*(z)--;后则能获得正确结果。见下例:主函数中变量y无法获得2的结果 #include void gg(int *b) { *b++; } void main() { int y=1; gg(&y); printf(\ } 改成下面程序后,在VC++无法获得正确结果,而在TC3下主函数中变量y可以获得2的结果。 #include void gg(int *b) { (*b)++; } void main() { int y=1; gg(&y); printf(\ } 结论:在函数传递中,建议按书P224(3)规定办理,或只作赋值也可。 1、 返回指针值的函数:书265 第 5 页 共 5 页

本文来源:https://www.bwwdw.com/article/igwt.html

Top