從main函數(shù)開始,逐句分析:
成都創(chuàng)新互聯(lián)公司10多年成都企業(yè)網(wǎng)站建設(shè)服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及高端網(wǎng)站定制服務(wù),成都企業(yè)網(wǎng)站建設(shè)及推廣,對(duì)成都崗?fù)?/a>等多個(gè)領(lǐng)域擁有多年的網(wǎng)站營銷經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。
main函數(shù)的第一句定義了三個(gè)int(整型)變量a, i, k,a的值被初始化為4;
第二句是一個(gè)循環(huán),該循環(huán)將i的值定義為0,當(dāng)i的值小于2時(shí),循環(huán)條件通過,每循環(huán)一次,i的值就會(huì)加1,由此可知,該循環(huán)會(huì)執(zhí)行兩次。
在循環(huán)體中,包含了語句k=f(a++);,由后置遞增符的性質(zhì)可知,后置遞增符會(huì)先使用變量的值,使用完后,對(duì)變量進(jìn)行遞增。由此可知,傳入函數(shù)的值即為a的值。
進(jìn)入函數(shù),f(int a)中的a的值即為傳入的值,為4。逐句分析f()函數(shù):
第一句,定義整型變量b的值為0,該變量的生存期和作用域?yàn)檫@個(gè)函數(shù)。
第二句,定義靜態(tài)整型變量c的值為9,該變量的作用域?yàn)檫@個(gè)函數(shù),但是生存期為整個(gè)文件。
第三句,由于使用的是后置遞增符,先使用值,后遞增,所以c的值被賦給a后才會(huì)增加,后接b++。本語句結(jié)束后,c和b的值都增加了1,c的值變成了10,b的值變成了1。
第四句,return以變量a的值作為返回值。
回到main函數(shù)的第二句,k的值被修改成為了f()函數(shù)的返回值,即在f()函數(shù)中a的值。要注意的是,以傳值方式傳入函數(shù)的值并不會(huì)改變值本身,而是相當(dāng)于在函數(shù)中復(fù)制了一個(gè)副本使用。
該語句執(zhí)行完畢后,main函數(shù)中的變量a的值增加了1。
此時(shí)是for循環(huán)的第一次循環(huán)結(jié)束,進(jìn)入第二次循環(huán),同樣的傳入a的值,由于之前遞增過一次,所以現(xiàn)在它的值是5。重新進(jìn)入f()函數(shù)。
在f()函數(shù)中,由于其他的變量的生存期是函數(shù),在上一次f()函數(shù)結(jié)束時(shí),變量b被銷毀了,所以重新進(jìn)入變量后,變量b的值又變回了0。但由于c的生存期沒有結(jié)束,c的值不變,所以重新進(jìn)入函數(shù)后,c的值仍然是10。c的值賦給a,所以在執(zhí)行語句return a;時(shí)變量a的值是10,即函數(shù)的返回值是10。返回后該值賦給k,使得k的值變成了10。循環(huán)結(jié)束,跳出循環(huán)。
第三句,執(zhí)行printf()函數(shù),屏幕上輸出的值是10。
第四句,return 0;? 程序結(jié)束。
本題主要的難點(diǎn)在于對(duì)變量生存期的判定,即對(duì)static關(guān)鍵字的理解與掌握,忽視了函數(shù)中擁有文件生存期的變量在使用時(shí)值得變化原理。同時(shí),后置遞增運(yùn)算符同樣也是引起疑惑的原因之一。
//希望我的回答對(duì)你的學(xué)習(xí)有幫助
#include?stdio.h
int?Factorial(int?n)
{
int?fac?=?1;
for?(int?i?=?1;?i?=?n;?i++)
{
fac?*=?i;
}
return?fac;
}
int?main()
{
int?sum?=?0;
for?(int?i?=?1;?i?=?10;?i++)
{
sum?+=?Factorial(i);
}
printf("1!?+?2!?+?3!?...?+?10!?=?%d\n",?sum);
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("請(qǐng)輸入行數(shù)(大于3):");
scanf("%d",i);
printf("請(qǐng)選擇圖形: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;
}
# include stdio.h
# include math.h
int main(void)
{
//把三個(gè)系數(shù)保存到計(jì)算機(jī)中
int a = 1; //=不表示相等,表示賦值
int b = 5;
int c = 6;
double delta; //delt存放的是 b*b - 4*a*c
double x1; //存放一元二次方程的其中一個(gè)解
double x2; //存放一元二次方程的其中一個(gè)解
delta = b*b - 4*a*c;
if (delta 0)
{
x1 = (-b + sqrt(delta)) / (2*a);
x2 = (-b - sqrt(delta)) / (2*a);
printf("該一元二次方程有兩個(gè)解, x1 = %f, x2 = %f\n", x1, x2);
}
else if (delta == 0)
{
x1 = (-b) / (2*a);
x2 = x1; //右邊賦給左邊
printf("該一元二次方程有一個(gè)唯一解, x1 = x2 = %f\n", x1);
}
else
{
printf("無解\n");
}
return 0;
}
當(dāng)前標(biāo)題:c語言函數(shù)題目怎么做,c語言函數(shù)題目怎么做初中
網(wǎng)站路徑:http://chinadenli.net/article8/phgeip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、全網(wǎng)營銷推廣、網(wǎng)站策劃、用戶體驗(yàn)、標(biāo)簽優(yōu)化、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)