当前位置:首页 » 编程语言 » c语言改错题100道
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言改错题100道

发布时间: 2023-02-18 09:58:57

1. 初学者c语言程序改错题

首先我指出你书写的一个错误。switch(c-'2')下面那行的(
应该改成{
因为{是与default:putchar(c+2);下面出现的}进行配对的。
依次输入2473得到输出668977,只需修改一处地方。在case
2:putchar(c+4);后面加上
break;
分析如下:使用getchar输入,每次只能识别一个字符,而又使用了while循环,输入2473就相当于输入了4个数,while每次识别一个。
先分析输入2的情况:这里的2是字符'2',执行switch(c-'2'),‘2’-‘2’=0;因此要执行case
0的情况,case
0
和case
1
共用putchar(c+4),故2+4=6,要输出6,记住:输出的这个6其实是字符‘6’。然后继续执行case
2:putchar(c+4);输出第二个‘6’。这时后面加上了break;即跳出本层switch,本次while循环执行完毕。第一次循环完毕,输出了:66
然后是输入为4的情况:执行switch(c-'2'),‘4’-‘2’=2;所以执行case
2:putchar(c+4);即4+4=8,输出一个8(字符‘8’)。继续执行break;跳出本层switch,本次while循环执行完毕。第二次循环完毕,输出了:8
继续输入为7的情况:执行switch(c-'2'),‘7’-‘2’=5;要执行case
5,但本程序中并没有case
5,故执行缺省情况
default:putchar(c+2);‘7’+‘2’=‘9’,因此输出9(字符‘9’)。本次while循环执行完毕。第三次循环完毕,输出了:9
最后一个输入数3的情况:执行switch(c-'2'),‘3’-‘2’=1;所以执行
case
1:putchar(c+4);即‘3’+‘4’=‘7’,输出7(字符‘7’)。继续执行case
2:putchar(c+4);又输出了一个7(字符‘7’)。遇到后面的break;跳出switch,本次while循环结束。第四次循环结束,输出了:77
至此,全部四次循环均结束,所以最后的输出是668977.

2. c语言改错题

改错,并经实际运行,结果如下图:

#include<conio.h>
#include<stdio.h>

//intfound(inta[10][30],intn)//错误,弹出错误[Error]
intfound(inta[10][30],intn)//改错
{
inti,j,s,k,x;

//for(i=0,k=1;k<=n;k++)//修改
i=0;//此处修改,但不算错误
for(k=1;k<=n;k++)
{
//s=1;//错误
s=0;//改错,累加器,初始值为0
x=k;
for(;x<n;x++)
{
s+=x;
if(s>=n)break;
}

if(s==n)
{
//for(j=0;k+j<=x;j++)//错误,丢失最后1个元素
for(j=0;k+j<=x;j++)//改错
a[i][j]=k+j;
i++;
}

}
returni;
}

intmain()
{
inta[10][30]={0};
inti,j,n,m;

printf("n=");
//scanf("%d",&n);错误
scanf("%d",&n);//改错:n-->&n

m=found(a,n);

if(m>0)
{
printf("%dserials ",m);
for(i=0;i<m;i++)
{
for(j=0;a[i][j]!=0;j++)
printf("%4d",a[i][j]);
printf(" ");
}
}
else
printf("notfound ");

getch();
return0;
}

3. 求C语言改错题

1,给定程序MODI1.C中函数fun的功能是:根据整型形参m,计算如下公式的值。
1
1
1
1
y
=
-------
+
---------
+
---------
+
……
+
-------
100*100
200*200
300*300
m*m
例如,若m
=
2000,则应输出:
0.000160。
请改正程序中的语法错误,使它能计算出正确的结果。
注意:不要改动
main
函数,不得增行或删行,也不得更改程序的结构!
#include
<stdio.h>
/************found************/
fun
(
int
m
)/*改为double
fun
(int
m)*/
{
double
y
=
0,
d
;
int
i
;
/************found************/
for(
i
=
100,
i
<=
m,
i
+=
100
)/*改为for(
i
=
100;i
<=
m,;i
+=
100
)*/
{
d
=
(double)i
*
(double)i
;
y
+=
1.0
/
d
;
}
return(
y
)
;
}
main(
)
{
int
n
=
2000
;
printf(
"\nThe
result
is
%lf\n",
fun
(
n
)
)
;
}
2,给定程序MODI1.C中
fun
函数的功能是:分别统计字符串中大写字母和小写字母的个数。
例如,
给字符串
s
输入:AAaaBBb123CCccccd,则应输出结果:upper
=
6,
lower
=
8。
请改正程序中的错误,使它能计算出正确的结果。
注意:不要改动
main
函数,不得增行或删行,也不得更改程序的结构!
#include
<stdio.h>
/**********found**********/
void
fun
(
char
*s,
int
a,
int
b
)/*改为void
fun
(
char
*s,
int
*a,
int
*b
*/)
{
while
(
*s
)
{
if
(
*s
>=
'A'
&&
*s
<=
'Z'
)
/**********found**********/
*a=a+1
;/*改为*a=*a+1
;*/
if
(
*s
>=
'a'
&&
*s
<=
'z'
)
/**********found**********/
*b=b+1;/*改为
*b=*b+1;*/
s++;
}
}
main(
)
{
char
s[100];
int
upper
=
0,
lower
=
0
;
printf(
"\nPlease
a
string
:
"
);
gets
(
s
);
fun
(
s,
&
upper,
&lower
);
printf(
"\n
upper
=
%d
lower
=
%d\n",
upper,
lower
);
}
3,给定程序MODI1.C中函数fun的功能是:根据整型形参m的值,计算如下公式的值。
1
1
1
t
=
1
-
-----
-
-----
-
……
-
-----
2*2
3*3
m*m
例如,若
m
中的值为:
5,则应输出:
0.536389。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
<stdio.h>
double
fun
(
int
m
)
{
double
y
=
1.0
;
int
i
;
/**************found**************/
for(i
=
2
;
i
<
m
;
i++)/*for(i
=
2
;
i
<=
m
;
i++)
*/
/**************found**************/
y
-=
1
/(i
*
i)
;/*
y
-=
1.0
/(i
*
i)
;
*/
return(
y
)
;
}
main(
)
{
int
n
=
5
;
printf(
"\nThe
result
is
%lf\n",
fun
(
n
)
)
;
}
4,给定程序MODI1.C中函数fun的功能是:从s所指字符串中删除所有小写字母c。
请改正程序中的错误,使它能计算出正确的结果。
注意:不要改动
main
函数,不得增行或删行,也不得更改程序的结构!
#include
<stdio.h>
void
fun(
char
*s
)
{
int
i,j;
for(i=j=0;
s[i]!='\0';
i++)
if(s[i]!='c')
/************found************/
s[j]=s[i];/*
s[j++]=s[i];*/
/************found************/
s[i]='\0';/*
s[j]='\0';*/
}
main()
{
char
s[80];
printf("Enter
a
string:
");
gets(s);
printf("The
original
string:
");
puts(s);
fun(s);
printf("The
string
after
deleted
:
");
puts(s);printf("\n\n");
}
可以了吧

4. 一个C语言程序改错题

#include "string.h"
void sub(char*s,char*t)
{
int i,d;
d=strlen(s);
for(i=0;i<d;i++) \*把s中字符倒序存入t数组*\
t[i]=s[d-1-i];
for(i=0;i<d;i++) \*把 s中字符正序存入t数组 不过有点麻烦,可以直接拷贝strcmp(t,s),加快运行速度*\
t[d+i]=s[i];
t[2*d]='\0';
}
main()
{
char s[100], t[200];
printf( "\n Please enter string S:"); \*t数组应该是s的二倍*\
scanf("%s",s);
sub(s,t);
printf("\n The result is:%s \n ",t);
}

for(i=1;i<d;i++) i=1改为i=0 因为数组第一个元素是从零开始的;
'/n'改为 '\n' /是一个字符,而\ 后跟 n,b, ,…………是功能字符
还有如果在c++里边应该去掉clrscr()

5. C语言改错题

#include<stdio.h>
#include<stdlib.h>
intmain(void)
{
/*********Found************/
//charpch[2];
char*pch//应该用一个char型指针指向申请的空间的首地址
/*********Found************/
//if(pch=(char*)malloc(100)==NULL)
if((pch=(char*)malloc(100))==NULL)//漏了一对小括号
{
printf("mallocmemoryfail! ");
return1;
}
printf("%p ",pch);
/*********Found************/
//close(pch);
free(pch);//释放指针pch指向的内存块,应该用free,不是close
return0;
}