第6题 (10.0分) ???????题号:63 ???????难度:难 ???????第8章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,
??????其余字符串左边用字符*补齐,使其与最长的字符串等长。字符串数组中共有M个字
??????符串,且串长小于N。
-------------------------------------------------------*/
#include ???<stdio.h>
#include ???<string.h>
#define ???M ???5
#define ???N ???20
void fun(char ?(*ss)[N])
{
????????int ?i, j, k=0, n, m, len;
????????for(i=0; i<M; i++)
????????{ ?
????????????????len=strlen(ss[i]);
????????????????if(i==0) n=len;
????????????????if(len>n)
????????????????{
/***********SPACE***********/
????????????????????????n=len; 【?】=i;
????????????????}
????????}
????????for(i=0; i<M; i++)
????????????????if (i!=k)
????????????????{
????????????????????????m=n;
????????????????????????len=strlen(ss[i]);
/***********SPACE***********/
????????????????????????for(j=【?】; j>=0; j--)
????????????????????????????????ss[i][m--]=ss[i][j];
????????????????????????for(j=0; j<n-len; j++)
/***********SPACE***********/
????????????????????????????????【?】='*';
????????????????}
}
main()
{ ?
????????char ?ss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};
????????int ?i;
????????printf("\nThe original strings are :\n");
????????for(i=0; i<M; i++) ?printf("%s\n",ss[i]);
????????????????printf("\n");
????????fun(ss);
????????printf("\nThe result:\n");
????????for(i=0; i<M; i++)
????????????????printf("%s\n",ss[i]);
}
第7题 (10.0分) ???????题号:33 ???????难度:难 ???????第8章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:下列给定程序中,函数fun的功能是:在形参s所指字符串中的每个数字字符之后插
??????入一个*号。
例如:形参s所指的字符串为"def35adh3kjsdf7",执行后结果为"def3*5*adh3*kjsdf7*"
-------------------------------------------------------*/
#include ????<stdio.h>
void fun(char ?*s)
{ ?
????????int ?i, j, n;
????????for(i=0; s[i]!='\0'; i++)
/***********SPACE***********/
????????????????if(s[i]>='0' 【?】 s[i]<='9')
????????????????{ ?
????????????????????????n=0;
/***********SPACE***********/
????????????????????????while(s[i+1+n]!= 【?】)
????????????????????????????????n++;
????????????????????????for(j=i+n+1; j>i; j--)
/***********SPACE***********/
????????????????????????????????s[j+1]= 【?】;
????????????????????????????????s[j+1]='*';
????????????????????????????????i=i+1;
????????????????}
}
main()
{ ?
????????char ?s[80]="def35adh3kjsdf7";
????????printf("\nThe original string is : ?%s\n",s);
????????fun(s);
????????printf("\nThe result is : ?%s\n",s);
}
第8题 (10.0分) ???????题号:89 ???????难度:难 ???????第8章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:给定程序中,函数fun的功能是:把形参s所指字符串中最右边的n个字符复制到形
??????参t所指字符数组中,形成一个新串。若s所指字符串的长度小于n,则将整个字符
??????串复制到形参t所指字符数组中。
例如:形参s所指的字符串为:abcdefgh,n的值为5,程序执行后t所指字符数组中的字符
??????串应为:defgh。
-------------------------------------------------------*/
#include ?<stdio.h>
#include ?<string.h>
#define ??N ??80
void fun(char ?*s, int ?n, char ?*t)
{
????????int len,i,j=0;
????????len=strlen(s);
????????if(n>=len)
/***********SPACE***********/
????????????????strcpy(【?】);
????????else
????????{
????????????????for(i=len-n; i<=len-1; i++)
/***********SPACE***********/
????????????????????????t[j++]= 【?】 ;
/***********SPACE***********/
????????????????t[j]= 【?】 ;
????????}
}
main()
{
????????char ?s[N],t[N]; ?
????????int ?n;
????????printf("Enter a string: ?");
????????gets(s);
????????printf( "Enter n:");
????????scanf("%d",&n);
????????fun(s,n,t);
????????printf("The string t : ?"); ?
????????puts(t);
}
第9题 (10.0分) ???????题号:83 ???????难度:难 ???????第8章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:给定程序中,函数fun的功能是:判定形参a所指的N×N(规定N为奇数)的矩阵是否
??????是"幻方",若是,函数返回值为1;若不是,函数返回值为0。
??
?????"幻方"的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。
例如:以下3×3的矩阵就是一个"幻方":
?????????????????????????????????????4 9 2
?????????????????????????????????????3 5 7
?????????????????????????????????????8 1 6
-------------------------------------------------------*/
#include ?<stdio.h>
#define ??N ??3
int fun(int ?(*a)[N])
{
????????int ?i,j,m1,m2,row,colum;
????????m1=m2=0;
????????for(i=0; i<N; i++)
????????{
????????????????j=N-i-1;
????????????????m1+=a[i][i];
????????????????m2+=a[i][j]; ?
????????}
????????if(m1!=m2)
????????????????return ?0;
????????for(i=0; i<N; i++)
????????{
/***********SPACE***********/
????????????????row=colum= 【?】;
????????????????for(j=0; j<N; j++)
????????????????{
????????????????????????row+=a[i][j]; ?
????????????????????????colum+=a[j][i]; ?
????????????????}
/***********SPACE***********/
????????????????if( (row!=colum) 【?】(row!=m1) )
????????????????????????return 0;
????????}
/***********SPACE***********/
????????return ?【?】;
}
main()
{
????????int ?x[N][N],i,j;
????????printf("Enter number for array:\n");
????????for(i=0; i<N; i++)
????????????????for(j=0; j<N; j++) ?
????????????????????????scanf("%d",&x[i][j]);
????????????????printf("Array:\n");
????????for(i=0; i<N; i++)
????????{
????????????????for(j=0; j<N; j++) ?
????????????????????????printf("%3d",x[i][j]);
????????????????printf("\n");
????????}
????????if(fun(x))
????????????????printf("The Array is a magic square.\n");
????????else
????????????????printf("The Array isn't a magic square.\n");
}
第10题 (10.0分) ???????题号:85 ???????难度:难 ???????第8章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:给定程序中,函数fun的功能是:将形参s所指字符串中的所有数字字符顺序
??????前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。
例如,s所指字符串为:asd123fgh543df,处理后新字符串为:123543asdfghdf。
-------------------------------------------------------*/
#include ?<stdio.h>
#include ?<string.h>
#include ?<stdlib.h>
#include ?<ctype.h>
char *fun(char ?*s)
{
????????int ?i, j, k, n; ?
????????char ?*p, *t;
????????n=strlen(s)+1;
????????t=(char*)malloc(n*sizeof(char));
????????p=(char*)malloc(n*sizeof(char));
????????j=0; k=0;
????????for(i=0; i<n; i++)
????????{
????????????????if(isdigit(s[i]))
????????????????{
/***********SPACE***********/
????????????????????????p[【?】]=s[i];
????????????????????????j++;
????????????????}
????????????????else
????????????????{
????????????????????????t[k]=s[i];
????????????????????????k++;
????????????????}
????????}
/***********SPACE***********/
????????for(i=0; i<【?】; i++)
????????????????p[j+i]= t[i];
????????p[j+k]=0;
/***********SPACE***********/
????????return 【?】;
}
main()
{
????????char ?s[80];
????????printf("Please input: "); ?
????????scanf("%s",s);
????????printf("\nThe result is: %s\n",fun(s));
}