不用dw怎么做網(wǎng)站西安網(wǎng)站維護(hù)
1.題1
我們來思考一下它的結(jié)果是什么?
我們來分析一下:\\是轉(zhuǎn)義為字符'\',\123表示的是一個八進(jìn)制,算一個字符,\t算一個字符,加上\0,應(yīng)該有13個,但是strlen只計(jì)算\0前的字符個數(shù)。所以結(jié)果應(yīng)該是12.我們來看看:
?2.題2
大家來思考一下結(jié)果是什么呢?
我們來分析一下:前兩個#define定義了兩個常量,后面的#define定義了一個宏,當(dāng)我們代碼運(yùn)行時會直接進(jìn)行替換:(N+1+1)*N+1/2 這個式子運(yùn)算結(jié)果為8.5,但是我們編譯器會默認(rèn)整型存入,我們后來使用%d打印出來,結(jié)果應(yīng)該為8.我們運(yùn)行看看:
?3.題3
這題是一個遞歸,這個代碼的運(yùn)行結(jié)果會是多少呢?在每次的調(diào)用中我們的i的數(shù)是一直在改變的,每次的調(diào)用都會加1,最后一次調(diào)用時i=3,n=4,所以結(jié)果應(yīng)該為7,這是因?yàn)閟tatic修飾局部變量使之成為全局變量,它的值只有到程序結(jié)束才會銷毀,如果我們將static去掉的話,每次調(diào)用f()函數(shù)時,i都會初始為1,并不會隨著調(diào)用的次數(shù)數(shù)值跟著增加。如果是這樣的話結(jié)果應(yīng)該為5。
我們來看一下結(jié)果:
?
?4.題4
我們先來分析一下:我們創(chuàng)建了一個char類型的數(shù)組,并使用循環(huán)來將其賦值,那么arr中的數(shù)值將是:-1 -2 -3....-128 127 126 125.....0 ,有人會問為啥-128減1等于127呢?這個問題大家可以看我之前的篇章——數(shù)據(jù)在內(nèi)存中的存儲。那這樣的話strlern的計(jì)算結(jié)果是多少呢?我們知道strlen是計(jì)算\0之前的字符的個數(shù),其實(shí)就是在找0,我們只要計(jì)算0之前有多少個字符即可,那樣的話應(yīng)該就是255。
我們運(yùn)行看看:
5.題5.實(shí)現(xiàn)代碼(輸入一行,每行空格分割,分別是年,月,日,輸出是這一年的第幾天)
int leapyear(int year)
{if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)){return 1;}elsereturn 0;
}
int getday(int year, int month, int day)
{int arr[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; // 0 1 2 3 4 5 6 7 8 9 10 11 12int num = 0;int n = month;while (month){num = num + arr[month--];}if (leapyear(year) == 1 && n >= 2){num++;}num = num + day;return num;
}
int main()
{int year, month, day = 0;scanf("%d %d %d", &year, &month, &day);int ret=getday(year,month,day);printf("共%d天",ret);return 0;
}
大家可以思索一下為何要這樣寫,當(dāng)然這只是一種方法,大家可以發(fā)揮自己的想象力試一試。
?
