1-10题目
1
题目:
下列给定程序的功能是:读入一个整数k(2<=k<=10000),打印它的所有质因子(即所有为素数的因子)。例如,若输入整数2310,则应输出:2、3、5、7、11。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include      "conio.h"
#include      "stdio.h"
/********found********/
IsPrime ( int n ) ;
{
int  i,  m;
m=1;
/********found********/
for(i=2;i<n;i++)
if !(n%i)
{
m=0;
break;
}
return(m);
}
main()
int j, k;
clrscr();
printf("\nplease enter an integer number between 2 and 10000:");
scanf("%d",&k);
printf("\n\nThe prime factor(s) of %d is(are):",k);
for(j=2;j<k;j++)
if((!(k%j))&&(IsPrime(j)))
printf("%4d,",j);
printf("\n");
}
程序第一处改错处将IsPrime ( int n );修改为IsPrime ( int n )的原因是按照C语言的语法,在函数头不能以分号结尾。所以必须将IsPrime ( int n );中的分号去掉。
程序第二处改错处将if !(n%i)修改为if (!(n%i))的原因是按照C语言的语法,if语句中的条件表达式必须使用大括号括起来,例如if (条件表达式)。否则将出现语法错误。
2
题目:
下列给定程序中,函数fun的功能是:逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或等于的字符依次存放到c数组中,形成一个新的字符串。例如,若a中的字符串为aBCDeFgH,b中的字符串为:ABcd,则c中的字符串应为:aBcdeFgH。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include <stdio.h>
#include <string.h>
void fun(char *p,char *q,char *c)
{
/********found********/
int k=1;
/********found********/
while(*p != *q)
{
if(*p<*q)
c[k]=*q;
else
c[k]=*p;
if(*p)
p++;
if(*q)
q++;
k++;
}
}
main()
{
char a[10]="aBCDeFgH",b[10]="ABcd",c[80]={'\0'};
fun(a,b,c);
printf("The string a:");
puts(a);
printf("The string b:");
puts(b);
printf("The result:");
puts(c);
}
程序第一处改错处将int k=1;修改为int k=0;的原因是k变量指示字符放入c字符串数组的下标位置,而数组下标从0开始,所以初始化为0。
程序第二处改错处将while(*p != *q)修改为while(*p || *q)
3
题目:
下列给定程序中,函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。
请改正modi.c程序中的错误,使程序能得出正确的结
果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include <stdio.h>
#include <conio.h>
void fun(char *s)
{
int i,j;
/********found********/
for(i=0,j=0;s[i]!='\0';i++)
if(s[i]>='0' && s[i]<='9')
s[j]=s[i];
/********found********/
s[j]="\0";
}
main()
{
char item[80];
clrscr();
printf("\nEnter a string :");
gets(item);
printf("\n\nThe string is : \%s\n",item);
fun(item);
printf("\n\nThe string of changing is : \%s\n",item);
}
第一处:s[j]=s[i];j++;
合并为
s[j++]=s[i];
第二处:
s[j]="\0";
应该修改成
s[j]= '\0';
4题目:
下列给定程序中,函数fun的功能是:分别统计字符串中大写字母和小写字母的个数。例如,给字符串s输入:AaaaBBb123CCccccd,则应输出结果:upper=5,lower=9。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include <conio.h>
#include <stdio.h>
/********found********/
void fun(char *s,int a,int b)
{
while(*s)
{
/********found********/
if (*s>='A'&&*s<='Z')
a++;
/********found********/
if(*s>='a'&&*s<='z')
b++;
s++;
}
}
main()
{
char s[100];
int upper=0, lower=0;
clrscr();
printf("\nPlease a string : ");
gets(s);
fun(s, &upper, &lower);
printf("\n upper=%d lower=%d\n", upper,lower);
}
第一处改错处应该将以下语句
void fun(char *s,int a,int b)
修改为
void fun(char *s,int *a,int *b)
第二处:
a++;应该修改为*a)++;
b++;修改成(*b)++;
5题目:
假定整数数列中的数不重复,并存放在数组中。下列给定程序中,函数fun的功能是:删除数列中值为x的元素,同时将其他元素前移。n中存放的是数列中元素的个数。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include <stdio.h>
#define N 20
fun(int *a,int n,int x)
{
int p=0,i;
a[n]=x;
while(x!=a[p])
{
p=p+1;
}
if(p==n)
return -1;
else
{
/********found********/
for(i=p;i<n;i++)
a[i+1]=a[i];
return n-1;
}
}
main()
{
int w[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i;
n=10;
printf("The original data:\n");
for(i=0;i<n;i++) printf("%5d",w[i]);
printf("\nInput x (to delete):");
scanf("%d",&x);
printf("Delete :%d\n",x);
n=fun(w,n,x);
if(n==-1)
printf("***Not be found!***\n\n");
else
{
printf("The data after delete :\n");
for(i=0;i<n;i++)
printf("%5d",w[i]);
printf("\n\n");
}
}
此题唯一的改错误处for(i=p;i<n;i++)
a[i+1]=a[i];
应该修改为
for(i=p;i<n;i++)
a[i]=a[i+1];
6
题目:
下列给定程序中,函数fun的功能是:根据整型形参m的值,计算如下公式的值。
t = 1 - 1/(2*2) - 1/(3*3) - …… - 1/(m*m)
例如,若m中的值为5,则应输出:0.536389。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include <conio.h>
#include <stdio.h>
double fun(int m)
{
double y=1.0;
int i;
/********found********/
for(i=2;i<m;i++)
/********found********/
y-=1/(i*i);
return(y);
}
main()
{
int n=5;
clrscr();
printf("\nThe result is %1f\n",fun(n));
}
程序第一处改错将for(i=2;i<m;i++)修改为for(i=2;i<=m;i++)
程序第二处改错将y-=1/(i*i);修改为y-=1.0/(i*i);
7题目:
下列给定程序中函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include <stdio.h>
#define N 20
void fun(int a[],int n)
{
int i,j,t,p;
for(j=0;j<n-1;j++)
{
/********found********/
p=j
for(i=j;i<n;i++)
{
if(a[i]<a[p])
{
/********found********/
p=i;
t=a[p];
a[p]=a[i];
a[i]=t;
}
}
}
}
main()
{
int a[N]={9,6,8,3,-1},i,m=5;
for(i=0;i<m;i++)
printf("%d ",a[i]);
printf("\n");
fun(a,m);
for(i=0;i<m;i++)
printf("%d ",a[i]);
printf("\n");
}
程序中第一处改错处p=j语句缺少了语句结束需要的分号。
程序中第二处改错处p=i;改为p=j;
8
题目:
下列给定程序中,函数fun的功能是:在字符串str中出ASCII码值最大的字符,将其放在第一个位置上;并将该字符前的原字符向后顺序移动。例如,调用fun函数之前给字符串输入:ABCDeFGH,调用后字符串中的内容为eABCDFGH。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include <stdio.h>
/********found********/
fun(char *p)
{
char max,*q; int i=0;
max=p[i];后端字符串转数组
while(p[i]!=0)
{
if(max<p[i])
{
/********found********/
max=p[i];
p=q+i;
}
i++;
}
while(q>p)
{
*q=*(q-1);
q--;
}
p[0]=max;
}
main()
{
char str[80];
printf("Enter a string: ");
gets(str);
printf("\nThe original string:  ");
puts(str);
fun(str);
printf("\nThe string after moving:  ");
puts(str);
printf("\n\n");
}
程序中的第一个改错处将fun(char *p)修改为void fun(char *p)
第二处改错处将p=q+i;修改为q=p+i;
9
题目:
下列给定程序中,函数fun的功能是:从n个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如,若输入8名学生的成绩:
80.5  60  72  90.5  98  51.5  88  64
则低于平均分的学生人数为4(平均分为:75.5625)。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include <conio.h>
#include <stdio.h>
#define N 20
int fun(float *s,int n,float *aver)
{
float ave,t=0.0;
int count=0,k,i;
/********found********/
for(k=0;k<n;k++)
t=s[k];
ave=t/n;
for(i=0;i<n;i++)
if(s[i]<ave)
count++;
/********found********/
*aver=&ave;
return count;
}
main()
{
float s[30],aver;
int m,i;
clrscr();
printf("\nPlease enter m: ");
scanf("%d", &m);
printf("\nPlease enter %d mark :\n ", m);
for(i=0;i<m;i++)
scanf("%f",s+i);
printf("\nThe number of students : %d\n",fun(s,m,&aver));
printf("Ave=%f\n",aver);
}
程序中第一个改错处t=s[k];修改为t+=s[k];
程序中第二处改错处*aver=&ave;修改为*aver=ave;
10
题目:
下列给定程序中,函数fun的功能是:将s所指字符串中出现的t1所指子串全部替换成t2所指子字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。例如,当s所指字符串中的内容为abcdabfab,t1所指子串中的内容为ab,t2所指子串中的内容为99时,结果,在w所指的数组中内容应为99cd99f99。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include <conio.h>
#include <stdio.h>
#include <string.h>
/********found********/
int fun(char *s,char *t1,char *t2,char *w)
{
int i;
char *p,*r,*a;
strcpy(w,s);
while(*w)
{
p=w; r=t1;
/********found********/
while(r)
if(*r==*p)
{
r++;p++;
}
else
break;
if(*r=='\0')
{
a=w;
r=t2;
while(*r)
{
*a=*r;
a++;
r++;
}
w+=strlen(t2);
}
else
w++;
}
}
main()
{
char s[100],t1[100],t2[100],w[100];
clrscr();
printf("\nPlease enter string s:");
scanf("%s",s);
printf("\nPlease enter substring t1:");
scanf("%s",t1);
printf("\nPlease enter substring t2:");
scanf("%s",t2);
if(strlen(t1)==strlen(t2))
{
fun(s,t1,t2,w);
printf("\nThe result is :%s\n",w);
}
else
printf("Error :strlen(t1)!=strlen(t2)\n");
}
程序中的第一处改错处int fun(char *s,char *t1,char *t2,char *w)修改为void fun(char *s,char *t1,char *t2,char *w)
程序中的第二处改错处while(r)修改为while(*r)
11-20题目
11
题目:
下列给定程序中,函数fun的功能是:将一个由八进制数字字符组成的字符串转换为与其面值相等的十进制整数。规定输入的字符串最多只能包含5位8进制数字。例如,若输入77777,则输出将是32767。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include <stdio.h>
int fun(char *p)
{
int n;
/********found********/
n=*p-'o';
p++;
/********found********/
while(*p!=0)
{
n=n*7+*p-'o';
p++;
}
return n;
}
main()
{
char s[6];
int i;
int n;
printf("Enter a string (0catal digits): ");
gets(s);
if(strlen(s)>5)
{
printf("Error:string too longer !\n\n");
exit(0);
}
for(i=0;s[i];i++)
if(s[i]<'0'||s[i]>'7')
{
printf("Error: %c not is ocatal digits!\n\n",s[i]);
exit(0);
}
printf("The original string: ");
puts(s);
n=fun(s);
printf("\n%s is convered to intege number: %d\n\n",s,n);
}
程序第一处改错处将n=*p-'o';修改为n=*p-'0';
程序第二处改错处将n=n*7+*p-'o';修改为n=n*8+*p-'0';
12
题目:
下列给定程序中函数fun的功能是:求出在字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未到,则函数值为NULL。
例如,当字符串中的内容为abcdabfabcdx,t中的内容为ab时,输出结果应是:abcdx。当字符串中的内容为abcdabfabcdx,t中的内容为abd时,则程序输出未到信息:not found!。
请改正modi.c程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include <conio.h>
#include <stdio.h>
#include <string.h>
char *fun(char *s,char *t)
{
char *p,*r,*a;
/********found********/
a=NuLL;
while(*s)
{
p=s;r=t;
while(*r)
/********found********/
if(r==p)
{
r++;
p++;
}
else
break;
if

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。