新手求教:大侠看一段很简单的c语言代码,真没看出来哪儿错了

供稿:hz-xin.com     日期:2025-01-12
下面是我用C语言实现字符串的复制的代码,没报错但是就是输不出结果,不知道错在哪,求大侠指教:

while(strSrc != NULL) strSrc永远不为Null,应该是 *strSrc
复制完成后没有写入结束符 \0

#include
#include
struct BiTNode
{
char c;
BiTNode *lchild,*rchild;
}*BiTree;
void createtree(BiTNode *&T)
{
char c;
scanf("%c",&c);
if(c==' ')
T=NULL;
else
{
T=(BiTNode *)malloc(sizeof(BiTNode));
T->c=c;
createtree(T->lchild);
createtree(T->rchild);
}
}
void printtree(BiTNode *T)
{
if(T!=NULL)
{
printf("%c",T->c);
if(T->lchild)
printtree(T->lchild);
if(T->rchild)
printtree(T->rchild);
}
}
void main()
{
BiTNode *T;
createtree(T);
printtree(T);
printf("
");
}

因为1是任意数的因子,所以a[i]初值应为1,循环次数最好改成min(m,n),否则运算中会有负数除法。还有要求a和(M-a)都是N的因子,所以应该用逻辑与。修改程序如下:
#include<stdio.h>
int main()
{
int N[100],M[100],a[100];
int K,i,min;
scanf("%d",&K);
for (i=0;i<K;i++)
{
a[i]=1;//初值为1
scanf("%d %d",&N[i],&M[i]);
min=(N[i]>M[i])? N[i]:M[i];//其实只要进行m和n中最小数次循环就好了
do
{
a[i]=a[i]+1;
}
while (((N[i]%a[i]!=0)&&(N[i]%(M[i]-a[i])!=0))&&(a[i]<=min));//与逻辑
}
for (i=0;i<K;i++)
{
if(a[i]>=min) printf("-1\n");
else printf("%d\n",a[i]);
}
return 0;
}

if(a[i]>=M[i])应该改成 if(a[i]>=N[i])吧
PS:楼上不要乱误导人额,要知道do中是先的,你设为1其实是2.。。。
第一,初始值怎么可能是1,如果是2 1怎么办;
第二,while中使用((N[i]%a[i]!=0)&&(N[i]%(M[i]-a[i])!=0))&&(a[i]<=min)的话只要有一个满足整除就跳出来了额!!

编译了一下能运行,起来,但是感觉结果有点问题哦

求大侠如何用c语言求x+lnx=0的值
\/*y=x+lnx为增函数(x>0),所以方程x+lnx=0有一解,且0<x<1 *\/ include <stdio.h> include <math.h> int main(void){ float x1=0,x2=1,x0,y;while(1){ x0=(x1+x2)\/2;y=x0+log(x0);if(fabs(y)<1e-6){ printf("方程x+lnx=0的解为:\\nx=%f\\n",x0);break;...

求C语言大侠帮帮菜鸟~!
楼上的说的答题都对,但是 switch(int(b)) 是绝对不可以的 如果b=0.1呢??实际是可以的 可是你那样子就不可以了 我建议 1、switch 只能用 char int long 等整形数值 没用错 2、switch(b) 建议修改为 if(b==0.0)printf("Enter data error!\\n");break;else{ c=a\/b,printf("=%f\\n...

哪位大侠精通c语言,推荐几个有趣的 实用的 c语言小程序
include"stdio.h"include"stdlib.h"include"windows.h"main(){ int i;printf("呃,我要做什么呢?让我想想");for(i=1;i<=7;i++){ printf(". ");Sleep(1*1000);} printf("\\n");printf("啊,有了 哈哈");for(i=1;i<=15;i++){ printf("~");Sleep(1*100);} printf("...

操作系统老师让我们,用最简单的C语言知识,实现操作系统中多级反馈队列...
多级反馈队列调度算法 多级反馈队列调度算法是一种CPU处理机调度算法,UNIX操作系统采取的便是这种调度算法。 多级反馈队列调度算法即能使高优先级的作业得到响应又能使短作业(进程)迅速完成。(对比一下FCFS与高优先响应比调度算法的缺陷)。 多级(假设为N级)反馈队列调度算法可以如下原理: 1...

c语言编程高手来帮我看看,百钱买百鸡问题~
同样也是一个赋值语句,不过编译会出现语法错误,因为无法把100赋值给a+b+c。第二个问题:一个=是赋值运算符,==是相等比较运算符,你需要进行什么样的运算就必须使用相应的运算符。第三个问题:b++等价于:b=b+1,这样会对b重新赋值。b+1只是一个表达式,b并不会变化。

C语言 麻烦各位大侠帮我解释个程序
宏定义中的SQR(X) X*X有如下作用:在接下来的程序中,SQR(某表达式)被直接变为:某表达式*某表达式(注意没有括号)所以 SQR(k+m)就相当于 k+m*k+m a\/=SQR(k+m)\/SQR(k+m)就相当于 a=a\/k+m*k+m\/k+m*k+m 应该懂了吧~?

C语言求教
ss(str1,c);printf("%s\\n",str1);} 输出的结果是把str1的d全改为D ss函数的作用就是当遇到d时改为D,形参传的是数组str1 的数组首地址,s++代表地址向前推一个,这样就能把整个数组都检查一遍相当于是str1[i++],而 s=t-'a'+'A';是把小写字母换成大写字母,这是一个经典转换方法...

求助!大侠帮帮忙,设计一个c语言程序,输出100到1000的素数。要求是使用fo...
include <stdio.h>void main(){ int a=100, b=1000, count=0; int i; int j; int hang=0;printf("100 - 1000 之间素数统计\\n"); for(i=a; i<=b; i++) { for(j=2; j<=i; j++) { if(i==j) {hang++; printf("%5d",i); if(...

C语言编程达人请进
看这一句:fwrite(&arr,sizeof(int),1,fp);sizeof(int)表示你写入的一块的大小,你用的是一个int大小。1表示你要写入的块的数目。显然在你机器上一个int是4个字节,而arr的类型是char *,一个char是1个字节,所以你写入4个字节大小的数据时就会写入四个字符。如果你要写入全部字符,改成 fwri...

一个简单的C语言编程,各位帮我看看有什么错误。运行时显示ignore, eras...
加上那个m后,程序是对的,没问题