【正文】
中間字符(用s+is+n1i來(lái)控制)。由于s+i中一個(gè)地址,因此要注意把它的內(nèi)容取出再進(jìn)行換位。即先進(jìn)行取內(nèi)容運(yùn)算*) */fun(char *s){ int i=0,t,n=strlen(s)。for(。s+is+n1i。i++){t=*(s+i)。*(s+i)=*(s+n1i)。*(s+n1i)=t。}}main(){ char a[N]。clrscr()。printf(Enter a string:)。 gets(a)。printf(The original string is:)。puts(a)。fun(a)。printf(\n)。printf(The string after modified:)。puts(a)。} 題目2寫(xiě)程序,實(shí)現(xiàn)矩陣(3行3列)的轉(zhuǎn)置(即行列互換)。例如,輸入一面的矩陣:程序輸出:試題程序:include include /*這題的關(guān)鍵在于進(jìn)行行列下標(biāo)轉(zhuǎn)換的算法,由矩陣的對(duì)稱性我們不難看出在進(jìn)行行列互換時(shí)a[j]在好是與a[j]互換,因而只要我位讓程序走完矩陣的左上角即可(用for(i=0。i2。i++)再套for(j=i+1。j3。j++)來(lái)完成左上角的走動(dòng)。*/int fun(int array[3][3]){ int i,j,t。for(i=0。i2。i++)for(j=i+1。j3。j++){t=array[j]。array[j]=array[j]。array[j]=t。}}main(){ int i,j。int array[3][3]={{100,200,300},{400,500,600},{700,800,900}}。clrscr()。for(i=0。i3。i++){for(j=0。j3。j++)printf(%7d,array[j])。printf(\n)。}fun(array)。printf(Converted array:\n)。for(i=0。i3。i++){for(j=0。j3。j++)printf(%7d,array[j])。printf(\n)。}}題目3請(qǐng)編一個(gè)函數(shù)fun(int *a,int n,int *odd,int *even),函數(shù)的功能是分別求出數(shù)組中所有奇數(shù)之和以及所有偶數(shù)之和。形參n給了數(shù)組中數(shù)據(jù)的個(gè)數(shù):利用指針odd返回奇數(shù)之和,利用指針even返回偶婁這和。例如:數(shù)組中的值依次為:1,8,2,3,11,6;則利用指針odd返回奇數(shù)之和24;利用指針even返回偶數(shù)之和8。試題程序。include include define N 20/*注:該題的算法是:用for()循環(huán)一步一步地找元素,用if(!a%2)來(lái)判斷是否是奇數(shù),%運(yùn)算是求余運(yùn)算,當(dāng)對(duì)2求余為1時(shí)表示原數(shù)為奇數(shù),否則為偶數(shù)。*/fun(int *a,int n,int *odd,int *even){ int i。 *even=0。*odd=0。for(i=0。in。i++)if(!(a%2))*even+=a。else*odd+=a。}main(){ int a[N]={1,9,2,3,11,6},i,n=6,odd,even。clrscr()。printf(The original data is:\n)。for(i=0。in。i++) printf(%5d,*(a+i))。printf(\n\n)。fun(a,n,amp。odd,amp。even)。printf(The sum of odd numbers:%d\n,odd)。printf(The sum of even number:%d\n,even)。}題目4要求程序的功能是:把20個(gè)隨機(jī)數(shù)存入一個(gè)數(shù)組,然后輸出該數(shù)組中的最小值。其中確定最小值的下標(biāo)的操作在fun函數(shù)中實(shí)現(xiàn),請(qǐng)給出該函數(shù)的定義。試題程序。include include define VSIZE 20int vector[VSIZE]。/*注:該題的算法是用一個(gè)變量(j)來(lái)存儲(chǔ)最小值元素的下標(biāo),在循環(huán)過(guò)程中讓每個(gè)元素都與原最小值元素進(jìn)行大小比較(if(listlist[j]),如發(fā)現(xiàn)更小的則讓j重新?lián)碛凶钚≈翟氐南聵?biāo)(j=i)。*/int fun(int list[],int size){ int i,j=0。for(i=1。isize。i++)if(listlist[j])j=i。return j。}main(){int i。clrscr()。for(i=0。iVSIZE。i++){vector=rand()。printf(Vector[%d]=%6d\n,i,vector)。}i=fun(vector,VSIZE)。printf(\nMininum:vector[%d]=%6d\n,i,vector)。}題目5請(qǐng)編一個(gè)函數(shù)float fun(double h),函數(shù)的功能是對(duì)變量h中的值保留2位小數(shù),并對(duì)第三位進(jìn)行四舍五入(規(guī)定h中的值為正數(shù))。例如:,;。試題程序。include include /*注:h乘以1000后正好是原小數(shù)點(diǎn)后第三位做了新數(shù)的個(gè)位數(shù),然后再進(jìn)行加5運(yùn)算時(shí)。如原小數(shù)點(diǎn)后第三位為4及以下則加5后還是不能進(jìn)一位(即四舍),如是5及以上則加5后該位就要向前進(jìn)一位數(shù)(即五入)。進(jìn)行加5運(yùn)算后除10再賦給一個(gè)整型變量此時(shí)就只有原小數(shù)點(diǎn)第二位及以前各位保留在整型變量中,最后再對(duì)整型變量除100,這樣又出現(xiàn)了兩位小數(shù)。該題中,進(jìn)行四舍五入后一定要賦給一個(gè)整型變量才能將不用部分徹底變成0 。*/float fun(float h){ long t。h=h*1000。t=(h+5)/10。return (float)t/100。}main(){float a。clrscr()。printf(Enter a:)。 scanf(%f,amp。a)。printf(The original data is:)。printf(%f\n\n,a)。printf(The result :%\n,fun(a))。}題目6編寫(xiě)函數(shù)fun,函數(shù)的功能是:從字符串中刪除指定的字符。同一字母的大、小寫(xiě)按不同字符處理。若程序執(zhí)行時(shí),輸入字符串為:turbo c and Borland c++從鍵盤(pán)上輸入字符:n,則輸出后變?yōu)椋簍urbo c ad borlad c++如果輸入的字符串不存在,則字符串照原樣輸出。試題程序。include include /*注:該題的算法是讓i控制一個(gè)一個(gè)字符往后走,在移動(dòng)過(guò)程中如果s不是要?jiǎng)h的字符,則將其按順序放到新串中(新串亦是用s來(lái)做,只是用k來(lái)控制新串的下標(biāo),由于要?jiǎng)h除一些元素,因此新串的下標(biāo)總是比原下標(biāo)i要慢。因而可用此法即同一字符串變量的方法。*/int fun(char s[],int c){int i,k=0。for(i=0。s。i++)if(s!=c) s[k++]=s。 s[k]=39。\039。}main(){ static char str[]=turbo c and borland c++。char ch。clrscr()。printf( :%s\n,str)。printf( :)。scanf(%c,amp。ch)。fun(str,ch)。printf(str[]=%s\n,str)。}題目7請(qǐng)編寫(xiě)一個(gè)unsigned fun(unsigned w),w是一個(gè)大于10的無(wú)符號(hào)整數(shù),若w是n(n=2)位的整數(shù),函數(shù)求出w的后n1位的數(shù)作為函數(shù)值返回。例如:w值為5923,則函數(shù)返回923;w值為923則函數(shù)返回23。試題程序。include include /* 注:由于unsigned型整數(shù)在065535這間,只要它大于10000則對(duì)10000求余即得出后面4位,否則如果大于1000則對(duì)1000求余得出后3位數(shù),這樣一層一層往小的判斷。由于return的作用除了返回值以外,還有當(dāng)執(zhí)行到return時(shí)就跳出該程序,所以可以連續(xù)的用if()語(yǔ)句。 */unsigned fun( unsigned w ){ if(w=10000) return w%10000。if(w=1000) return w%1000。if(w=100) return w%100。return w%10。}main(){ unsigned x。printf( enter a unsigned integer number : )。scanf( %u,amp。x)。if(x10) printf(data error!)。else printf (the result :%u\n, fun(x))。}題目8編寫(xiě)函數(shù)int fun(int lim,int aa[MAX]),該函數(shù)的功能是求出小于lim的所有素?cái)?shù)并放在aa數(shù)組中,該函數(shù)返回所求出素?cái)?shù)的個(gè)數(shù)。試題程序。include include define MAX 100/*注:循環(huán)for(i=2。ik。i++)用于判斷k是否為素?cái)?shù),原理是當(dāng)用2到k1這間的數(shù)去對(duì)k求余,如余數(shù)為0(即被整除)則表示k不是一個(gè)素?cái)?shù)。語(yǔ)句if(i=k)用于判斷在上一個(gè)for()循環(huán)中i能否走到k,如果能則表示在2到k1的數(shù)都不能整除k,即k為素?cái)?shù)。*/int fun( int lim, int aa[MAX]){ int i,j=0,k。for( k=2。 klim。 k++){ for( i=2。 ik。 i++)if( !(k%i)) break。if( i=k) aa[j++]=k。}return j。}main(){ int limit,i,sum。int aa[MAX]。printf(\n input a integer number:)。scanf( %d,amp。limit)。sum=fun(limit,aa)。for(i=0。 isum。 i++){ if(i%10==0amp。amp。i!=0)printf(\n)。printf(%5d, aa)。}}題目9請(qǐng)編寫(xiě)函數(shù)fun,函數(shù)的功能是求出二維數(shù)組周邊元素之和,作為函數(shù)值返回。二維數(shù)組中的值在主函數(shù)中賦予。例如:二維數(shù)組中的值為則函數(shù)值為61。試題程序。include include define M 4define N 5/*注:該題的第一個(gè)for()循環(huán)是計(jì)算矩陣的最上一行和最下一行的總和,第二個(gè)for()是計(jì)算除兩頭元素以外的最左一列和最右一列的元素的和,最后sun就是周邊元素的和。*/int fun(int a[M][N]){int sum=0,i。for(i=0。iN。i++)sum+=a[0]+a[M1]。for(i=1。iM1。i++)。sum+=a[0]+a[N1]。return sum 。}main(){ int aa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,0}}。int i,j,y。clrscr()。printf(The original data is :\n)。for(i=0。iM。i++){for(j=0。jN。j++) printf(%6d,aa[j])。printf(\n)。}y=fun(aa)。printf(\nThe sum: %d\n,y)。printf(\n)。}題目10請(qǐng)編寫(xiě)函數(shù)fun,對(duì)長(zhǎng)度為7個(gè)字符的字符串,除首、尾字符外,將其余5個(gè)字符按降序排列。例如,原來(lái)的字符串為CEAedca,排序后輸出為CedcEAa。試題程序。include include include /*該題采用的排序法是選擇法進(jìn)行降序排序,算法是用外for()循環(huán)從字符串的前端往后端走動(dòng),每走動(dòng)一個(gè)字符都用內(nèi)嵌的for()循環(huán)在該字符后找出最小的字符與該字符進(jìn)行換位。直到外for()循環(huán)走到最后一個(gè)字符。此外,此題還要注意把首尾字符除開(kāi),即在最外層for()循環(huán)中從1開(kāi)始,只到num2即可。*/int fun(char *s,int num){ int i,j,t。for(i=1。inum2。i++)for(j=i+1。jnum1。j++)if(ss[j]){ t=s。s=s[j]。s[j]=t。}}main(){ char s[10]。clrscr()。printf(輸入7個(gè)字符的字符串:)。gets(s)。fun(s,7)。printf(\n%s,s)。}題目11請(qǐng)編一函數(shù)void fun(int tt[M][N],int pp[N]),tt指向一個(gè)M行N列的二維數(shù)組,求出二維數(shù)組每列中最小元素,并依次放入pp所指一維數(shù)組中,二維數(shù)組中的數(shù)已在主函數(shù)中賦予。試題程序。include include define M 3define N 4/*注:該題用for(i=0。iN。i++)來(lái)控制一列一列地找,而內(nèi)嵌循環(huán)for(j=0。jM。j++)用于控制同列內(nèi)元素的比較。多重循環(huán)的嵌套總是最里層循環(huán)變化最快,即外層循環(huán)改變一個(gè)值,內(nèi)層