全国计算机二级C语言 # (18)程序填空题:自加、自减和逗号运算符(1-14)

全国计算机二级C语言 # 程序填空题:自加、自减和逗号运算符(1-14)


41)
给定程序中,函数 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 中,并且,要先打开 BLANK1. SLN 文件再操作。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
int fun(int x)
{ int n, s1, s2, s3, t;
/**********found**********/
n=__1__;
t=100;
/**********found**********/
while(t<=__2__)
{ s1=t%10; s2=(t/10)%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<x<=999): “); scanf(“%d”,&x); }
printf(“\nThe result is: %d\n”,fun(x));
}
[codesyntax lang=”php”]

【微答案】 (1) 0  (2) X  (3) t++
【微分析】
填空 1: 变里 n 用于存放符合条件的整数的个数,应赋初值为 0。填空 2: 根据题目要求,确定循环变量 t 的取值范围 t <= xo 填空 3: 循环变量 t 自增 1 操作 o
#include
int fun(int  x)
{ int  n, s1, s2, s3, t;
/**********found**********/
  n=__1__;
  t=100;
/**********found**********/
  while(t<=__2__)
  { s1=t%10;  s2=(t/10)%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<x<=999): ");="" scanf("%d",&x);="" }="" printf("\nthe="" result="" is:="" %d\n",fun(x));="" <="" pre="">[/codesyntax]
</x<=999):>


41)
给定程序中,函数 fun 的功能是计算下式

例如,若形参 e 的值为 1 e-3, 函数的返回值 2.985678。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的 BLANK1. C 中,并且,要先打开 BLANK1. SLN 文件再操作。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
double fun(double e)
{ int i; double s, x;
/**********found**********/
s=0; i=__1__;
x=1.0;
while(x>e){
/**********found**********/
__2__;
/**********found**********/
x=(2.0*i-1)/((__3__)*(2.0*i));
s=s+x;
}
return s;
}
main()
{ double e=1e-3;
printf(“\nThe result is: %f\n”,fun(e));
}
[codesyntax lang=”php”]

【微答案】
 (1) 0  (2) i++或++i 或 i+=1 或 i=i+1  (3)2. 0*i
【微分析】
填空 1: 循环变里 1 从开始参加运算,但是在每次循环的开始都进行自加 1 操作,故 i 应赋初值为 0。填空 2: 循环变量 i 自增 1 运算。
填空 3: 根据公式确定表达式通项。注意 x 为 double 类型,故应将 i 变为 double 类型再进行运算。
#include
double fun(double  e)
{ int  i;    double  s, x;
/**********found**********/
  s=0;  i=0;
  x=1.0;
  while(x>e){
/**********found**********/
    i++;
/**********found**********/
    x=(2.0*i-1)/((2.0*i)*(2.0*i));
    s=s+x;
  }
  return  s;
}
main()
{ double  e=1e-3;
  printf("\nThe result is: %f\n",fun(e));
}

[/codesyntax]
 


(41)
给定程序中,函数 fun 的功能是:计算形参 x 所指数组中 N 个数的平均值(规定所有数均为正数)。作为函数值返回;并将大于平均值的数放在形参 y 所指数组中在主函数中输出。
例如,有 10 个正数:46 30 32 40 6 17 45 15 48 26,平均值为:30. 500000。
主函数中输出:46 32 40 45 48。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的 BLANK1. C 中,并且,要先打开 BLANK1. SLN 文件再操作。
不得增行或删行,也不得更改程序的结构!
#include <stdlib.h>
#include <stdio.h>
#define N 10
double fun(double x[],double *y)
{ int i,j; double av;
/**********found**********/
av=__1__;
/**********found**********/
for(i=0; i<N; i++) av = av + __2__;
for(i=j=0; i<N; i++)
/**********found**********/
if(x[i]>av) y[__3__]= x[i];
y[j]=-1;
return av;
}
main()
{ int i; double x[N] = {46,30,32,40,6,17,45,15,48,26};
double y[N];
for(i=0; i<N; i++) printf(“%4.0f “,x[i]);
printf(“\n”);
printf(“\nThe average is: %f\n”,fun(x,y));
for(i=0; y[i]>=0; i++) printf(“%5.0f “,y[i]);
printf(“\n”);
}
[codesyntax lang=”php”]

【微答案】
 (1)0.0  (2) x [i] /N  (3) j++
【微分析】
填空 1: 通过读上面的程序可以看出此空考的是给变重赋初值,av 代表的是平均值,因此 av 的初值应
该是 0.0。
填空2:通过for循环可知,此空代表求平均值,因此应该填写 x[i] /N。
填空 3: 先把大于平均值的数放在形参 y 所指数组中,然后使下标值加 1,因此此空应该填 j++.
#include
#include
#define   N   10
double fun(double  x[],double  *y)
{ int  i,j;    double  av;
/**********found**********/
  av=0.0;
/**********found**********/
  for(i=0; i<n; i++)="" av="av" +="" x[i]="" n;="" for(i="j=0;" i<n;="" **********found**********="" if(x[i]="">av)  y[j++]= x[i];
  y[j]=-1;
  return  av;
}
main()
{ int  i;    double  x[N] = {46,30,32,40,6,17,45,15,48,26};
  double  y[N];
  for(i=0; i<n; i++)="" printf("%4.0f="" ",x[i]);="" printf("\n");="" printf("\nthe="" average="" is:="" %f\n",fun(x,y));="" for(i="0;" y[i]="">=0; i++)  printf("%5.0f ",y[i]);
  printf("\n");
}
</n;></n;>

[/codesyntax]


41)
给定程序中,函数 fan 的功能是:计算形参 x 所指数组中 N 个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至 x 所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。
例如,有 10 个正数:46 30 32 40 6 17 45 15 48 26,平均值为:30. 500000。
移动后的输出为:30 6 17 15 26 46 32 40 45 48
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的 BLANK1. C 中,并且,要先打开 BLANK1. SLN 文件再操作。
不得增行或删行,也不得更改程序的结构!
#include <stdlib.h>
#include <stdio.h>
#define N 10
double fun(double *x)
{ int i, j; double av, y[N];
av=0;
/**********found**********/
for(i=0; i<N; i++) av +=__1__;
for(i=j=0; i<N; i++)
if( x[i]<av ){
/**********found**********/
y[j]=x[i]; x[i]=-1; __2__;}
i=0;
while(i<N)
{ if( x[i]!= -1 ) y[j++]=x[i];
/**********found**********/
__3__;
}
for(i=0; i<N; i++)x[i] = y[i];
return av;
}
main()
{ int i; double x[N];
for(i=0; i<N; i++){ x[i]=rand()%50; printf(“%4.0f “,x[i]);}
printf(“\n”);
printf(“\nThe average is: %f\n”,fun(x));
printf(“\nThe result :\n”,fun(x));
for(i=0; i<N; i++) printf(“%5.0f “,x[i]);
printf(“\n”);
}
[codesyntax lang=”php”]

【微答案】
 (1) x [i] /N  (2) j++或++j  (3) i++或++i
【微分析]
填空1: av代表平均值,本题考查了怎样求平均值,因此本空应该填写 x[i] /N。
填空 2: 通过 for 循环和 if 判断找到 x (【】中比平均值小的数,并把这些值赋值给 v [j】,因此本空应该填写
j++或者++j。
填空 3: 通过 while 循环语句,把 x [i】中比平均值大的数放在数组 y 的后半部分,因此本空应该填写 i++
或者++i。
#include
#include
#define   N   10
double fun(double  *x)
{ int  i, j;    double  av, y[N];
  av=0;
/**********found**********/
  for(i=0; i<n; i++)="" av="" +="x[i]/N;" for(i="j=0;" i<n;="" if(="" x[i]<av="" ){="" **********found**********="" y[j]="x[i];" x[i]="-1;j++;}" i="0;" while(i<n)="" {="" x[i]!="-1" )="" y[j++]="x[i];" i++;="" }="" i++)x[i]="y[i];" return="" av;="" main()="" int="" i;="" double="" x[n];="" i++){="" printf("%4.0f="" ",x[i]);}="" printf("\n");="" printf("\nthe="" average="" is:="" %f\n",fun(x));="" result="" :\n",fun(x));="" printf("%5.0f="" ",x[i]);="" <="" pre="">[/codesyntax]</n;>


41)
给定程序中,函数 fun 的功能是将 a 和 b 所指的两个字符串分别转换成面值相同的整数,并进行相加作为函数值返回,规定字符串中只含 9 个以下数字字符。
例如,主函数中输入字符串:32486 和 12345,在主函数中输出的函数值为:44831.
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的 BLANK1. C 中,并且,要先打开 BLANK1. SLN 文件再操作。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define N 9
long ctod( char *s )
{ long d=0;
while(*s)
if(isdigit( *s)) {
/**********found**********/
d=d*10+*s-__1__;
/**********found**********/
__2__; }
return d;
}
long fun( char *a, char *b )
{
/**********found**********/
return __3__;
}
main()
{ char s1[N],s2[N];
do
{ printf(“Input string s1 : “); gets(s1); }
while( strlen(s1)>N );
do
{ printf(“Input string s2 : “); gets(s2); }
while( strlen(s2)>N );
printf(“The result is: %ld\n”, fun(s1,s2) );
}
[codesyntax lang=”php”]

[微答案]
(1)'0' (2)S++或++s (3)tod(a)+ctod(b)
[微分析]
填空1: isdigt(*s)这 个函数表示检查*s是否是数字(0~9),d= d*10+ *s-?表示的是要把字符串分别|转换成面值相同的整数,因此本空应该填写0'。
填空2:由填空*s所代表的字符串中字符需要一个- 一个的字符进行转换成整数,因此此空应该填写S++或++S。
填空3:题目要求把转换后的字符进行相加后作为函数的返回值,因此本空应该填写ctod(a)+ ctod(b)。
#include
#include
#include
#define  N  9
long  ctod( char  *s )
{ long  d=0;
  while(*s)
    if(isdigit( *s))  {
/**********found**********/
      d=d*10+*s-'0';
/**********found**********/
      s++;  }
  return  d;
}
long  fun( char  *a, char  *b )
{
/**********found**********/
  return  ctod(a)+ctod(b);
}
main()
{ char  s1[N],s2[N];
  do
  { printf("Input  string  s1 : "); gets(s1); }
  while( strlen(s1)>N );
  do
  { printf("Input  string  s2 : "); gets(s2); }
  while( strlen(s2)>N );
  printf("The result is:  %ld\n", fun(s1,s2) );
}

[/codesyntax]
 
 


 

58 Views
分享你的喜爱
默认图片
linwute

我要像梦一样自由,像大地一样宽容;
在艰辛放逐的路上,点亮生命的光芒;
我要像梦一样自由,像天空一样坚强;
在曲折蜿蜒的路上,体验生命的意义;

留下评论