⑴ 一個簡單的c語言程序(解釋一下)。
f(int
a)
........定義f()函數體,他的參數是a,int類型
{auto
b=0;................定義局部變理b
static
c=3;
...........定義靜態存儲變數c=3
b=b+1;
..................每次調用時b+1,相當於b++
c=c+1;
................每次調用時c+1,相當於c++
return(a+b+c);
.................把a+b+c的值返回到printf("%d",f(a));
中的f(a)
}
main()
{int
a=2,i;
...............定義變數a,i其中a賦初值而i沒有給出值
for(i=0;i<3;i++)
..............建立一個for循環
printf("%d",f(a));
..............輸出printf("%d",f(a))共三次
}
⑵ 關於C語言一個程序的解釋
這個程序就是輸出一個用*號組成的菱形的小程序,最後的getch();是等待用戶按任意鍵,否則菱形一閃而過,窗口會消失。scanf("%d", &n);讀入了整數n,說明要列印的菱形是2n行。前一個i = 1 to n是控制上半個正三角,後一個i=1 to n是控制下半個倒三角,j控制每一行前面的空格數量,k控制每一行列印的星號個數
⑶ C語言程序解釋
答案是3 2 3 1 2
這裡面涉及到幾個知識點:
在子函數中用static修飾的變數,只會進行一次初始化,即static int b=3; 只會在第一次調用f函數時才會執行,後面的調用都直接跳過這句話。
在子函數中,如果局部變數名和全局變數名重名,默認優先使用局部變數
在子函數中的局部變數只存在於子函數裡面,調用完子函數後,內部的局部變數會被全部銷毀
全局變數如果沒有被初始化,默認為0。
因此,對於這道題,第一次調用f(++a)時,傳入的值為1(因為a先加1,再傳入值),此時的全局變數a變為1了。然後進入子函數裡面,將傳入的1賦值給局部變數a,局部變數a等於1。子函數裡面的a與全局變數a重名,因此優先使用局部變數a,a+=2;實際上是局部變數的a,全局變數a沒有任何變化。然後初始化b=3。執行--b後,b=2。因此首先輸出3,2。
第二次調用f(a++)函數時,傳入的值為1,然後再將全局變數a加一,此時的全局變數a變為2了。然後進入子函數裡面,將傳入的1賦值給局部變數a,局部變數a等於1。然後跳過b的初始化,局部變數的a+=2,所以a=3,執行--b後,b=1。因此首先輸出3,1。
最後的printf輸出的時全局變數a,為2。
⑷ c語言簡單程序解釋一下
A處執行完畢後,數組c並不一定設置好。
以本題為例:
程序順次執行
c[0]=a[0],pc++,pa++;
c[1]=a[1],pc++,pa++;
c[2]=b[0],pc++,pb++;
c[3]=a[2],pc++,pa++;
到這一步pa-ay已經超過A_NUM了,所以while(pa-a<A_NUM && pb-b<B_NUM)的條件不滿足,循環終止。
在下來執行while(pb-b<B_NUM) //C處的循環來完成數組c的設置。
程序順次執行
c[4]=b[1],pc++,pb++;
c[5]=b[2],pc++,pb++;
完畢!
你明白了么?