本题目如果下载后发现有错误的地方,请联系网站管理员:QQ121431055
考试时,上机操作题目有三套,基本操作题、简单应用题、综合应用题
第81套:
给定程序中,函数fun的功能是:在形参s所指字符串中的每个数字字符之后
插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:
def3*5*adh3*kjsdf7*。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
void fun(char *s)
{ int i, j, n;
for(i=0; s[i]!='\0'; i++)
/**********found**********/
if(s[i]>='0' ___1___ s[i]<='9')
{ n=0;
/**********found**********/
while(s[i+1+n]!= ___2___) n++;
for(j=i+n+1; j>i; j--)
/**********found**********/
s[j+1]= ___3___;
s[j+1]='*';
i=i+1;
}
}
main()
{ char s[80]="ba3a54cd23a";
printf("\nThe original string is : %s\n",s);
fun(s);
printf("\nThe result is : %s\n",s);
}
解题思路:
第一处:判断是数字,应该使用“与”,所以应填:&&。
第二处:判断字符串是否是字符串结束符,所以应填:'\0'。
第三处:如果当前字符是数字字符,则把当前字符以后的所有字符往后一个位置,所以应
填:s[j]。
***************************************************
给定程序MODI1.C中函数fun的功能是:根据整型形参m,计算如下公式的值。
1 1 1 1
y = 1 + ----- + ----- + ----- + …… + -----
2*2 3*3 4*4 m*m
例如,若 m 中的值为: 5,则应输出:1.463611。
请改正程序中的错误,使它能得出正确的结果。
注意: 不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
double fun ( int m )
{ double y = 1.0 ;
int i;
/**************found**************/
for(i = 2 ; i < m ; i++)
/**************found**************/
y += 1 / (i * i) ;
return( y ) ;
}
main( )
{ int n = 5 ;
printf( "\nThe result is %lf\n", fun ( n ) ) ;
}
解题思路:
第一处:使用for循环计算公式,必须计算到m,所以应改为for(i=2; i<=m; i++)。
第二处:在除法运算中,如果除数和被除数都是整数,所以所除结果也是整数,因此应改
为y+=1./(i*i)。
***************************************************
请编写函数fun, 函数的功能是:实现B=A+A', 即把矩阵A加上A的转置, 存放
在矩阵B中。计算结果在 main 函数中输出。
例如,输入下面的矩阵: 其转置矩阵为:
1 2 3 1 4 7
4 5 6 2 5 8
7 8 9 3 6 9
程序输出:
2 6 10
6 10 14
10 14 18
注意: 部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
void fun ( int a[3][3], int b[3][3])
{
}
main( ) /* 主程序 */
{ int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, t[3][3] ;
int i, j ;
fun(a, t) ;
for (i = 0 ; i < 3 ; i++) {
for (j = 0 ; j < 3 ; j++)
printf("}", t[i][j]) ;
printf("\n") ;
}
NONO () ;
}
解题思路:
本题考察考生如何实现矩阵的转置,然后执行两个矩阵中的元素值相加生成一个新的矩阵。
矩阵转置实现上就是原行元素值变为列元素值,原列元素值变为行元素值。
参考答案:
void fun ( int a[3][3], int b[3][3])
{
int c[3][3] ;
int i, j ;
for(i = 0 ; i < 3 ; i++)
for(j = 0 ; j < 3 ; j++) {
c[i][j] = a[j][i] ; /* 矩阵的转置 */
b[i][j] = a[i][j] + c[i][j] ;
}
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第82套:
给定程序中,函数fun的功能是:找出100~999之间(含100和999)所有整数
中各位上数字之和为x(x为一正整数)的整数,然后输出;符合条件的整数个数作
为函数值返回。
例如,当x值为5时,100~999之间各位上数字之和为5的整数有:104、113、
122、131、140、203、212、221、230、302、311、320、401、410、500。共有15
个。当x值为27时,各位数字之和为27的整数是:999。只有1个。
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
fun(int x)
{ int n, s1, s2, s3, t;
n=0;
t=100;
/**********found**********/
while(t<=__1__){
/**********found**********/
s1=t; s2=(__2__); s3=t/100;
/**********found**********/
if(s1+s2+s3==__3__)
{ printf("%d ",t);
n++;
}
t++;
}
return n;
}
main()
{ int x=-1;
while(x<0)
{ printf("Please input(x>0): "); scanf("%d",&x); }
printf("\nThe result is: %d\n",fun(x));
}
解题思路:
第一处:使用while循环找出100~999之间所有整数,所以应填:999。
第二处:s2是求十位数字,所以应填:t/10。
第三处:各位数字之和为x,所以应填:x。
***************************************************
给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中偶数位
上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。
例如,当s中的数为:7654321时,t中的数为:642。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
/************found************/
void fun (long s, long t)
{ long sl=10;
s /= 10;
*t = s % 10;
/************found************/
while ( s < 0)
{ s = s/100;
*t = s*sl + *t;
sl = sl * 10;
}
}
main()
{ long s, t;
printf("\nPlease enter s:"); scanf("%ld", &s);
fun(s, &t);
printf("The result is: %ld\n", t);
}
解题思路:
第一处:在函数fun体中,t是一个指针型变量,因此定义形参时也应定义指针。
第二处:条件应该s>0,所以应改为:while(s>0)。
***************************************************
学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组
s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。
注意: 部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
#define N 16
typedef struct
{ char num[10];
int s;
} STREC;
int fun( STREC a[] )
{
}
main()
{ STREC s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},
\TAB \TAB {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},
\TAB \TAB {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},
\TAB \TAB {"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};
int i;FILE *out ;
fun( s );
printf("The data after sorted :\n");
for(i=0;i
{ if( (i)%4==0 )printf("\n");
printf("%s M ",s[i].num,s[i].s);
}
printf("\n");
out = fopen("c:\\test\\out.dat","w") ;
for(i=0;i
{ if( (i)%4==0 && i) fprintf(out, "\n");
fprintf(out, "M ",s[i].s);
}
fprintf(out,"\n");
fclose(out) ;
}
解题思路:
本题是按结构体中成绩s进行降序排列,其结果仍存入当前结构体中。
参考答案:
#include
#define N 16
typedef struct
{ char num[10];
int s;
} STREC;
int fun( STREC a[] )
{
STREC tmp;
int i,j;
for(i = 0; i < N; i++)
for(j = i+1; j < N; j++)
if(a[i].s < a[j].s) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第83套:
给定程序中,函数fun的功能是:找出100至x(x≤999)之间各位上的数字之
和为15的所有整数,然后输出;符合条件的整数个数作为函数值返回。
例如,当n值为500时,各位数字之和为15的整数有:159、168、177、186、
195、249、258、267、276、285、294、339、348、357、366、375、384、393、
429、438、447、456、465、474、483、492。共有26个。
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
fun(int x)
{ int n, s1, s2, s3, t;
/**********found**********/
n=__1__;
t=100;
/**********found**********/
while(t<=__2__)
{ s1=t; s2=(t/10); s3=t/100;
if(s1+s2+s3==15)
{ printf("%d ",t);
n++;
}
/**********found**********/
__3__;
}
return n;
}
main()
{ int x=-1;
while(x>999||x<0)
{ printf("Please input(0
printf("\nThe result is: %d\n",fun(x));
}
解题思路:
第一处:符合条件的整数个数n,必须进行初始化,所以应填:0。
第二处:找出x≤999,所以应填:x。
第三处:循环控制变量t每循环一次t要加1,所以应填:t++。
***************************************************
给定程序MODI1.C中函数fun的功能是:先将s所指字符串中的字符按逆序存放
到t所指字符串中,然后把s所指串中的字符按正序连接到t所指串的后面。
例如:当s所指的字符串为:"ABCDE"时,
则t所指的字符串应为:"EDCBAABCDE"。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
void fun (char *s, char *t)
{
/************found************/
int i;
sl = strlen(s);
for (i=0; i
/************found************/
t[i] = s[sl-i];
for (i=0; i
\TAB t[sl+i] = s[i];
t[2*sl] = '\0';
}
main()
{ char s[100], t[100];
printf("\nPlease enter string s:"); scanf("%s", s);
fun(s, t);
printf("The result is: %s\n", t);
}
解题思路:
第一处:变量sl没有定义。
第二处:在C语言中,字符串开始位置从0开始的,所以应改为:t[i] = s[sl-i-1];。
***************************************************
函数fun的功能是: 将a、b中的两个两位正整数合并形成一个新的整数放在
c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中
的十位和个位数依次放在变量c的千位和十位上。
例如,当a=45,b=12。调用该函数后,c=1425。
注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
void fun(int a, int b, long *c)
{
}
main() /* 主函数 */
{ int a,b; long c;
printf("Input a, b:");
scanf("%d%d", &a, &b);
fun(a, b, &c);
printf("The result is: %ld\n", c);
NONO();
}
解题思路:
本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。
取a十位数字的方法:a/10
取a个位数字的方法:a
参考答案:
void fun(int a, int b, long *c)
{
*c=(b/10)*1000+(a/10)*100+(b)*10+(a);
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第84套:
函数fun的功能是:从三个形参a,b,c中找出中间的那个数,作为函数值返
回。
例如,当a=3, b=5, c=4时,中数为4。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
int fun(int a, int b, int c)
{
int t;
/**********found**********/
t = (a>b) ? (b>c? b :(a>c?c:___1___)) : ((a>c)?___2___ : ((b>c)?c:___3___));
return t;
}
main()
{ int a1=3, a2=5, a3=4, r;
r = fun(a1, a2, a3);
printf("\nThe middle number is : %d\n", r);
}
解题思路:
第一处:给三个数进行比较大小,所以应填:a。
第二处:给三个数进行比较大小,所以应填:a。
第三处:给三个数进行比较大小,所以应填:b。
***************************************************
给定程序MODI1.C中函数fun的功能是: 首先将大写字母转换为对应小写字母;
若小写字母为a~u,则将其转换为其后的第5个字母;若小写字母为v~z, 使其值减
21。转换后的小写字母作为函数值返回。例如,若形参是字母A,则转换为小写字母
f; 若形参是字母W,则转换为小写字母b。
请改正函数fun中指定部位的错误, 使它能得出正确的结果。
注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
给定源程序:
#include
#include
char fun(char c)
{ if( c>='A' && c<='Z')
/**************found**************/
C=C+32;
if(c>='a' && c<='u')
/**************found**************/
c=c-5;
else if(c>='v'&&c<='z')
c=c-21;
return c;
}
main()
{ char c1,c2;
printf("\nEnter a letter(A-Z): "); c1=getchar();
if( isupper( c1 ) )
{ c2=fun(c1);
printf("\n\nThe letter \'%c\' change to \'%c\'\n", c1,c2);
}
else printf("\nEnter (A-Z)!\n");
}
解题思路:
第一处:变量c错写成大写C了。
第二处:要求转换为其后的第5个字母,所以应改为:c=c+5;。
***************************************************
请编写函数fun, 其功能是: 计算并输出
例如, 在主函数中从键盘给n输入20后,输出为:s=534.188884。
注意: 要求n的值大于1但不大于100。
部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容, 仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
#include
double fun(int n)
{
}
main()
{ int n; double s;
printf("\n\nInput n: "); scanf("%d",&n);
s=fun(n);
printf("\n\ns=%f\n\n",s);
NONO();
}
解题思路:
本题是根据公式计算多项式的值。注意变量的取值范围。
参考答案:
double fun(int n)
{
int i;
double fac=1.0;
double sum=1.0;
for(i=2;i<=n;i++) {
fac+=sqrt(i);
sum+=fac;
}
return sum;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第85套:
给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的
编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作
为一个数据块写到名为myfile5.dat的二进制文件中。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
#define N 5
typedef struct
{ int num;
char name[10];
char tel[10];
}STYPE;
void check();
/**********found**********/
int fun(___1___ *std)
{
/**********found**********/
___2___ *fp; int i;
if((fp=fopen("myfile5.dat","wb"))==NULL)
return(0);
printf("\nOutput data to file !\n");
for(i=0; i
/**********found**********/
fwrite(&std[i], sizeof(STYPE), 1, ___3___);
fclose(fp);
return (1);
}
main()
{ STYPE s[10]={ {1,"aaaaa","111111"},{1,"bbbbb","222222"},{1,"ccccc","333333"},
{1,"ddddd","444444"},{1,"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("myfile5.dat","rb"))==NULL)
{ printf("Fail !!\n"); exit(0); }
printf("\nRead file and output to screen :\n");
printf("\n num name tel\n");
for(i=0; i
{ fread(&s[i],sizeof(STYPE),1, fp);
printf("m %s %s\n",s[i].num,s[i].name,s[i].tel);
}
fclose(fp);
}
解题思路:
本题是要求把指定的学生记录输出到指定的文件中。程序中共有三处要填上适当的内容,
使程序能运行出正确的结果。
第一处:结构定义自变量,因此应填写STYPE。
第二处:在所填行的下面一行,使用fopen来创建一个二进制文件,但文件流的变量名fp
已经给出,这样,此处只能填写FILE。
每三处:fwrite是把变量中的内容写入指定文件中,再根据fwrite参数的使用要求,所以
只能填写文件流变量fp。
***************************************************
给定程序MODI1.C中函数fun的功能是:先将在字符串s中的字符按正序存放
到t串中,然后把s中的字符按逆序连接到t串的后面。
例如:当s中的字符串为:"ABCDE"时,
则t中的字符串应为:"ABCDEEDCBA"。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
void fun (char *s, char *t)
{ int i, sl;
sl = strlen(s);
/************found************/
for( i=0; i<=s1; i ++)
t[i] = s[i];
for (i=0; i
\TAB t[sl+i] = s[sl-i-1];
/************found************/
t[sl] = '\0';
}
main()
{ char s[100], t[100];
printf("\nPlease enter string s:"); scanf("%s", s);
fun(s, t);
printf("The result is: %s\n", t);
}
解题思路:
第一处:变量sl错写成了s1。
第二处:新串t的字符串结束位置不正确,应该是两倍的sl距离。
***************************************************
函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上, b数的十位
和个位数依次放在c数的百位和个位上。
例如,当a=45,b=12时,调用该函数后,c=4152。
注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填
入你编写的若干语句。
给定源程序:
#include
void fun(int a, int b, long *c)
{
}
main()
{ int a,b; long c;
printf("Input a, b:"); scanf("%d,%d", &a, &b);
fun(a, b, &c);
printf("The result is: %d\n", c);
NONO();
}
解题思路:
本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。
取a十位数字的方法:a/10
取a个位数字的方法:a
参考答案:
void fun(int a, int b, long *c)
{
*c=(a/10)*1000+(b/10)*100+(a)*10+(b);
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第86套:
甲乙丙丁四人同时开始放鞭炮,甲每隔t1秒放一次,乙每隔t2秒放一次, 丙
每隔t3秒放一次,丁每隔t4秒放一次,每人各放n次。函数fun的功能是根据形参
提供的值,求出总共听到多少次鞭炮声作为函数值返回。注意,当几个鞭炮同时
炸响,只算一次响声,第一次响声是在第0秒。
例如,若t1=7,t2=5,t3=6,t4=4,n=10,则总共可听到28次鞭炮声。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
/**********found**********/
#define OK(i, t, n) ((___1___%t==0) && (i/t
int fun(int t1, int t2, int t3, int t4, int n)
{ int count, t , maxt=t1;
if (maxt < t2) maxt = t2;
if (maxt < t3) maxt = t3;
if (maxt < t4) maxt = t4;
count=1; /* 给count赋初值 */
/**********found**********/
for(t=1; t< maxt*(n-1); ___2___)
{
if(OK(t, t1, n) || OK(t, t2, n)|| OK(t, t3, n) || OK(t, t4, n) )
count++;
}
/**********found**********/
return ___3___;
}
main()
{ int t1=7, t2=5, t3=6, t4=4, n=10, r;
r = fun(t1, t2, t3, t4, n);
printf("The sound : %d\n", r);
}
解题思路:
第一处:根据定义的要求,所以应填:i。
第二处:for循环语句的增量,所以应填:t++。
第三处:返回统计次数,所以应填:count。
***************************************************
给定程序MODI1.C中函数fun的功能是: 根据输入的三个边长(整型值), 判断
能否构成三角形; 构成的是等边三角形, 还是等腰三角形。若能构成等边三角形
函数返回3,若能构成等腰三角形函数返回2, 若能构成一般三角形函数返回1, 若
不能构成三角形函数返回0。
请改正函数fun中指定部位的错误, 使它能得出正确的结果。
注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
给定源程序:
#include
#include
/**************found**************/
void fun(int a,int b,int c)
{ if(a+b>c && b+c>a && a+c>b) {
if(a==b && b==c)
return 3;
else if(a==b||b==c||a==c)
return 2;
/**************found**************/
else retrun 1
}
else return 0;
}
main()
{ int a,b,c,shape;
printf("\nInput a,b,c: "); scanf("%d%d%d",&a,&b,&c);
printf("\na=%d, b=%d, c=%d\n",a,b,c);
shape =fun(a,b,c);
printf("\n\nThe shape : %d\n",shape);
}
解题思路:
第一处:函数有返回值,不能定义为void,所以应改为:int fun(int a,int b,int c)。
第二处:语句后缺少分号。
***************************************************
请编写函数fun, 其功能是: 计算并输出3到n之间(含3和n)所有素数的平方根
之和。
例如, 在主函数中从键盘给n输入100后,输出为: sum=148.874270。
注意: 要求n的值大于2但不大于100。
部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
#include
double fun(int n)
{
}
main()
{ int n; double sum;
printf("\n\nInput n: "); scanf("%d",&n);
sum=fun(n);
printf("\n\nsum=%f\n\n",sum);
NONO();
}
解题思路:
本题是计算并输出3到n之间(含3和n)所有素数的平方根之和。
参考答案:
double fun(int n)
{
int i,j=0;
double s=0;
for (i=3; i<=n; i++) {
for (j=2; j
if (i%j == 0) break;
if (j == i) s=s+sqrt(i);
}
return s;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第87套:
函数fun的功能是:统计长整数n的各个位上出现数字1、2、3的次数,并通过
外部(全局)变量c1,c2,c3返回主函数。例如:当n=123114350时,结果应该为:
c1=3 c2=1 c3=2。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
int c1,c2,c3;
void fun(long n)
{ c1 = c2 = c3 = 0;
while (n) {
/**********found**********/
switch(___1___)
{
/**********found**********/
case 1: c1++;___2___;
/**********found**********/
case 2: c2++;___3___;
case 3: c3++;
}
n /= 10;
}
}
main()
{ long n=123114350L;
fun(n);
printf("\nThe result :\n");
printf("n=%ld c1=%d c2=%d c3=%d\n",n,c1,c2,c3);
}
解题思路:
第一处:取个位数上的数,所以n就可以得到个位数。
第二处:switch条件判断中,满足条件做好后,必须使用break语句跳出选择体,所以应填:
break。
第三处:同第二处。
***************************************************
给定程序MODI1.C中函数fun的功能是: 统计一个无符号整数中各位数字值为
零的个数, 通过形参传回主函数;并把该整数中各位上最大的数字值作为函数值
返回。例如, 若输入无符号整数30800, 则数字值为零的个数为3, 各位上数字值
最大的是8。
请改正函数fun中指定部位的错误, 使它能得出正确的结果。
注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
给定源程序:
#include
int fun(unsigned n, int *zero)
{ int count=0,max=0,t;
do
{ t=n;
/**************found**************/
if(t=0)
count++;
if(max
n=n/10;
}while(n);
/**************found**************/
zero=count;
return max;
}
main()
{ unsigned n; int zero,max;
printf("\nInput n(unsigned): "); scanf("%d",&n);
max = fun( n,&zero );
printf("\nThe result: max=%d zero=%d\n",max,zero);
}
解题思路:
第一处:条件相等符号为==。
第二处:由于zero是一个指针型变量,所以给它进行赋值时应带指针,因此应改为:
*zero=count;。
***************************************************
请编写函数fun, 其功能是: 计算并输出下列多项式的值:
1 1 1
S = 1 + ── + ─── + … + ─────
1*2 1*2*3 1*2*3*…50
例如, 在主函数中从键盘给n输入50后,输出为:s=1.718282。
注意: 要求n的值大于1但不大于100。
部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容, 仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
double fun(int n)
{
}
main()
{ int n; double s;
printf("\nInput n: "); scanf("%d",&n);
s=fun(n);
printf("\n\ns=%f\n\n",s);
NONO();
}
解题思路:
本题是根据公式计算多项式的值。注意变量的取值范围。
参考答案:
double fun(int n)
{
double s=0, t=1;
int i ;
for(i=1; i<=n; i++) {
t *= i;
s += 1./t;
}
return s;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第88套:
函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a所
指数组中的最小值放在a[1]中;再把a所指数组元素中的次大值放在a[2]中,把
a数组元素中的次小值放在a[3]中;其余以此类推。例如:若a所指数组中的数据
最初排列为:1、4、2、3、9、6、5、8、7,则按规则移动后,数据排列为:
9、1、8、2、7、3、6、4、5。形参n中存放a所指数组中数据的个数。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#define N 9
/**********found**********/
void fun(int ___1___, int n)
{ int i, j, max, min, px, pn, t;
/**********found**********/
for (i=0; i
{ max = min = a[i];
px = pn = i;
/**********found**********/
for (j=___3___; j
{ if (max < a[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] = t;
if (pn == i) pn= px;
}
if (pn != i+1)
{ t = 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
printf("\n");
fun(b, N);
printf("\nThe data after moving :\n");
for (i=0; iprintf("\n");
}
解题思路:
第一处:形参a应定义指针整型变量,所以应填:*a。
第二处:外for循环每次增量应该加2。
第三处:内for循环的初始值应为:i+1。
***************************************************
给定程序MODI1.C中函数fun的功能是:按顺序给s所指数组中的元素赋予从2
开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在
w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。
例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个
元素求平均值。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
给定源程序:
#include
#define SIZE 20
fun(double *s, double *w)
{ int k,i; double sum;
for(k=2,i=0;i
{ s[i]=k; k+=2; }
/**********found**********/
sun=0.0;
for(k=0,i=0;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
{ if(i%5==0) printf("\n");
printf("%4.0f", a[i]);
}
printf("\n\nThe result :\n");
for(i=0; i6.2f ",b[i]);
printf("\n\n");
}
解题思路:
第一处:变量名书写错误,应为sum。
第二处:由于%的优先级比+优先,所以必须加上括号,因此改为:if((i+1)%5==0)。
***************************************************
学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组
s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,
低于平均分的学生人数通过形参n传回,平均分通过函数值返回。
注意: 部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
#define N 8
typedef struct
{ char num[10];
double s;
} STREC;
double fun( STREC *a, STREC *b, int *n )
{
}
main()
{ STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},
{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87}};
STREC h[N],t;FILE *out ;
int i,j,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
printf("%s %4.1f\n",h[i].num,h[i].s);
printf("\n");
out = fopen("c:\\test\\out.dat","w") ;
fprintf(out, "%d\n%7.3f\n", n, ave);
for(i=0;i
for(j=i+1;j
if(h[i].s>h[j].s) {t=h[i] ;h[i]=h[j]; h[j]=t;}
for(i=0;i
fprintf(out,"%4.1f\n",h[i].s);
fclose(out);
}
解题思路:
本题是利用循环计算出记录结构中学生成绩的平均值,再把低于平均值的记录存放到b所指
的数组中。具体操作请看答案程序中的说明。
参考答案:
#include
#define N 8
typedef struct
{ char num[10];
double s;
} STREC;
double fun( STREC *a, STREC *b, int *n )
{
int i ;
double ave = 0.0 ;
*n = 0 ;
for(i = 0 ; i < N ; i++) ave = ave + a[i].s ;
ave /= N ; /* 计算平均值 */
for(i = 0 ; i < N ; i++)
if(a[i].s < ave) { /* 把低于平均值的记录存放到b所指的数组中 */
b[*n]=a[i] ;
(*n)++; /* 人数加1 */
}
return ave ; /* 返回平均值 */
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第89套:
给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的
长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。字符串数组中共
有M个字符串,且串长。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
#define M 5
#define N 20
void fun(char (*ss)[N])
{ int i, j, k=0, n, m, len;
for(i=0; i
{ len=strlen(ss[i]);
if(i==0) n=len;
if(len>n) {
/**********found**********/
n=len; ___1___=i;
}
}
for(i=0; i
if (i!=k)
{ m=n;
len=strlen(ss[i]);
/**********found**********/
for(j=___2___; j>=0; j--)
ss[i][m--]=ss[i][j];
for(j=0; j
/**********found**********/
___3___='*';
}
}
main()
{ char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};
int i;
printf("\nThe original strings are :\n");
for(i=0; i
printf("\n");
fun(ss);
printf("\nThe result:\n");
for(i=0; i
}
解题思路:
第一处:使用变量k来保存第几个字符串是最长的字符串,所以应填:k。
第二处:利用for循环把原字符串右移至最右边存放,字符串的长为len,所以应填:len。
第三处:左边用字符*补齐,所以应填:ss[i][j]。
***************************************************
给定程序MODI1.C中函数fun的功能是: 计算整数n的阶乘。请改正程序中的错
误或在下划线处填上适当的内容并把下划线删除,使它能计算出正确的结果。
注意: 不要改动 main 函数, 不得增行或删行, 也不得更改程序的结构!
给定源程序:
#include
double fun(int n)
{
double result=1.0;
while (n>1 && n<170)
/*********found*********/
result*=--n;
/*********found*********/
return _____;
}
main()
{
int n;
printf("Enter an integer: ");
scanf("%d",&n);
printf("\n\n%d!=%lg\n\n",n,fun(n));
}
解题思路:
第一处:--n是先减1,n--是后减1。本题应该先乘以n,再减1,才正确。
第二处:返回计算结果,所以应填:result。
***************************************************
编写函数fun,函数的功能是: 从s所指的字符串中删除给定的字符。同一字
母的大、小写按不同字符处理。
若程序执行时输入字符串为: turbo c and borland c++
从键盘上输入字符:n, 则输出后变为: turbo c ad borlad c++
如果输入的字符在字符串中不存在, 则字符串照原样输出。
注意: 部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
#include
int fun(char s[],char c)
{
}
main()
{
static char str[]="turbo c and borland c++";
char ch;
printf("原始字符串:%s\n", str);
printf("输入一个字符:");
scanf("%c",&ch);
fun(str,ch);
printf("str[]=%s\n",str);
NONO();
}
解题思路:
本题是考察考生怎样在字符串中删除指定的字符,结果仍存放在原字符串中。给出的程序
是引用字符串指针p和while循环语句以及if条件判断语句进行处理的,新字符串的位置是由i
来控制的,循环结束后,再给新字符串置字符串结束符,最后产生的新字符串形参s返回到主程
序中。
参考答案:
int fun(char s[],char c)
{
char *p = s ;
int i = 0 ;
while(*p) {
if(*p != c) s[i++] = *p ;
p++ ;
}
s[i] = 0 ;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第90套:
函数fun的功能是:统计所有小于等于n(n>2)的素数的个数,素数的个数作
为函数值返回。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
int fun(int n)
{ int i,j, count=0;
printf("\nThe prime number between 3 to %d\n", n);
for (i=3; i<=n; i++) {
/**********found**********/
for (___1___; j
/**********found**********/
if (___2___%j == 0)
break;
/**********found**********/
if (___3___>=i)
{ count++; printf( count? "]":"\n]",i); }
}
return count;
}
main()
{ int n=20, r;
r = fun(n);
printf("\nThe number of prime is : %d\n", r);
}
解题思路:
第一处:素数的条件是除1和其本身外不能整除该数,所以应填:2。
第二处:判断i是否素数,所以应填:i。
第三处:如果内循环for中所有数都不能整除i,那么i是素数且j大于等于i,所以应填:j。
***************************************************
数列中,第一项值为3, 后一项都比前一项的值增5;给定程序MODI1.C中函数
fun的功能是: 计算前n(4项的累加和;每累加一次把被4除后余2的当前累
加值放入数组中, 符合此条件的累加值的个数作为函数值返回主函数。
例如, 当n的值为20时,该数列为3,8,13,18,23,28,……,93,98。符合此条件
的累加值应为42,126,366,570,1010。
请改正函数fun中指定部位的错误, 使它能得出正确的结果。
注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
给定源程序:
#include
#define N 20
int fun(int n,int *a)
{ int i,j,k,sum;
/**************found**************/
sum=j==0;
for(k=3,i=0;i
{ sum=sum+k;
/**************found**************/
if(sum%4=2)
a[j++]=sum;
}
return j;
}
main()
{ int a[N],d,n,i;
printf("\nEnter n (4
d=fun(n,a);
printf("\n\nThe result :\n");
for(i=0; i
}
解题思路:
第一处:连续赋初值为0,中间使用条件相等符号了,所以应改为:sum=j=0;。
第二处:条件相等符号为==。
***************************************************
请编写函数fun, 其功能是: 计算并输出下列多项式的值:
例如, 在主函数中从键盘给n输入8后, 输出为: s=0.662872。
注意: 要求n的值大于1但不大于100。
部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容, 仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
double fun(int n)
{
}
main()
{ int n; double s;
printf("\nInput n: "); scanf("%d",&n);
s=fun(n);
printf("\ns=%f\n",s);
NONO();
}
解题思路:
本题是根据公式计算多项式的值。
参考答案:
double fun(int n)
{
int i;
double sum=0.0;
if (n>1 && n<=100) {
for(i=1; i<=n; i++)
sum+=1.0/(2*i-1)-1.0/(2*i);
}
return sum;
} |