十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
#includestdio.h
创新互联的客户来自各行各业,为了共同目标,我们在工作上密切配合,从创业型小企业到企事业单位,感谢他们对我们的要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。专业领域包括成都网站建设、成都做网站、电商网站开发、微信营销、系统平台开发。
// 剩余不足问题
int SurplusShortage(int *p, int *q, int a, int b, int c, int d);
int main()
{
int a, b, c, d, p = 0, q = 0;
scanf("%d %d %d %d", a, b, c, d);
if (SurplusShortage(p, q, a, b, c, d))
{
printf("%d人 分 %d颗 糖\n", p, q);
printf("%d - (%d * %d) = %d\n", q, p, a, b);
printf("%d - (%d * %d) = -%d\n\n\n\n", q, p, c, d);
}
else
{
printf("None\n");
}
return 0;
}
int SurplusShortage(int *p, int *q, int a, int b, int c, int d)
{
int x = 0;
do
{
x++;
} while((a*x+b) != (c*x-d) x = 9999);
// p = 5
// q = 22
// 4 2
// 5 3
*p=x;
*q=a*x+b;
if(*p != 0 *p = 9999)
{
return 1;
}
else
{
return 0;
}
}
第三次答复:
void
createLine(struct
Node
*rear,int
item)
跟
void
createLine(struct
Node
**rear,int
item)
实际上本质是一样的,你理解引用就可以了,不过这个改法挺巧妙,只要改一个字符,比我的好。
类似于函数int
add(int
a)
int
b;
add(b);
你在add函数里面是可以改函数外变量b的值一样。
你的函数加了,这样就可以在createline函数里改函数外变量node的值了。
*******************************************
第二次答复:
我是一楼
输出是:
1.--0
2.--0
3.--3d2470
tem_addr=3d24d8,tem_value=2
rear_add=3d24d8,rear_value=2
after
createLine:
1.--2
2.--2
3.--3d24d8
完全符合楼主的要求。
刚才有事走了,没解释一下,现在解释一下。
void
createLine(struct
Node
*rear,int
item)
这样子声明函数,你在函数里面只能改rear指针对应的对象值,而rear本身的值就是传入的node的值你是改不了的,
所以函数里面的
rear=tem;
你知识改变了函数局部变量rear值,但改不了传入的node的值。
所以得用指针的指针就可以改传入的node的值了。
传入的是node的地址,所以就可以根据node的地址改node的值了,当然也可以根据node的值改node对应的对象的值
(*rear)-next=tem;
就如我改的程序一样。
好像ywsbbdf
-
举人
四级
法也是一种改法,用的是引用,实际上跟指针的指针差不多,不过安全一点。不过引用一直理解起来比较难,不如指针的指针理解方便。
******************************************
第一次答复:
得用指针的指针
还有上面一处代码tem-data=NULL;应该是tem-next=NULL;
修改代码如下
#include
"stdio.h"
#include
"stdlib.h"
struct
Node{
int
data;
struct
Node
*next;
};
struct
Node
*createNode()
{struct
Node
*tem;
if((tem=(struct
Node*)malloc(sizeof(struct
Node)))==NULL)
{printf("error");
exit(1);
}
else{
tem-next=NULL;
}
return
tem;
}
void
createLine(struct
Node
**rear,int
item)
//指针的指针
{struct
Node
*tem;
if((tem=(struct
Node*)malloc(sizeof(struct
Node)))==NULL)
{printf("error");
exit(1);
}
tem-data=item;
printf("tem_addr=%x,tem_value=%d\n",tem,tem-data);
(*rear)-next=tem;
//这样才能赋值
(*rear)=tem;
printf("rear_add=%x,rear_value=%d\n",*rear,(*rear)-data);
}
main()
{struct
Node
*Node;
Node=createNode();
printf("1.--%d\n2.--%x\n3.--%x\n",Node-data,Node-data,Node);
createLine(Node,2);
//Node指针的地址
printf("after
createLine:\n\n1.--%d\n2.--%x\n3.--%x\n",Node-data,Node-data,Node);
system("pause");
}
1:B
2:A
3:A
4:A
5:A
6:B
7:B
8:B
9:A
10:D
如果有误,请通知我,谢谢
修改后的C语言程序:
#include stdio.h
void triangle(int g)
{
int n=1, m; /* 修改处1 */
for(n;n=g; n++)
{
for(m=1;m=2*n-1;m++) /* 修改处2 */
putchar('*');
putchar('\n');
}
}
void rectangle(int g)
{
int n=1, m; /* 修改处3 */
for(n;n=g;n++)
{
for(m=1;m=3;m++) /* 修改处4 */
putchar('*');
putchar('\n');
}
}
int main()
{
int i,k;
printf("请输入行数(大于3):");
scanf("%d",i);
printf("请选择图形:1---三角形 \t2---矩形\t3---小旗 :");
scanf("%d",k);
if(k==1)
{
triangle(i);
}
if(k==2)
{
rectangle(i);
}
if(k==3)
{
triangle(i);
rectangle(i);
}
return 0;
}