1.编写程序:用递归算法实现函数:int sum( int n ); 其功能是求 1+2+3+…+n 的值并返回。要求编写主函数main()去调用递归函数sum()。 编写程序如下: 【答案】
#include
void main() { int n; cout<<\ cin>>n; cout<<\} 1. 编写程序:分别求出acm(5,3)、acm(4,2)、acm(5,5)的值。阿克曼函数定义如下:
n+1 m=0
acm ( m , n ) = acm ( m-1 , n ) n=0
acm ( m-1 , acm ( m, n-1 ) ) n>0,m>0
编写程序如下:
【答案】#include
int acm(int m,int n) { if(m==0) return n+1; else { if(n==0) return acm(m-1,n); else return acm(m-1,acm(m,n-1)); } }
输入:5 3 输出:5
输入:4 2 输出:3 输入:5 5 输出:6 2. 编写程序:要求输入一个整数n,能够逐位取出正序或反序输出,用递归算法实现:
函数: void f1( int n ); 功能是:将 n 逐位取出反序输出 函数: void f2( int n ); 功能是:将 n 逐位取出正序输出
算法提示:重复除以10取余数,直到商为0为止;若函数中先输出余数,后递归调用,则为反序输出;若函数中先递归调用,后输出余数,则为正序输出。 编写程序如下:
【答案】#include void f1(int n) { cout< void f2(int n) { if (n>10) f2(n/10); cout< }---------------------------------------------------- 1.编写程序:用“筛选法”求出 2 ~ 80 之间的所有素数,要求每行输出4个素数。 编写程序如下: 【答案】#include { int prime[ 39 ] ; for ( int i=0 , j=3 ; i<39 ; i++ , j+=2 ) prime[ i ] = j ; for ( i=0 ; i<39 ; i++ ) if ( prime[ i ] ) for ( j = i+1 ; j<39 ; j++ ) if ( prime[ j ] && prime[ j ] % prime[ i ] == 0 ) prime[ j ] = 0 ; cout << \之间的素数:\\n\ for ( j=0 , i=0 ; i<39 ; i++ ) if ( prime[ i ] ) { cout << setw(8) << prime[ i ] ; j++ ; if ( j%4 == 0 ) cout << endl ; } } 2.编写程序:随机产生10个三位数的整数并存入数组中,用“选择排序法”对数组中的随机数进行升序排序。 编写程序如下: 【答案】#include void main ( ) { int a[ 10 ] , i , k ; unsigned seed ; cout << \请输入一个随机数种子(无符号整数)= \ cin >> seed ; srand( seed ) ; cout << \数组中的内容:\ for ( i=0 ; i<10 ; i++ ) { a[ i ] = rand()?0 + 100 ; cout << setw(6) << a[ i ] ; } cout << endl ; int j , temp ; cout << \排序前:\ for ( i=0 ; i<10 ; i++ ) cout << setw(6) << a[ i ] ; cout << endl ; for ( i=0 ; i<9 ; i++ ) { temp = a[ i ] ; k = i ; for ( j = i+1 ; j<10 ; j++ ) if ( temp > a[ j ] ) { temp = a[ j ] ; k = j ; } if ( k != i ) { temp = a[ i ] ; a[ i ] = a[ k ] ; a[ k ] = temp ; } } cout << \排序后:\ for ( i=0 ; i<10 ; i++ ) cout << setw(6) << a[ i ] ; cout << endl ; } 3.编写程序:随机产生10个四位数的整数并存入数组中,用“冒泡排序法”对数组中的随机数进行降序排序。 编写程序如下: 【答案】#include #include void main ( ) { int a[ 10 ] , i , k ; unsigned seed ; cout << \请输入一个随机数种子(无符号整数)= \ cin >> seed ; srand( seed ) ; cout << \数组中的内容:\ for ( i=0 ; i<10 ; i++ ) { a[ i ] = rand()?0 + 100 ; cout << setw(6) << a[ i ] ; } cout << endl ; int j , temp ; cout << \排序前:\ for ( i=0 ; i<10; i++ ) cout << setw(6) << a[ i ] ; cout << endl ; for ( i=0 ; i<9 ; i++ ) for ( j=9 ; j>i ; j-- ) if ( a[ j ] > a[ j-1 ] ) { temp = a[ j ] ; a[ j ] = a[ j-1 ] ; a[ j-1 ] = temp ; } cout << \排序后:\ for ( i=0 ; i<10 ; i++ ) cout << setw(6) << a[ i ] ; cout << endl ; } 4.编写程序:随机产生10个二位数的整数并存入数组中,再从键盘上任意输入一个要查找的整数,用“顺序查找法”在数组中进行查找。 编写程序如下: 【答案】#include { int a[ 10 ] , i , k ; unsigned seed ; cout << \请输入一个随机数种子(无符号整数)= \ cin >> seed ; srand( seed ) ; cout << \数组中的内容:\ for ( i=0 ; i<10 ; i++ ) { a[ i ] = rand()? + 10 ; cout << setw(6) << a[ i ] ; } cout << endl ; cout << \请输入要查找的数:\ cin >> k ; for ( i=0 ; i<10 ; i++ ) if ( a[ i ] == k ) { cout << k << \已找到!\\n \ return ; } cout << k << \未找到!\\n \ } 5.编写程序:随机产生10个二位数的整数并存入数组中,对其进行升序排序,再从键盘上任意输入一个要查找的整数,用“折半查找法”在数组中进行查找。 编写程序如下: 【答案】#include { int a[ 10 ] , i , j,low , high , mid ,k ; unsigned seed ; cout << \请输入一个随机数种子(无符号整数)= \ cin >> seed ; srand( seed ) ; cout << \数组中的内容:\ for ( i=0 ; i<10 ; i++ ) { a[ i ] = rand()? + 10 ; cout << setw(6) << a[ i ] ; } cout << endl ; for ( i=0 ; i<9 ; i++ ) for ( j=i+1 ; j<10 ; j++ ) if ( a[ i ] > a[ j ] ) { k = a[ i ] ; a[ i ] = a[ j ] ; a[ j ] = k ; } cout << \数组中的内容(排序后):\ for ( i=0 ; i<10 ; i++ ) cout << setw(4) << a[ i ] ; cout << endl ; cout << \请输入要查找的数:\ cin >> k ; for ( low=0 , high=9 ; low <= high ; ) { mid = ( low + high ) / 2 ; if ( a[ mid ] == k ) { cout << k << \已找到!\\n \ exit( 0 ) ; } if ( k > a[ mid ] ) low = mid+1 ; else high = mid-1 ; } cout << k << \未找到!\\n \ } 1.编写程序:有数组int a [ 12 ] ; 找出该数组中的最大元素及其下标、最小元素及其下标。要求用指针实现。 编写程序如下: 【答案】#include