在本週的學習中,我學到了算法
1.數組各元素的地址與數組名的關係,以及指針在數組中的應用 2.字符串的儲存方式,以及衆多的字符串處理函數 3.動態內存的分配
周 | 代碼量(行) |
---|---|
15 | 412 |
給定一句英語,要求你編寫程序,將句中全部單詞的順序顛倒輸出。數組
定義字符指針怕,字符數組a[500001] 定義整型變量i,j,flag,其中flag=0 gets(a);//輸入字符串 j = strlen(a); p = a + j - 1;//p指向字符串的最後一個字符 while *p == ' ' do //跳過字符串末尾的空格 *p = 0; p--; j--; end while for j= j to 1 do if j == 1 then//若p指向字符串的首元素 if p != 0 then if flag==1 then printf(" "); end if printf("%s", p); end if else if *(p-- - 1) == ' ' then//若p指向字符的前一個字符爲空格 if flag==1 then printf(" "); end if printf("%s", p+1); flag=1; while *p == ' ' do//跳過全部空格 *p = 0; p--; j--; end while end if end for
定義變量 flag; srand(time(0)); 定義整型數組_num[3],字符數組_op[3] num = _num, op = _op; /*全局指針num和op分別指向兩個數組*/ 定義變量 i, m, j; m = pow(10, level); exit: for i = 0 to 3 do _num[i] = rand() % m; j = rand() % 4; switch j then case 0:_op[i] = '+'; break; case 1:_op[i] = '-'; break; case 2:_op[i] = '*'; break; case 3:_op[i] = '/'; break; end switch end for flag = IsExp(); /*判斷生成的題目是否合法*/ if flag == 0 then /*若不合法則從新執行上述過程*/ goto exit; end if if level == 1 then /*將題目寫入exp中*/ sprintf(exp, "%d%c%d", num[0], op[0], num[1]); else sprintf(exp, "%d%c%d%c%d", num[0], op[0], num[1], op[1], num[2]); end if
定義變量 p; if op[0] == '/' then if num[1] == 0 then return 0;/*若除數爲0*/ end if if num[0] % num[1] == 0 thrn return 1;/*判斷是否能整除*/ else return 0; end if end if if op[1] == '/' then if num[2] == 0 then return 0;/*若除數爲0*/ end if if op[0] == '+' || op[0] == '-' then/*判斷是否能整除*/ if num[1] % num[2] == 0 then return 1; else return 0; end if else if op[0] == '*' then p = num[0] * num[1] % num[2]; else p = num[0] / num[1] % num[2]; end if if p == 0 then return 1; else return 0; end if end if end if
定義整型變量 i, j, k, m, answer 定義整型數組 num[10]; 定義字符數組 op[10]; i = 0, m = 0, j = -1, k = -1; do if exp[i]<='9'&&exp[i]>='0' then m = m * 10 + exp[i] - '0'; else op[++k] = exp[i]; num[++j] = m; m = 0; end if if k >= 1 then /*先計算算式優先級較高的乘除法*/ if op[k-1] == '*' || op[k-1] == '/' then if op[k - 1] == '*' then num[k] = num[k - 1] * num[k]; else if op[k - 1] == '/' then num[k] = num[k - 1] / num[k]; end if num[k - 1] = 0; if k - 2 >= 0 then op[k - 1] = op[k - 2]; else op[k - 1] = '+'; end if end if end if while exp[i++] != '=' do answer = 0; char _op = '+'; j = 0, k = 0; while 1 do /*計算算式中剩下的加減法*/ if _op == '+' then answer += num[j++]; else if _op == '-' then answer -= num[j++]; else if _op == '=' break; end if _op = op[k++]; end while return answer;
此次改進大做業我並無進行太多的改動,只是合併了一些函數,並新增了以個本來沒有的函數,其他的地方几乎仍是原代碼,不過這只是我初步的改進,並非我最終的改進,但因爲時間關係,本次博客我只能先用我初步的改進來寫了。我如今已經開始着手於大做業的最後一次改進了,本次改進的最終改動將與大做業的最後一次改進一同完成。函數