计算机二级C语言上机题库(二)
二、数组题
69.找出100至n(不大于1000)之间三位数字相等的所有整数。
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)之间百位数字加十位数字等于个位数字的所有整数。
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.求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和a[1]中的数对调。例如数组中原有的数为:7、10、12、0、3、6、9、11、5、8,输出的结果为: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.计算数组元素中值为正数的平均值(不包括0)。例如:数组中元素中的值依次为39,-47,21,2,-8,15,0,则程序的运行结果为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. 计算数组元素中值为负数的平均值(不包括0)。例如:数组中元素中的值依次为43,-47,-21,53,-8,12,0,则程序的运行结果为-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.用选择法对数组中的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.读入一个整数m(5≤m≤20),函数getarr调用函数rnd获得m个随机整数,函数sortpb将这m个随机整数从小到大排序。例如,若输入整数7,则应输出: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个实数,输出平均值,并统计平均值以上(含平均值)的实数个数。例如n=8时,输入193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763,所得平均值为195.838745,在平均值以上的实数个数应为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.读入一个整数m(1≤m≤20)和m位学生的学号、数学课考分和计算机课考分,并从中查找第一个数学课考分<80且计算机课考分<70的学生,若有则输出他的学号和两门课分数,否则输出“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个学生的成绩中统计出高于平均分的学生人数,人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如,输入8名学生的成绩:85,65.5,69,95.5,87,55,62.5,75,则高于平均分的学生人数为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个学生的成绩中统计出低于平均分的学生人数,人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如,输入8名学生的成绩:80.5,60,72,90.5,98,51.5,88,64则低于平均分的学生人数为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.使数组中的元素的值缩小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. .使数组中的元素的值增加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所指数组中下标为k的元素中的值。
arrout (int *w,int m)
{int k;for(k=0;k<m;k++)
printf (“%d”,w[k]);printf (“\n”);}
83.假如整数数列中的数不重复,删除数列中值为X的元素。N中存放的是数列中元素的个数。
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所指数组中的元素赋予从2开始的偶数,然后再按顺序对每5个元素求一个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。
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个有序整数数列已放在一维数组中,函数的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,则返回其下标值;反之,则返回-1.折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(low<high),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间中间位置之后得元素中;反之,下次查找范围落在中间位置之前的元素中。直到low>high,查找结束。
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数组中放入n个采样值,计算并输出差值。(函数省略)
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.先读入整数m,再读入m个从小到大的整数,最后再读入一个整数k并将k插入到该改整数数列中,插入后的数列仍然按从小到大的顺序排列。例如,若先输入4,然后输入4个从小到大排列的整数:-1,1,7,98最后输入待插入的数19,则输出结果应为:-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.读入一个整数m(4≤m≤10),例如4,程序将自动在a[0]至a[3]四个数组元素中分别放入1,4,9,16,且按逆序输出此4个元素: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.根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示的数据,由主函数输出。例如,若输入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.先从键盘上输入一个3行3列的矩阵的各个元素的值,然后输出主对角线元素之积。
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.先从键盘上输出一个3行3列的矩阵的各个元素的值,然后输出主对角线元素之和。
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列整数方阵然后求两条对角线上的各元素的和返回此和数。
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列整数方阵然后求两条对角线上的各元素的平方和返回此和数。
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.给一维数组a输入任意4个整数,并按如下的规律输出。例如输入1,2,3,4,程序运行后输出以下方阵: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.逐个比较a,b两个字符串对应位置中的字符,把ASCII值小或相等的字符依次存放到c数组中,形成一个新的字符串。例如:a中的字符串为fshADfg,b中的字符串为sdAEdi,则c中的字符串应为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中位于偶数位置的字符或ASCII码为奇数的字符放入字符串t中(规定第一个字符放在第0位中)。例如:字符串中的数据位ADFESHDI,则输出应当是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.读入一个字符串(长度<20),将该字符串中的所有字符按ASCII码降序排序后输出。例如:输入dafhc,则应输出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码值最小的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动,例如,调用fun函数之前给字符串输入fagAgBDh,调用后字符串中的内容为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码值最小的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动,例如,调用fun函数之前给字符串输入ABCDeFGH,,调用后字符串中的内容为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中的大写字母都改为对应的小写字母,其他字符不变。若输入“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中的小写字母都改为对应的大写字母,其他字符不变。若输入“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)个字符串反着连接起来,组成一个新串,放入pt所指字符串中,例如:把3个串DEG,ac,df反着串联起来,结果是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.用冒泡法对6个字符串按由大到小的顺序进行排序。
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.利用插入排序法对字符串中的字符按从大到小的顺序进行排序插入法的基本方法是先先对字符串中的头两个元素进行排序然后把第3个字符插入到前两个字符中插入后前3个字符依然有序再把第4个字符插入到前3个字符中,待排序的字符串已在主函数中赋予。
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删除所有大写字母‘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.依次取出字符串中所有的数字字符,形成新的字符串并取代原字符串。
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所指字符串中最后一次出现的、t1所指子串替换成t2所指子串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同,例如,当s所指字符串中的内容为abcdabfabc,t1所指子串中的内容为:ab,t2所指子串中的内容为99时,结果,在w所指的数中的内容为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所指字符串中出现的t1所指字符串替换成t2所指字符串,所形成的新字符串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同,例如,当s所指字符串中的内容为abcdabfab,t1所指子串中的内容为:ab,t2所指子串中的内容为99时,结果,在w所指的数中的内容为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.求出字符串中最后一次出现的子符串的地址,通过函数值返回,若未找到,则函数值为NULL。如,当字符串中的内容为abcdabfabcdx,t中的内容为ab时,输出应是abcdx。但字符串中的内容为为abcdabfabcdx,t中的内容为abd时,则程序输出未找到的信息: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所指字符串中的某个字符相同;若相同则什么也不做,若不同,则将其插在串的最后。
void fun (char *str,char ch)
{while (*str &&*str !=ch) str++;f(*str ==’\0’){str[0]=ch;str[1]=’\0’;}}
112.从s所指字符串中,找出t所指字符串的个数作为函数值返回。例如当s所指字符串中的内容为abcdabfab,t所指字符串的内容为ab,则函数返回整数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个*号,形成新串,并且覆盖原串。注意:字符串的长度最长允许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所指字符串中的字母转换为按字母序列的后续字母(但Z转化为A,z转化为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.将从键盘上输入的每个单词的第一个字母写为大写字母,输入时各单词必须用空格隔开,用‘.’结束输入。
int fun (char *c,int status)
{if (*c==’ ’) return 1;else {if (status &&*c<=’z’ &&*c>=’a’)*c+=’A’-‘a’;return 0;}}
116.读入一个英文文本行,将其中每个单词的第一个字母忙乱成大写,然后输出此文本行(这里的“单词“是指由空格隔开的字符串)。例如,若输入I am a student to take the examination,则应输出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所指字符串中每个单词的最后一个字母改成大写(这里的“单词“是指有空格隔开的字符串)。例如,若输入:I am a student to take the examination,则应输出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.计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。
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个字符串中找出最长的那个串,并将其地址作为函数值返回。
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所指字符串中的正序和反序进行连接,形成一个新串在t所指的数组中。例如,当s所指字符串为ABCD时,则t所指字符串中的内容应为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串的后面。例如:当s中的字符串为ABCDE时,则t中的字符串应为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)个字符串连接起来,组成一个新串,放入pt所指字符串中,例如,把3个串abc,CD,EF串联起来,结果是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所指数组中,过长的剩余的字符接在c所指的数组的
尾部,例如:若a所指字符串中的内容为:abcdef,b所指字符串中的内容为:1234,则c所指数组中的内容应该为:g4f3e2d1cba.
若a所指字符串中的内容为:1234,b所指字符串中的内容为:abcdef,则c所指数组中的内容应该为: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所指数组中,过长的剩余的字符接在c所指的数组的尾部,例如:若a所指字符串中的内容为:abcdef,b所指字符串中的内容为:1234,则c所指数组中的内容应该为:g1f2e3d4cba. 若a所指字符串中的内容为:1234,b所指字符串中的内容为:abcdef,则c所指数组中的内容应该为: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所指数组中,过长的剩余的字符接在c所指的数组的
尾部,例如:若a所指字符串中的内容为:abcdef,b所指字符串中的内容为:1234,则c所指数组中的内容应该为: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所指数组中,过长的剩余的字符接在c所指的数组的尾部,例如:若a所指字符串中的内容为:abcdef,b所指字符串中的内容为:1234,则c所指数组中的内容应该为:a4b3c2d1efg, 若a所指字符串中的内容为:1234,b所指字符串中的内容为:abcdef,则c所指数组中的内容应该为: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所指数组中,过长的剩余字符接在c所指数组的尾部。例如,当a所指字符串中的内容为“abcdefg”,b所指字符串中的内容为“1234”时; c所指数组中的内容应该为”a1b2c3d4efg”;而当a所指字符串中的内容为“1234”,b所指字符串中的内容为“abcdefg”时, c所指数组中的内容应该为“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、统计字符串中各元音字母(即A,E,I,O,U)的个数。注意:字母不分大小写。例如,输入THIs is a boot,则应输出是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中所有字符复制到字符串b中,要求每复制3个字符之后插入一个空格,例如,在调用函数之前给字符串a输入ABCDEFGHIJK,调用函数之后,字符串b中的内容则为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、统计字符串substr在字符串str中出现的次数。若字符串为aaas lkaaas,子字符串为as,则应输出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字符、回车符及换行符)。输入字符串时用‘#’结束输入。
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、此函数的功能是从字符串s中,删除所有小写字母‘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、逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存入到c数能中,形成一个新的字符串。例如,若a中的字符串为:aBCDeFgH,,b中的字符串为:Abcd,则c中的字符串应为: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、分别统计字符串中大写字母和小写字母的个数。例如:给字符串s输入:AaaaBBb123CCccccd,则应输出结果:
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中位于奇数位置的字符或ASCII码为偶数的字符放入字符串t中(规定第一个字符放在第0位中)。例如:
将字符串中的数据为AABBCCDDEEFF,输出的应当是: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、比较两个字符串,将长的那个字符串的首地址作为函数返回。
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、首先将大写字母转换为对应小写字母;若小写字母为a~u,则将其转换为其后第5个字母,若小写字母为v~z,使其值减21,转换为后的小写字母作为函数值返回.例如:若形参是字母A,则转换为小写字母f,若形参是字母W,则转换为小写字母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、将字符串中的内容按逆序输出,但不改变字符串中的内容,例如:若字符串为abcd,则应输出dcba。
fun(char *a)
{if(*a){fun(a+1)printf(“%c”,*a);}}
140、读入字符串(长度<20),将该字符串中的所有字符升序排序后输出,例如:若输入为edcba,则应输出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、交换主函数中两个字符串中的内容,例如:若a所指字符串中的内容为:123456,b所指字符串中的内容为:abcde
程序运行后,a所指字符串中的内容为:abcde,b所指字符串中的内容为: 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;}
四、结构体、文件题
142、建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。
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、函数creatlink的功能是:创建带头结点的单向链表,并为各结点数据域赋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、下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值,函数fun 的作用是求出单向链表
结点(不包括头结点)数据域中的最大值,并作为函数值返回。
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、对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。
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;}