本帖最后由 zzq宁静致远 于 2013-11-20 21:14 编辑
第二十六节 序列差最小 最近总有网友问我,C语言要怎么样去学,才能学好。很简单,实践实践再实践。这个程序,我提出几个问题,我大家能够举一反三。 // text.cpp : 定义控制台应用程序的入口点。
/***********************************************************************
** 程序名称 : 交换数据
** 程序描述 : 通过交换a,b中的元素,使[序列a元素的和]与[序列b无素的和]之间的差最小
************************************************************************/
#include "stdafx.h"
/*******************************************************************
** 函数名称 : void speed(int *iNum , int max)
** 函数功能 : 应用快速排序法排列数组顺序(从小到大)
** 入口参数 : int *iNum , int max //想想这两个参数
** 出口参数 : 无
********************************************************************/
void speed(int *iNum , int max)
{
int j , k ;
/* 这两层循环什么意思,还有什么和这个是相似的 */
for ( j = 0 ; j < max ; j++ )
{
for ( k = j + 1 ; k < max ; k++ )
{
if ( iNum[j] > iNum[k] )
{
/* 想想还有什么办法 */
iNum[j] ^= iNum[k] ^= iNum[j] ^= iNum[k] ;
}
}
}
}
/*******************************************************************
** 函数名称 : int sumall( int *all , int max )
** 函数功能 : 对序列求和
** 入口参数 : int *all , int max
** 出口参数 : sum
*******************************************************************/
int sumall( int *all , int max )
{
int i , sum = 0 ;
for( i=0 ; i < max ; i++ )
{
sum += all ;
}
return sum ;
//printf("和为:%dn" , sum );
}
/*******************************************************************
** 函数名称 : void change( int *aNum , int *bNum , int max )
** 函数功能 : 对AB序列进行交换数据
** 入口参数 : int *aNum , int *bNum , int max
** 出口参数 : 无
*******************************************************************/
void change( int *aNum , int *bNum , int max )
{
int i , j , n , m , k ;
for ( i = 0 ; i < max ; i++ )
{
/* 认真看下这个if语句 */
if( ( (sumall(aNum,max) < sumall(bNum,max))&&(aNum) )||
( (sumall(aNum,max) > sumall(bNum,max))&&(aNum>bNum) ) )
{
aNum ^= bNum ^= aNum ^= bNum ;
speed(aNum,max) ;
speed(bNum,max) ;
}
}
printf( "*************************************n" );
printf( "A序列调整之后:" ) ;
for ( n = 0 ; n < max ; n++ )
{
printf( "%d, " ,aNum[n]) ;
}
printf( "n" );
printf( "B序列调整之后:" ) ;
for ( m = 0 ; m < max ; m++ )
{
printf( "%d, " ,bNum[m]) ;
}
printf( "n" );
printf( "*************************************n" ) ;
printf( "A序列调整之后的和:%dn" , sumall(aNum,max) ) ;
printf( "B序列调整之后的和:%dn" , sumall(bNum,max) ) ;
}
/***********************************************************************
** 函数名称 : 主函数
** 函数功能 : 输入和输出数据
** 入口参数 : int argc, char* argv[]
** 出口参数 : return
************************************************************************/
int main(int argc, char* argv[])
{
int i , j , n , m ;
int A[100]={} ;
int B[100]={} ;
int max ;
printf( "请输入你要输入的最大个数:Max=" ) ;
scanf( "%d" , &max );
printf( "请输入A序列数据 :n" ) ;
for ( i = 0 ; i < max ; i++ )
{
scanf( "%d",&A ) ;
}
printf( "请输入B序列数据 :n" ) ;
for ( j = 0 ; j < max ; j++ )
{
scanf( "%d",&B[j] ) ;
}
speed( A , max );
speed( B , max );
printf( "*************************************n" );
printf( "排序之后的A序列:" ) ;
for ( n = 0 ; n < max ; n++ )
{
printf( "%d, " ,A[n] ) ;
}
printf( "n" );
printf( "排序之后的B序列:" ) ;
for ( m = 0 ; m < max ; m++ )
{
printf( "%d, " ,B[m] ) ;
}
printf( "n" );
printf( "*************************************n" ) ;
change( A , B , max ) ;
return 0;
}
|