重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1,调用非自身函数
成都创新互联公司一直在为企业提供服务,多年的磨炼,使我们在创意设计,成都营销网站建设到技术研发拥有了开发经验。我们擅长倾听企业需求,挖掘用户对产品需求服务价值,为企业制作有用的创意设计体验。核心团队拥有超过十年以上行业经验,涵盖创意,策化,开发等专业领域,公司涉及领域有基础互联网服务成都电信服务器托管、成都app开发、手机移动建站、网页设计、网络整合营销。
void main(){
int n=0;
n=fun(n);
printf("%d",n);
}
int fun(int n){
if(n==0){
return 1;
}else{
return 0;
}
}
2,递归,函数调用自身
int fun(int n){
if(n==1){
return 1;
}else{
return n+fun(n-1);
}
}
#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;
}
}
修改后的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;
}
第三次答复:
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");
}