本文目錄一覽:
為什麼c語言指針那麼難?
指針確實難於理解。指針具有兩個身份:
第一,指針本身是一個變數。只要是是變數,它就佔用內存地址。當然如果沒有分配內存地址,不在其內。
第二,指針包含一定的一個內容。指針所特殊的就是,他的內容保存的是其他變數的地址。
以上兩點可以通過書中的示例7-7有比較好的體現。
例如,定義指針變數intp1。 intp1=a 就表示 intp1保存的信息為a的地址。
而*intp1表示是intp1所保存地址的內存單元所保存的值,實際就是a的值。
所以,你給出的 *intp1=a; 是一種不太合適寫法。我們可以這樣假設,再給一個變數b。令*intp1=b=a,則
b=a,說明b保存的a的地址,這樣b就是一個指針。那*intp1=b,則說明 intp1所保存的地址指向的內存單元為b。所以,intp1可以看成a的指針的指針。
上面這個例子比較繞,慢慢想想,就理解了。
c語言編寫水仙花數
方法:先弄懂什麼是水仙花數::
水仙花數是指一個n(=3)位數字的數,它等於每個數字的n次冪之和。
3位水仙花數————先定義3個數其中一個為1--9;2個為0--9;(用for循環)
再用如果a定義為1--9那麼用100*a來表示百位;如果b或者c定義是0--9那麼用10*b或者10*c來表示十位;那麼下面用c或者b來表示個位;
if(100*a+10*b+c==a*a*a+b*b+c) 如果滿足這個條件那麼:輸出的printf(“%d%d%d”,a,b,c)就是3位數的水仙花數:
4位水仙花數方法同上:
剛寫的:調試過了
#include stdio.h
int main(void)
{
int a,b,c,d;
system(“cls”);
for(a=1;a=9;a++)
for(b=0;b=9;b++)
for(c=0;c=9;c++)
if(100*a+10*b+c==a*a*a+b*b*b+c*c*c)
printf(“%d%d%d\n”,a,b,c);
for(a=1;a=9;a++)
for(b=0;b=9;b++)
for(c=0;c=9;c++)
for(d=0;d=9;d++)
if(1000*a+100*b+10*c+d==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)
printf(“%d%d%d%d\n”,a,b,c,d);
getch();
}
或者這樣:
#include stdio.h
int main(void)
{
int a,b,c,d;
system(“cls”);
for(a=1;a=9;a++)
for(b=0;b=9;b++)
for(c=0;c=9;c++)
{
if(100*a+10*b+c==a*a*a+b*b*b+c*c*c)
printf(“%d%d%d\n”,a,b,c);
for(d=0;d=9;d++)
if(1000*a+100*b+10*c+d==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)
printf(“%d%d%d%d\n”,a,b,c,d);
}
getch();
}
c語言中的賦值,輸入輸出語句可以構成(?)基本結構!
c語言輸入輸出函數C語言輸入輸出函數有很多,標準I/O函數中包含了如下幾個常用的函數:scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等.intscanf(constchar*format,arg_list)scanf主要從標準輸入流中獲取參數值,format為指定的參數格式及參數類型,如scanf(“%s,%d”,str,icount);它要求在標準輸入流中輸入類似”sonofbitch,1000″這樣的字元串,同時程序會將”sonofbitch”給str,1000給icount.scanf函數的返回值為int值,即成功賦值的個數,在上例中如果函數調用成功,則會返回2,所以我們在寫程序時,可以通過語句if(scanf(“%s,%d”,str,icount)!=2){}來判斷用戶輸入是否正確.intprintf(constchar*format,arg_list)printf主要是將格式化字元串輸出到標準輸出流中,在stdio.h頭文件中定義了標準的輸入和輸出,分別是stdin,stdout.arg_list可以是變數名,也可以是表達式,但最終都會以值的形式填充進format中.intgetc(FILE*fp)getc主要是從文件中讀出一個字元.常用的判斷文件是否讀取結束的語句為:(ch=getc(fp))!=EOF.EOF為文件結束標誌,定義在stdio.h中,就像EXIT_SUCCESS,EXIT_FAILURE定義在stdlib.h中一樣,文件也可以被理解為一種流,所以當fp為stdin時,getc(stdin)就等同於getchar()了.intputc(intch,FILE*fp)putc主要是把符ch寫到文件fp中去.如果fp為stdout,則putc就等同於putchar()了.intgetchar(void)getchar主要是從標準輸入流讀取一個字元.默認的標準輸入流即stdio.h中定義的stdin.但是從輸入流中讀取字元時又涉及到緩衝的問題,所以並不是在屏幕中敲上一個字元程序就會運行,一般是通過在屏幕上敲上回車鍵,然後將回車前的字元串放在緩衝區中,getchar就是在緩衝區一個一個的讀字元.當然也可以在while循環中指定終止字元,如下面的語句:while((c=getchar())!=’#’)這是以#來結束的.intputchar(intch)putchar(ch)主要是把字元ch寫到標準流stdout中去.char*gets(char*str)gets主要是從標準輸入流讀取字元串並回顯,讀到換行符時退出,並會將換行符省去.intputs(char*str)puts主要是把字元串str寫到標準流stdout中去,並會在輸出到最後時添加一個換行符.char*fgets(char*str,intnum,FILE*fp)str是存放讀入的字元數組指針,num是最大允許的讀入字元數,fp是文件指針.fgets的功能是讀一行字元,該行的字元數不大於num-1.因為fgets函數會在末尾加上一個空字元以構成一個字元串.另外fgets在讀取到換行符後不會將其省略.intfputs(char*str,file*fp)fputs將str寫入fp.fputs與puts的不同之處是fputs在列印時並不添加換行符.intfgetc(FILE*fp)fgetc從fp的當前位置讀取一個字元.intfputc(intch,file*fp)fputc是將ch寫入fp當前指定位置.intfscanf(FILE*fp,char*format,)fscanf按照指定格式從文件中出讀出數據,並賦值到參數列表中.intfprintf(FILE*fp,char*format,)fprintf將格式化數據寫入流式文件中.字元串輸入:gets()charname[20];printf(“Hi,What’syourname?\n”);gets(name);printf(“Nicename%s”,name);它使用一個地址把字元串賦予name。charname[20];char*p;printf(“\nEn,What’syourname?\n”);p=gets(name);printf(“%s?Oh,Nicename%s\n”,name,p);get()的代碼使用return關鍵字返回字元串的地址,程序把這個地址分配給指針p。fgets()fgets()是為文件I/O而設計的,處理鍵盤輸入不是特別方便。printf(“\nHi,What’syourname?\n”);p=fgets(name,20,stdin);printf(“%s?Oh,Nicename%s\n”,name,p);*fgets()的第二個參數說明最大讀入的字元數。如果這個參數值為n,那麼fgets()就會讀取最多n-1個字元或讀完一個換行符為止。兩個條件滿足任意一個結束。*fgets()讀取到換行符,就會把它存到字元串里,而不是想gets()那樣丟棄它。*fgets()的第三個參數說明讀哪個文件。從鍵盤上讀數據時,可以使用stdin(代表standardinput)作為參數。scanf()charname1[11],name2[11];intcount;printf(“\nPleasewritedown2names\n”);count=scanf(“%5s%6s”,name1,name2);printf(“\nname1:%s\nname2:%s”,name1,name2);scanf()允許指定輸入字元串長度等格式。上面的程序如果輸入”liujiajialiujiajia”,程序將輸出”name1:liujiname2:liujia”;字元串輸出:puts()charstr[15]=”helloworld”;constchar*str2=”HELLOWORLD”;puts(str);puts(str2);puts(str[5]);puts(str2+2);puts()顯示字元串時自動在其後添加一個換行符。puts(str[5]);將輸出從str的第六個元素開始到字元串結束。puts(str2+2);將輸出從str2的地址向後移動兩個字元開始到字元串結束。fputs()fputs(str,stdout);fputs(str2,stdout);fputs(str[5],stdout);fputs(str2+2,stdout);*fputs()第二個參數表示要寫的文件。可以使用stdout(代表standardoutput)作為參數。*fputs()不自動輸出換行符,這與puts()不太相同。
syntax error : missing ‘)’ before ‘;’
在C語言中,這是一個語法錯誤。
C語言中參數的定義必須放在函數體的開頭。作出以下更改:
#包括 stdio, h
#包括時間。H
# include stdlib。H
定義randomize()srand((無符號)time(NULL))//定義一個宏來生成隨機數
定義N10//次的重新部署
#定義RealPage4
頁面結構
{
Intpn;//頁碼
IntPFN。//頁碼
Int*;
//structPage*next;//轉到下一頁
};
Intcount,k,I,j,flag,call[N]
StructPageMemPage[RealPage];
Void輸出()
{intp;
Printf("\n\n----------------------------內存頁-------------------------------------\n」);
Printf(「調度順序:」);
對於(p = 0;P N. P++)
Printf("%d",調用[p]);
Printf("\n");
對於(k = 0;K RealPage;K + +)
「序列號:%d虛擬頁碼:%d實際頁碼:%d時間:%d計數:%d\n」,k,MemPage[k]。Pn,MemPage[k]。PFN,MemPage[k]。
}
Intmain()
{intinit_t;
數=0;//換掉櫃檯
For (init_t = 0;Init_t RealPage;Init_t + +)
//MemPage[init_t]PFN=1;
隨機();
Printf(「調度順序:」);
For (I = 0;I N. I++)
{
調用[I]=rand()%10;
Printf("%d",調用[I]);
}
//日程開始了
For (I = 0;I N. I++)
{intm,r,n=755599998;
標誌=1;
對於(m = 0;M RealPage MemPage [M]。Pn !=叫[我];M + +)
{
如果(MemPage[m]。PFN==0){
MemPage[m]。PFN=3478-m*79;
MemPage[m]。*=1;
MemPage[m]。Pn=call[I];
數++;
打破;
}
}
//輸出();
對於(j = 0;J 4 國旗!= 0;J + +)
{
如果(調用[I]==MemPage[j]。雜誌的pn)
{
國旗=0;
打破;
}
//該頁面無法在真實頁面中找到,因此使用LRU演算法替換
其他的
{
如果(j==realpage-1)//這意味著您已經比較了所有頁面一次,但仍然無法找到相同的頁面
{
Intt1,t2,temp。
對於(t1 = 0;T1 RealPage;計算內存中最長的時間並替換它
{
為(t2 = t1 + 1;T2 RealPage;T2 + +)
If (MemPage [t1]乘以 MemPage [t2]次)
Temp=t1;
其他的
Temp=t2;
}
MemPage(臨時)。Pn=call[I];//替換
MemPage[\]。*=1;重新啟動計時器
數++;
}
}
}
對於(r = 0;R RealPage;R + +)
MemPage[r]。*++;
而(n-);
輸出();
}
Printf("\n缺頁率:%f\n\n",(浮點數)count/10);
返回0;
擴展資料:
注意事項:
函數的參數分為形參和實參。
形式參數出現在函數定義中,可以在整個函數中使用,但是沒有函數就不能使用它們。參數出現在主函數中,進入函數調用,實變數不能使用。
參數和變元的作用是進行數據傳輸。當調用函數時,將參數值傳遞給函數的參數,實現參數到函數的數據傳遞。
這裡有一個例子:
定義一個函數s=f(a,b),它將a和b之間的差賦給s,因此a和b是函數的兩個參數。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/179921.html