规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:使字符串中尾部的*号不多于n个,若多于n个,则删除多余的*号;若少于或等于n个,则不做任何操作,字符串中间和前面的*号不删除。
例如,字符串中的内容为“****A*BC*DEF*G*******”,若n的值为4,删除后,字符串中的内容应为“****A*BC*DEF*G****”;若n的值为7,则字符串中的内容仍为“****A*BE*DEF*G*******”。n的值在主函数中输入。编写函数时,不得使用C语言提供的字符串函数。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include<stdio.h>
void fun(char*a,int n)


main( )
(char s[81];int n;
printf("Enfer a spring:/n");
gets(s);
printf("Encer n:");
scanf("%d",&n);
fun(s,n);
printf("The string after deleted:/n");
puts(s);

void fun(char*a,int n)
{
int i=0,k=0;
char*p,*t;
p=t=a;
/*将指针移动到字符串末尾*/
while(*t)
t++;
t--;
/*从后往前如果是。’*’则使k++,找到最后一个*所在的位置,并记录’*’的个数*/
while(*t=’*’)
/*指针t指向前一个,同时标量k增加—*/
(k++;t--;)
/*如果最后*的个数大于允许的个数*/
if(k>n)
/*循环次数不大于前面的字符与最大允许*的个数之和*/
(while(*p&&p<t+n+A)
/*把字符保存到数组a中*/
(a[i]=*p;
i++;p++;
}
a[i]=’/0’;
}
}

下列给定程序中,函数fun的功能是:先把形参a所指数组中的最小值放在元素a[0]中,把a所指数组中的最大值放在a[1]元素中;再把a所指数组元素中的次小值放在a[2]中,把a所指数组元素中的次大值放在a[3],依次类推。
例如,若a所指数组中的数据最初排列为:9,1,4,2,3,6,5,8,7;则按规则移动后,数据排列为:1,9,2,8,3,7,4,6,5。形参n中存放a所指数组中数据的个数。
规定fun函数中的max存放当前所找的最大值,px存放当前所找最大值的下标。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#define N 9
void fun(int a[],int n)

int i,j,max,min,px,pn,t;
for(i=0;i<n-1;i+=2)

/********found********/
max=min= (1) ;
px=pn=i;
for(j=i+1;j<n;j++)
/********found********/
if(max< (2) )
(max=a[j];px=j;)
/********found********/
if(min> (3) )
(min=a[j];pn=j;)

if(pn!=i)
(t=a[i]=a[i]=min;a[pn]=t;
if(px=i)px=pn;
if(px!=i+1)
(f=a[i+1];a[i+1]=max;
a[px]=t;)


void main( )

int b[N]=(9,1,4,2,3,6,5,8,7),i;
printf("/nThe original data:/n");
for(i=0;i<N;i++)
printf("%4d",b[i]);
printf("/n");
fun(b,N);
printf("/nThe data after moving:/n");
for(i=0;i<N;i++)
printf("%4d",b[i]);
printf("/n");

a[i] (2)a[i] (3)a[i]

下列给定程序中,函数fun的功能是:用递归算法计算斐波拉契数列中第n项的值。从第1项起,斐波拉契数列为:1,1,2,3,5,8,13,21,…
例如,若给n输入7,则该项的斐波拉契数值为13。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
long fun(int g)
/********found********/
switch(g);

case oreturn 0;
/********found********/
case 1;case 2;return 1;

return(fun(g-1)+fun(g-2));

void main( )

long fib;int n;
printf("Input n:");
scanf("%d".&n);
printf("n=%d/n",n);
fib=fun(n);
printf("fib=%d/n/n",fib);

去掉switch(q);中的分号
(2)case 1;case 2;return 1;

某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出,请编写函数fun,其功能是:求出该学生的平均分,并放入记录的ave成员中。
例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应为78875。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun部位中填入你编写的若干语句。
试题程序:
#include<stdio.h>
#define N 8
typedef struct

Char num[10];
double s[N];
double ave;

STREC;
void fun(STREC*a)


void main( )

STREC S=("GA005",85.5,76,69.5,85,91,72,64.5,87.5);
int i;
fun(&s);
printf("The%s’S student data:/n",snum);
for(i=0;i<N;i++)
printf("%4.1f/n",s.s[il);
printf("/nave=%7.3f/n",s.ave);

void fun(STREC*a)
int i;
a->ave=0.0;
for(i=0;i<N;i++)
a->ave=a->ave+a->s[i];
/*求各门课程成绩的总和*/
a->ave=a->ave/N; /*求平均分*/
}

下列给定程序中,函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[1]中,再把a所指数组元素中的次大值放在a[2]中,把a数组元素中的次小值放在a[3]中,依次类推。例如,若a所指数组中的数据最初排列为:1、4、2、3、9、6、S、8、7,按规则移动后,数据排列为:9、1、8、2、7、3、6、4、5。形参n中存放a所指数组中数据的个数。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#define N 9
/********found********/
void fun(int (1) ,int n)

int i,j,max,min,px,pn,t;
/********found********/
for(i=0;i<n-1;i+= (2) )

max=min=a[i];
px=pn=i;
/********found********/
for(j= (3) ;j<n;j++)

if(maxca[j])
(max=a[j];px=j;)
if(min>a[j])
(min=a[j];pn=j;)
)
if(px!=i)
(t=a[i]=a[i]=max;
a[px]=c;
if(pn==i)pn=px;

if(pn!=i+1)
n=a[i+1];a[i+1]=min;
a[pn]=t)


main( )

int b[N]=(1,4,2,3,9,6,5,8,7),i;
printf("/nThe original data:/n");
for(i=0;i<N;i++)
printf("%4d%,b[i]);
printf("/n");
fun(b,N);
printf("/nThe data after moving:/n");
for(i=0;i<N;i++)
printf("%4d",b[i]);
printf("/n");

a[] (2)2 (3)i+l

下列程序中,函数fun的功能是:按顺序给S所指数组中的元素赋予从2开始的偶数,然后再按顺序对每5个元素求平均值,并将这些值依次存放在W所指的数组中。若S所指数组中元素的个数不是5的倍数,则多余部分忽略不计。
例如,S所指数组有14个元素,则只对前lO个元素进行处理,不对最后的4个元素求平均值。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#define SIZE 20
fun(double*s,double*w)

int k,i;double sum;.
for(k=2,i=0;i<SIZE;i++)
(s[il=k;k+=2;
/********found********/
sun=0.0;
for(k=0,i=0;i<SIZE;i++)
(sum+=s[i];
/********found********/
if(i+1%5==0)
[w[k]=sum/5;sum=0;k++;)

return k;

main( )
(double a[SIZE],b[SIZE/5];
int i,k;
k=fun(a,b);
printf("The original data:/n");
for(i=0;i<SIZE;i++)
if(i%5==0)printf("/n");
printf("%4.0"a[i]);

printf("/n/nThe result:/n");
for(i=0;i<k;i++)
printf("%6.2f",b[i];
printf("/n/n");

sum=0.0;
(2)if((i+1)%5==0)

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组S中,请编写函数fun,其功能是:把低于平均分的学生数据放入b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include<stdio.h>
#define N 8
typedef struct

char num[10];
double s;
STREC;
double fun(STREC*a,STREC*b,int*n)


void main( )

STREC s[N]="GA05",85,"GA03",76,"GA02",69,"GA04",85,"GA01",91,"GA07",72,"GA08",64,"GA06",87;
STREC h[N];
int i,n;
double ave;
ave=fun(s,h,&n);
printf("The%d student data which is lower
than%7.3f:/n"
n,ave);
for(i=0;i<n;i++)/*输出成绩低于平均值的学生记录*/
printf("%s%4.1f/n",h[i],num,h[i],s;
printf("/n");

double fun(STREC*a,STREC*b,int*n)
{
int i,j=0;
dOuble av=0.0;
for(i=0;i<N;i++)
av=av+a[i],s;
av=av/N; /*求平均值*/
for(i=0;i<N;i++)
ifc a[i],s<av)b[j++]=a[i];
/*将低于平均值的学生记录存人结构体数组b中*/
*n=j; /*指针传回低于平均值的学生人数*/
return av; /*返回平均值*/
}

下列给定程序中,函数fun的功能是:将形参a所指数组中的前半部分元素中的值与后半部分元素中的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。
例如,若a所指数组中的数据为:1,2,3,4,S,6,7,8,9,则调换后为:6,7,8,9,5,1,2,3,4。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#incIude<stdio.h>
#define N 9
void fun[int a[],int n)

int i,t,p;
/********found********/
p=(n%2==0)n/2;n/2+ (1) ;
for(i=0;i<n/2;i++)

f=a[i];
/********fodnd********/
a[i]=a[p+ (2) ];
/********found********/
(3) =t;


maln( )

int b[N]=1,2,3,4,5,6,7,8,9,i;
printf("/nThe original data:/n");
for(i=0;i<N;i++)
printf("%4D,b[i]);
printf("/n");
fun(b,N);
printf("/nThe daca after moving:/n");
for(i=0;i<N;i++)
printf("%4d",b[i]);
printf("/n");

1 (2)i (3)a[p+i]或*(a+p+i)

下列给定程序中,函数fun的功能是:把从主函数中输入的3个数,最大的数放在a中,中间的数放在b中,最小的数放在c中。
例如,若输入的数为:55 12 34,输出的结果应当是:a=55.0,b=34.0,c=120。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动:main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
void fun(float*a,float*b,float*c)

/********found********/
float*k;
if(*a<*b)

k=*a;
*a=*b;
*b=k;

/********found********/
if(*a,*c)

k=*c;
*c=*a;
*a=k;

if(*b<*c)

k=*b;
*b=*c;
*c=k;


main( )

float a,b,c;
printf("Input a b c:");
scanf("%f%f%f",&a,&b,&c);
printf("a=%4.1f,b=%4.1f,c=%4.1f/n/n",a,b,c);
fun(&a,&b,&c);
printf("a=%4.1f,b=%4.1f,c=%4.1f/n/n",a,b,c);

float k; (2)if(*a<*c)

学生的记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组s中,请编写函数fun,其功能是:把分数最高的学生数据放在b所指的数组中。注意:分数最高的学生可能不止一个,函数返回分数最高的学生人数。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include<stdio.h>
#define N 16
typedef struct

char num[10];
int s;
STREC;
int fun(STREC*a,STREC*b)


void main( )

STREC s[N]="GA005",85,"GA003",76,"GA002",69,"GA004",85,"GA001",91,"GA007",72,"GA008",64,"GA006",87,"GA015",85,"GA013",91,"GA012",64,"GA014",91,"GA011",66,"GA017",64,"GA018",64,"GA016",72;
STREC h[N];
int i,n;
n=fun(s,h);
printf("The%d highest score:/n",n);
for(i=0;i<n;i++)
printf("%s%4d/n",h[i],num,h[i],s);/*输出最高分的学号和成绩*/
printf("/n");

int fun(STREC*a,STREC*b)
{
int i,j=0,max=a[0]s;
for(i=0;i<N;i++)
if(max<a[i],s)/*找出最大值*/
max=a[i],s;
for(i=0;i<N;i++J
if(max==a[i],s)
b[j++]=a[i];
/*找出成绩与max相等的学生的记录,存人结构体数组b中*/
return j;/*返回最高成绩的学生人数*/
}

微信扫码获取答案解析
下载APP查看答案解析