在本周的学习中,我学到了算法
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;
此次改进大做业我并无进行太多的改动,只是合并了一些函数,并新增了以个本来没有的函数,其他的地方几乎仍是原代码,不过这只是我初步的改进,并非我最终的改进,但因为时间关系,本次博客我只能先用我初步的改进来写了。我如今已经开始着手于大做业的最后一次改进了,本次改进的最终改动将与大做业的最后一次改进一同完成。函数