1、編一個函數(shù)fun(char *s),函數(shù)的功能是把字符串中的內(nèi)容逆置。
例子如:字符串中原有的內(nèi)容為:abcdefg,則調(diào)用該函數(shù)后,串中的內(nèi)容為:gfedcba
fun(char *s)
{ int i=0,t,n=strlen(s);
for(;s+i
{t=*(s+i);*(s+i)=*(s+n-1-i);*(s+n-1-i)=t;}}
注:該題的算法是先分別找出字符串的兩頭,然后同時逐一往中間移動,每移動一次
都進(jìn)行兩字符的位置對換,直到中間字符(用s+i
地址,因此要注意把它的內(nèi)容取出再進(jìn)行換位。即先進(jìn)行取內(nèi)容運(yùn)算*)
2、請編寫函數(shù)fun,對長度為7個字符的字符串,除首、尾字符外,將其余5個字符按降序排列。例如,原來的字符串為CEAedca,排序后輸出為CedcEAa。
int fun(char *s,int num)
{ int i,j,t;
for(i=1;i
for(j=i+1;j
if(s[i]
{ t=s[i];
s[i]=s[j];
s[j]=t;}}
該題采用的排序法是選擇法進(jìn)行降序排序,算法是用外for()循環(huán)從字符串的前端往后端走動,每走動一個字符都用內(nèi)嵌的for()循環(huán)在該字符后找出最小的字符與該字符進(jìn)行換位。直到外for()循環(huán)走到最后一個字符。此外,此題還要注意把首尾字符除開,即在最外層for()循環(huán)中從1開始,只到num-2即可。
3、請編寫一個unsigned fun(unsigned w),w是一個大于10的無符號整數(shù),若w是n(n>=2)位的整數(shù),函數(shù)求出w的后n-1位的數(shù)作為函數(shù)值返回。例如:w值為5923,則函數(shù)返回923;w值為923則函數(shù)返回23。
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;
}
注:由于unsigned型整數(shù)在0-65535這間,只要它大于10000則對10000求余即得出后面4位,否則如果大于1000則對1000求余得出后3位數(shù),這樣一層一層往小的判斷。由于return的作用除了返回值以外,還有當(dāng)執(zhí)行到return時就跳出該程序,所以可以連續(xù)的用if()語句。
4、請編一函數(shù)void fun(int tt[M][N],int pp[N]),tt指向一個M行N列的二維數(shù)組,求出二維數(shù)組每列中最小元素,并依次放入pp所指一維數(shù)組中,二維數(shù)組中的數(shù)已在主
函數(shù)中賦予。
#define M 3
#define N 4
void fun(int tt[M][N],int pp[N])
{ int i, j;
for(i=0;i
{ pp=tt[0][i];
for(j=0;j
if(tt[j][i]}}
/*注:該題用for(i=0;i;j++)用于控制同列內(nèi)元素的比較。多重循環(huán)的嵌套總是最里層循環(huán)變化最快,即外層循環(huán)改變一個值,內(nèi)層循環(huán)就要循環(huán)完一次,對于多重循環(huán)一定要好好去體會和理解,在多數(shù)題目中都要用到多重循環(huán)(一般為二重)。*/
5、請編一個函數(shù)fun,其中n所指存儲單元中存放了數(shù)組中元素的個數(shù)。函數(shù)的功能是:刪除所有值為y的元素。數(shù)組元素中的值和y的值由主函數(shù)通過健盤讀入。
試題程序。
#define M 20
void fun (int bb[], int *n,int y)
{ int i,j=0;
for( i=0; i<*n; i++)
if(bb[i]!=y) bb[j++]=bb[i];
*n=j;}
/*注:該題的算法是,用for()循環(huán)控制元素逐一判斷數(shù)組元素是否等于y,若不等則賦給新數(shù)bb,由于刪除的關(guān)系j總是小于或等于i,故而可用bb作為新數(shù)組,與第6題相似。還要注意*n=j;如果沒有這個語句則不能傳回新數(shù)組的個數(shù),另外也不能換成n=&j;這點是用指針時常犯的錯誤,切記!*/
6、 請編寫一個函數(shù)int fun(int x),它的功能是:判斷整數(shù)x是否是同構(gòu)數(shù)。若是同構(gòu)數(shù),函數(shù)返回1;否則返回0。
所謂“同構(gòu)數(shù)”是指這樣的數(shù),它出現(xiàn)在它的平方數(shù)的右邊。例如:輸入整數(shù)5,5的平方數(shù)是25,5是25中右側(cè)的數(shù),所以5是同構(gòu)數(shù)。x的值由主函數(shù)從健盤讀入,要求不大于100。
int fun (int x)
{ int xx=x * x;
if(xx==x//xx%10==x//xx%100==x) return 1;
else return 0;}
/*注:由“同構(gòu)數(shù)”的定義可得只要求出平方數(shù)或平方數(shù)的最后一位或平方數(shù)的最后兩位然后與x進(jìn)行判斷即可,分別求余后即得出平方數(shù)的右邊。*/
7、請編寫函數(shù)fun,它的功能是:求出ss所指字符串中、指定字符的個數(shù),并返回此值。例如:若輸入字符串:123412132,輸入字符為:1,則輸出:3。
#define M 81
int fun(char *ss,char c)
{int num=0;
while(*ss!='\0')
{if(*ss==c) num++;
ss++;}
return(num);}
/* 注:本題用while()循環(huán)來控制字符的移動,每移動一個字符都要進(jìn)行判斷(if(*ss==c))是否為指定的字母,若是則個數(shù)加1。這里要注意如何讓ss指針向下走動(ss++)。*/
8、請編寫函數(shù)fun,經(jīng)的功能是:求出1到1000之內(nèi)能被7或11整除、但不能同時補(bǔ)7和11整除的所有整數(shù)并將它們放在a所指的數(shù)組中,通過n返回這些數(shù)的個數(shù)。
void fun(int *a,int *n)
{ int i,m=0;
for(i=1;i<1000;i++)
if(((i%7==0)//(i%11==0))&&!((i%7==0)&&(i%11==0)))
{a[m]=i;m+=1;}
*n=m;
}
/* 該題關(guān)鍵就是如何表示能被7或11整除,但不能同時被7和11整除。用(i%7==0)//(i%11==0)來表示能被7或11整除,用 !((i%7==0)&&(i%11==0))來表示不能同時被7和11整除。
9、定義了N*N的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)fun(int a[][N]),函數(shù)的功能是:使數(shù)組第一行元素中的值與最后一行元素中的值對調(diào)、第二行元素的值與倒數(shù)第二行中的值對調(diào)、……、其他依次類推。
#define N 5
fun(int a[][N])
{ int i,m,t;
for(m=0;m
for(i=0;i
{t=a[i][m];
a[i][m]=a[N-1-i][m];
a[N-1-i][m]=t;
}}
/* 外層for()循環(huán)用于控制一列一列地移動,內(nèi)嵌的forr()循環(huán)用于控制在同一列內(nèi)對應(yīng)行元素的對調(diào)。a[i][m]為第m列第i行元素,而a[N-1-i][m]為第m列倒數(shù)第i行的元素,正好需要對調(diào)。*/
10、 要求程序的功能是:把20個隨機(jī)數(shù)存入一個數(shù)組,然后輸出該數(shù)組中的最小值。其中確定最小值的下標(biāo)的操作在fun函數(shù)中實現(xiàn),請給出該函數(shù)的定義。
試題程序。
#include
#include
#define VSIZE 20
int vector[VSIZE];
int fun(int list[],int size)
{ int i,j=0;
for(i=1;i
if(list[i]
j=i;
return j;
}
/*注:該題的算法是用一個變量(j)來存儲最小值元素的下標(biāo),在循環(huán)過程中讓每個元素都與原最小值元素進(jìn)行大小比較(if(list[i]
計算機(jī)等級考試二C語言超級經(jīng)典400道題目
更多信息請訪問:考試吧計算機(jī)等級考試欄目