指针:110
总分:110程序员
给定一句英语,将句中全部单词的顺序颠倒输出。算法
定义i为计量数 定义指针p 定义储存字符串的字符数组word[510000] 读入字符串到word for i=0 to word[i]==0 do //把i移向最后一个字符 i++ end for while word[i-1]==' ' do //舍去最后的空格 i-- end while word[i]='\0'//在末尾加上终止符 for i to i==0 do if word[i]==' ' then//当出现空格时 p=&word[i+1]//指向空格后的一个数 while word[i-1]==' ' do //舍去空格 i-- end while if i==0 then //处理开头有空格的状况 输出p所指字符串 else 输出p所指字符串加空格 end if word[i]='\0'//在每一个单词末尾加上终止符 end if end for p=&word[0]//指向第一个单词 输出p所指字符串
注意点:庞大的数据须要用合适的方法储存,输出的顺序有交替变换须要逆向分析,最重要的仍是指针和终止符的结合运用。数组
定义计量数i 定义算式字符数组Exp[20] 引用时间函数创造随机数 定义数组a[4]存放'+','-','*','/' switch (*DegreePtr)//对已选择难度进行处理 case 1: Exp[0]=rand()%10+'0' Exp[1]=a[rand()%4] if Exp[1]=='/' then//重构除数为0的非法题目 Exp[2]=rand()%9+'1' else Exp[2]=rand()%10+'0' end if Exp[3]='=' Exp[4]='\0' 退出 case 2: for i=0 to 8 do//输入算式的字符串 if(i+1)%3==0 then Exp[i]=a[rand()%2] else Exp[i]=rand()%10+'0' end if end for Exp[i]='=' Exp[i+1]='\0' 退出 case 3: for i=0 to 11 do//输入算式的字符串 if (i+1)%4==0 then Exp[i]=a[rand()%2] else Exp[i]=rand()%10+'0' end if end for Exp[i]='=' Exp[i+1]='\0' 退出 end switch *AnswerPtr=calculate(Exp)//引入"计算"的函数获得答案
定义答案为answer 定义数据为num 定义运算符op while *ch<='9'&&*ch>='0' do //先得出第一个数做为答案 answer=10*answer+*ch-'0' ch++ end while 输出answer while *(ch+1)!='\0' do//字符处理 num=0//初始化数据 op=*ch ch++//指针下移 输出op while *ch<='9'&&*ch>='0' do//字符转数字 num=10*num+*ch-'0' ch++//指针下移 end while 输出num switch(op)//四则运算 case '+':answer+=num 退出 case '-':answer-=num 退出 case '*':answer*=num 退出 case '/':answer/=num 退出 end switch end while 输出"=" 返回answer
不一样点:原来的多个数字改成用数组统一存放;将每一个算式改用字符数组存放并用指针传递到下一个函数。
- 优势:
1.不一样难度的题目生成的相同点多了,更好地合并程序;
2.字符数组存放算式能经过指针直接传递给其余函数,减小全局变量的使用,加强程序安全性;
3.从根源解决了除数为0的非法状况。- 缺点:没有之前数字直接生成的程序可读性好,状况处理变繁杂。
不一样点:以前采用参数传递每一个数字,而改进为传递地址指针直接读取数据
- 优势:指针的运用使算式的读取更为简便,不局限于算式的长短。
- 缺点:字符到数据的转化须要转变大部分原有思路。