第二十一题
题目
下列给定程序中,对于函数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)
处填写s[N]
,表示函数fun
接受一个字符数组,大小为N
,这里N
被定义为16,意味着可以处理最多15个字符(因为最后一个位置留给字符串结束符\0
)。 -
(2)
处填写s[i] != '\0'
,这是字符串遍历的常用条件,'\0'
是字符串结束的标志。 -
(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
分析