5、#include void f(int *q) { int i;
for(i=0;i<3;i++) (*q)--; }
main( )
{ int a[5]={8,7,6},i; f(a);
for(i=0;i<3;i++)
printf(“%d”,a[i]); }
五、程序填空题
36 20 576 1、下面程序从文本文件test.txt逐个读入字符,并显示在屏幕上。 #include main() { FILE*fp;
char ch,*filename=”tdst.txt))
if((fp= fopen (filename,”r”))==NULL) { printf(“cannot open file\\n”); exit(0); }
while(! feof (fp)) { ch=fgetc(fp); putchar(ch); }
fclose(fp); }
26
2、以下程序的功能是:读入一行字符,以回车结束,按输入时的逆序使用单链表进行存储,先输入的位于链表尾,然后再遍历输出链表。 struct node { char value;
struct node *link; };
main( )
{ struct node *top,*p; char c; top=NULL;
while((c=getchar( )) !=’\\n’ )
{ p=(struct node *)malloc(sizeof(struct node)); p->value=c; p->link=top; top=p ; }
p=top; while(p)
{ putchar( p->value ); p=p->link; } }
3、折半查找也称为二分查找,适用于有序数组。已知数组按照升序排列。 #include int main( ) { int key=0;
int data[10]={1,3,5,7,8,9,13,18,22,28}; int ret;
printf(“请输入要查找的数:”); scanf(“%d”,&key);
ret=BinarySearch(key,data); if(ret>=0)
printf(“\\n %d 是数组中的第%d个数\\n”,key,ret+1); else
printf(“\\n %d在数组中未找到!\\n”,key); system(“pause”); return 0; }
int BinarySearch(int key,int data[ ]) { int low=0,high=9,middle; while( low<=high )
{ middle= (low+high)/2 ; if( key==data[middle] ) return middle;
27
else if(keyreturn -1; }
六、程序改错题,不得增选或删行,也不得更改程序结构。 1、矩阵乘法是指两个矩阵相乘,生成一个新矩阵,其乘法公式如下: cij?K?aill?1?blj
以下程序实现两个2×2的矩阵相乘。只对程序中的两行代码进行修改,使其可以正确运行。 #include #define M 2 #define N 2 #define K 2 int main( )
{ int a[M][K]={1,-1,0,2}; int b[K][N]={4,0,2,5};
int c[M][N}; int c[M][N}={0}; int i,j,l;
for(i=0;i c[i][j]=a[i][l]*b[l][j]; c[i][j]+=a[i][l]*b[l][j]; return 0; }
2、某班举行歌唱比赛,赛后需要显示成绩最高的选手名字和成绩,以下程序实现了查找得分最高选手的功能。只对程序中的三行代码进行修改,使其可以正确运行。 #include #define MAX 3
struct PLAYER typedef struct PLAYER { char *name; float score; }Player; int main( )
{ Player players[]={{“丁一”,90.3},{”陈二”,95.8},{“张三”,89.6}}; Player * player;
Player topplayer=players[0];
for(player=players;player if(player.score>topplayer.score) if(player->score>topplayer.score) topplayer=player; topplayer=*player; printf(”Top Player is %s,score is %6.2f”,topplayer.name,topplayer.score); return 0; }
28