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