1.2.1 学习体会算法
换个说法吧,后面的博客,每次都说好难好难也很差。(不过也是事实) 指针,我稍微会用的就是和数组有关联的那一部分。拿着本身写的题目去问同窗,他说我指针用的太过了,也的确是,不太会用,就拿作过的课堂派做业照着葫芦画瓢,寻一点点感受。仍是指针,我用了,本身都不知道他跑到哪里去了,看了半天都没毛病,请教大佬后一语道破。目前对指针仍是挺迷的,能不用指针我就尽可能不用吧。(在你彻底熟悉指针以前,尽可能不要乱用。----这是大佬对个人寄语)。不过,有的题目用用指针仍是蛮方便的。 这次大做业,说实话,真的看得一脸懵逼。原本就不怎么会用,而后有点不知道怎么下手。不过,也不能不作,作了总比没作好,哪怕是看着别人的写的,也比本身不写好,好歹有个印象。后来和同窗聊天谈到,不怎么会用指针的话,至少会多少写多少吧,先把一级的写了。后来想一想也对,这不就是把大问题分解成小问题嘛,解决起来就没有那么困难。 这次做业,我仍是要认真的,上次函数大做业没写好,以致于此次要基本所有重来一遍,很是费劲,若是此次仍是那么含糊的话,那下次就是和文件关联,与课设有关了。对中间要求严格一点,作的更好一点,也是为了后面能不学的那么累。
1.2.2 代码累计
数组
指针pta总分110
7-3 字符串的冒泡排序 (20 分) 咱们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。 输入格式: 输入在第1行中给出N和K(1≤K<N≤100),此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。 输出格式: 输出冒泡排序法扫描完第K遍后的中间结果序列,每行包含一个字符串。
3.1.1 算法分析函数
定义二维字符数组ch[100][20] for(i=0 to n) do scanf("%s",ch[i])//将字符串看作一个总体存放在数组中 end for 定义j - for(i=0 to k)循环到k轮结束 do - for(j=0 to n-1-i)//考虑到最大的那个数在最后的状况,要减1 do - if(ch[j]>ch[j+1]) 定义字符数组t[20] //利用函数strcpy交换ch[j]与ch[j+1]的值 strcpy(t, ch[j]); strcpy(ch[j], ch[j+1]); strcpy(ch[j+1], t); end if end for end for - for(i=0 to n) do 输出ch[i] end for
3.1.2 代码截图
学习
3.1.4 PTA提交列表及说明
3d
题目:实现小学四则运算,有3个难度级别,分别为:指针
第一级是1位数的一步加减乘除计算
第二级是2位数的2步加减运算
第三级是3位数的2步加减运算
改进内容:code
1.构造字符数组存放算术表达式
算法分析blog
定义lence//表示数组长度 - if(level == 1) lence = 4;//一级运算式子共有4个字符 - else if(level == 2) lence = 9;//一级运算式子共有9个字符 - else lence = 12; //一级运算式子共有12个字符 end if - for( i = 0 to lence-1) - for(j = 0 to level)//一级是一位数,二级两位数,三级三位数 - if(level>1)//大于两位数的随机数,第一位数字不能为0 - if(j==0) exp[i++] = rand() % 9+'1';//第一位数字不能为0 - else exp[i++] = rand() % 10 + '0'; end if else exp[i++] = rand() % 10 + '0'; end if end for - if(level == 1)//等级一辈子成四个运算符 t = rand() % 4; if (t == 0) exp[i] = '+'; else if (t == 1) exp[i] = '-'; else if (t == 2) exp[i] = '*'; else exp[i] = '/'; - else //等级二三生成两个运算符 t = rand() % 2; if (t == 0) exp[i] = '+'; else exp[i] = '-'; end if end for exp[lence-1] = '=';//让最后一个为等号 exp[lence] = '\0';
截图函数代码
排序
2.计算结果的函数
算法分析内存
定义计算结果sum并初始化为0 定义oldc为原来字符并复制为 + do - if(exp[i]<='9'&&exp[i]>='0' ) //读到的字符是数字,累计起来 m=10*m+exp[i]-'0'; - else - if(oldc=='+' )//加法 sum += m; - else if(oldc=='-')//减法 sum -= m; - else if(oldc=='*')//乘法 sum *= m; - else if(oldc=='/')//除法 sum /= m; end if m = 0;//从新归零,不影响下次运算 oldc =exp[i];//赋新制 end if i++;//i自增读下一个字符 }while(exp[i-1]!='='); end do while 返回最终结果sum;
代码截图
改造前函数1和改造后的函数1
改造前函数2和改造后的函数2