一、程序填空题
在此程序中,函数fun的功能是建立一个N*N的矩阵。矩阵元素的构成规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2;第3层元素的值全部为3,……依此类推。
例如,若N=5,生成的矩阵为:
#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__;
}
}
void 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");
}
}
答案:(1) [N] (2) i (3) i+1
二、程序修改题
在此程序中,函数fun的功能是:将十进制正整数m转换成k(2≤k≤9)进制数,并按位输出。
例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。
#include <stdio.h>
#include <conio.h>
/*************found**************/
void fun(int m,int k);
{ int aa[20], i;
for(i=0;m;i++)
{
/*************found**************/
aa[i]=m/k;
m/=k;
}
for(;i;i--)
/*************found**************/
printf("%d",aa[i]);
}
void main()
{
int b,n;
printf("\nPlease enter a number and a base:\n");
scanf("%d%d",&n,&b);
fun(n,b);
printf("\n ");
}
答案:(1) void fun(int m,int k) (2) aa[i]=m%k; (3) printf("%d",aa[i-1]);
三、程序设计题
在此程序中,编写一个函数,其功能是:从传入num个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标识)。
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *fun(char (*a)[81], int num, char *max)
{
}
void main()
{
FILE *wf;
char ss[10][81],*ps=NULL;
char s[3][81]={"abcd","deg","diegns"},*p=NULL;
int i=0,n;
system("CLS");
printf("输入若干个字符串:");
gets(ss[i]);
puts(ss[i]);
while(!strcmp(ss[i], "****")==0) /*用4个星号作为结束输入的标志*/
{
i++;
gets(ss[i]);
puts(ss[i]);
}
n=i;
ps=fun(ss,n,ps);
printf("\nmax=%s\n",ps);
/******************************/
wf=fopen("out.dat","w");
p=fun(s,3,p);
fprintf(wf,"%s",p);
fclose(wf);
/*****************************/
}
答案:
int i=0;
max=a[0];
for(i=0;i<num;i++) /*找出最长的一个字符串*/
if(strlen(max)<strlen(a[i]))
max=a[i];
return max; /*传回最长字符串的地址*/