第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));
}