第81套
1.
程序填空题:
请补充函数fun,该函数的功能是:逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c数组中,形成一个新的字符串。
例如,若a中的字符串为aBCDeFgH,b中的字符串为ABcd,则c中的字符串应为aBcdeFgH。
注意:部分源程序给出如下。
请勿改动上函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
void fun(char *p,char *q,char *c)
{
int
k=【1】;
while(*p【2】*q)
{ if (*p
c[k]=*q;
else c[k]=*p;
if(*p) p++;
if(*q) q++ ;
k++;
}
}
main()
{ char a[10]="fshADfg",b[10]="sdAEdi",c[80]={'\0'};
fun(a,b,c);
printf("The string a:"); puts(a);
printf("The string b:"); puts(b);
printf("The result :"); puts(c);
}
2.
程序改错题:
下列给定程序中,函数fun的功能是:从字符串s中删除所有小写字母c。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
void fun(char *s)
{int i, j;
for(i=j=0; s[i]!= '\0';i++)
if(s[i]!=
'c')
s[j]=s[i];
s[i]='\0';
}
void main()
{ char s[80];
printf("\nEnter a
string: ");
gets(s);
printf("The original
string: ");
puts(s);
fun(s);
printf("The string after deleted: ");
puts(s);
printf("\n\n ");
}
3. 程序设计题:
假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了尾部的*号之外,将字符串中其他*号全部删除。形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言的字符串函数。
例如,若字符串中的内容为****A*BC*DEF*G******,删除后,字符串中的内容应当是ABCDEFG******。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
void fun(char *a,char p[81])
{
}
void main()
{
FILE *wf;
char
s[81],*t,p[81]="****A*BC*DEF*G******";
printf("Enter a string:\n ");
gets(s);
t=s;
while(*t)
t++;
t--;
while(*t=='*')
t--;
fun(s,t);
printf("The string after deleted:\n");
puts(s);
wf=fopen("out.dat","w");
t=p;
while(*t)
t++;
t--;
while(*t=='*')
t--;
fun(p,t);
fprintf(wf,"%s",p);
fclose(wf);
}
【参考答案】:1.
(1)0 (2) ||
2.
(1)错误:s[j]=s[i]; 正确:s[j++]=s[i];
(2)错误:s[i]='\0'; 正确:s[j]= '\0'
3. void fun(char *a,char *p)
{
char
*t=a;
for(;t<=p;t++)
if(*t!='*')
*(a++)=*t;
for(;*t!='\0';t++)
*(a++)=*t;
*a='\0';
}
第82套
程序填空题:
请补充函数fun,该函数的功能是:在字符串的最前端加入n个*号,形成新串,并且覆盖。注意:字符串的长度最长允许为79。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编若干表达式或语句。
试题程序:
#include
#include
#include
#include
void fun(char s[],int n)
{
char a[80],*p;
int I;
p=【1】;
for(I=0;I
a[I]= '*';
do
{a[I]=【2】;
I++;
}while(【3】);
a[I]=0;
strcpy(s,a);
}
void main()
{int n;char s[80];
system("CLS");
printf("\nEnter a string: ");gets(s);
printf("\nThe string:%s\n",s);
printf("\nEnter n (number of*):");
scanf("%d",&n);
fun(s,n);
printf("\nThe string after
inster:%s\n",s);
}
程序改错题:
下列给定程序中,函数fun的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCII码升序排序后输出。例如,若输入edcba,则应输出abcde。
请改正程序中的错误,使它能统计出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
void fun(char t[])
{
char c;
int I,j;
for(I=strlen(t);I;I--)
for(j=0;j
if(t[j]
{
c= t[j];
t[j]=t[j+1];
t[j+1]=c;
}
}
main()
{
char s[81];
system("CLS");
printf("\nPlease enter a
character string :");
gets(s);
printf("\n\nBefore sorting
:\n %s",s);
fun(s);
printf("\nAfter sorting decendingly:\n
%s",s);
}
程序设计题:
假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。
例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是****A*BC*DEF*G。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
void fun (char *a)
{
}
void main()
{
FILE *wf;
char s[81],t[81]="****A*BC*DEF*G*******";
printf("Enter a string :\n");
gets(s);
fun(s);
printf("The string after deleted:\n");
puts(s);
wf=fopen("out.dat","w");
fun(t);
fprintf(wf,"%s",t);
fclose(wf);
}
【参考答案】:1. (1) s (2)
*p++ (3) *(p)或*p或*p!=0
2. (1)错误:for(i=strlen(t);i;i--)
正确:for(i=strlen(t)-1;i;i--) 或
for(i=strlen(t)-1;i>0;i--)
3. void fun (char *a)
{
while(*a!='\0')
a++;
a--;
while(*a=='*')
a--;
*(a+1)=
'\0';
}
第83套
程序填空题:
请补充main函数,该函数的功能是:把字符串str1中的非空格字符拷贝到字符串str2中。
例如,若str1="glad to see you!",则str2="gladtoseeyou!"。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#define N 80
void main()
{
static char str1[N]="glad to see you!";
char str2[N];
int I=0,j=0;
system("CLS");
printf("\n***** str1*****\n ");
puts(str1);
while(str1[I])
{
if(【1】)
str2[j++]=str1[I];
【2】;
}
printf("\n***** str2 *****\n ");
for(I=0;I
printf("%c",str2[I]);
}
程序改错题:
已知一个数列从0项开始的前3项:0,0,1,以后的各项都是其相邻的前3项之和。下列给定的程序中,函数fun的功能是:计算并输出该数列前n项的平方根之和sum。n的值通过形参传入。例如,当n=10时,程序的输出结果应为23.197745。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
#include
#include
fun(int n)
{double sum, s0, s1, s2, s; int k;
sum=1.0;
if (n<=2) sum=0.0;
s0=0.0; s1=0.0; s2=1.0;
for (k=4;k<=n;k++)
{
s=s0+s1+s2;
sum+=sqrt(s);
s0=s1;s1=s2;s2=s;
}
return sum
}
void main()
{int n;
system("CLS");
printf("Input N=");
scanf("%d",&n);
printf("%f\n",fun(n));
}
程序设计题:
假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个数。在编写函数时,不得使用C语言提供的字符串函数。
例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
void fun (char *a,int n ,int
h , int e)
{
}
void main()
{
FILE *wf;
char s[81],*t,*f;
char p[81]="****A*BC*DEF*G*******";
int m=0,tn=0, fn=0;
printf("Enter a string :\n");
gets(s);
t=f=s;
while(*t)
{t++;m++;}
t--;
while(*t=='*')
{t--;tn++;}
while(*f=='*')
{f++;fn++;}
fun( s, m, fn, tn);
printf("The string after deleted:\n");
puts(s);
wf=fopen("out.dat","w");
fun(p,21,4,7);
fprintf(wf,"%s",p);
fclose(wf);
}
【参考答案】:1. (1) str1[i]!='
' (2) i++
2. (1)错误:fun(int
n) 正确:double fun(int n)
(2)错误:return
sum 正确:return sum;
3.void fun (char *a,int n ,int h , int e)
{
int
i,j=0;
for(i=h;i
a[j++]=a[i];
a[j]='\0';
}
第84套
1.
程序填空题:
给定程序中,函数fun的功能是:有
矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。
例如,若N=3,有下列矩阵:
1 2 3
4 5 6
7 8 9
计算结果为:
1 0 0
6 5 0
10 14 9
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#define N 4
void fun(int (*t)【1】)
{
int i,j;
for(i=1;i
{
for(j=0;j
{
【2】=t[i][j]+t[j][i];
【3】=0;
}
}
}
main()
{
int
i,j,t[][N]={12,21,33,44,52,45,36,27,18,9,66,73,84,45,36,27,18};
printf("\nThe original array:\n ");
for(i=0;i
{
for(j=0;j
printf("%4d",t[i][j]);
printf("\n");
}
fun(t);
printf("\nThe result is:\n");
for(i=0;i
{
for(j=0;j
printf("%4d",t[i][j]);
printf("\n");
}
}
2.
程序改错题:
下列给定程序中,函数fun的功能是:计算n的5次方的值(规定n的值大于2且小于8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。例如,7的5次方是1
6807,其低3位数的和值是15。
请改正函数fun中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
int fun(int n,int *value)
{
int d,s,i;
d=0;
s=1;
for(i=1;i<=5;i++)
d=d*n;
*value=d;
for(i=1;i<=3;i++)
{
s=s+d%10;
s=s/10;
}
return s;
}
void main()
{
int n,sum,v;
do
{
printf("\n Enter n(2
scanf("%d",&n);
}while(n<=2||n>=8);
sum=fun(n,&v);
printf("\n\nThe result: \n value=%d
sum=%d\n\n" ,v,sum);
}
3.
程序设计题:
请编写函数fun,其功能是:将s所指的字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为ABCDEFG12345,其中字符A的ASCII码值为奇数、……、字符1的ASCII码值也为奇数……都应当删除,其他依次类推。最后t所指的数组中的内容应是BDF24。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
#include
#include
void fun(char *s,char t[])
{
}
main()
{
char s[100],t[100],Msg[]="Please enter string
S:";
FILE *out;
printf(Msg);
scanf("%s",s);
fun(s,t);
printf("\nThe result is :%s\n",t);
out=fopen("out.dat","w");
fun(Msg,t);
fprintf(out,"%s",t);
fclose(out);
}
【参考答案】:1. (1)
[N] (2)
t[i][j] (3) t[j][i]
2.
(1)错误:d=0; 正确:d=1;
(2)错误:s=1; 正确:s=0 ;
(3)错误:s=s/10; 正确:d=d/10
;
3. void fun(char *s,char t[])
{
int
i,j=0,n;
n=strlen(s);
for(i=0;i
if(s[i]%2==0)
{
t[j]=s[i];
j++;
}
t[j]='\0';
}
第85套
程序填空题:
给定程序中,函数fun的功能是:将 矩阵中元素的值按列右移1个位置,右边被移出的元素绕回左边。
例如,N=3,有下列矩阵:
1 2 3
4 5 6
7 8 9
计算结果为:
3 1 2
6 4 5
9 7 8
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#define N 4
void fun(int (*t)[N])
{
int i,j,x;
for(i=0;i
{
x=t[i][【2】];
for(j=N-1;j>0;j--)
t[i][j]=t[i][j-1];
t[i][【3】]=x;
}
}
main()
{
int
i,j,t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10};
printf("\nThe original array:\n ");
for(i=0;i
{
for(j=0;j
printf("%4d",t[i][j]);
printf("\n");
}
fun(t);
printf("\nThe result is:\n");
for(i=0;i
{
for(j=0;j
printf("%4d",t[i][j]);
printf("\n");
}
}
_
程序改错题:
下列给定程序中,函数fun的功能是:逐个比较a、b两个字符串对应位置上的字符,把ASCII值大或相等的字符依次存放存到c数组中,形成一个新的字符串。例如,若a中的字符串为aBCDeFgH,b中的字符串为ABcd,则c中的字符串应为aBcdeFgH。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
void fun(char *p,char *q,char *c)
{
int k=1;
while(*p!=*q)
{ if (*p
c[k]=*q;
else c[k]=*p;
if(*p) p++;
if(*q) q++ ;
k++;
}
}
main()
{ char a[10]="fshADfg",b[10]="sdAEdi",c[80]={'\0'};
fun(a,b,c);
printf("The string a:"); puts(a);
printf("The string b:"); puts(b);
printf("The result :"); puts(c);
}
程序设计题:
请编写函数fun,其功能是:将s所指字符串中除了下标为奇数,同时ASCII值也为奇数的字符之外,其余的字符全部删除,串中剩余字符所形成的一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为ABCDEFG12345,其中字符A的ASCII码值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符1的ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其他依次类推。最后t所指的数组中的内容应是135。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
#include
#include
void fun(char *s, char t[])
{
}
void main()
{
char s[100],t[100];
FILE *out;
printf("\nPlease enter string S: ");
scanf("%s",s);
fun(s,t);
printf("\nThe result is: %s\n",t);
out=fopen("out.dat","w");
strcpy(s,"ABCDEFG12345");
fun(s,t);
fprintf(out,"%s",t);
fclose(out);
}
【参考答案】:1. (1)
N (2)
N-1 (3) 0
2. (1)错误:int
k=1; 正确:int k=0 ;
(2)错误:while(*p !=
*q) 正确:while(*p || *q)
3. void fun(char *s,char t[])
{
int
i,j=0,n;
n=strlen(s);
for(i=0;i
if(i%2!=0&&s[i]%2!=0)
{
t[j]=s[i];
j++;
}
t[j]='\0';
}