1,調(diào)用非自身函數(shù)
成都創(chuàng)新互聯(lián)公司一直在為企業(yè)提供服務(wù),多年的磨煉,使我們在創(chuàng)意設(shè)計,成都營銷網(wǎng)站建設(shè)到技術(shù)研發(fā)擁有了開發(fā)經(jīng)驗(yàn)。我們擅長傾聽企業(yè)需求,挖掘用戶對產(chǎn)品需求服務(wù)價值,為企業(yè)制作有用的創(chuàng)意設(shè)計體驗(yàn)。核心團(tuán)隊擁有超過十年以上行業(yè)經(jīng)驗(yàn),涵蓋創(chuàng)意,策化,開發(fā)等專業(yè)領(lǐng)域,公司涉及領(lǐng)域有基礎(chǔ)互聯(lián)網(wǎng)服務(wù)成都電信服務(wù)器托管、成都app開發(fā)、手機(jī)移動建站、網(wǎng)頁設(shè)計、網(wǎng)絡(luò)整合營銷。
void main(){
int n=0;
n=fun(n);
printf("%d",n);
}
int fun(int n){
if(n==0){
return 1;
}else{
return 0;
}
}
2,遞歸,函數(shù)調(diào)用自身
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("請輸入行數(shù)(大于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;
}
第三次答復(fù):
void
createLine(struct
Node
*rear,int
item)
跟
void
createLine(struct
Node
**rear,int
item)
實(shí)際上本質(zhì)是一樣的,你理解引用就可以了,不過這個改法挺巧妙,只要改一個字符,比我的好。
類似于函數(shù)int
add(int
a)
int
b;
add(b);
你在add函數(shù)里面是可以改函數(shù)外變量b的值一樣。
你的函數(shù)加了,這樣就可以在createline函數(shù)里改函數(shù)外變量node的值了。
*******************************************
第二次答復(fù):
我是一樓
輸出是:
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
完全符合樓主的要求。
剛才有事走了,沒解釋一下,現(xiàn)在解釋一下。
void
createLine(struct
Node
*rear,int
item)
這樣子聲明函數(shù),你在函數(shù)里面只能改rear指針對應(yīng)的對象值,而rear本身的值就是傳入的node的值你是改不了的,
所以函數(shù)里面的
rear=tem;
你知識改變了函數(shù)局部變量rear值,但改不了傳入的node的值。
所以得用指針的指針就可以改傳入的node的值了。
傳入的是node的地址,所以就可以根據(jù)node的地址改node的值了,當(dāng)然也可以根據(jù)node的值改node對應(yīng)的對象的值
(*rear)-next=tem;
就如我改的程序一樣。
好像ywsbbdf
-
舉人
四級
法也是一種改法,用的是引用,實(shí)際上跟指針的指針差不多,不過安全一點(diǎn)。不過引用一直理解起來比較難,不如指針的指針理解方便。
******************************************
第一次答復(fù):
得用指針的指針
還有上面一處代碼tem-data=NULL;應(yīng)該是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");
}