#include?stdio.h
創(chuàng)新互聯成立與2013年,先為龍灣等服務建站,龍灣等地企業(yè),進行企業(yè)商務咨詢服務。為龍灣企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
#include?string.h
#define?MAXS?10
void?Shift(char?s[]);
void?GetString(char?s[]);?/*?實現細節(jié)在此不表?*/
int?main()
{
char?s[MAXS];
GetString(s);
Shift(s);
printf("%s\n",?s);
return?0;
}
//下面是修改過的答案及原因
void?GetString(char?s[])
{
scanf("%s",?s);
return;//void也寫上return比較好
}
void?Shift(char?s[])
{
int?i,?t,?d?=?0,?e;
char?a[100],?b[100],?c[100];
memset(a,?0,?sizeof(a));//abc數組都沒有初始化,里面的數據不能保證是正常的
memset(b,?0,?sizeof(b));//可能在你的電腦上數據正常,放在評測機上就錯了
memset(c,?0,?sizeof(c));
e?=?strlen(s);
for?(i?=?0;?ie;?i++)?{
if?(i?=?2)?{
a[i]?=?s[i];
}
if?(i2)?{
b[d]?=?s[i];
d++;
}
}
d?=?0;
t?=?strlen(b);
for?(i?=?0;?ie;?i++)?{
if?(it)?{
s[i]?=?b[i];
//c[i]?=?b[i];
}
if?(i?=?t)?{
s[i]?=?a[d];
//c[i]?=?a[d];
d++;
}
}
// puts(c);
return;//void也寫上return比較好
}
你這是定義的毛結構體,x根本不是什么類型,而是一個指針變量,指向結構體node的
你現在糾結的是地址變量前邊加上之后,就搞不清了。
是取地址,也就是存放符號之后的數據的地址。所有數據在內存中都有一個地址(包括指針)。這下你應該明白了在x前面加上符號后,也就是取了x這個地址數據存放的位置,可能有點繞,這個自己好看看就行了。
還有一點就是我第一眼看你的題目還以為是函數之間進行值傳遞和地址傳值的區(qū)別呢,
例:int a;
p=a
如果你把a這個參數傳到另一個函數中的話,在原來的函數中是不能改變其值的。不信你自己測試。
你把p這個值傳進去了之后,也不能改變p的值,但是能改變*p的值,也就是a的值。這樣我們想在其它函數里改變a的值的話,就在a前邊加個這樣就能改變a的值,但是在用的時候要加*
先看下我的運行結果吧,會自動判斷輸入的m、n是否合法哦!
上代碼,注釋只寫了部分有助理解的。
#include stdio.h
int Found(int m, int n, int a[])
{
int i = 0;
int Count = 0;
int offset = 0;?//數組a的下標
int qian, bai, shi, ge;?//千位、百位、十位、個位的值
for(i=m; i=n; i++)
{
//取出千位、百位、十位、個位的值
qian = i/1000;
bai = (i%1000)/100;
shi = (i%100)/10;
ge = i%10;
if((qian= bai bai=shi shi=ge) (qian+ge == bai+shi))?//找到一個符合條件的數
{
Count++;
a[offset++] = i;
}
}
return Count;
}
int main()
{
int m = 0;
int n = 0;
int nResult[100] = {0};
int Count = 0;
int i = 0;
FILE* pFile = NULL;
char szInfo[100] = {0};
while(1)
{
printf("Please enter m and n:");
scanf("%d %d", m, n);
printf("\n");
if(m=1000 n=1200 mn)
break;
else
printf("輸入數據不合法,請重新輸入\n");
}
Count = Found(m, n, nResult);
pFile = fopen("104.out", "w");
if(NULL == pFile)
printf("打開文件失敗\n");
sprintf(szInfo, "found %d numbers in %d ~ %d:\n", Count, m, n);
printf("%s", szInfo);
if(NULL != pFile)
{
fwrite("No. 104\n", 1, strlen("No. 104\n"), pFile);?//?寫入學號
fwrite(szInfo, 1, strlen(szInfo), pFile);???//寫入部分信息
}
for(i=0; iCount; i++)
{
printf("%d? ", nResult[i]);
sprintf(szInfo, "%d? ", nResult[i]);
if(NULL != pFile)??//輸出到屏幕的同時,順便把該值寫進文件
fwrite(szInfo, 1, strlen(szInfo), pFile);
}
printf("\n");
if(NULL != pFile)
fclose(pFile);
return 0;
}
自從工作以來,兩年沒上過百度知道了,當初上大學的時候天天在百度知道問問題,今偶爾閑娛,幫忙解答,想不到這里還是這么熱鬧,不禁想起了當年為一個鏈表、一個函數挑燈夜戰(zhàn)的場景。只能嘆時間太快,想不到都過去好幾年了。做程序最需要毅力,小師弟,好好努力吧,嘿嘿,下班回家咯!
結果是1.
func(x)是將外部變量x作為參數(實參)傳遞給函數func(int x)中的x(形參)
func(int x)函數中的x與外部變量x是不同的,這是兩個不同的變量,所占的內存地址也是不同的,因此形參(即func(int x)中的x)的變化并不會影響實參(即func(x)中的外部變量)的變化。
所以在函數func(int x)中令x=3,只是將func函數中的局部變量即形參x置為了3,而外部變量x認為1,所以主函數最后輸出的是1.
另外,你應該在main函數前加一個func函數的聲明
C/C++語言中,默認情況下,函數時可以從文件外部調用的。因此,函數存儲類型 extern 可以省略,表示是外部函數。static 用來表示函數存儲類型時,表示內部函數,不能從外部文件調用。