
#include<stdioh>
#include<stringh>
#define N 10
void input(int num[],char name[N][8]) / input是输入数据的函数 /
{int i;
for(i=0;i<N;i++)
{printf("\n Input NO:");
scanf("%d",&num[i]);
printf("Input name:");
getchar( );
gets(name[i]);
}
}
void sort(int num[ ],char name[N][8]) /排序的数组/
{int i,j,min,temp1;
char temp2[8];
for(i=0;i<N-1;i++)
{min=i;
for(j=i;j<N;j++)
if(num[min]>num[j]) min=j;
temp1=num[i];
strcpy(temp2,name[i]);
num[i]=num[min];
strcpy (name[i],name[min]);
num[min]=temp1;
strcpy(name[min],temp2);
}
printf("\n result: \n");
for(i=0;i<N;i++)
printf("\n %5d%10s",num[i],name[i]);
}
void search(int n,int num[],char name[N][8]) / 折半查找函数 /
{int top,bott,mid,loca;
int min;
int sign;
loca=0;
top=0;
bott=N-1;
if ((n<num[0]) || (n>num[N-1]))
loca=-1;
while ((sign==1) && (top<=bott))
{min=(bott+top)/2;
if (n==num[mid])
{loca=mid;
printf("NO %d , His name is %s\n",n,name[loca]);
sign=-1;
}
else if (n<num[mid])
bott=mid-1;
else
top=mid+1;
}
if (sign==1 || loca==-1)
printf("Can't find%d \n",n);
}
void main()
{int num[N],number,flag=1,c,n;
char name[N][8];
input(num,name);
sort(num,name);
while(flag==1)
{printf("\n Input number to look for:");
scanf("%d",&number);
search(number,num,name);
printf("Continue or not(Y/N)");
getchar();
c=getchar();
if (c=='N' || c=='n')
flag=0;
}
}
帮你修改完了,总共有三个地方错误
void search(int n,num[],char name[N][8]) /排序的数组/ 这里的num[]前面要加个int
再在这个函数里面定义二个变量,分别 int sign; 和 int min
首先我指出你书写的一个错误。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
按照题目要求改完的两个程序如下(改动的地方见注释)
第一个程序
#include<stdioh>
void main()
{
float n,f;
float x1=1,x2,temp;//这里x1初始化为1,因为要先给x1赋值
printf("Enter a positive number:");
scanf("%f",&n);
while(1)
{
x2=(x1+n/x1)/2;//这里这句移到这里,因为要先给x2赋值
temp=x1-x2;
if(temp<0)
temp=-temp;
if(temp<1e-5)
break;
x1=x2;
}
printf("The square root of %52f is %85f\n",n,x2);
}
第二个程序
#include<stdioh>
void main()
{
float n,f;
float sqroot(float n);
printf("Enter a positive number:");
scanf("%f",&n);
f=sqroot(n);//这里接收函数返回值,因为函数有返回值
printf("The square root of %52f is %85f\n",n,f);//这里把x2改成f,因为x2未定义
}
float sqroot(float n)
{
float x1=1,x2,temp;//这里x1初始化为1,因为x1要先赋值
for(;;)//这里去掉temp>1e-5,因为for循环体中有判断了
{
x2=(x1+n/x1)/2;//这里这句移到这里,因为x2要先赋值
temp=x1-x2;
if(temp<0)
temp=-temp;
if(temp<1e-5)
break;
x1=x2;
}
return x2;
}
根据你的要求我将你的程序修改如下:具体的错误我会在此行做一定的解释。
#include<stdioh>
#include<mathh>
main()
{
int x,i;
float sum,c=1;//首先是这里的c,你要把c>=1e-5作为while循环的条件就应该先给c一个适当的值(这里就暂时赋大于1e-5的数1),否则系统会给它一个任意的值而导致程序错误。下次在使用时要注意啊。这其实和垒加时给sum赋0,垒乘时给它赋1是一样的啊。
x=1,i=1,sum=0;
while(c>=1e-5)
{
x=xi;
c=10/x;//其次是这里,你有没有到我把原来的1/x改成了10/x。这样改的原因是:c这里你定义的是单精度实型主要是为了保留小数点后的相应位数。但你原来的c=1/x;表达式左边c虽然是单精度实型,但右边的1/x中1和x却都是整型的。这就使1/x的值最终为整型。完全不符合你的想法。要想符合自己的想法这里就要对1/x进行类型强制转换。c语言中规定数据类型转换的原则是:为两个运算对像的计算结果尽可能多的提供存储空间。根据转换原则这里改为10/x。因为10是单精度实型在一般的系统中它占用4个字节,而x为整型在一般的系统中它占用2个字节10占的存储空间比x多,于是就进行强制转换将10/x结果转换为占存储空间多的单精度实型。这样就能把小数点后的数字保存下来了。
sum=sum+c;
i++;
}
printf("sum=%f",sum);
getch();
}
/求1+1/2!+1/3!+1/4!+1/5!+……+1/n!使误差小于10的-5次方/
你的程序其它的都对,设计的算法也很好。以后多学习一点c语言的理论知识。相信你的c语言一定会有很大的提高。加油啊!
#include <stdioh>
#include <mathh>
#include "mathh"
float fun(int n)
{
int i = 0, sum = 0;
float s = 20f;
for (i = 1; i <= n; i++)
{
sum = sum + i;
if (sum == 1) continue;
printf("( 1 + %d ) + 1 = %d\n", i, sum + 1);
s = s / (sum + 1);
printf(" %016f \n", s );
}
return s;
}
int main()
{
fun( 10 );
return 0;
}
1程序的功能是判断用户是不是输入的整数0
#include<stdioh>
int main()
{
int n;
printf("请输入一个整数:\n");
scanf("%d", &n);
/Found/
switch (n)
{
/Found/
case 0: printf("Zero\n"); break;
default: printf("Non-Zero\n"); break; //此处break可要可不要
}
return 0;
}
2程序的功能是输入一个整数,如果为1时输出100,为2时输出200,其它输出0
#include<stdioh>
int main()
{
int x, y;
printf("请输入一个整数:\n");
scanf("%d", &x);
switch (x)
{
case 1: y = 100; break; //case 1:相当于if(x==1){},case后面跟一个值,而不是一个表达式
case 2: y= 200; break;
default: y = 0; break;
}
printf("%d\n", y);
return 0;
}
//顺便说一句,switch语句括号里面的值是有要求的,byte,short ,int ,char,其它的基本都不行,
//比如float,double,long之类的都不行
以上就是关于C语言程序改错全部的内容,包括:C语言程序改错、初学者C语言程序改错题、C语言改错题,根据题目修改图中错误的源程序代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)