二、程序填空 ??共10题 (共计100分)
第1题 (10.0分) ???????题号:91 ???????难度:难 ???????第8章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数,作为
??????函数值返回。为便于统计,规定各单词之间用空格隔开。
例如:形参s所指的字符串为:This is a C language program.,函数的返回值为6。
-------------------------------------------------------*/
#include ?<stdio.h>
int fun(char ?*s)
{
????????int ?n=0, flag=0;
????????while(*s!='\0')
????????{
????????????????if(*s!=' ' && flag==0)
????????????????{
/***********SPACE***********/
????????????????????????【?】 ;
????????????????????????flag=1;
????????????????}
????????????????if (*s==' ') ?
/***********SPACE***********/
????????????????????????flag= 【?】 ;
/***********SPACE***********/
????????????????【?】 ;
????????}
????????return ?n;
}
main()
{
????????char ?str[81]; ??
????????int ?n;
????????printf("\nEnter a line text:\n");
????????gets(str);
????????n=fun(str);
????????printf("\nThere are %d words in this text.\n\n",n);
}
第2题 (10.0分) ???????题号:21 ???????难度:难 ???????第8章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:下列给定程序中,函数fun的功能是:有N×N矩阵,将矩阵的外围元素做顺时针旋转。
??????操作顺序是:首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,最
??????后一行成为第一列,最后一列成为最后一行,再使临时数组中的元素成为最后一列。
例如:若N=3,有下列矩阵:
??????????????????????????1 2 3
??????????????????????????4 5 6
??????????????????????????7 8 9
??????操作后应为:
??????????????????????????7 4 1
??????????????????????????8 5 2
??????????????????????????9 6 3
-------------------------------------------------------*/
#include ???<stdio.h>
#define ???N ???4
void fun(int ?(*t)[N])
{ ?
????????int ?j ,r[N];
????????for(j=0; j<N; j++) ?
????????????????r[j]=t[0][j];
????????for(j=0; j<N; j++)
/***********SPACE***********/
????????????????t[0][N-j-1]=【?】;
????????for(j=0; j<N; j++)
????????????????t[j][0]=t[N-1][j];
/***********SPACE***********/
????????for(j=N-1; j>=0;【?】 )
????????????????t[N-1][N-1-j]=t[j][N-1];
????????for(j=N-1; j>=0; j--)
/***********SPACE***********/
????????????????t[j][N-1]=【?】;
}
main()
{ ?
????????int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j;
????????printf("\nThe original array:\n");
????????for(i=0; i<N; i++)
????????{ ?
????????????????for(j=0; j<N; j++) ?
????????????????????????printf("%2d ?",t[i][j]);
????????????????printf("\n");
????????}
????????fun(t);
????????printf("\nThe result is:\n");
????????for(i=0; i<N; i++)
????????{ ?
????????????????for(j=0; j<N; j++)
????????????????????????printf("%2d ?",t[i][j]);
????????????????printf("\n");
????????}
}
第3题 (10.0分) ???????题号:87 ???????难度:难 ???????第8章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:给定程序中,函数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;
/***********SPACE***********/
????????for(p=1; p<= 【?】; p++)
????????????????for(i=0; i<M; i++)
????????????????{ ?
????????????????????????temp=a[i][0];
/***********SPACE***********/
????????????????????????for(j=0; j< 【?】; j++)
????????????????????????????????a[i][j]=a[i][j+1];
/***********SPACE***********/
????????????????????????a[i][N-1]= 【?】;
????????????????}
}
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");
????????}
}
第4题 (10.0分) ???????题号:93 ???????难度:难 ???????第8章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对应的数
??????值,计算出这些数值的累加和作为函数值返回。
例如,形参s所指的字符串为abs5def126jkm8,程序执行后的输出结果为22。
-------------------------------------------------------*/
#include ?<stdio.h>
#include ?<string.h>
#include ?<ctype.h>
int fun(char ?*s)
{
????????int ?sum=0;
????????while(*s)
????????{
????????????????if( isdigit(*s) )
/***********SPACE***********/
????????????????????????sum+= *s- 【?】 ;
/***********SPACE***********/
????????????????【?】;
????????}
/***********SPACE***********/
????????return ?【?】;
}
main()
{
????????char ?s[81]; ?
????????int ?n;
????????printf("\nEnter a string:\n\n");
????????gets(s);
????????n=fun(s);
????????printf("\nThe result is: ?%d\n\n",n);
}
第5题 (10.0分) ???????题号:40 ???????难度:难 ???????第8章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:下列给定程序中,函数fun的功能是:在形参s所指字符串中寻找与参数c相同的字符,
??????并在其后插入一个与之相同的字符,若找不到相同的字符则不做任何处理。
例如:若s所指字符串为"baacda",c中的字符为a,执行后s所指字符串为"baaaacdaa"。
-------------------------------------------------------*/
#include ???<stdio.h>
void fun(char ?*s, char ?c)
{ ?
????????int ?i, j, n;
/***********SPACE***********/
????????for(i=0; s[i]!=【?】 ; i++)
????????????????if(s[i]==c)
????????????????{
/***********SPACE***********/
????????????????????????n=【?】 ;
????????????????????????while(s[i+1+n]!='\0')
????????????????????????????????n++;
????????????????????????for(j=i+n+1; j>i; j--)
????????????????????????????????s[j+1]=s[j];
/***********SPACE***********/
????????????????????????????????s[j+1]=【?】;
????????????????????????i=i+1;
????????????????}
}
main()
{ ?
????????char ?s[80]="baacda", c;
????????printf("\nThe string: ?%s\n",s);
????????printf("\nInput a character: ?");
????????scanf("%c",&c);
????????fun(s,c);
????????printf("\nThe result is: ?%s\n",s);
}