看的很吃力...請詳解....謝謝囉....
一、請詳細解說過程及結果
#include
void main( )
{
int a[][3]={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
int *p, *q, *r = a+3;
p = r + 2;
q = &a[4];
printf("%d\n%d\n%d\n%d\n%d\n%d\n", *p+3, *(p+3), q[3],
(*p+4) -*(p+8), p[3]+r[p[2]], *(q-2)+(*r-3));
}
二、若已知下列程式執行後,在螢幕上顯示的結果為 The result is 16,請於下列程式中的兩個□內加入 1 到 5 其中一個數字,以達到上述之結果。
(請詳細解說過程及結果)
#include
int mystery(int a, int b);
void main( )
{
printf("The result is %d", mystery(5,6));
}
int mystery(int a, int b)
{
return b <= 1 ? a : --a + mystery( a + □, b - □);
}
三、請詳細解說過程及結果(假設使用者輸入 Hello_there)
#include
int mystery3( const char *s1, const char *s2);
void main()
{
char string1[80] = {'H','e','l','l','o',' ','t','h','e','r','e','\0'};
char string2[80];
printf("Enter string:");
scanf("%s", string2);
printf("The result is %d\n", mystery3( string1, string2));
}
int mystery3( const char *s1, const char *s2)
{
int sum = 0;
for ( ; *s1 != '\0' && *s2 != '\0'; s1++, s2++)
if ( *s1 == *s2) sum++;
return sum;
}
2007-01-04 07:47:52 · 1 個解答 · 發問者 擁抱陽光 1 in 電腦與網際網路 ➔ 程式設計
一
int a[][3]={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
int *p, *q, *r = a+3; /* p, q, r, 皆是指標. r 指向 a 的第一個列再加 3 列 (每列有三個元素). 所以 r 指向 10 */
p = r + 2; /* p 指向 r 的位置再加 2 個. 所以 p 指向 12 */
q = &a[4]; /* q 指向 a 的第5列位置. 所以 q 指向 13 */
*p+3 => p 位置數值再加 3 = 15
*(p+3) => p+3 位置的數值 = 15
q[3] => p 位置數值再加 3 = 16
(*p+4) -*(p+8) = 16 - 20 = - 4
p[3]+r[p[2]] = 15 + r[14] = 15 + ? (超出範圍, 數值不定)
*(q-2)+(*r-3) = 11 + 7 = 18
二 這是遞迴 當 b <= 1 時 傳回 a 值, 否則傳入不同的變數呼叫自己
設兩空格為 a + x, b - y
既然 mystery(5,6) 的結果為 16
如果呼叫自己一次 結果為 16 = (--5) + 5 + x = 9 + x
所以 x = 7, 6-y <= 1 => y = 6
return b <= 1 ? a : --a + mystery( a + 7, b - 6); 可以滿足所求.
三 在比較使用者輸入的字串與 string1 有幾個字相同
string1 是 "Hello there" 使用者輸入的是 "Hello_there"
中間有一個字不同 10 個字相同
所以最後的結果是 The result is 10
如果有問題, 請來函討論. 不然, 我可能會錯失你再補充的疑點.
2007-01-08 07:23:57 · answer #1 · answered by JJ 7 · 0⤊ 0⤋