请计算下列C语言程式片断或函数的频率计数和时间复杂度,如下所示
請計算下列C語言程式片斷或函數的頻率計數和時間複雜度,如下所示(10%):
(a)
i = 1;1
while ( i <= n ) {n+1
a = a+1;n
i++;n
}
頻率計數:3n+2
時間複雜度:O(n)
(b)
void printMoney( int level ) {
if (level == 0) {n+1
printf("$");1
} else {
printf("
printMoney(level-1);n
printf(">");n
}
}
頻率計數:4n+2
時間複雜度:O(n)
請問下列哪一個關於Big Oh的敘述是錯誤的(5%)?
A. 5n2 - 6n = O(n2) B. 10n100 + 2n = O(n100)
C. 99n + 1 = O(n) D. 100 + 5 = O(1)
Sol: B,應,,
double sum[30];
假設:上述陣列的記憶體開始位址是:0022FE80(十六進位),請回答下列問題,如下所示:
sum[]陣列總共佔用的記憶體空間______位元組。
sum[12]的記憶體開始位址:________。[25]的記憶體開始位址:________。
Sol: 240、0022FEE0、022FF48s,name(10字元)、age、email(20字元)儲存姓名、年齡、薪水和電子郵件地址。(10%)
struct Employees {
char name[11];
int age;
float salary;
char email[21];
};
在C程式宣告一個大小6個元素的整數陣列array[],ptr = array;
ptr++;
ptr+3;
ptr = ptr + 2;
0、1、4、3strrev(),string[20] = {"book"};
執行strrev(string)函數後成為"koob"。
char *strrev(const char *p, int size)
{
static char str[100];
char *q= &str;
while((size--)>0)
*(q++) = *(p+size);
*q = '\0';
return str;
}
請寫一個計算字串長度int strlen(char *str)的程式(10%)
Sol:
int strlen(char *str)
{
int i;
for ( i = 0; str[i] != '\0'; i++ ); /* 用迴圈計算長度 */
return i;
}
請問字串的指標陣列和二維字元陣列之間的差異為何?(10%)
Sol:
C語言的指標陣列最常是應用在字串的指標陣列,如下所示:
#define ROWS 4
char *name[ROWS] = { "陳會安", "江小魚",
"張無忌", "楊過" };
上述程式碼宣告字串的指標陣列name且指定初值,其圖例如下所示:
上述圖例的指標陣列只配置4個元素,每一個元素是一個指標變數,指向一個字串。同樣的,我們也可以宣告一個二維陣列儲存上述4個字串,如下所示:
#define ROWS 4
#define COLUMNS 10
char names[ROWS][COLUMNS] = { "陳會安", "江小魚",
"張無忌", "楊過" };
上述程式碼宣告二維字元陣列,第二維的字元陣列是字串,此時不論儲存的字串長度為多少,以此例字串長度依序為6、6、6,int i, j, start=0, end=M-1;
for ( i=0; end<=N; end++, start++) {
if ( string[end] == keyword[M-1] )
for ( j=0, i=start; j < M-1 &&
string[i] == keyword[j]; i++, j++);
if ( j==M-1) return (start);
}
return (-1);
Sol: 外