全国计算机等级考试二级C语言练习题(十三)
1.程序填空题
程序的功能是计算 ,例如,输入参数3,结果为10。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
long fun(int n)
{
int I;
long f;
f=___1___;
for(i=1;i<=n;i++)
f=___2___;
return f;
}
main()
{
long s;
int k,n;
printf("Please input the data:");
scanf("%d",&n);
s=___3___;
for(k=0;k<=n;k++)
s=___4___;
printf("the resutl is : %ld\n",s);
}
【答案】
(1)1
(2)f*i
(3)0
(4)s+fun(k)
2.程序修改题
在给定程序中,函数fun的功能是:先从键盘上输入一个3行3列的矩阵的各个元素的值,然后输出主对角线元素之积。
请改正函数fun中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h>
int fun()
{
int a[3][3],mul;
int I,j;
mul=1;
for(i=0;i<3;i++)
{
/**********found**********/
for(i=0;j<3;j++)
scanf("%d",&a[i][j]);
}
for(i=0;i<3;i++)
/**********found**********/
mul=mul*a[i][j];
printf("Mul=%d\n",mul);
}
main()
{
fun();
}
【答案】
(1)将for (i=0;j<3;j++)改为:
for (j=0;j<3;j++)
(2)将mul=mul*a[i][j];改为:
mul=
Chapter_8
mul*a[i][i];
3.程序设计题
请编写函数fun(),其功能是:计算正整数n所有因子(1和n除外)之和作为函数值返回。
例如:n=256时,函数值为254。
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include <stdio.h>
int fun(int n)
{
}
main()
{
printf("%d\n",fun(256));
}
【答案】
int fun(int n)
{
int s=0,i;
for(i=2;i<n;i++)
if(n%i==0)
s+=i;
return s;
}
1.程序填空题
请补充main函数,该函数的功能是:从键盘输入一组整数,使用条件表达式找出最大的整数。当输入的整数为-1时结束。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <conio.h>
#define NUM 100
main()
{
int n[NUM];
int i=-1;
int MAX=-1;
printf("\nInsert integer with the '-1' as end: \n");
do
{
i++;
printf("n[%d]=",i);
scanf("%d",___1___);
MAX=___2___n[i] : MAX;
}while(___3___);
printf("The MAX=%d\n",MAX);
}
【答案】
(1)&n[i] (2)MAX<n[i]? (3)n[i]!=-1
2.程序修改题
在给定程序中,函数fun()的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。
请改正函数fun中指定部位的错误,使其能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <math.h>
void fun(int a,int *b,int *c)
{
int I,j,d,y;
for(i=3;i<=a/2;i=i+2)
{
/**********found**********/
y=1
for(j=2;j<=sqrt((double)i);j++)
if(i%j==0) y=0;
if(y==1)
{
/**********found**********/
d=a-I;
for(j=2;j<=sqrt((double)d);j++)
if(d%j==0) y=0;
if(y==1) { *b=I; *c=d; }
}
}
}
main()
{
int a,b,c;
do
{ printf("Input a: ");
scanf("%d",&a);
}while(a%2);
fun(a,&b,&c);
printf("%d=%d+%d\n",a,b,c);
}
【答案】
(1)将y=1 改为:y=1;
(2)将d=a-I;改为:d=a-i;
3.程序设计题
请编写一个函数fun(char *s),函数的功能是把 s串中的内容逆置。
例如,s串中原有的字符串为:abcdefg,则调用该函数后的内容为:gfedcba。
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include <string.h>
#include <stdio.h>
#define N 81
fun(char*s)
{
}
main()
{
char a[N];
printf( "Enter a string : " );
gets(a);
printf( "The original string is : " );
puts(a);
fun(a);
printf("\n");
printf( "The string after modified : ");
puts(a);
}
【答案】
fun(char *s)
{
char b[N];
int i=0,j;
memset(b,0,N);
for(j=strlen(s)-1;j>=0;j--)
b[i++]=s[j];
strcpy(s,b);
}
1.程序填空题
请补充fun函数,该函数的功能是求不超过给定自然数的各奇数之和。例如,输入34,则输出结果为289。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
int fun(int n)
{
int I,sum;
sum=___1___;
for(i=1;___2___;i+=2)
sum+=I;
return sum;
}
main()
{
int a;
do
{
printf("\nPlease enter natural numbers a:");
scanf("%d",&a);
}while(a<=0);
printf("\n不超过给定自然数%d的各奇数之和为%d\n",a,fun(a));
}
【答案】
(1)0 (2)i<=n
2.程序修改题
给定程序中,函数fun的功能是:把m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt中。
例如,把3个串“abc”、“CD”、“EF”串连起来,结果是“abcCDEF”。
请改正程序中的语法错误,使其能统计出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <string.h>
int fun(char str[][10],int m, char *pt)
{
/**********found**********/
int k,i;
for(k=0;k<m;k++)
{
q=strlen(str[k]);
for(i=0;i<q;i++)
/**********found**********/
pt[i]=str[k];
pt+=q;
pt[0]=0;
}
}
main()
{
int n,h;
char s[10][10],p[120];
printf("Please enter n:");
scanf("%d",&n); gets(s[0]);
printf("Please enter %d string:\n", n);
for(h=0;h<n;h++) gets(s[h]);
fun(s, n, p);
printf("The result is : %s\n", p);
}
【答案】
(1)将int k,i; 改为:int k,q,i;
(2)将pt[i] = str[k]; 改为:
pt[i] = str[k][i]
3.程序设计题
请编写函数fun,用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。
例如,输入如下整数:
234 345 753 134 436 458 100 321 135 760
则输出结果为6,100。
注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include <conio.h>
#include <stdio.h>
#include <windows.h>
int fun(int *s,int t,int *k)
{
}
main()
{
int a[10]={234,345,753,134,436,458,
100,321,135,760},k;
system("cls");
fun(a,10,&k);
printf("%d,%d\n",k,a[k]);
}
【答案】
int fun(int *s,int t,int *k)
{
int i; *k=0;
for(i=0;i<t;i++)
if(s[*k]>s[i]) *k=i;
return s[*k];
}
1.程序填空题
在给定程序中,函数fun的功能是计算score中m个人的平均成绩aver,将低于aver的成绩放在below中,通过函数名返回人数。
例如,当score={10,20,30,40,50,60,70,80,90},m=9时,函数返回的人数应该是4,below= {10,20,30,40}。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <string.h>
int fun(int score[],int m,int below[])
{
int I,j=0;
float aver=0.0;
for(i=0; i<m; i++) aver+=score[i];
aver/=(float)m;
for(i=0;i<m;i++)
/**********found**********/
if(score[i]<aver)___1___;
return j;
}
main()
{
int I,n,below[9];
int score[9]={10,20,30,40,50,60,70,80,90};
/**********found**********/
n=fun(___2___);
printf("Below the average score are: " );
for(i=0; i<n; i++)
printf("%d ",below[i]);
}
【答案】
(1)below[j++]=score[i]
(2)score, 9, below
2.程序修改题
在给定程序中,函数fun的功能是:从键盘上输入的每个单词的第一个字母变为大写字母,输入时各单词必须用空格隔开,用“.”结束输入。
请改正程序中的错误,使程序能输出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
int fun(char *c,int status)
{
/***********found**********/
if(*c==' ') return 1;
else
{
if(status&&*c<='z'&&*c>='a')
/***********found**********/
*c+='a'-'A';
return 0;
}
}
main()
{
int flag=1;
char ch;
do
{
ch=getch();
flag=fun(&ch, flag);
putchar(ch);
}while(ch!='.');
}
【答案】
(1)将if(*c=' ') return 1;改为:
if(*c==' ') return 1;
(2)将*c += 'a' - 'A'; 改为:
*c += 'A' - 'a';
3.程序设计题
给定程序的功能是:删除一个字符串中指定的字符。设有如下的字符串:turbo c and borland vc++,从键盘上输入任一个字符,然后从上述字符串中删除所有该字符。
例如,输入字符n,则删除后变为turbo c ad borlad vc++。
如果输入了字符串中不存在的字符,则字符串照原样输出。(区分大小写)删除字符的操作通过一个函数来实现,请编写该函数的代码。
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include <stdio.h>
int fun(char s[], int c)
{
}
main()
{
static char str[]="turbo c and Borland
c++";
char ch;
printf("Enter a char to be deleted: ");
scanf("%c", &ch);
fun(str, ch);
printf("str[]=%s\n",str);
}
【答案】
int fun(char s[],int c)
{
char *p=s;
int i=0;
while(*p)
{
if(*p!=c) s[i++]=*p;
p++;
}
s[i]=0;
}
1.程序填空题
给定程序的功能是求出能整除x且不是偶数的各整数,并放在数组pp中,这些除数的个数由n返回。
例如,若x的值为30,则有4个数符合要求,它们是1、3、5、15。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
void fun(int x,int pp[],int *n)
{
int I,j=0;
for(i=1;i<=x;i+=2)
/**********found**********/
if(___1___ ) pp[j++]= I;
/**********found**********/
___2___;
}
main()
{
int x,aa[1000],n,I;
printf("Enter an integer number:\n");
scanf("%d",&x);
fun(x,aa,&n);
for(i=0;i<n;i++)
printf("%d ",aa[i]);
printf("\n");
}
【答案】
(1)(x%i)==0 (2)*n=j
2.程序修改题
在给定程序中,函数fun的功能是:输入两个双精度数,函数返回他们的平方根的和值。
例如,输入:22.993612和84.57629812
输出:y = 13.991703。
请改正程序中的错误,使其能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <math.h>
/**********found**********/
double fun(double *a,double *b);
{
double c;
/**********found**********/
c=sqrt(*a+*b);
return c;
}
main()
{
double a,b,y;
printf("Enter a, b : ");
scanf("%lf%lf",&a,&b);
y=fun(&a,&b);
printf("y=%f\n",y);
}
【答案】
(1)将double fun (double *a, double *b); 改为:
double fun (double *a, double *b)
(2)将c = sqrt( *a +*b ); 改为:
c = sqrt( *a ) + sqrt( *b );
3.程序设计题
请编写一个函数void fun(int bb[], int *n, int y),其中*n表示bb数组中元素的个数。
函数的功能是:删除bb中所有值为y的元素。Bb数组元素中的值和y的值由主函数通过键盘读入。
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include <stdio.h>
#define M 20
void fun(int bb[],int *n,int y)
{
}
main()
{
int aa[M],n,y,k;
printf("Please enter n : ");
scanf("%d", &n);
printf("Enter%d positive number :",n);
for(k=0;k<n;k++) scanf("%d",&aa[k]);
printf("The original data is : \n" );
for(k=0; k<n; k++)
printf("%5d",aa[k]);
printf("Enter a number to deleted: " );
scanf("%d",&y);
fun(aa,&n,y);
printf("The data after deleted %d :",y);
for(k=0;k<n;k++)
printf("%4d",aa[k]);
printf("\n");
}
【答案】
void fun(int bb[],int *n,int y)
{
int i, m=0;
for(i=0; i<*n; i++)
{ if(bb[i]!=y) bb[m++]=bb[i]; }
*n=m;
}
1.程序填空题
函数fun的功能是:统计长整数n的各个位上出现数字1、2、3的次数,并通过外部(全局)变量c1、c2、c3返回主函数。例如:当n=123114350时,结果应该为:c1=3 c2=1 c3=2。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
int c1,c2,c3;
void fun(long n)
{
c1=c2=c3=0;
while(n)
{
/**********found**********/
___1___(n%10)
{
/**********found**********/
case 1: c1++; ___2___;
/**********found**********/
case 2: c2++;___3___;
case 3: c3++;
}
n/=10;
}
}
main()
{
long n=123114350L;
fun(n);
printf("The result :\n");
printf("n=%ld c1=%d c2=%d c3=%d\n",n,c1,c2,c3);
}
【答案】
(1)switch (2)break; (3)break;
2.程序修改题
下列给定程序中,函数fun的功能是:把主函数中输入的3个数,最大的放在x中,最小的放在z中。
例如,输入的数为:1 2 3,输出结果应当是:x=3.0,y=2.0,z=1.0。
请改正程序中的错误,使其能得到正确的结果。
注意:不要改动main函数,不能增行或删行,也不得更改程序的结构。
#include <stdio.h>
void fun(float *p,float *q,float *s)
{
/****found******/
float *a;
if(*p<*q)
{
a=*p;
*p=*q;
*q=a;
}
/****found******/
if(*s<*p)
{
a=*s;
*s=*p;
*p=a;
}
if(*q<*s)
{
a=*q;
*q=*s;
*s=a;
}
}
main()
{
float x,y,z;
printf("Input x y z:");
scanf("%f%f%f",&x,&y,&z);
printf("x=%4.1f,y=%4.1f,z=%4.1f\n\n",x,y,z);
fun(&x,&y,&z);
printf("x=%4.1f,y=%4.1f,z=%4.1f\n\n",x,y,z);
}
【答案】
(1)将float *a;改为:float a;
(2)将if(*s<*p)改为:if(*s>*p)
3.程序设计题
请编写函数fun,其功能是:计算并输出给定数组(长度为5)中每相邻两个元素的平均值的平方根之和。
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。
#include <stdio.h>
#include <math.h>
double fun(double a[5])
{
}
main()
{
double f,c[5]={4.0,22.0,35.0,46.0,18.0};
int I;
FILE *out;
printf("\nThe original data is :\n");
for(i=0;i<5;i++)
printf("%6.1f",c[i]);
printf("\n\n");
f=fun?;
printf("f=%f\n\n",f);
out=fopen("outfile.dat","w");
fprintf(out,"%f",f);
fclose(out);
}
【答案】
double sum=0.0;
int i,j=1;
for(i=0;i<5;i++)
if(j<=4)
{
sum+=sqrt((a[i]+a[i+1])/2.0);
j++;
}
return sum;
1.程序填空题
给定程序的功能是把s串中所有的字符前移一个位置,串中的第一个字符移到最后。
例如:s串中原有的字符串为:Mn.123xyZ,则调用该函数后,s串中的内容为:n.123xyZM。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#define N 81
fun(char *s)
{
char b[N];
fprintf(b,"%s%c",s+1,*s);
/**********found**********/
___1___;
}
main()
{
char a[N];
printf( "Enter a string : " );
gets(a);
printf("The original string is : " );
puts(a);
/**********found**********/
___2___;
printf("The string after modified : ");
/**********found**********/
___3___;
}
【答案】
(1) s[0] (2)fun(a); (3)puts(a)
2.程序修改题
给定程序中,函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0~m-1的值。
请改正函数Creatlink中指定部位的错误,使其能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <stdlib.h>
typedef struct aa
{ int data;
struct aa *next;
}NODE;
NODE*Creatlink(int n,int m)
{
NODE *h=NULL,*p,*s;
int I;
/**********found***********/
p=(NODE)malloc(sizeof(NODE));
h=p;
p->next=NULL;
for(i=1;i<=n;i++)
{
s=(NODE*)malloc(sizeof(NODE));
s->data=rand()%m;
s->next=p->next;
p->next=s;
p=p->next;
}
/**********found***********/
return p;
}
outlink(NODE *h)
{
NODE *p;
p=h->next;
printf("THE LIST :\n HEAD ");
while(p)
{
printf("->%d",p->data);
p=p->next;
}
printf("\n");
}
main()
{
NODE *head;
head=Creatlink(8,22);
outlink(head);
}
【答案】
(1)将p=(NODE)malloc(sizeof(NODE)); 改为:
p=(NODE *)malloc(sizeof(NODE));
(2)将return p; 改为:return h;
3.程序设计题
请编写函数fun(),它的功能是,根据下列式子计算s,计算结果作为函数值返回;n通过形参传入:
例如:若n的值为15时,函数的值为:1.875000
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include <stdio.h>
float fun(int n)
{
}
main()
{
int n;
float s;
printf("\n读入一个正整数N:");
scanf("%d",&n);
s=fun(n);
printf("计算结果是: %f\n",s);
}
【答案】
float fun(int n)
{
int i,j,t; float s=0;
for(i=1;i<=n;i++)
{
t=0;
for(j=1;j<=i;j++) t+=j;
s=s+1.0/t;
}
return s;
}
1.程序填空题
给定程序中,函数fun的功能是:有N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在下三角元素中,右上三角元素置为0。
例如,若N=4,有下列矩阵:
21 12 13 24
25 16 47 38
29 11 32 54
42 21 33 10
计算结果为:
21 0 0 0
37 16 0 0
42 58 32 0
66 59 87 10
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#define N 4
void fun(int (*a)___1___)
{
int I,j;
for(i=1;i<N;i++)
{
for(j=0;j<I;j++)
{
___2___=a[i][j]+a[j][i];
___3___=0;
}
}
}
main()
{
int I,j,a[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10};
printf("\nThe original array:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%2d ",a[i][j]);
printf("\n");
}
fun(a);
printf("\nThe result is:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%2d ",a[i][j]);
printf("\n");
}
}
【答案】
(1)[N] (2)a[i][j] (3)a[j][i]
2.程序修改题
在给定程序中,函数fun的功能是:将s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t所指数组中(规定第一个字符放在第0位中)。
例如,字符串中的数据为:AABBCCDDEEFF,则输出应当是:ABBCDDEFF。
请改正函数fun中指定部位的错误,使其能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <string.h>
#define N 80
void fun(char *s,char t[])
{
int I,j=0;
for(i=0;i<strlen(s);i++)
/***********found**********/
if(i%2 && s[i]%2==0)
t[j++]=s[i];
/***********found**********/
t[j]=0
}
main()
{
char s[N],t[N];
printf("Please enter string s : ");
gets(s);
fun(s,t);
printf("The result is : %s\n",t);
}
【答案】
(1)将if(i%2 && s[i]%2==0) 改为:
if(i%2||s[i]%2==0)
(2)将t[j]=0 改为:t[j]=0;
3.程序设计题
函数fun的功能是:把a数组中的n个数的平方值,与b数组中逆序的n个数的平方值一一对应相减,结果存放在c数组中。
例如,当a数组中的值是:1、3、5、7、8,b数组中的值是:2、3、4、5、8
调用该函数后,c中存放的数据是:-63、-16、9、40、60
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include <stdio.h>
void fun(int a[],int b[],int c[],int n)
{
}
main()
{
int I,a[100]={1,3,5,7,8},
b[100]={2,3,4,5,8},c[100];
fun(a,b,c,5);
printf("The result is: ");
for(i=0;i<5;i++) printf("%d ",c[i]);
printf("\n");
}
【答案】
void fun(int a[],int b[],int c[],int n)
{
int i;
for(i=0; i<n; i++)
c[i]=a[i]*a[i]-b[n-1-i]*b[n-1-i];
}
1.程序填空题
给定程序的功能是:调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <stdlib.h>
#define N 5
typedef struct
{ int num;
char name[10];
char tel[10];
}STYPE;
void check();
/**********found**********/
___1___fun(STYPE *std)
{
/**********found**********/
___2___fp; int I;
if((fp=fopen("OUT98.dat","wb"))==NULL)
return(0);
printf("Output data to file !\n");
for(i=0;i<N;i++)
/**********found**********/
fwrite(&std[i],sizeof(STYPE),1,fp);
fclose(fp);
return(1);
}
main()
{
STYPEs[10]={{1,"aaaaa","111111"},{2,"bbbbb","222222"},{3,"ccccc","333333"},{4,"ddddd","444444"},{5,"eeeee","555555"}};
int k;
k=fun(s);
if(k==1)
{ printf("Succeed!"); check(); }
else printf("Fail!");
}
void check()
{
FILE *fp; int I;
STYPE s[10];
if((fp=fopen("OUT98.dat","rb"))==NULL)
{ printf("Fail !!\n"); exit(0); }
printf("Read file and output to screen :\n");
printf("num name tel\n");
for(i=0;i<N;i++)
{
fread(&s[i],sizeof(STYPE),1,fp);
printf("%6d %s %s\n",
s[i].num,s[i].name,s[i].tel);
}
fclose(fp);
}
【答案】
(1)int (2)FILE *
2.程序修改题
在给定程序中,函数fun的功能是:比较两个字符串,将长的那个字符串的首地址作为函数值返回。
请改正函数fun中指定部位的错误,使其能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
/**********found**********/
char fun(char *s,char *t)
{
int sl=0,tl=0;
char *ss,*tt;
ss=s; tt=t;
while(*ss)
{ sl++;
/**********found**********/
ss++;
}
while(*tt)
{ tl++;
/**********found**********/
tt++;
}
if(tl>sl) return t;
else return s;
}
main()
{
char a[80],b[80],*p,*q;
int I;
printf("Enter a string : ");
gets(a);
printf("Enter a string again : ");
gets(b);
printf("The longer is :%s\n",fun(a,b));
}
【答案】
float fun(float h)
{
long w ;
w=h*100+0.5;
return(float)w/100;
}
3.程序设计题
请编写一个函数float fun(float h),函数的功能是保留h小数点后两位数,并对第三位进行四舍五入。
例如:h值为8.32433,则函数返回8.320000;
h值为8.32533,则函数返回8.330000。
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include <stdio.h>
float fun(float h)
{
}
main()
{
float a;
printf("Enter a: "); scanf( "%f", &a);
printf("The original data is : ");
printf("%f \n\n", a);
printf("The result : %f\n", fun(a));
}
【答案】
float fun(float h)
{
long w ;
w=h*100+0.5;
return(float)w/100;
}
1.程序填空题
给定程序的功能是将十进制正整数m转换成k进制(2≤k≤9)数的数字输出。例如,输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
void fun(int m,int k)
{
int aa[20],I;
for(i=0;m;i++)
{
/**********found**********/
aa[i]=___1___;
/**********found**********/
___2___;
}
for( ; I; i--)
/**********found**********/
printf("%d",___3___);
}
main()
{
int b,n;
printf("Please enter a number and a base:\n" );
scanf("%d %d",&n,&b);
fun(n, b);
}
【答案】
(1)m%k (2)m /= k (3)aa[ i-1 ]
2.程序修改题
在给定程序中,函数fun的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。
请改正函数fun中指定部位的错误,使其能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <string.h>
#define N 80
int fun(char *s,char *t)
{
int n;
char *p,*r;
n=0;
while(*s)
{ p=s;
/*********found**********/
R=t;
while(*r)
if(*r==*p) { r++; p++; }
else break;
/*********found**********/
if(*r=0)
n++;
s++;
}
return n;
}
main()
{
char a[N],b[N];
int m;
printf("Please enter string a : ");
gets(a);
printf("Please enter substring b : ");
gets(b);
m=fun(a,b);
printf("The result is : m=%d\n",m);
}
【答案】
(1)将R=t; 改为:r=t;
(2)将if(*r=0) 改为:if(*r==0)
3.程序设计题
请编写函数fun,函数的功能是:移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。
例如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include <stdio.h>
#define N 80
void fun(int *w,int p,int n)
{
}
main()
{
int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,
13,14,15};
int I,p,n=15;
printf("The original data:\n");
for(i=0; i<n; i++) printf("%3d",a[i]);
printf("Enter p: "); scanf("%d",&p);
fun(a,p,n);
printf("The data after moving:\n");
for(i=0;i<n;i++) printf("%3d",a[i]);
printf("\n\n");
}
【答案】
void fun(int *w,int p,int n)
{
int i,j=0,b[N];
for(i=p+1; i<n; i++) b[j++]=w[i];
for(i=0; i<=p; i++) b[j++]=w[i];
for(i=0; i<n; i++) w[i]=b[i];
}
1.程序填空题
给定程序中,函数fun的功能是:将形参student所指结构体数组中年龄最小者的数据作为函数值返回,并在main函数中输出。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
typedef struct
{
char name[10];
int age;
}STUDENT;
STUDENT fun(STUDENT student[],int n)
{
STUDENT min;
int I;
min=___1___;
for(i=1;i<n;i++)
if(min.age>___2___)
min=student[i];
return min;
}
main()
{
STUDENT student[3]={"alice",17,"baren",16,"caren",18};
STUDENT min;
min=fun(student,3);
printf("\nThe min age result \n");
printf("\nName : %s,Age : %d\n",___3___,min.age);
}
【答案】
(1)*student (2)student[i].age (3)min.name
2.程序修改题
在给定程序中,函数的功能是:读入一个整数k(2≤k≤10000),打印它的所有质因子(即所有为素数的因子)。例如,若输入整数2310,则应输出:2、3、5、7、11。
请改正程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include <conio.h>
#include <stdio.h>
#include <windows.h>
/***********found**********/
IsPrime(int n);
{
int I,m;
m=1;
for(i=2; i<n; i++)
/***********found**********/
if!(n%i)
{ m=0; break; }
return(m);
}
main()
{
int j,k;
system("cls");
printf("Please enter an integer number
between 2and 10000: ");
scanf("%d",&k);
printf("\n\nThe prime factor(s) of
%dis(are): ",k);
for(j=2;j<=k;j++)
if((!(k%j))&&(IsPrime(j)))
printf("\n%4d",j);
printf("\n");
}
【答案】
(1)将IsPrime(int n); 改为 IsPrime(int n)
(2)将if!(n%i) 改为 if(!(n%i))
3.程序设计题
请编写一个函数fun,其功能是:将两个字符串连接(不得使用库函数strcat),即把s2所指的字符串连接到s1所指字符串后。例如,分别输入Firststring和Secondstring则程序输出FirststringSecondstring。
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include <conio.h>
#include <stdio.h>
#include <windows.h>
void fun(char s1[],char s2[])
{
int I,n=strlen(s1),m=strlen(s2);
for(I=0;I<m;I++)
s1[n+I]=s2[I];
}
main()
{
char p1[80],p2[80];
system("cls");
printf("enter p1 and p2 :\n");
scanf("%s%s",p1, p2);
printf("p1=%s\n",p1);
printf("p2=%s\n",p2);
printf("invoke fun(p1,p2):\n");
fun(p1,p2);
printf("after invoking :\n");
printf("%s\n",p1);
}
【答案】
void fun(char s1[],char s2[])
{
int i,n=strlen(s1),m=strlen(s2);
for(i=0; i<m; i++)
s1[n+i]=s2[i];
}