c語音初學者求解兩道簡單的題目盡量詳細點

時間 2022-03-09 22:05:41

1樓:文刀大口

第乙個題目應該這樣理解,首先a是乙個二維陣列,第一維可以認為為指標,指向字串(或字元陣列),teacher按道理後面應該有個\0,不過這個在初始賦值時應該被覆蓋了,而且變成連續的了,其長度若按字串(strlen)理解確實大於7(為10),按陣列理解當然不能超過7了,但是列印的時候是按字串列印的。 這種初始化算是一種不正確的初始化,應該盡量避免。

所以p+3可以理解為p現在指向第一維的字串偏移為3的位置處。

第二個題目主要是考慮運算子結合的優先順序別的。

(*p)[7],首先是乙個指標,他指向陣列,這個陣列有7個元素。他每次加1相當於加了陣列長度7*(sizeof(陣列元素型別))。而a此時可以認為陣列指標,型別相同,不過a為常量,p為變數。

明顯,你現在還沒有輸出good! ,想輸出很簡單printf("%s\n%s\n",a[0],++p);

printf("%s\n",++p);

*p[7],首先是乙個陣列,他的元素是7個指標。這個可以簡單的認為7個連續的指標。

這樣應該算是清楚了。。。。

2樓:慶韶容

char a[7]申請的是連續的一塊記憶體,程式是不會檢查陣列是否越界的,因為teacher無\0而tom有,所以不輸出good

3樓:匿名使用者

char[7]=;

這個變數名也沒有,就是有變數名,也會報錯的error: initializer-string for array of chars is too long

不知道,你編譯過沒,答案怎麼出來的。

4樓:匿名使用者

char[7]=;

這個只是初始化,按照規定進行儲存!我們計算機會在大二開「資料結構」這門課,講述的就是怎樣儲存資料!

儲存為t e a c h e r

t o m \0 \0 \0 \0

g o o d \0 \0 \0

char *p=a[0];

p指標指向t,printf(「%s」,p);是字串輸出,直到遇到\0停止。當字串沒有終止符時,向後尋找,直到找到\0為止。

p定義為char *p=a[0]型別,所以p=p+1,就是p指向下乙個char內容!

char (*p)[7]是定義指向字元陣列的指標,p=p+1,p指向跳過後面7個char型別的數,即p=&a[1][0];

char *p[7]是定義連續的7個指標的一維陣列,即p[0]=&a[0][0],p[1]=&a[0][1]。

所以第二題為

teachertomtom

5樓:匿名使用者

其實您已經接近答案了。

char a[7]=;在記憶體中的布局是:

't''e''a''c''h''e''r''t''o''m''\0'(然後三個位置沒有用)'g''o''o''d''\0'(然後2個位置沒有用)

為什麼能初始化,因為編譯器不會檢查您賦值的邊界問題,它只會檢查您的語法是否符合語義要求。

所以輸出a[0]的話就會輸出teachertom,因為r後面沒有'\0',會繼續輸出,直到'\0',而tom的m後面剛好有'\0',所以輸出上述答案就是正確的了。

p=p+3,所以p指向teacher中的'c'所以輸出p會輸出chertom。答案是ok的。

char (*p)[7]是指p指向乙個有7個元素的陣列,而

char *p[7]是指乙個陣列有7個元素,每個元素都是指向char值的char*指標。

初學者請教 兩道簡單的c語言程式設計題目

6樓:沐沐

我沒有改你的輸入語句,如果改了會更短一點。

#include

void main()

else if(j%2==0)t++;

} for(j=1;j

else if(j%2==0)t++;

} day=(30-d1)+(12-m1)*30+(y2-y1-1)*365+(m2-1)*30+d2+t;

printf("total day:%d\n",day);}

7樓:中華知識鋪子

[回答]

1. 用c語言自己的時間函式

difftime(time_t time1, time_t time0) / 86400

這樣做得缺點是,這裡的time_t型別,只支援到2037年

2. 自己定義函式

樓主用的方法,在實際程式設計裡不常用,變化比較大。

下面這個方法是直接計算兩個日期到公元元年的天數

然後相減,這個是實際程式設計時的演算法,經過很多程式設計師的洗鍊,已經被廣泛使用

#include

#define leap(y) (y%(y%100?4:400)==0) /*公元y年是否閏年*/

long totaldays(int year,int month,int day)/*公元紀年的總天數*/

; int c=day,m,y=year-1;

days[2]=28+leap(year);

for(m=1;m

return c+y/4-y/100+y/400+y*365l;

} void main()

這應該是全部的實現方法了

樓主的方法沒必要簡化了

尤其是刻意追求短**就更沒有必要了

要知道,**短了,可讀性就差

兩者協調好,才能稱為好程式^^

悉雨辰寂

8樓:

第二題有什麼簡單的方法嗎?期待高手~

9樓:高金山

樓上寫的比較簡潔,也很正確

樓主寫的太亂了

本來我打算幫樓主改改的,鑑於樓上說要鍛鍊他的自學能力,我也不費這個心了

求一適合c語言程式設計題,適合初學者,要有點難度滴

10樓:匿名使用者

1.實現乙個+ - * / ( )的運算

由左向右運算,*/優先順序高於+/,()優先順序最高2.請在十分鐘內實現10個字串處理函式,要求格式規範、有適當的判斷語句

樓下那個查重複出現子串的,我認為使用strcmp函式更為方便

初學者求解一道資料結構[c語言版]的題目

11樓:匿名使用者

struct lnode

*head;

lnode* lnodecom(lnode* h1,int h1len, lnode* h2,int h2len )

else

while(p1->next != null)p1 = p1->next;

p1->next = p2;

return p1;

} 複雜度:

o(hlen) (hlen為短表的長度)

C語言初學者問題,C語言初學者問題

參考 如下 include int sum int a,int n int main include int sum int a,int n int main include int sum int n1,int n2,int n3,int n4 void main 首先你寫的就有點問題,給你解釋下...

c語言程式設計問題(初學者),C語言程式設計問題(初學者)

1 輸出字元型,並且希望顯示為字元,就用c,如果希望顯示的是數字,則用d,他們的對應關係可以檢視ascii表,2 int和char的大小不同,char 只1個位元組,int為4個位元組,也就是char 只有256個字元,而int則有2的32次方個數。表示的範圍是不同的 3 a和101的關係可以檢視a...

c語言我是初學者,C語言 我是初學者

c語言規定,在定義列舉型時,可以給列舉常量賦初值,方法是在列舉常量的後面跟上 整型常量 例如,表示三原色的列舉型可以定義如下 enum colorl 則列舉常量,red的值為2,yellow的值為4,blue的值為7。1 給變數或陣列元素賦值,格式為 列舉型變數或陣列元素 同一種列舉型常量名 c語言...

c 適合初學者的書,推薦幾本適合c 初學者入門的書

力挺 21天學通c jesse liberty bradley jones著.主要是基礎知識,講解很細緻.而且全書的風格很適合初學者,沒有令人頭暈的乙個個視窗,資料.而是通過 講解用法,很實用,而且初學者看的時候也不會覺得煩,我當時就是看的這個.c 程式設計教程 閔聯營 何克右 主編 這本書很基礎,...

C語言初學者看什麼書 C語言初學者適合看什麼書

根據我最初學習 c 語言的體會就是 首先購買一本難度適合自己的教材。當然了,至於說哪一本書適合自己,這個因人而異,沒有一定之規,需要自己去書店仔細閱讀,然後確定下來哪一本書籍難度適合自己。然後就是必須在電腦上安裝乙個 c 編譯器 例如 windows 系統下面的 microsoft visual c...