计算机二级C语言的注意事项及相应真题-5-程序填空

41.根据所给的一组学生的成绩,计算出标准差

给定程序中,函数fun的功能是:根据所给的一组学生的成绩,由公式:

计算出标准差(Standard Deviation) σ并返回。公式中μ为平均成绩,N为学生人数,xi

为学生成绩。

例如:如有成绩为: 50, 60, 70, 80, 90, 100, 55, 65, 75, 85, 95, 99,

则运行结果应为:16. 527754

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在文件BLANK1. C中,不得增行或删行,也不得更改程序的结构!

BLANK1. C:

#include  <stdio.h>
#include  <math.h>
double  fun(double x[ ], int n)
{	int i;
    double avg=0.0, sum=0.0;
	for (i=0; i<n; i++) 
/**********found**********/
		avg += ____(1)____;//累加上所有成绩,也就是数组全部元素
/**********found**********/
	____(2)____ /= n;//再除以学生人数,得平均分数
	for (i=0; i<n; i++) 
		sum += (x[i]-avg)* (x[i]-avg);//此时的sum,在下面解题思路解释,在这里不会写数学公式
/**********found**********/
	return ____(3)____;//根据题目公式补充一下,就是结果了
}
main( )
{  double score[12] ={50,60,70,80,90,100,55,65,75,85,95,99};
   double aa;
   aa= fun(score,12);
   printf("%f\n", aa);
}

解题思路:
在代码中得出来的sum就是 ∑ i = 1 n ( x i − u ) 2 \displaystyle\sum_{i=1}^n(x_i-u)^2 i=1n(xiu)2

说一下要用到的函数,

sqrt() //平方根函数

答案:

#include  <stdio.h>
#include  <math.h>
double  fun(double x[ ], int n)
{	int i;
    double avg=0.0, sum=0.0;
	for (i=0; i<n; i++) 
/**********found**********/
		avg += x[i];
/**********found**********/
	avg /= n;
	for (i=0; i<n; i++) 
		sum += (x[i]-avg)* (x[i]-avg);
/**********found**********/
	return sqrt(sum/n);
}
main( )
{  double score[12] ={50,60,70,80,90,100,55,65,75,85,95,99};
   double aa;
   aa= fun(score,12);
   printf("%f\n", aa);
}

测试:

输出:

16.527754


42.将偶数下标位置所有偶数元素求和,减去奇数下标位置所有奇数元素的和

给定程序中,函数fun的功能是:根据形参c中存储的整数序列,将偶数下标位置所有偶数元素求和,减去奇数下标位置所有奇数元素的和,所得差由函数值返回。形参d中存储的是序列的长度。

例如:若c中存储的数值依次为13, 15,4, 7,20,d为5,

则函数返回(4+20)-(15+7) = 2,主程序输出2。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在文件BLANK1. C中,不得增行或删行,也不得更改程序的结构!

BLANK1. C:

#include  <stdio.h>
int fun(int* c, int d) { 
  int s0, s1, i;
  s0 = 0;
  s1 = 0;
/********************found***********************/
  for (i=0; i<___(1)____; i++) //遍历数组所有元素
{
         if ((i % 2 == 0) && (c[i] % 2 == 0)) //筛出偶数下标的偶数元素
                s0 += c[i];
/**********************found***********************/
         if ((i % 2 == 1) && (_____(2)_____))//筛出奇数下标位置的奇数元素
               s1 += c[i]; 
  }
/**********************found***********************/
  return ___(3)____;//返回偶数下标的偶数元素和与奇数下标的奇数元素和之差
}
 main( ) 
{ 
    int i, c[100], d;
    printf("请输入整数序列的长度:");
    scanf("%d", &d);
    printf("请输入%d个整数:\n",d);
    for (i = 0; i < d; i++)
         scanf("%d", &(c[i]));
    i = fun(c, d);
    printf("%d", i);
}

解题思路:
这题很简单,真希望考的都是这种题ㄟ(≧◇≦)ㄏ,看前面注释就够了

答案:

#include  <stdio.h>
int fun(int* c, int d) { 
  int s0, s1, i;
  s0 = 0;
  s1 = 0;
/********************found***********************/
  for (i=0; i<d; i++) 
{
         if ((i % 2 == 0) && (c[i] % 2 == 0)) 
                s0 += c[i];
/**********************found***********************/
         if ((i % 2 == 1) && (c[i]%2==1))
               s1 += c[i]; 
  }
/**********************found***********************/
  return s0-s1;
}
 main( ) 
{ 
    int i, c[100], d;
    printf("请输入整数序列的长度:");
    scanf("%d", &d);
    printf("请输入%d个整数:\n",d);
    for (i = 0; i < d; i++)
         scanf("%d", &(c[i]));
    i = fun(c, d);
    printf("%d", i);
}

测试:

输入:

5
13 15 4  7 20

输出:

请输入整数序列的长度:请输入5个整数: //嘛,不用介意,这是我使用的编译器的问题
2

43.用函数指针调用函数

给定程序中,函数fun的功能是用函数指针指向要调用的函数,并进行调用。规定在__2_处使f指向函数f1,在_3_处使f指向函数f2。当调用正确时,程序输出: x1=5.000000,x2=3.000000,x1x1+x1x2=40.000000

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

BLANK1.C:

#include  <stdio.h>
double f1(double  x)
{  return  x*x;  }
double f2(double x, double y)
{  return  x*y;  }
double fun(double  a, double  b)
{
/**********found**********/
  __1__ (*f)();//定义指针函数,这个空显然是填指针的类型,可以调用的函数都是double类型的,答案显而易见了
  double  r1, r2;
/**********found**********/
  f = __2__ ;   /* point fountion f1 */  //让函数指针指向一个函数,从下一句可以看出只有一个参数,那必然是f1
  r1 = f(a);
/**********found**********/
  f = __3__ ;   /* point fountion f2 */  //两个参数,是f2
  r2 = (*f)(a, b);
  return  r1 + r2;
}
main()
{ double  x1=5, x2=3, r;
  r = fun(x1, x2);
  printf("\nx1=%f,  x2=%f,  x1*x1+x1*x2=%f\n",x1, x2, r);
  getchar();
}

解题思路:
这题考查的是函数指针的应用

题目的代码中 r1=f(a); 这句话我们一般是 r1=(*f)(a); 这么写的,题目中的写法测试过了是可以这么写的,那就好奇这两种有什么区别,但并没有什么区别,当我们使用 f(a) 时,编译器会将其解析为 (*f)(a),也就是通过函数指针 f 来间接调用所指向的函数。

定义函数指针时 double (*p)(); 后面那个括号是填数据类型,就以这题目举例,
倘若定义函数指针时是 double (*p)(double); 那此时这个指针就只能指向只有一个参数的函数,在这题目中也就是只能指向f1,
以此类推,

还有这样 r1=*f(a); 那返回值就是指针类型,显然不符,会编译错误

答案:

#include  <stdio.h>
double f1(double  x)
{  return  x*x;  }
double f2(double x, double y)
{  return  x*y;  }
double fun(double  a, double  b)
{
/**********found**********/
  double (*f)();
  double  r1, r2;
/**********found**********/
  f = f1 ;   /* point fountion f1 */
  r1 = f(a);
/**********found**********/
  f = f2 ;   /* point fountion f2 */
  r2 = (*f)(a, b);
  return  r1 + r2;
}
main()
{ double  x1=5, x2=3, r;
  r = fun(x1, x2);
  printf("\nx1=%f,  x2=%f,  x1*x1+x1*x2=%f\n",x1, x2, r);
  getchar();
}

测试:

输出:


x1=5.000000,  x2=3.000000,  x1*x1+x1*x2=40.000000


44.修改结构体成员

程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是将形参a中的数据进行修改,并把a中地址作为函数值返回主函数,在主函数中输出修改后的数据。

例如: a所指变量s中的学号、姓名、和三门课的成绩依次是:10001、" ZhangSan "、95、80、88,修改后输出t中的数据应为:10002、"LiSi "、96、81、89。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

BLANK1.C:

#include   <stdio.h>
#include   <string.h>
struct student {
  long  sno;
  char  name[10];
  float  score[3];
};
/**********found**********/
__1__ fun(struct  student  a)//返回值是结构类型的
{ int  i;
  a.sno = 10002;
/**********found**********/
  strcpy(__2__, "LiSi");//字符串复制函数
/**********found**********/
  for (i=0; i<3; i++) __3__+= 1;//对结构体变量的成员score数组的每个元素加1
  return  a;
}
main()
{ struct student  s={10001,"ZhangSan", 95, 80, 88}, t;//定义两个结构体变量
  int  i;
  printf("\n\nThe original data :\n");
  printf("\nNo: %ld  Name: %s\nScores:  ",s.sno, s.name);
  for (i=0; i<3; i++)  printf("%6.2f ", s.score[i]);
  printf("\n");
  t = fun(s);
  printf("\nThe data after modified :\n");
  printf("\nNo: %ld  Name: %s\nScores:  ",t.sno, t.name);
  for (i=0; i<3; i++)  printf("%6.2f ", t.score[i]);
  printf("\n");
  getchar();
}

解题思路:
都是结构体基础的定义,很简单ヾ(•ω•`)o

答案:

#include   <stdio.h>
#include   <string.h>
struct student {
  long  sno;
  char  name[10];
  float  score[3];
};
/**********found**********/
struct student fun(struct  student  a)
{ int  i;
  a.sno = 10002;
/**********found**********/
  strcpy(a.name, "LiSi");
/**********found**********/
  for (i=0; i<3; i++) a.score[i]+= 1;
  return  a;
}
main()
{ struct student  s={10001,"ZhangSan", 95, 80, 88}, t;
  int  i;
  printf("\n\nThe original data :\n");
  printf("\nNo: %ld  Name: %s\nScores:  ",s.sno, s.name);
  for (i=0; i<3; i++)  printf("%6.2f ", s.score[i]);
  printf("\n");
  t = fun(s);
  printf("\nThe data after modified :\n");
  printf("\nNo: %ld  Name: %s\nScores:  ",t.sno, t.name);
  for (i=0; i<3; i++)  printf("%6.2f ", t.score[i]);
  printf("\n");
  getchar();
}

测试:

输出:



The original data :

No: 10001  Name: ZhangSan
Scores:   95.00  80.00  88.00 

The data after modified :

No: 10002  Name: LiSi
Scores:   96.00  81.00  89.00 


45.统计大于0的数和小于0的数

给定程序中,函数fun的作用是:不断从终端读入整数,由变量a统计大于0的个数,用变量b来统计小于0的个数,当输入0时结束输入,并通过形参px和py把统计的数据传回主函数进行输出。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

BLANK1.C:

#include  <stdio.h>
void  fun( int *px,  int  *py)
{
/**********found**********/
   int  __(1)__ ;//定义变量,看完整个fun函数,把未定义的定义就行了,这个空算这道题最容易错的地方了
   scanf( "%d", &k );
/**********found**********/
   while  __(2)__//k就是输入的整数,题目中说了当k=0时结束输出,也就是结束循环
   {  if (k>0 ) a++;
      if(k<0 ) b++;
/**********found**********/
      __(3)__;//要不断读入整数,也就是每次循环都要输入一次整数,用scanf收取输入
   }
   *px=a;  *py=b;
}
main()
{  int  x,  y;
   fun( &x, &y );
   printf("x=%d  y=%d\n", x,y );
  getchar();
}

解题思路:
细心,一定不要图快,这道题的第一个空,很容易漏,要定义三个变量k,a,b

答案:

#include  <stdio.h>
void  fun( int *px,  int  *py)
{
/**********found**********/
   int  k,a=0,b=0 ;
   scanf( "%d", &k );
/**********found**********/
   while  (k!=0)
   {  if (k>0 ) a++;
      if(k<0 ) b++;
/**********found**********/
      scanf("%d",&k);
   }
   *px=a;  *py=b;
}
main()
{  int  x,  y;
   fun( &x, &y );
   printf("x=%d  y=%d\n", x,y );
  getchar();
}

测试:

输入:

13 15 4  7 20 -50 0

输出:

x=5  y=1


46.对单向链表逆置

给定程序中,函数fun的功能是将不带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为: 2、4、6、8、10,逆置后,从头至尾结点数据域依次为: 10、8、6、4、2。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

BLANK1.C:

#include  <stdio.h>
#include  <stdlib.h>
#define    N    5
typedef struct node {
  int  data;
  struct node  *next;
} NODE;
/**********found**********/
__1__ * fun(NODE *h)//返回值是结构体指针类型
{ NODE  *p, *q, *r;
  p = h;//不带头节点
  if (p == NULL)
    return NULL;
  q = p->next;//把p的下一个节点地址给q,q就是第二个节点
  p->next = NULL;//因为当前p所指节点排序完后,会是最后一个节点,所以要把指针域赋为空
  while (q)
  {
/**********found**********/
    r = q->__2__;//可以看到下一句q节点的下一节点变为了p,while循环是节点q的后移,所以要在指针域变之前,把q的下一节点地址存起来,最后再赋给q节点,实现后移
    q->next = p;//把p节点移至q节点后面
    p = q;//把q节点赋给p
/**********found**********/
    q = __3__ ;//节点q后移
  }
  return  p;
}
NODE *creatlist(int  a[])
{  NODE  *h,*p,*q;        int  i;
   h=NULL;
   for(i=0; i<N; i++)
   {  q=(NODE *)malloc(sizeof(NODE));//开辟空间创造节点
      q->data=a[i];//存入数据域
      q->next = NULL;//指针域为空
      if (h == NULL)  h = p = q;//当第一个节点h为空时,把q节点赋给p,p再赋给h
      else    {  p->next = q;  p = q;   }//不为空时,p当前所指节点下一节点为q节点,p指向q现在所指节点
   }
   return  h;
}
void outlist(NODE  *h)
{  NODE  *p;
   p=h;//第一个节点赋为p
   if (p==NULL)  printf("The list is NULL!\n");
   else
   {  printf("\nHead  ");
      do
      {  printf("->%d", p->data); p=p->next;  }//p后移,到下一节点为空时,停止
      while(p!=NULL);
      printf("->End\n");
  }
}
main()
{  NODE  *head;
   int  a[N]={2,4,6,8,10};
   head=creatlist(a);//创建链表
   printf("\nThe original list:\n");
   outlist(head);//输出链表
   head=fun(head);//链表逆置
   printf("\nThe list after inverting :\n");
   outlist(head);//再次输出链表
   getchar();
}

解题思路:
这题有些难度,难点主要在于链表节点的变换容易混淆
对fun函数中逆置节点的变化,画了一下

应该挺清楚的了吧

答案:

#include  <stdio.h>
#include  <stdlib.h>
#define    N    5
typedef struct node {
  int  data;
  struct node  *next;
} NODE;
/**********found**********/
NODE * fun(NODE *h)
{ NODE  *p, *q, *r;
  p = h;
  if (p == NULL)
    return NULL;
  q = p->next;
  p->next = NULL;
  while (q)
  {
/**********found**********/
    r = q->next;
    q->next = p;
    p = q;
/**********found**********/
    q = r ;
  }
  return  p;
}
NODE *creatlist(int  a[])
{  NODE  *h,*p,*q;        int  i;
   h=NULL;
   for(i=0; i<N; i++)
   {  q=(NODE *)malloc(sizeof(NODE));
      q->data=a[i];
      q->next = NULL;
      if (h == NULL)  h = p = q;
      else    {  p->next = q;  p = q;   }
   }
   return  h;
}
void outlist(NODE  *h)
{  NODE  *p;
   p=h;
   if (p==NULL)  printf("The list is NULL!\n");
   else
   {  printf("\nHead  ");
      do
      {  printf("->%d", p->data); p=p->next;  }
      while(p!=NULL);
      printf("->End\n");
  }
}
main()
{  NODE  *head;
   int  a[N]={2,4,6,8,10};
   head=creatlist(a);
   printf("\nThe original list:\n");
   outlist(head);
   head=fun(head);
   printf("\nThe list after inverting :\n");
   outlist(head);
   getchar();
}

测试:

输出:


The original list:

Head  ->2->4->6->8->10->End

The list after inverting :

Head  ->10->8->6->4->2->End


47.将所有串长超过k的字符串中右边的字符删除

给定程序中,函数fun的功能是:在形参ss所指字符串数组中,将所有串长超过k的字符串中右边的字符删除,只保留左边的k个字符。ss所指字符串数组中共有N个字符串,且串长小于M。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

BLANK1.C:

#include  <stdio.h>
#include  <string.h>
#define   N   5
#define   M   10
/**********found**********/
void fun(char  (*ss) __1__, int  k)//二维数组传递函数,(*ss)是行,还有列要填
{ int  i=0  ;
/**********found**********/
  while(i< __2__) { //遍历所有行
/**********found**********/
    ss[i][k]=__3__;  i++;  }//串长超过k的字符串中右边的字符删除,把字符串中第k+1个字符置为空,后面的就不会输出
}
main()
{ char  x[N][M]={"Create","Modify","Sort","skip","Delete"};
  int  i;
  printf("\nThe original string\n\n");
  for(i=0;i<N;i++)puts(x[i]);  printf("\n");
  fun(x,4);
  printf("\nThe string after deleted :\n\n");
  for(i=0; i<N; i++)  puts(x[i]);  printf("\n");
  getchar();
}

解题思路:
主要考了二维数组,字符串输出函数在遇到’\0’时,就会停止输出

答案:

#include  <stdio.h>
#include  <string.h>
#define   N   5
#define   M   10
/**********found**********/
void fun(char  (*ss) [M], int  k)
{ int  i=0  ;
/**********found**********/
  while(i< N) {
/**********found**********/
    ss[i][k]='\0';  i++;  }
}
main()
{ char  x[N][M]={"Create","Modify","Sort","skip","Delete"};
  int  i;
  printf("\nThe original string\n\n");
  for(i=0;i<N;i++)puts(x[i]);  printf("\n");
  fun(x,4);
  printf("\nThe string after deleted :\n\n");
  for(i=0; i<N; i++)  puts(x[i]);  printf("\n");
  getchar();
}

测试:

输出:


The original string

Create
Modify
Sort
skip
Delete


The string after deleted :

Crea
Modi
Sort
skip
Dele



48.找出含有子串的字符串

给定程序中,函数fun的功能是:在形参ss所指字符串数组中,查找含有形参substr所指子串的所有字符串并输出,若没找到则输出相应信息。ss所指字符串数组中共有N个字符串,且串长小于M。程序中库函数strstr(s1, s2)的功能是在s1串中查找s2子串,若没有,函数值为0,若有,为非0。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

BLANK1.C:

#include  <stdio.h>
#include  <string.h>
#define   N   5
#define   M   15
void fun(char  (*ss)[M], char  *substr)
{ int  i,find=0;
/**********found**********/
  for(i=0; i< __1__ ; i++)//每个字符串为一行,要遍历所有字符串
/**********found**********/
    if( strstr(ss[i], __2__) != NULL )//判断字符串中是否有子串substr
    {  find=1;  puts(ss[i]);  printf("\n");  }
/**********found**********/
    if (find==__3__) printf("\nDon't found!\n");//在前面已经知道,find==1时,是存在字符串有子串substr,所以这个if分支只要find!=1即可
}
main()
{ char  x[N][M]={"BASIC","C langwage","Java","QBASIC","Access"},str[M];
   int  i;
   printf("\nThe original string\n\n");
   for(i=0;i<N;i++)puts(x[i]);  printf("\n");
   printf("\nEnter a string for search :  ");  gets(str);//输入要搜索的子串
   fun(x,str);
   getchar();
}

解题思路:
说一下题目代码中出现的函数:

strstr()函数:
char *strstr(const char *haystack, const char *needle) //在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。
haystack ——要被检索的字符串
needle ———在haystack字符串要搜索的子串

答案:

#include  <stdio.h>
#include  <string.h>
#define   N   5
#define   M   15
void fun(char  (*ss)[M], char  *substr)
{ int  i,find=0;
/**********found**********/
  for(i=0; i< N ; i++)
/**********found**********/
    if( strstr(ss[i], substr) != NULL )
    {  find=1;  puts(ss[i]);  printf("\n");  }
/**********found**********/
    if (find==0) printf("\nDon't found!\n");
}
main()
{ char  x[N][M]={"BASIC","C langwage","Java","QBASIC","Access"},str[M];
   int  i;
   printf("\nThe original string\n\n");
   for(i=0;i<N;i++)puts(x[i]);  printf("\n");
   printf("\nEnter a string for search :  ");  gets(str);
   fun(x,str);
   getchar();
}

测试:

输入:

BASIC

输出:


The original string

BASIC
C langwage
Java
QBASIC
Access


Enter a string for search :  BASIC

QBASIC



49.计算出该日是这一年的第几天

函数fun的功能是:根据所给的年、月、日,计算出该日是这一年的第几天,并作为函数值返回。其中函数isleap用来判别某一年是否为闰年。例如,若输入:2008 5 1,则程序输出:2008年5月1日是该年的第122天。

请在程序的下划线处填入正确的内容,并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!

BLANK1.C:

#include  <stdio.h>
int  isleap(int  year)
{ int  leap;
  leap= (year%4==0 && year%100!=0 || year%400==0);//为1则为闰年,
/**********found**********/
  return  __(1)__;//判断闰年的结果
}
int fun(int  year, int  month, int  day)
{  int  table[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//月份
   int  days=0 , i;
   for(i=1; i<month; i++)
      days=days + table[i];//加上月份的天数
/**********found**********/
   days=days+__(2)__ ;//加上日
   if( isleap(year) && month>2 )//过了二月且是闰年,
 /**********found**********/
     days=days+__(3)__;//闰年的二月要多一天
   return  days;
}
main()
{  int  year, month, day, days ;
   printf("请输入年、月、日:");
   scanf("%d%d%d",&year, &month, &day);
   days = fun(year, month, day); 
   printf("%d年%d月%d日是该年的第%d天\n",year, month, day, days);
  getchar();
}

解题思路:
能被4整除、但不能被100整除,或能被400整除的年份为闰年

答案:

#include  <stdio.h>
int  isleap(int  year)
{ int  leap;
  leap= (year%4==0 && year%100!=0 || year%400==0);
/**********found**********/
  return  leap;
}
int fun(int  year, int  month, int  day)
{  int  table[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
   int  days=0 , i;
   for(i=1; i<month; i++)
      days=days + table[i];
/**********found**********/
   days=days+day ;
   if( isleap(year) && month>2 )
 /**********found**********/
     days=days+1;
   return  days;
}
main()
{  int  year, month, day, days ;
   printf("请输入年、月、日:");
   scanf("%d%d%d",&year, &month, &day);
   days = fun(year, month, day); 
   printf("%d年%d月%d日是该年的第%d天\n",year, month, day, days);
  getchar();
}

测试:

输入:

2008 5 1

输出:

请输入年、月、日:2008年5月1日是该年的第122天


50.统计整型变量m中各数字出现的次数

给定程序中,函数fun的作用是:统计整型变量m中各数字出现的次数,并存放到数组a中,其中: a[0]存放0出现的次数,a[1]存放1出现的次数,…… a[9]存放9出现的次数。

例如,若m为14579233,则输出结果应为:0,1,1,2,1,1,0,1,0,1,

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

BLANK1.C:

#include  <stdio.h>
void fun( int  m, int  a[10])
{  int  i;
  for (i=0; i<10; i++)
/**********found**********/
    __1__ = 0;//初始化数组
  while (m > 0)//用逐位取余的方式得出各数字出现的次数
  {
/**********found**********/
     i = ___2___;//取余得出当前个位
     a[i]++;
/**********found**********/
     m = ___3___;//去掉最后一位
  }
}
main()
{  int  m,  a[10],i;
   printf("请输入一个整数 :  ");   scanf("%d", &m);
   fun(m, a);
   for (i=0; i<10; i++)   printf("%d,",a[i]);  printf("\n");
  getchar();
}

解题思路:
很简单,就不多描述了( ̄︶ ̄)↗

答案:

#include  <stdio.h>
void fun( int  m, int  a[10])
{  int  i;
  for (i=0; i<10; i++)
/**********found**********/
    a[i] = 0;
  while (m > 0)
  {
/**********found**********/
     i = m%10;
     a[i]++;
/**********found**********/
     m = m/10;
  }
}
main()
{  int  m,  a[10],i;
   printf("请输入一个整数 :  ");   scanf("%d", &m);
   fun(m, a);
   for (i=0; i<10; i++)   printf("%d,",a[i]);  printf("\n");
  getchar();
}

测试:

输入:

14579233

输出:

请输入一个整数 :  0,1,1,2,1,1,0,1,0,1,


  • 18
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值