2011二级C语言南开100题 下载本文

2011年C语言南开100题

于或等于n个,则什么也不做,字符串中间和前面的*号不删除。 答案:

void fun(char *a,int n) {

int i=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所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。 答案:

int fun (STREC *a, STREC *b) {

int I,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++)

17

2011年C语言南开100题

if(a[i].s==max) {

*(b+j)=a[i]; j++; n++; }

return n; }

35: 第35题 请编写一个函数,用来删除字符串中的所有空格。 答案:

void fun(char *str) {

int i=0; char *p=str; while (*p) {

if(*p!=‘’) {

str[i]=*p; i++; } p++; }

str[i]=‘\\0’; }

36: 第36题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部移到字符串的尾部。 答案: void fun(char *a) {

int i=0,n=0; char *p; p=a;

while (*p==‘*’) { n++; p++;

18

2011年C语言南开100题

}

while (*p) {

a[i]=*p; i++; p++; }

while(n!=0) {

a[i]=‘*’; i++; n--; }

a[i]=‘\\0’; }

37: 第37题 某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。 答案:

void fun(STREC *p) {

double av=0.0; int i:

for(i=0;i<N;i++) av+=p->s[i]; av/=N; p->ave=av; }

38: 第38题 请编写函数fun,它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。 答案:

int fun(char *ss, char c) {

int n=0; while (*ss) {

if(*ss==c)

19

2011年C语言南开100题

n++; ss++; }

return n; }

39: 第39题 请编写函数fun,该函数的功能是:移动一维数组中的内容,若数组中由n个整数,要求把下标从0到p(p小于等于n-1)的数组元素平移到数组的最后。 答案:

void fun(int *w, int p, int n) {

int b[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到最后的字符移到字符串的前部。 答案:

void fun(char *w,int m) {

char b[N]; int I,j=0;

for(i=0;i<m;i++) {

b[j]=w[i]; j++; }

for (i=0;i<strlen(w)-m;i++)

20