南开100题精编.docx
《南开100题精编.docx》由会员分享,可在线阅读,更多相关《南开100题精编.docx(29页珍藏版)》请在冰豆网上搜索。
![南开100题精编.docx](https://file1.bdocx.com/fileroot1/2022-10/29/34792b8d-fe51-4014-93e7-7642732e89f9/34792b8d-fe51-4014-93e7-7642732e89f91.gif)
南开100题精编
21:
第21题请编写函数fun,对长度位7个字符的字符串,除首尾字符外,将其余5个字符按ascii码降序排列。
答案:
voidfun(char*s,intnum)
{
chart;
intI,j;
for(i=1;i<num-2;i++)
for(j=i+1;j<num-1;j++)
if(s[i]<s[j])
{
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
22:
第22题n名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。
请编写函数fun,它的功能是:
找出学生的最高分,由函数值返回。
答案:
doublefun(STREC*h)
{
doublemax;
STREC*q=h;
max=h->s;
do
{
if(q->s>max)
max=q->s;
q=q->next;
}
while(q!
=0);
returnmax;
}
23:
第23题请编写函数fun,该函数的功能是:
判断字符串是否为回文?
若是则函数返回1,主函数中输出yes,否则返回0,主函数中输出no。
回文是指顺读和倒读都是一样的字符串。
答案:
intfun(char*str)
{
intI,n=0;fg=1;
char*p=str;
while(*p)
{
n++;
p++;
}
for(i=0;i<n/2;i++)
if(str[i]==str[n-1-i]);
else
{
fg=0;
break;
}
returnfg;
}
24:
第24题请编写一个函数fun,它的功能是:
将一个字符串转换为一个整数(不得调用c语言提供的将字符串转换为整数的函数)。
答案:
longfun(char*p)
{
longs=0,t;
inti=0,j,n=strlen(p),k,s1;
if(p[0]==‘-’)
i++;
for(j=I;j<=n-1;j++)
{
t=p[j]-‘0’;
s1=10;
for(k=j;k<n-1;k++)
t*=s1;
s+=t;
}
if(p[0]==‘-’)
return–s;
else
returns;
}
25:
第25题请编写一个函数fun,它的功能是:
比较两个字符串的长度,(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串。
若两个字符串长度相同,则返回第一个字符串。
答案:
char*fun(char*s,char*t)
{
char*p,*t1=t,*s1=s;
intn=0;m=0;
while(*s1)
{
n++;
s1++;
}
while(*t1)
{
m++;
t1++;
}
if(n>=m)
p=s;
else
p=t;
returnp;
}
26:
第26题请编写一个函数fun,它的功能是:
根据以下公式求x的值(要求满足精度0.0005,即某项小于0.0005时停止迭代):
x/2=1+1/3+1×2/3×5+1×2×3/3×5×7+1×2×3×4/3×5×7×9+…+1×2×3×…×n/3×5×7×(2n+1)
程序运行后,如果输入精度0.0005,则程序输出为3.14…。
答案:
doublefun(doubleeps)
{
doubles;
floatn,t,pi;
t=1;pi=0;n=1.0;s=1.0;
while((fabs(s))>=eps)
{
pi+=s;
t=n/(2*n+1);
s*=t;
n++;
}
pi=pi*2;
returnpi;
}
27:
第27题请编写一个函数fun,它的功能是:
求除1到m之内(含m)能北7或11整除的所有整数放在数组a中,通过n返回这些数的个数。
答案:
voidfun(intm,int*a,int*n)
{
intI,j=0;*n=0;
for(i=1;i<=m;i++)
if(i%7==0||i%11==0)
{
a[j]=I;
j++;
}
*n=j;
}
28:
第28题请编写一个函数fun,它的功能是:
找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。
数组元素中的值已在主函数中赋予。
主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
答案:
voidfun(inta[],intn,int*max,int*d)
{
intI;
*max=a[0];
*d=0;
for(i=0;I<n;i++)
if(a[i]>*max)
{
*max=a[i];
*d=I;
}
}
29:
第29题请编写一个函数fun,它的功能是:
将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。
答案:
voidfun(char*ss)
{
intI,n;
n=strlen(ss);
for(i=1;i<n;i+=2)
if(ss[i]>=‘a’&&ss[i]<=‘z’)
ss[i]=ss[i]-32;
}
30:
第30题请编写一个函数fun,它的功能是:
求除一个2×m整型二维数组中最大元素的值,并将此值返回调用函数。
答案:
intfun(inta[][M])
{
intI,j,max;
max=a[0][0];
for(i=0;i<2;i++)
for(j=0;j<M;j++)
if(a[i][j]>max)
max=a[i][j];
returnmax;
}
31:
第31题请编写函数fun,其功能是:
将s所指字符串中除了下标为偶数、同时ascii值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的一个数组中。
答案:
voidfun(char*s,chart[])
{
intI,j=0,n;
n=strlen(s);
for(i=0;I,n;i++)
if(i%2==0&&s[i]%2==0)
{
t[j]=s[i];
j++;
}
t[j]=‘\0’;
}
32:
第32题请编写函数fun,其功能是:
将s所指字符串中除了下标为奇数、同时ascii值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的一个数组中。
答案:
voidfun(char*s,chart[])
{
intI,j=0,n;
n=strlen(s);
for(i=0;I,n;i++)
if(i%2!
=0&&s[i]%2!
=0)
{
t[j]=s[i];
j++;
}
t[j]=‘\0’;
}
33:
第33题假定输入的字符串中只包含字母和*号。
请编写函数fun,它的功能是:
使字符串中尾部的*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。
答案:
voidfun(char*a,intn)
{
inti=0;k=0;
char*p,*t;
p=t=a;
while(*t)
t++;
t--;
while(*t==‘*’)
{
k++;
t--;
}
t++;
if(k>n)
{
while(*p&&p<t+n)
{
a[i]=*p;
i++;
p++;
}
a[i]=‘\0’;
}
}
34:
第34题学生的记录由学号和成绩组成,n名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能使:
把分数最高的学生数据放在h所指的数组中,注意:
分数最高的学生可能不止一个,函数返回分数最高的学生的人数。
答案:
intfun(STREC*a,STREC*b)
{
intI,j=0,n=0,max;
max=a[0].s;
for(i=0;i<N;i++)
if(a[i].s>max)
max=a[i].s;
for(i=0;i<N;i++)
if(a[i].s==max)
{
*(b+j)=a[i];
j++;
n++;
}
returnn;
}
35:
第35题请编写一个函数,用来删除字符串中的所有空格。
答案:
voidfun(char*str)
{
inti=0;
char*p=str;
while(*p)
{
if(*p!
=‘’)
{
str[i]=*p;
i++;
}
p++;
}
str[i]=‘\0’;
}
36:
第36题假定输入的字符串中只包含字母和*号。
请编写函数fun,它的功能是:
将字符串中的前导*号全部移到字符串的尾部。
答案:
voidfun(char*a)
{
inti=0,n=0;
char*p;
p=a;
while(*p==‘*’)
{
n++;
p++;
}
while(*p)
{
a[i]=*p;
i++;
p++;
}
while(n!
=0)
{
a[i]=‘*’;
i++;
n--;
}
a[i]=‘\0’;
}
37:
第37题某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。
请编写函数fun,它的功能是:
求出该学生的平均分放在记录的ave成员中。
请自己定义正确的形参。
答案:
voidfun(STREC*p)
{
doubleav=0.0;
inti:
for(i=0;i<N;i++)
av+=p->s[i];
av/=N;
p->ave=av;
}
38:
第38题请编写函数fun,它的功能是:
求出ss所指字符串中指定字符的个数,并返回此值。
答案:
intfun(char*ss,charc)
{
intn=0;
while(*ss)
{
if(*ss==c)
n++;
ss++;
}
returnn;
}
39:
第39题请编写函数fun,该函数的功能是:
移动一维数组中的内容,若数组中由n个整数,要求把下标从0到p(p小于等于n-1)的数组元素平移到数组的最后。
答案:
voidfun(int*w,intp,intn)
{
intb[N],i,j=0;
for(i=0;i<=p;i++)
{
b[i]=w[i];
j++;
}
for(i=0;i<=p;i++)
{
w[j]=b[i];
j++;
}
}
40:
第40题请编写函数fun,该函数的功能是移动字符串中内容,移动的规则如下:
把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。
答案:
voidfun(char*w,intm)
{
charb[N];
intI,j=0;
for(i=0;i<m;i++)
{
b[j]=w[i];
j++;
}
for(i=0;i<strlen(w)-m;i++)
w[i]=w[i+m];
for(j=0;j<m;j++)
{
w[i]=b[j];
i++;
}
w[i]=‘\0’;
}
41:
第41题请