程序填空题(21-30)

第二十一题

题目

下列给定程序中,对于函数void fun(int *dt, int n),传递给形参dt整型数组名、传递给形参n该数组的数据个数,函数的功能是在数组中找出值最小的元素并将其与第1个元素交换。

如原数组数据为30,20,15,64,85,28,

则经函数处理后为15,20,30, 64,85,28。

#include<stdio.h>
#pragma warning (disable:4996)
void fun(int *dt,int n)
{
	int i,m,t;
/**********************found***********************/
	____(1)____  ;
	for(i=1;i<n;i++)
/**********************found***********************/
		if(____(2)____) 
			m=i;
	t=dt[0];
/**********************found***********************/
	____(3)____
	dt[m]=t;
}
main()
{
	int a[10]={ 30,20,15,64,85,28 }; 
	int i,n=6;
	for(i=0;i<n;i++)
		printf("%4d",a[i]);
	printf("\n");
	fun(a,n);
	for(i=0;i<n;i++)
		printf("%4d",a[i]);
	printf("\n");
}

解析

m=t=0  dt[m]>dt[i]  dt[0]=dt[m]

分析

第二十二题

题目

下列给定程序中,函数fun的功能是:根据形参ch中指定的大写英文字母,

按顺序打印出3个相邻的字母,指定的字母位于中间。

若指定的字母为Z,则打印YZA;若指定的字母为A,则打印ZAB。

#include  <stdio.h>
#include  <ctype.h>
#pragma warning (disable:4996)
void fun(char ch)
{ char t[3];
  int i;
  t[1]=ch;
/**********************found***********************/
  if (ch=='Z'){  t[2]='A';  t[0]= ____(1)____  ;    }
/**********************found***********************/
  else if (ch=='A')  {t[2]='B';   t[0]= ____(2)____; }
/**********************found***********************/
  else { t[0]=ch-1;  t[2]= ____(3)____;}
  for(i=0;i<3; i++) putchar(t[i]);
  putchar('\n');
}
main( )
{ char c;
  do
  { printf(" enter a upper letter:");
    c=getchar(); getchar(); 
  }
  while(!isupper(c));
  fun(c);
}

解析

'Y'   'Z'  ch+1  

分析

第二十三题

题目

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

#include  <stdio.h>
#include  <stdlib.h>
#define    N    6
typedef struct node {
  int  data;
  struct node  *next;
} NODE;
void fun(NODE  *h)
{ NODE  *p, *q;    int  t;
/**********found**********/
  p = __1__ ;
  while (p) {
/**********found**********/
     q = __2__ ;
     while (q) {
/**********found**********/
        if (p->data __3__ q->data)
        {  t = p->data;  p->data = q->data;  q->data = t;  }
        q = q->next;
    }
    p = p->next;
  }
}
NODE *creatlist(int  a[])
{  NODE  *h,*p,*q;        int  i;
  h = (NODE *)malloc(sizeof(NODE));
  h->next = NULL;
  for(i=0; i<N; i++)
  {  q=(NODE *)malloc(sizeof(NODE));
     q->data=a[i];
     q->next = NULL;
     if (h->next == NULL)  h->next = p = q;
     else    {  p->next = q;  p = q;   }
  }
   return  h;
}
void outlist(NODE  *h)
{ NODE  *p;
  p = h->next;
  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]= {0, 10, 4, 2, 8, 6 };
   head=creatlist(a);
   printf("\nThe original list:\n");
   outlist(head);
   fun(head);
   printf("\nThe list after sorting :\n");
   outlist(head);
  getchar();
}

解析

h p->next >

分析

第二十四题

题目

给定程序blank1.c中,函数fun的功能是将一个由字符0和1组成的表示二进制数的字符

串,转换成相应的十进制整数值返回。该串长度最大不超过15。

例如:若表示二进制数的字符串为:”10011”,

则运行结果应为: 10011-->19

#include   <stdio.h>
#pragma warning (disable:4996)
#define    N   16
/**********************found***********************/
int  fun( char  ____(1)____)  
{  int  i,  n = 0;
/**********************found***********************/
   for (i=0; ____(2)____ ; ++i)
/**********************found***********************/
        n = n*2 + (s[i] -____(3)____) ; 
   return  n;
}
main( )
{  char  num[] = "10011";    int  n;
   n = fun(num);
   printf( "%s-->%d\n", num, n );
}

解析

s[N]   s[i]!='\0'   '0'

分析

  1. (1) 处填写 s[N],表示函数 fun 接受一个字符数组,大小为 N,这里 N 被定义为16,意味着可以处理最多15个字符(因为最后一个位置留给字符串结束符 \0)。

  2. (2) 处填写 s[i] != '\0',这是字符串遍历的常用条件,'\0' 是字符串结束的标志。

  3. (3) 处填写 '0',这是因为在ASCII码表中,字符 '0' 到 '9' 是连续的,通过减去字符 '0' 的ASCII码值,可以将字符转换为对应的整数值。

第二十五题

题目

给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。

例如,当形参n的值为10时,函数返回:-0.204491。

#include  <stdio.h>
double fun(int  n)
{ int  i, k;    double  s, t;
  s=0;
/**********found**********/
  k=__1__;
  for(i=1; i<=n; i++) {
/**********found**********/
    t=__2__;
    s=s+k*(2*i-1)*(2*i+1)/(t*t);
/**********found**********/
    k=k*__3__;
  }
  return  s;
}
main()
{ int  n=-1;
  while(n<0)
  { printf("Please input(n>0): ");  scanf("%d",&n);  }
  printf("\nThe result is: %f\n",fun(n));
  getchar();
}

解析

1  2*i (-1)

分析

第二十六题

题目

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

#include  <stdio.h>
#include  <stdlib.h>
#define    N    6
typedef struct node {
  int  data;
  struct node  *next;
} NODE;
void fun(NODE  *h)
{ NODE  *p, *q;    int  t;
  p = h;
  while (p) {
/**********found**********/
     q = __1__ ;
/**********found**********/
     while (__2__)
     {  if (p->data > q->data)
       {  t = p->data;  p->data = q->data;  q->data = t;  }
       q = q->next;
    }
/**********found**********/
    p = __3__ ;
  }
}
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]= {0, 10, 4, 2, 8, 6 };
   head=creatlist(a);
   printf("\nThe original list:\n");
   outlist(head);
   fun(head);
   printf("\nThe list after inverting :\n");
   outlist(head);
   getchar();
}

解析

p->next  q   NULL 

分析

第二十七题

题目

给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据依次移至数组的前部,大于等于平均值的数据依次移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。

例如,有10个正数:41 1734 0 19 24 28 8 12 14,平均值为:19.700000

移动后的输出为: 17 0 19 8 12 14 41 34 24 28

#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");
  getchar();
}

解析

x[i]/10.0  j++  i++

分析

第二十八题

题目

给定程序中,函数fun的功能是建立一个NXN的矩阵。矩阵元素的构成规律是:最外层元素的值全部为1,从外向内第2层元素的值全部为2;第3层元素的值全部为3,…依次类推例如,若N=5,生成的矩阵为:

1 1 1 1 1

1 2 2 2 1

1 2 3 2 1

1 2 2 2 1

1 1 1 1 1

#include  <stdio.h>
#define   N   7
/**********found**********/
void fun(int  (*a) __1__)
{ int  i,j,k,m;
  if(N%2==0) m=N/2 ;
  else       m=N/2+1;
  for(i=0; i<m; i++) {
/**********found**********/
     for(j= __2__ ; j<N-i; j++)
        a[i][j]=a[N-i-1][j]=i+1;
     for(k=i+1; k<N-i; k++)
/**********found**********/
        a[k][i]=a[k][N-i-1]= __3__;
  }
}
main()
{ int  x[N][N]={0},i,j;
  fun(x);
  printf("\nThe result is:\n");
  for(i=0; i<N; i++)
  {  for(j=0; j<N; j++)  printf("%3d",x[i][j]);
     printf("\n");
  }
  getchar();
}

解析

[N]   0  i+1 

分析

第二十九题

题目

给定程序中,函数fun的功能是:将a所指3×5矩阵中第k列的元素左移到第0列,第k列以后的每列元素行依次左移,原来左边的各列依次绕到右边。

例如,有下列矩阵:

1 2 3 4 5

1 2 3 4 5

1 2 3 4 5

若k为2,程序执行结果为

3 4 5 1 2

3 4 5 1 2

3 4 5 1 2
 

#include  <stdio.h>
#define   M   3
#define   N   5
void fun(int  (*a)[N],int  k)
{ int  i,j,p,temp;
/**********found**********/
  for(p=1; p<= __1__; p++)
     for(i=0; i<M; i++)
     {  temp=a[i][0];
/**********found**********/
        for(j=0; j< __2__ ; j++) a[i][j]=a[i][j+1];
/**********found**********/
        a[i][N-1]= __3__;
     }
}
main( )
{ int  x[M][N]={ {1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5} },i,j;
  printf("The array before moving:\n\n");
  for(i=0; i<M; i++)
  {  for(j=0; j<N; j++)  printf("%3d",x[i][j]);
     printf("\n");
  }
  fun(x,2);
  printf("The array after moving:\n\n");
  for(i=0; i<M; i++)
  {  for(j=0; j<N; j++)  printf("%3d",x[i][j]);
     printf("\n");
  }
  getchar();
}

解析

N k temp

分析

第三十题

题目

给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在形参a所指数组中(此数组在主函数中己置0)。

#include  <stdlib.h>
#include  <stdio.h>
#define   N  20
void  fun( int  *a)
{ int  i, x, n=0;
  x=rand()%20;
/**********found**********/
  while (n<__1__)
  {  for(i=0; i<n; i++ )
/**********found**********/
         if( x==a[i] ) __2__;
/**********found**********/
     if( i==__3__){ a[n]=x; n++; }
     x=rand()%20;
  }
}
main()
{ int  x[N]={0} ,i;
  fun( x );
  printf("The result :  \n");
  for( i=0; i<N; i++ )
  { printf("%4d",x[i]);
    if((i+1)%5==0)printf("\n");
  }
  printf("\n\n");
  getchar();
}

解析

N  break  0

分析

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值