計(jì)算機(jī)二級(jí)C語(yǔ)言上機(jī)題庫(kù)(二)
二、數(shù)組題
69.找出100至n(不大于1000)之間三位數(shù)字相等的所有整數(shù)。
int fun (int *s,int n)
{inti,j,k,a,b,c;j=0;for (i=100;i<n;i++){k=i;a=k%10;k/=10;b=k%10;k/=10;c=k;
if(a==b&&a==c)s[j++]=i;}return j;}
70.找出100~n(不大于1000)之間百位數(shù)字加十位數(shù)字等于個(gè)位數(shù)字的所有整數(shù)。
int fun (int *s,int n)
{inti,j,k,a,b,c;j=0;for (i=100;i<n;i++){k=i;a=k%10;k/=10;b=k%10;k/=10;c=k/10;if(a==b+c)s[j++]=i;}return j;}
71.求出數(shù)組中最大數(shù)和次最大數(shù),并把最大數(shù)和a[0]中的數(shù)對(duì)調(diào)、次最大數(shù)和a[1]中的數(shù)對(duì)調(diào)。例如數(shù)組中原有的數(shù)為:7、10、12、0、3、6、9、11、5、8,輸出的結(jié)果為:12、11、7、0、3、6、9、10、5、8.
int fun (int *a,int n)
{inti,m,t,k;for (i=0;i<2;i++){m=i;for (k=i;k<n;k++)if (a[k]>a[m])m=k;
t=a[i];a[i]=a[m];a[m]=t;}}
72.計(jì)算數(shù)組元素中值為正數(shù)的平均值(不包括0)。例如:數(shù)組中元素中的值依次為39,-47,21,2,-8,15,0,則程序的運(yùn)行結(jié)果為19.250000.
double fun (int x[ ])
{double sum=0.0;int c=0,i=0;while (x[i]!=0)
{if (x[i]>0)
{sum+=x[i].c++;}i++;}sum/=sum/c;return sum;}
73.?計(jì)算數(shù)組元素中值為負(fù)數(shù)的平均值(不包括0)。例如:數(shù)組中元素中的值依次為43,-47,-21,53,-8,12,0,則程序的運(yùn)行結(jié)果為-25.333333.
double fun(int x[])
{double sum=0.0;int c=0
,i=0;while(x[i]!=’\0’)
{if(x[i]<0)} {sum+=x[i].c++;}i++;}sum=sum/c;return sum;}
}
74.用選擇法對(duì)數(shù)組中的n個(gè)元素按從大到小的順序進(jìn)行排序。
void fun (int a[],int n)
{inti,j,t,p;for (j=0;j<n-1;j++){p=j;for (i=j+1;i<n;i++)?if (a[i]>a[p])p=j;t=a[p];a[p]=a[j];a[j]=t;}}
75.讀入一個(gè)整數(shù)m(5≤m≤20),函數(shù)getarr調(diào)用函數(shù)rnd獲得m個(gè)隨機(jī)整數(shù),函數(shù)sortpb將這m個(gè)隨機(jī)整數(shù)從小到大排序。例如,若輸入整數(shù)7,則應(yīng)輸出:3,10,17,28,32,36,47.
sortpb (int n,int *a)
{int i,j,p,t;for (j=0;j<n-1;j++){p=j;for (i=j+1;i<n;i++)
if(a[p]>a[i])p=i;if (p!=j){t=a[j];a[j]=a[p];a[p]=t;}}}
76.給定n個(gè)實(shí)數(shù),輸出平均值,并統(tǒng)計(jì)平均值以上(含平均值)的實(shí)數(shù)個(gè)數(shù)。例如n=8時(shí),輸入193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763,所得平均值為195.838745,在平均值以上的實(shí)數(shù)個(gè)數(shù)應(yīng)為5.
int fun (float x[],int n)
{int j,c=0;float xa=0.0;for (j=0;j<n;j++)xa +=x[j]/n;
printf(“ave=%f\n”, xa)for (j=0;j<n;j++)if(x[j]>= xa)c++;return c;}
77.讀入一個(gè)整數(shù)m(1≤m≤20)和m位學(xué)生的學(xué)號(hào)、數(shù)學(xué)課考分和計(jì)算機(jī)課考分,并從中查找第一個(gè)數(shù)學(xué)課考分<80且計(jì)算機(jī)課考分<70的學(xué)生,若有則輸出他的學(xué)號(hào)和兩門(mén)課分?jǐn)?shù),否則輸出“Not found!”.
int Find (int n,struct student ss[])
{int i;for (i=0;i<n;i++)if ((ss[i].math<80)&&(ss[i].cmpt<70))break;return ((i==n)?-1:i);}
main ()
{int i,m;struct student tt[M];printf (…);scanf(“%d”,&m);printf (…);
for(i=0;i<m;i++)…}
78.從n個(gè)學(xué)生的成績(jī)中統(tǒng)計(jì)出高于平均分的學(xué)生人數(shù),人數(shù)由函數(shù)值返回,平均分存放在形參aver所指的存儲(chǔ)單元中。例如,輸入8名學(xué)生的成績(jī):85,65.5,69,95.5,87,55,62.5,75,則高于平均分的學(xué)生人數(shù)為4(平均分為74.312500)。
int fun (float *s,in n,float *aver)
{float ave,t=0.0;int count=0,k,i;for (k=0;k<n;k++)t+=s[k];aver =t/n;
for(i=0;i<n;i++)if(s[i]>ave
)count++;*aver=ave;return count;}
79.?從n個(gè)學(xué)生的成績(jī)中統(tǒng)計(jì)出低于平均分的學(xué)生人數(shù),人數(shù)由函數(shù)值返回,平均分存放在形參aver所指的存儲(chǔ)單元中。例如,輸入8名學(xué)生的成績(jī):80.5,60,72,90.5,98,51.5,88,64則低于平均分的學(xué)生人數(shù)為4(平均分為75.5625)。
int fun (float *s,int n,float *aver)
{float ave,t=0.0;int count=0,k,i;for(k=0;k<n;i++) t+=s[k];ave=t/n;
for(i=0;i<n;k++) if (s[i]<ave)count++;*aver=ave;return count; }
80.使數(shù)組中的元素的值縮小5倍。
float m[10];
void fun (void)
{int j;printf (“In subfunc after calling \n”);
for (j=0;j<10;j++){printf (“%f”,m[j]/5);}}
81. .使數(shù)組中的元素的值增加10倍。
float m[10];
void fun (void)
{int j;printf (“In subfunc after calling \n”);
for (j=0;j<10;j++){printf (“%d”,m[j]*10);}}
82.刪除w所指數(shù)組中下標(biāo)為k的元素中的值。
arrout (int *w,int m)
{int k;for(k=0;k<m;k++)
printf (“%d”,w[k]);printf (“\n”);}
83.假如整數(shù)數(shù)列中的數(shù)不重復(fù),刪除數(shù)列中值為X的元素。N中存放的是數(shù)列中元素的個(gè)數(shù)。
fun (int *a,int n,int x)
{int p=0,i;a[n]=x;while (x!=a[p] )p=p+1;if (p==n)return -1;else {for (i=p;i<n;i++)
a[i]=a[i+1];return n-1;}}
84.按順序給s所指數(shù)組中的元素賦予從2開(kāi)始的偶數(shù),然后再按順序?qū)γ?個(gè)元素求一個(gè)平均值,并將這些值依次存放在w所指的數(shù)組中。若s所指數(shù)組中元素的個(gè)數(shù)不是5的倍數(shù),多余部分忽略不計(jì)。例如,s所指數(shù)組有14個(gè)元素,則只對(duì)前10個(gè)元素進(jìn)行處理,不對(duì)最后的4個(gè)元素求平均值。
fun (double *s,double *w)
{int k,i;double sum;for (k=2,i=0;i<SIZE;i++)
{s[i]=k;k+=2;}sum=0.0;for (k=0,i=0,i<SIZE;i++)
{sum+=s[i];if((i+1)%5==0){w[k]=sum/5;sum=0;k++;}}return k;}
85.N個(gè)有序整數(shù)數(shù)列已放在一維數(shù)組中,函數(shù)的功能是:利用折半查找算法查找整數(shù)m在數(shù)組中的位置。若找到,則返回其下標(biāo)值;反之,則返回-1.折半查找的基本算法是:每次查找前先確定數(shù)組中待查的范圍:low和high(low<high),然后把m與中間位置(mid)中元素的值進(jìn)行比較。如果m的值大于中間位置元素中的值,則下一次的查找范圍放在中間中間位置之后得元素中;反之,下次查找范圍落在中間位置之前的元素中。直到low>high,查找結(jié)束。
int fun (int a[],int m)
{int low=0,high=N-1,mid;while (low<=high)
{mid=(low+high)/2;if (m<a[mid])high =mid-1;
else if (m>a[mid])
low=mid+1;else return(mid);}return (-1);}
{printf (“%3d”,m[j]=m[j]*10);}
86.在x數(shù)組中放入n個(gè)采樣值,計(jì)算并輸出差值。(函數(shù)省略)
float fun(float x[],int n)
{int j;float xa=0.0,s;for (j=0;j<n;j++)xa+=x[j]/n;s=0;for (j=0;j<n;j++)
S+=(x[j]-xa)*(x[j]-xa)/n;return s;}
87.先讀入整數(shù)m,再讀入m個(gè)從小到大的整數(shù),最后再讀入一個(gè)整數(shù)k并將k插入到該改整數(shù)數(shù)列中,插入后的數(shù)列仍然按從小到大的順序排列。例如,若先輸入4,然后輸入4個(gè)從小到大排列的整數(shù):-1,1,7,98最后輸入待插入的數(shù)19,則輸出結(jié)果應(yīng)為:-1,1,7,19,98.
void InSort (int *n,int vv[],int k)
{int k=0,j;while (k>vv[i]&&i<*n)i++;if (i<*n)for (j=*n;j>i;j--)
vv[j]=vv[j-1];vv[i]=k;++*n;}
main()
{int aa[M].i,k,m;clrscr();printf(“\nPlease enter a number:\n”);
scanf (“%d”,&m);printf (“\nPlease enter %d numbers:\n”,m);
for(i=0;i<m;i++)scanf (“%d”,&aa[i]); printf (“\nPlease enter another numbers:\n”);
scanf (“%d”,&k);InSort(&m,aa,k);for (k=0;k<m;k++)printf(“%d”,aa[k]);}
88.讀入一個(gè)整數(shù)m(4≤m≤10),例如4,程序?qū)⒆詣?dòng)在a[0]至a[3]四個(gè)數(shù)組元素中分別放入1,4,9,16,且按逆序輸出此4個(gè)元素:16,9,4,1。
main ()
{inta[M]={0},i=0,j,m;printf(…);scanf(“%d”,&m);for(j=0;j<m;j++)a[j]=(j+1)*(j+1);printf(“\nTheoutput:\n”);for(i=m-1;i>=0;i--)printf (“%4d”,*(a+i));}
89.根據(jù)形參m的值(2≤m≤9),在m行m列的二維數(shù)組中存放如下所示的數(shù)據(jù),由主函數(shù)輸出。例如,若輸入2,則輸出1 ?2
??????????????????????????2 ??4輸入4,則輸出1 ?2 ?3 ?4
??????????????????????????????????????????????2 ?4 ?6 ?8
??????????????????????????????????????????????3 ?6 ?9 ?12
??????????????????????????????????????????????4 ?8 ?12 ?16
void fun (int (*a)[M],int m)
{intj,k;for (j=0;j<m;j++)for (k=0;k<m;k++)a[j][k]=(k+1)*(j+1);}
90.先從鍵盤(pán)上輸入一個(gè)3行3列的矩陣的各個(gè)元素的值,然后輸出主對(duì)角線元素之積。
int fun()
{int a[3][3],mul;int i,j;mul=1;for (i=0;i<3;i++){for(j=0;j<3;j++)scanf (“%d”,&a[i][j]);}
for (i=0;i<3;i++)
mul=mul*a[i][j];printf (“Mul=%d\n”,mul);}
91.先從鍵盤(pán)上輸出一個(gè)3行3列的矩陣的各個(gè)元素的值,然后輸出主對(duì)角線元素之和。
int fun()
{int a[3][3],sum;int i,j; sum=0;for (i=0;i<3;i++)
{for(j=0;j<3;j++)scanf (“%d”,&a[i][j]);}
for (i=0;i<3;i++) sum = sum +a[i][j];printf (“Sum =%d\n”, sum);}
92.輸出M行N列整數(shù)方陣然后求兩條對(duì)角線上的各元素的和返回此和數(shù)。
int fun (int n,int xx[][M])
{int i,j,sum=0;printf (“\nThe %d x %d matrix:\n”,M,M);for (i=0;i<M;i++)
{for (j=0;j<M;j++)printf (“%4d”,xx[i][j]);
printf (“\n”);for (i=0;i<n;i++)sum+=xx[i][j]+xx[i][n-i-1];return (sum);}
93. 輸出M行N列整數(shù)方陣然后求兩條對(duì)角線上的各元素的平方和返回此和數(shù)。
int fun (int n,int xx[][M])
{int i,j,sum=0;printf (“\nThe %d x %d matrix:\n”,M,M);for (i=0;i<M;i++)
{for (j=0;j<M;j++)printf (“%4d”,xx[i][j]);
printf(“\n”);for (i=0;i<n;i++)sum+=xx[i][j]*xx[i][n-i-1]*xx[i][n-i-1];
return (sum);}
94.給一維數(shù)組a輸入任意4個(gè)整數(shù),并按如下的規(guī)律輸出。例如輸入1,2,3,4,程序運(yùn)行后輸出以下方陣:4 ?1 ?2 ?3
??????????????????3 ?4 ?1 ?2
??????????????????2 ?3 ?4 ?1
??????????????????1 ?2 ?3 ?4
int fun(int *a)
{inti,j,k,m;printf (“Enter4number:”);
for(i=0;i<m;i++)scanf(“%d”,&a[i]);printf (“\n\nThe result :\n\n”);
for(i=M;i>0;i--){k=a[m-1];for(j=M-1;j>0;j--)a[j]=a[j-1];a[0]=k;
for(m=0;m<M;m++)printf (“%d”,a[m]);printf(“\n”);}
三、字符題
95.逐個(gè)比較a,b兩個(gè)字符串對(duì)應(yīng)位置中的字符,把ASCII值小或相等的字符依次存放到c數(shù)組中,形成一個(gè)新的字符串。例如:a中的字符串為fshADfg,b中的字符串為sdAEdi,則c中的字符串應(yīng)為fdAADf.
void fun (char *p,char *q,char *c)
{intk=0;while(*p||*q){if(*p>=*q)c[k]=*q;elsec[k]=*p;if(*p)p++;if(*q)q++;k++;}}
96.將字符串s中位于偶數(shù)位置的字符或ASCII碼為奇數(shù)的字符放入字符串t中(規(guī)定第一個(gè)字符放在第0位中)。例如:字符串中的數(shù)據(jù)位ADFESHDI,則輸出應(yīng)當(dāng)是AFESDI。
void fun (char *s,char t[ ])
{int i,j=0;for (i=0;i<strlen (s);i++)if (i%2==0||s[i]%2!=0)t[j++]=s[i];t[j]=’\0’;}
97.讀入一個(gè)字符串(長(zhǎng)度<20),將該字符串中的所有字符按ASCII碼降序排序后輸出。例如:輸入dafhc,則應(yīng)輸出hfdca.
void fun (char t[ ])
{charc;inti,j;for (i=0;i<strlen(t)-1;i++)for (j=i+1;j<strlen (t);j++)
if (t[i]<t[j]){c=t[j];t[j]=t[i];t[i]=c;}}
98.依次取出字符串中所有的字母,形成新的字符串,并取代原字符串。
void fun(char *s)
{int i,j;for (i=0,j=0;s[i]!=’\0’;i++)if((s[i]>=’A’&&s[i]<=’z’)||(s[i]>=’a’&&s[i]<=’z’))
s[j++]=s[i];s[j]=’\0’;}
99.在字符串str中找出ASCII碼值最小的字符,將其放在第一個(gè)位置上,并將該字符前的原字符向后順序移動(dòng),例如,調(diào)用fun函數(shù)之前給字符串輸入fagAgBDh,調(diào)用后字符串中的內(nèi)容為AfaggBDh.
void fun(char *p)
{char min,*q;int i=0;min=p[i];while (p[i]!=0){
if(min <p[i]){q=p+i;?min =p[i];}i++;}while (q>p)
{*q=*(q-1);q--;}p[0]= min.;}
100.在字符串str中找出ASCII碼值最小的字符,將其放在第一個(gè)位置上,并將該字符前的原字符向后順序移動(dòng),例如,調(diào)用fun函數(shù)之前給字符串輸入ABCDeFGH,,調(diào)用后字符串中的內(nèi)容為eABCDFGH..
void fun(char *p)
{char max,*q;int i=0;max=p[i];while (p[i]!=0){
if(max<p[i]){q=p+i;max=p[i];}i++;}while (q>p)
{*q=*(q-1);q--;}p[0]=max.;}
101.將字符串tt中的大寫(xiě)字母都改為對(duì)應(yīng)的小寫(xiě)字母,其他字符不變。若輸入“Ab,cD”,則輸出“ab,cd”.
char *fun (char tt[ ])
{inti;for(i=0;tt[i];i++){if((tt[i]>=’A’)&&(tt[i]<=’Z’))tt[i]+=32;}return(tt);}
102.將字符串tt中的小寫(xiě)字母都改為對(duì)應(yīng)的大寫(xiě)字母,其他字符不變。若輸入“edS,dAd”,則輸出“EDS,DAD”.
char *fun (char tt[ ])
{int i;for (i=0;tt[i];i++)
{if((tt[i]>=’a’)&&(tt[i]<=’Z’))tt[i]-=32;}return(tt);}
103.將(1≤m≤10)個(gè)字符串反著連接起來(lái),組成一個(gè)新串,放入pt所指字符串中,例如:把3個(gè)串DEG,ac,df反著串聯(lián)起來(lái),結(jié)果是dfacDEG.
void fun (char str[ ][10],int m,char *pt)
{intk,q,i,j=0;for(k=m-1;k>=0;k--){q=strlen(str[k]);j+=q;for(i=0;i<q;i++)pt[i]=str[k][i];pt+=q;pt[0]=0;}pt-=j;}
104.用冒泡法對(duì)6個(gè)字符串按由大到小的順序進(jìn)行排序。
void fun (char *pstr[6])
{inti,j;char*p;for (i=0;i<5;i++)for (j=i+1;j<6;j++)if (strcmp(*(pstr+i),*(pstr+j))<0)
{p=*(pstr+i);*(pstr+i)=*(pstr+j);*(pstr+j)=p;}}
105.利用插入排序法對(duì)字符串中的字符按從大到小的順序進(jìn)行排序插入法的基本方法是先先對(duì)字符串中的頭兩個(gè)元素進(jìn)行排序然后把第3個(gè)字符插入到前兩個(gè)字符中插入后前3個(gè)字符依然有序再把第4個(gè)字符插入到前3個(gè)字符中,待排序的字符串已在主函數(shù)中賦予。
void insert(char *aa)
{inti,j,n;charch;n=strlen(aa);for (i=1;i<n;i++)
{ch=aa[i];j=i-1;while ((j>=0)&&(ch>aa[j]))
{aa[j+1]=aa[j];j--;}aa[j+1]=ch;}}?
106.從字符串s刪除所有大寫(xiě)字母‘F’。
void fun(char *s)
{inti,j;for(i=j=0;s[i]!=’\0’;i++)if(s[i]!=’F’)s[j++]=s[i];s[j]=’\0’;}
107.依次取出字符串中所有的數(shù)字字符,形成新的字符串并取代原字符串。
void fun (char *s)
{inti,j;for(i=0,j=0;s[i]!=’\0’;i++)if(s[i]>=’0’&&s[i]<=’9’)s[j++]=s[i];s[j]=’\0’;
108.將s所指字符串中最后一次出現(xiàn)的、t1所指子串替換成t2所指子串,所形成的新串放在w所指的數(shù)組中。在此處,要求t1和t2所指字符串的長(zhǎng)度相同,例如,當(dāng)s所指字符串中的內(nèi)容為abcdabfabc,t1所指子串中的內(nèi)容為:ab,t2所指子串中的內(nèi)容為99時(shí),結(jié)果,在w所指的數(shù)中的內(nèi)容為abcdabf99c.
void fun(char *s,char *t1,char *t2,char *w)
{inti;char *p,*r,*a;strcpy(w,s); while (*w){p=w;r=t1;while (*r)?if (*r==*p){r++;p++;}
else break;if (*r==’\0’)a=w;w++;}r=t2;while (*r)(*a=*r;a+;r++)}
109. 將s所指字符串中出現(xiàn)的t1所指字符串替換成t2所指字符串,所形成的新字符串放在w所指的數(shù)組中。在此處,要求t1和t2所指字符串的長(zhǎng)度相同,例如,當(dāng)s所指字符串中的內(nèi)容為abcdabfab,t1所指子串中的內(nèi)容為:ab,t2所指子串中的內(nèi)容為99時(shí),結(jié)果,在w所指的數(shù)中的內(nèi)容為99cd99f99.
void fun(char *s,char *t1,char *t2,char *w)
{inti;char *p,*r,*a;strcpy(w,s); while (*w){p=w;r=t1;while (*r)?if (*r==*p){r++;p++;}
else break;if (*r==’\0’){a=w;r=t2;}?while (*r)(*a=*r;a++;r++;}w+=strlen(t2);}else w++;}}
110.求出字符串中最后一次出現(xiàn)的子符串的地址,通過(guò)函數(shù)值返回,若未找到,則函數(shù)值為NULL。如,當(dāng)字符串中的內(nèi)容為abcdabfabcdx,t中的內(nèi)容為ab時(shí),輸出應(yīng)是abcdx。但字符串中的內(nèi)容為為abcdabfabcdx,t中的內(nèi)容為abd時(shí),則程序輸出未找到的信息:Not found!
char *fun(char *s,char *t)
{char *p,*r,*a;a=NULL;while (*s){p=s;r=t;while (*r)if (*r==*p){r++;p++;}else break;if(*r==’\0’)a=s;s++;}return a;}
111.判斷字符ch是否與str所指字符串中的某個(gè)字符相同;若相同則什么也不做,若不同,則將其插在串的最后。
void fun (char *str,char ch)
{while (*str &&*str !=ch) str++;f(*str ==’\0’){str[0]=ch;str[1]=’\0’;}}
112.從s所指字符串中,找出t所指字符串的個(gè)數(shù)作為函數(shù)值返回。例如當(dāng)s所指字符串中的內(nèi)容為abcdabfab,t所指字符串的內(nèi)容為ab,則函數(shù)返回整數(shù)3.
int fun (char *s,char *t)
{int n;char *p,*r;n=0;while (*s){p=s;r=t;while (*r)if (*r==*p){r++;p++;}
else break;if (*r==’\0’)n++;s++;}return n;}
113.在字符串的最前端加入n個(gè)*號(hào),形成新串,并且覆蓋原串。注意:字符串的長(zhǎng)度最長(zhǎng)允許79.
void fun (char *s,int n)
{char a[80],*p,int i,p=s;for (i=0;i<n;i++)a[i]=’*’;do {a[i]=*p;i++;p++;}
while (*p);a[i]=’\0’,strcpy(s,a);}
114將s所指字符串中的字母轉(zhuǎn)換為按字母序列的后續(xù)字母(但Z轉(zhuǎn)化為A,z轉(zhuǎn)化為a),其他字符不變。
void fun (char *s)
{while(*s){if (*s>=’A’&&*s<=’Z’||*s>=’a’&&*s<=’z’){if (*s==’Z’) *s=’A’;
else if (*s==’z’),*s=’a’;else *s+=1;}s++;}}
115.將從鍵盤(pán)上輸入的每個(gè)單詞的第一個(gè)字母寫(xiě)為大寫(xiě)字母,輸入時(shí)各單詞必須用空格隔開(kāi),用‘.’結(jié)束輸入。
int fun (char *c,int status)
{if (*c==’?’)?return 1;else {if (status &&*c<=’z’?&&*c>=’a’)*c+=’A’-‘a’;return 0;}}
116.讀入一個(gè)英文文本行,將其中每個(gè)單詞的第一個(gè)字母忙亂成大寫(xiě),然后輸出此文本行(這里的“單詞“是指由空格隔開(kāi)的字符串)。例如,若輸入I am a student to take the examination,則應(yīng)輸出I Am Student To Take The Examination.
#include “stdio.h”?
void upfst (char *p)
{int k=0;for (;*p;p++) if(k){if (*p==’?‘)k=0; else if (*p!=’’)
{k=1;*p=toupper(*p);}}
117.將p所指字符串中每個(gè)單詞的最后一個(gè)字母改成大寫(xiě)(這里的“單詞“是指有空格隔開(kāi)的字符串)。例如,若輸入:I am a student to take the examination,則應(yīng)輸出I aM A studenT tO takE thE examinatioN.
void fun(char *p)
{int k=0;for (;*p;p++) if(k){if(*p==’?‘){k=0;
*(p-1)=
toupper(*(p-1));}}else k=1;}
118.計(jì)算s所指字符串中含有t所指字符串的數(shù)目,并作為函數(shù)值返回。
int fun (char *s,char *t)
{intn;char *p,*r;n=0;while (*s){p=s;r=t;while (*r)if (*r==*p){r++;p++;
else break;if(*r==’\0’)n++;s++;}return n;}}
119.從N個(gè)字符串中找出最長(zhǎng)的那個(gè)串,并將其地址作為函數(shù)值返回。
char *fun (char (*sq)[M])
{int i;char *sp;sp=sq[0];for (i=0;i<N;i++)if (strlen(sp)<strlen(sq[i]))sp=sq[i];return sp;}
120.將s所指字符串中的正序和反序進(jìn)行連接,形成一個(gè)新串在t所指的數(shù)組中。例如,當(dāng)s所指字符串為ABCD時(shí),則t所指字符串中的內(nèi)容應(yīng)為ABCDDCBA.
void fun (char *s,char *t)
{int i,d;d=strlen(s);for (i=0;i<d;i++)t[i]=s[i];for (i=0;i<d;i++)t[d+i]=s[d-1-i];t[d+i]=’\0’;}
121.先將在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序連接到t串的后面。例如:當(dāng)s中的字符串為ABCDE時(shí),則t中的字符串應(yīng)為EDCBAABCDE。
void fun (char *s,char *t)
{int i,s1;s1=strlen(s);for (i=0;i<s1;i++)t[i]=s[s1-1-i];for (i=0;i<s1;i++)
t[s1+i]=s[i];t[2*s1]=’\0’;}
122.將m(1≤m≤10)個(gè)字符串連接起來(lái),組成一個(gè)新串,放入pt所指字符串中,例如,把3個(gè)串a(chǎn)bc,CD,EF串聯(lián)起來(lái),結(jié)果是abcCDEF.
Void fun (char str[ ][10],int m,char *pt)
{int k,q,i,j=0;for (k=0;k<m;k++){q=strlen(str[k]);j+=q;for (i=0;i<q;i++)
pt [i]=str[k][i];pt+=q;
pt[0]=0;}pt-=j;}
123、分別將a,b字符串中字符倒序,然后按排列的順序交叉合并到c所指數(shù)組中,過(guò)長(zhǎng)的剩余的字符接在c所指的數(shù)組的
尾部,例如:若a所指字符串中的內(nèi)容為:abcdef,b所指字符串中的內(nèi)容為:1234,則c所指數(shù)組中的內(nèi)容應(yīng)該為:g4f3e2d1cba.
若a所指字符串中的內(nèi)容為:1234,b所指字符串中的內(nèi)容為:abcdef,則c所指數(shù)組中的內(nèi)容應(yīng)該為:4g3f2e1dcba
Void fun(char *a, char *b, char *c)
{char s1[100],s2[100],*sa,*sb;strcpy(s1,a); strcpy(s2,b);myswap(s1); myswap(s2);sa=s1;sb=s2;while(*sa||*sb){if(*sa){*c=*sa;c++;
sa++; if(*sb){*c=*sb;c++;sb++;}}*c=0;}
124、首先將a字符串中字符按逆序存放,然后和b字符串中字符,按排列的順序交叉合并到c所指數(shù)組中,過(guò)長(zhǎng)的剩余的字符接在c所指的數(shù)組的尾部,例如:若a所指字符串中的內(nèi)容為:abcdef,b所指字符串中的內(nèi)容為:1234,則c所指數(shù)組中的內(nèi)容應(yīng)該為:g1f2e3d4cba. 若a所指字符串中的內(nèi)容為:1234,b所指字符串中的內(nèi)容為:abcdef,則c所指數(shù)組中的內(nèi)容應(yīng)該為:4a3b2c1defg
fun(char *a, char *b, char *c)
{char *ap,*at,ch;ap=a;at=a+strlen(a)-1;whiel(ap<=at){ch=*ap;*ap=*at;*at=ch;ap++;at++;} while(*a||*b){if(*a){*c=*a;c++;a++; if(*b){*c=*b;c++;b++;}}*c=0;}}
125、分別將a,b字符串中字符倒序,然后按排列的順序交叉合并到c所指數(shù)組中,過(guò)長(zhǎng)的剩余的字符接在c所指的數(shù)組的
尾部,例如:若a所指字符串中的內(nèi)容為:abcdef,b所指字符串中的內(nèi)容為:1234,則c所指數(shù)組中的內(nèi)容應(yīng)該為:g4f3e2d1cba.
void myswap(char *s)
{char *sp,*st,ch; sp=s;st=s+strlen(s)-1;while(sp<=st){ch=*sp;*sp=*st;*st=ch;sp++;st++;}}
Void fun(char *a, char *b, char *c)
{char s1[100],s2[100],*sa,*sb;strcpy(s1,a); strcpy(s2,b);myswap(s1); myswap(s2);sa=s1;sb=s2;while(*sa||*sb){if(*sa){*c=*sa;c++;
sa++; if(*sb){*c=*sb;c++;sb++;}}*c=0;}
126、首先將b字符串中字符按逆序存放,然后將a字符串中字符和a字符串中字符,按排列的順序交叉合并到c所指數(shù)組中,過(guò)長(zhǎng)的剩余的字符接在c所指的數(shù)組的尾部,例如:若a所指字符串中的內(nèi)容為:abcdef,b所指字符串中的內(nèi)容為:1234,則c所指數(shù)組中的內(nèi)容應(yīng)該為:a4b3c2d1efg, 若a所指字符串中的內(nèi)容為:1234,b所指字符串中的內(nèi)容為:abcdef,則c所指數(shù)組中的內(nèi)容應(yīng)該為:1g2f3e4dcba
void fun(char *a, char *b, char *c)
{int i,j;char ch;i=0;
j=strlen(b)-1;while(i<j){ch=b[i]; b[i]= b[j]; b[j]=ch;i++;j--;} while(*a||*b){if(*a){*c=*a;c++;a++; if(*b)
{*c=*b;c++;b++;}}*c=0;}}
127、將a所指字符串中的字符和b所指字符串中的字符,按排列的順序交叉合并到c所指數(shù)組中,過(guò)長(zhǎng)的剩余字符接在c所指數(shù)組的尾部。例如,當(dāng)a所指字符串中的內(nèi)容為“abcdefg”,b所指字符串中的內(nèi)容為“1234”時(shí); c所指數(shù)組中的內(nèi)容應(yīng)該為”a1b2c3d4efg”;而當(dāng)a所指字符串中的內(nèi)容為“1234”,b所指字符串中的內(nèi)容為“abcdefg”時(shí), c所指數(shù)組中的內(nèi)容應(yīng)該為“1a2b3c4defg”.。
fun(char *a,char *b,char *c)
{while(*a&&*b){*c=*a;c++;a++;*c=*b;c++;b++;}
if(*a=’\0’)
while(*b){*c=*b;c++;b++;}
else
while(*a){*c=*a;c++;a++;}
*c=’\0’;}
128、統(tǒng)計(jì)字符串中各元音字母(即A,E,I,O,U)的個(gè)數(shù)。注意:字母不分大小寫(xiě)。例如,輸入THIs is a boot,則應(yīng)輸出是1 0 2 2 0。
void fun(char *s,int num[5])
{int k,i=5;
for(k=0;k<i;k++)num[k]=0;
for(;*s;s++){i=-1;
switch(*s)
{case’a’;case’A’;{i=0;break;}
case’e’;case’E’;{i=1;break;}
case’i’;case’I’;{i=2;break;}
case’o’;case’O’;{i=3;break;}
case’u’;case’U’;{i=4;break;}}
if(i>=0)num[i]++;}}
129、將字符串p中所有字符復(fù)制到字符串b中,要求每復(fù)制3個(gè)字符之后插入一個(gè)空格,例如,在調(diào)用函數(shù)之前給字符串a(chǎn)輸入ABCDEFGHIJK,調(diào)用函數(shù)之后,字符串b中的內(nèi)容則為ABC DEF GHI JK。
void fun(char *p,char *b)
{int i,k=0;
while(*p)
{i=0;
while(i<3&&*p)
{b[k]=*p;k++;p++;i++;}
if(*p){b[k++]=’ ‘;}}
b[k]=’\0’;}
130、統(tǒng)計(jì)字符串substr在字符串str中出現(xiàn)的次數(shù)。若字符串為aaas lkaaas,子字符串為as,則應(yīng)輸出2。
fun(char *str,char *substr)
{int i,j,k,num=0;
for(i=0;str[i];i++)
for(j=i,k=0;substr[k]==str[j];k++,j++)
if(substr[k+1]=?=’\0’)
{num++;break;}return num;}
131、刪除字符串s中所有空白字符(包括Tab字符、回車(chē)符及換行符)。輸入字符串時(shí)用‘#’結(jié)束輸入。
fun(char *p)
{int i,t;char c[80];
for(i=0,t=0;p[i];i++)
if(!isspace(*(p+i)))c[t++]=p[i];c[t]=’\0’;strcpy(p,c);
132、此函數(shù)的功能是從字符串s中,刪除所有小寫(xiě)字母‘C’。
void fun(char *s)
{inti,j;for(i=j=0;s[i]!=’\0’;i++)if(s[i]!=’c’)s[j++]=s[i];s[j]=’\0’;}
133、逐個(gè)比較a、b兩個(gè)字符串對(duì)應(yīng)位置中的字符,把ASCII值大或相等的字符依次存入到c數(shù)能中,形成一個(gè)新的字符串。例如,若a中的字符串為:aBCDeFgH,,b中的字符串為:Abcd,則c中的字符串應(yīng)為:aBcdeFgH.
void fun{char *p,char *q,char*c}
{int k=0;
while(*p||*q){if(*p<=*q)c[k]=*q;else c[k]=*p;
if(*p) ?p++;
if(*q) ?q++;k++;}}
134、分別統(tǒng)計(jì)字符串中大寫(xiě)字母和小寫(xiě)字母的個(gè)數(shù)。例如:給字符串s輸入:AaaaBBb123CCccccd,則應(yīng)輸出結(jié)果:
upper=6,lower=8.
Void fun(char *s,int *a,int *b)
{while(*s){if(*s>=’A’&&*s<=’Z’)(*a)++; if(*s>=’a’&&*s<=’z’)(*b)++;}}
135、將字符串s中位于奇數(shù)位置的字符或ASCII碼為偶數(shù)的字符放入字符串t中(規(guī)定第一個(gè)字符放在第0位中)。例如:
將字符串中的數(shù)據(jù)為AABBCCDDEEFF,輸出的應(yīng)當(dāng)是:ABBCDDEFF
Void fun(char *s,char t[])
{int i,j=0;for(i=0;i<strlen(s);i++)if(i%2==0||s[i]%2= =0)t[j++]=s[i];t[j]=’\0’;}
136、比較兩個(gè)字符串,將長(zhǎng)的那個(gè)字符串的首地址作為函數(shù)返回。
char *fun(char *s,char *t)
{int s1=0,t1=0;char *ss,*tt;ss=s;tt=t;while(*ss){s1++;ss++;} while(*tts){t1++;tt++;}if(t1>s1)return t;else return s;}
137、首先將大寫(xiě)字母轉(zhuǎn)換為對(duì)應(yīng)小寫(xiě)字母;若小寫(xiě)字母為a~u,則將其轉(zhuǎn)換為其后第5個(gè)字母,若小寫(xiě)字母為v~z,使其值減21,轉(zhuǎn)換為后的小寫(xiě)字母作為函數(shù)值返回.例如:若形參是字母A,則轉(zhuǎn)換為小寫(xiě)字母f,若形參是字母W,則轉(zhuǎn)換為小寫(xiě)字母b。
char fun(char c)
{ if(c>=’A’&&c<=’Z’)c=tolower(c);?if(c>=’a’&&c<=’u’)c=c+5;else if(c>=’v’&&c<=’z’)c=c-21;return c;}
139、將字符串中的內(nèi)容按逆序輸出,但不改變字符串中的內(nèi)容,例如:若字符串為abcd,則應(yīng)輸出dcba。
fun(char *a)
{if(*a){fun(a+1)printf(“%c”,*a);}}
140、讀入字符串(長(zhǎng)度<20),將該字符串中的所有字符升序排序后輸出,例如:若輸入為edcba,則應(yīng)輸出abcde。
Void fun(char t[])
{char c;int i,j;for(i=strlen(t)-1;i;i--)for(j=0;j<i;j++)if(t[j]> t[j+1]){c= t[j]; t[j]= t[j+1]; t[j+1]=c;}}
141、交換主函數(shù)中兩個(gè)字符串中的內(nèi)容,例如:若a所指字符串中的內(nèi)容為:123456,b所指字符串中的內(nèi)容為:abcde
程序運(yùn)行后,a所指字符串中的內(nèi)容為:abcde,b所指字符串中的內(nèi)容為: 123456
void *fun(char *a,char *b)
{charc[N];int i;for(i=0;a[i];i++)c[i]=a[i]; c[i]=0; for(i=0;b[i];i++)a[i]=b[i]; a[i]=0; for(i=0;c[i];i++)b[i]=c[i]; b[i]=0;}
四、結(jié)構(gòu)體、文件題
142、建立一個(gè)帶頭結(jié)點(diǎn)的單向鏈表,并用隨機(jī)函數(shù)為各結(jié)點(diǎn)賦值。函數(shù)fun的功能是將單向鏈表結(jié)點(diǎn)(不包括頭結(jié)點(diǎn))數(shù)據(jù)域?yàn)榕紨?shù)的值累加起來(lái),并且作為函數(shù)值返回。
Int fun(NODE *h)
{int sum=0; NODE *p;p=h->next;while(p!=NULL){if(p->data%2= =0)sum+=p->data ; p=p->next;}return sum;}
143、函數(shù)creatlink的功能是:創(chuàng)建帶頭結(jié)點(diǎn)的單向鏈表,并為各結(jié)點(diǎn)數(shù)據(jù)域賦0到m-1的值。
NODE *creatlink(int n,int m)
{NODE *h=NULL,
*p,*s;int i;s=( NODE *)malloc(sizeof(NODE ));h=p;p=s;for(i=1;i<n;i++){s=(NODE*)malloc(sizeof(NODE ));
s->data=rand()%(m-1);s->next=p->next; p->next =s;p= p->next ;}return h;}
144、下列給定程序是建立一個(gè)帶頭結(jié)點(diǎn)的單向鏈表,并用隨機(jī)函數(shù)為各結(jié)點(diǎn)數(shù)據(jù)域賦值,函數(shù)fun 的作用是求出單向鏈表
結(jié)點(diǎn)(不包括頭結(jié)點(diǎn))數(shù)據(jù)域中的最大值,并作為函數(shù)值返回。
int fun(NODE *h)
{int max= -1; NODE *p;p=h->next;while(p){if(p->data>max)max= p->data ; p=p->next;} return max;}
145、對(duì)N名學(xué)生的學(xué)習(xí)成績(jī),按從高到低的順序找出前m(m≤10)名學(xué)生,并將這些學(xué)生數(shù)據(jù)存放在一個(gè)動(dòng)態(tài)分配的連續(xù)存儲(chǔ)區(qū)中,此存儲(chǔ)區(qū)的首地址作為函數(shù)值返回。
STU *fun(STU a[],int m)
{STUb[N],*t;inti,j,k;t=(STU*)calloc(m,sizeof(STU));for(i=0;i<N;i++)b[i]=a[i]; for(k=0;k<m;k++){ for(i=j=0;i<N;i++)
If(b[i].s>b[j].s)j=i;t[k]=b[j];t[k].s=b[j].s;b[j].s =0;}return t;}