k=j;
}
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
错误intqueue(intarray2[n])//定义为数组排序的函数
{
inti,j,temp;
for(i=0;i<=n-2;i++)//选择法排序
for(j=i+1;j<=n-1;j++)
{
if(array2[i]>array2[j])//交换数组的值
{
temp=array2[i];
array2[i]=array2[j];
array2[j]=temp;
}
}
}
return(array2[n]);//此返回值的意义是什么?
为什么程序运行成功?
【此返回值其实已经溢出了,通过调试函数可以看出】
/*===========================================
本函数用于将数组中的元素值作为ACSII码生成字符串,并对应存储输
入的字符数组中。
参数说明:
a[]数组作为ACSII码;num表示数组长度;str[]用于储存
形成的字符串;
返回值:
无
============================================*/
此时不需要返回值所以不需要定义函数的类型,为空即可;
voidACSIIstr(inta[],intnum,charstr[])
{
inti;
for(i=0;i{
str[i]=a[i];
}
}
Thevariable'num'isbeingusedwithoutbeinginitialized.
到底是毛意思啊
intpanduan(charstr1[],charstr2[])
{
inti=0,j=0,k=0,len1,len2,num=0;
{
如果这里写成num,就会出现:
还有一种情况则是未加&
Thevariable'num'isbeingusedwithoutbeinginitialized.
}
while(j>=0)
{
if(str1[j]==0)break;
如果此处写成str1[j]==’0’,那么此处的循环成为死循环。
j++;
}
len1=j;
while(k>=0)
{
if(str2[k]==0)break;
k++;
}
len2=k;
for(i=0;i<=len2-1;i++)
{
if(str2[i]==str1[0])
{
num=0;
for(j=0,k=i;k<=len2-1,j<=len1-1;j++,k++)
{
if(str2[k]==str1[j]/*||str1[i]==str2[j]+32||str1[i]==str2[j]-32*/)
{num++;}
elsebreak;
}
}
if(num==len1)return1;
}
return0;
}
#include
#definen30
voidmain()
{
intnumb=0,array2[n]={1,1,1,1,1},len1=0,i=0;
inttran2(intnum,intarray1[n],intlen);
printf("请?
输?
入?
一?
个?
十?
进?
制?
正y整?
数簓:
阰\n");
scanf("%d",&numb);
len1=tran2(numb,array2,len1);
printf("len1=%d\n",len1);
for(i=0;i<=len1-1;i++)
{
//if(array2[i]!
=0)
printf("%d",array2[i]);
}
printf("\n");
}
inttran2(intnum,intarray1[n],intlen)
{
inti=0,j,shan,temp;
while(num)
{
printf("%d\n",num%2);
shan=num/2;
if(num%2)
{array1[i]=1;}
else
{array1[i]=0;}
printf("%d\n",array1[i]);
i++;
printf("%d\n",i);
num=shan;
}
for(j=0;j<=i-1;j++)
{
temp=array1[j];
array1[j]=array1[i-1-j];该方法错误,其实在j=2的时候交换已经全部完成,再
array1[i-1-j]=temp;继续下去就又交换了一遍
printf("%d",array1[j]);
}
for(j=0;j<=(i-1)/2;j++)
{
temp=array1[j];
array1[j]=array1[i-1-j];
array1[i-1-j]=temp;
}
len=i;
return(len);
}
1:
Numbiscorrupt的原因是数组定义为array【】=0;
2:
函数未返回值的时候len1=0,为什么?
明明函数里面的len值已经改变了;
3:
如果函数想要返回两个值应该怎么办?
E59
#include
#include
#definen100
voidsushu(int*p,intm);
intmain()
{
intarr[n]={0},*pl,i;
pl=arr;
sushu(pl,n);
for(i=0;i<=n-1;i++)
{
printf("%5d",*pl++);
if(i%10==9)
printf("\n");
}
}
voidsushu(int*p,intm)
{
intk,i,j,num;
for(i=2,num=0;num{
k=sqrt(i*1.0);
for(j=2;j<=k;j++)
{
if(i%j==0)break;
}
if(j<=k)continue;
else
{*p++=i;num++;}
}
}
如果num《=m,则显示“arr”iscorrupt。
原因依然是数组的越界。
voidsort(int*p,intm)//定¨义?
排?
序ò函ˉ数簓,?
两?
个?
参?
数簓,?
数簓组哩?
首骸?
地?
址·及°有瓺效§元a素?
的?
个?
数簓
{
inti,j,temp;
for(i=0;i<=m-2;i++)
for(j=i+1;j<=m-1;j++)总是把j写成j=0;导致出错
{
if(p[i]>p[j])
{
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
}
voidsscanf(int*p,intm)//定¨义?
排?
序ò函ˉ数簓,?
两?
个?
参?
数簓,?
数簓组哩?
首骸?
地?
址·及°有瓺效§元a素?
的?
个?
数簓
{
inti;
printf("请?
输?
入?
数簓组哩?
的?
元a素?
:
阰\n");
for(i=0;i{
scanf("%d",p++);这种输入不能输逗号的,只能用空格或者enter
}
#include
inttrans(char*p,intmax);//对?
函ˉ数簓的?
声Θ?
明÷
inttrans2(char*p,intmin);
intmain()
{
chararr[4]={0},*pl;
inti,ma=0,mi=0;
printf("请?
输?
入?
少Θ?
于?
个?
数簓字?
符?
:
阰\n");//输?
入?
数簓字?
符?
for(i=0;i<=3;i++)
{
arr[i]=getchar();
arr[i]-=48;
if(arr[i]==-38)此种赋值挺重要的,为什么?
=-38
{arr[i]=0;}
}
pl=arr;
ma=trans(pl,ma);
mi=trans2(pl,mi);
printf("max=%d\nmin=%d\n",ma,mi);
}
inttrans(char*p,intmax)
{
inttemp,i,j;
for(i=0;i<=2;i++)
for(j=i+1;j<=3;j++)
{
if(p[i]>p[j])
{
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
if(p[2]==0)
{max=p[3];}
elseif(p[1]==0)
{max=p[2]+p[3]*10;}
elseif(p[0]==0)
{max=p[1]+p[2]*10+p[3]*100;}
else
max=p[0]+p[1]*10+p[2]*100+p[3]*1000;
return(max);
}
inttrans2(char*p,intmin)
{
inttemp,i,j;
for(i=0;i<=2;i++)
for(j=i+1;j<=3;j++)
{
if(p[i]>p[j])
{
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
min=p[3]+p[2]*10+p[1]*100+p[0]*1000;
return(min);
}
E6412.27
不能将参数1从“char*”转换为“int*”,是什么意思?
题目中调用函数时是chardele(char*P,intm),
但是函数声明却将其写成了chardele(int*P,intm);
运算符“==”不起任何作用,是否是有意的,通常情况下是将“=”打错了。
。
。
。
Isbeingusedwithoutbeingintialized;
既未被初始化的变量;
可能是等号两边的顺序搞错或未将指针赋值;
输完字符串后windows显示要关闭系统,错误原因是指针指到了不该指的地方;
p1=p2=p;p2+=m-1;
第一次将m-1写成了m,导致溢出;
使用scanf(“%S“,str);如果中间输入了空格的话,之后的字符便不能输入。
倘若题目需要这样,则尽量使用gets输入字符串;
Gets(pl);
Puts(pl);
char*dele(char*p,intm,char*pl)
{
char*temp;
temp=pl;
inti;
for(i=0;i<=m-1;i++,p++)
{
if(*p>='a'&&*p<='z')
{
*pl=*p;
pl++;
}
if(*p>='A'&&*p<='Z')
{
*pl=*p+32;
pl++;
}
}
*pl='\0';此处的pl赋值非常重要
pl=temp;使得pl回到数组开头
return(pl);
}
输出指针数组内的元素
voidprint(char*p[],intn)//定义print函数,有两个参数,一个为指针数组,一个为元素个数
{
inti;
for(i=0;iprintf("%s\n",p[i]);
}
注意用的是P【i】,而不是*p【i】。
#include
#definem128
voiddelchar(char*p,intk,intn);
intmain()
{
charstr[m]={0},*pl;
intk,n;
printf("请?
输º?
入¨?
一°?
个?
字Á?
符¤?
串ä?
:
êo\n");
scanf("%s",str);
pl=str;
printf("%s",str);
printf("去¨£¤除y字Á?
符¤?
串ä?
从䨮第̨²k个?
字Á?
符¤?
开a始º?
的Ì?
n个?
字Á?
符¤?
\n请?
输º?
入¨?
k\n");
scanf("%d",&k);
printf("请?
输º?
入¨?
n\n");
scanf("%d",&n);
delchar(pl,k,n);
pl=str;
while(*pl!
='\0')//判D断?
字Á?
符¤?
是º?
否¤?
为a‘?
\0’¡¥
{
printf("%c",*pl);
pl++;
}
printf("\n");
return0;
}
voiddelchar(char*p,intk,intn)
{
inti,j;
for(i=0;i<=k-2;i++)
{
p++;
}
while(*p!
=0)//此处用‘\0’和0程序均显示正确。
{
*p=*(p+3);
p++;
}
*p='\0';这个就不需要了
}