010-6095-7397
登录 | 注册
010-6095-7397

当前位置:中公软考> 模拟试题 >

(软考初级)程序员案例分析每日一练(3)

发布者:中公软考     来源:中公软考     2021-03-31 17:13:12     阅读()

试题五

阅读下列程序说明和C代码,将应填入__(n)__处的字句写在答题纸的对应栏内。

[程序5说明]

本程序采用递归算法将一个自然数 n 分解成不多于 m 个整数之和。设构成和数 n 的各个整数取于数组 d ,d 中的整数互不相等且由大到小存储。

例如,数组 d 中存储以下整数: d[] = {100 ,81 ,64 ,49 ,36 ,25 ,16 ,9 ,4 ,1} ,则有:

函数 End()的形参 c 表示 d 中可取的整数个数;形参 pd 指向能成为和数的整数的存放位置。

[程序5]

#include〈stdio.h〉

#define N 20

int find( int n ,int m ,int *d ,int c ,int *pd )

{ int r ;

if ( n == 0 ) return 0 ; /* 已分解完成 */

if ( m == 0 || c == 0 ) return -1 ; /* 不可以分解 */

if ( __(1)__ ) return find( n ,m , d+1 ,c-1 ,pd ) ;

else { *pd = *d ;

r = find( __(2)__ ,d , c , __(3)__ ) ; /* 继续对剩余数作分解 */

if ( r >= 0 ) return __(4)__ ;

return find( n ,m , __(5)__ ,pd ) ;

}

}

void main()

{ int n ,m ,k ,i ,p[N] ,*pptr = p ;

int d[ ] = { 100, 81, 64, 49, 36, 25, 16, 9, 4, 1 } ;

printf( "Enter n , m : " ; scanf( %d %d ,&n ,&m );

k = find( n , m , d , 10 , pptr ) ;

if ( k <= O ) printf ( "No answer!\n" ) ;

else{ printf( "%d = %d" , n , p[0] ) ;

for ( i = l ; i < k ; i++ )

printf(" +%d" , p[i] ) ;

printf("\n");

}

参考答案

软考微信公众号

分享最前沿行业动态、业内时评,打造专业软考交流圈

软考QQ群

备考交流、干货共享,学习各种软考考试技巧

相关阅读

近期考试资讯

为你推荐


在线咨询

新浪微博

软考微信


返回顶部