本周代码感觉:
多是上次数组做业拖过久了,指针的练习比较少,加上指针比较难,如今感受学习起来比较吃力(固然,最近学习懈怠也占一大比例缘由)。
指针是C语言的灵魂,它使C语言有了其余编程语言没有的魅力,指针是函数的传递更加灵活了,以前函数只能有一个返回值,指针能够用来传送多个地址。
不过,学习指针这一章,最大的收获仍是对字符串的进一步了解,#include<string.h>这个头文件让字符串在我心中有了和通常的变量有了分庭抗礼的地位,它能够执行以前通常的变量同样的东西,甚至通常变量作不了的一些有趣的是,它能够作到。如strcmp,strcat,strmat之类的函数。算法
7-3 字符串的冒泡排序 (20 分)
咱们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。编程
输入n,k//n表明字符串的数量,k表示要冒泡的次数
char a[1000][100]
for i=0 to n;
scanf("%s",a[i]);//输入字符串
end for
static char temp[1000]//定义临时数组,用于交换
for j=1 to k
for j=1 to k
if a[i+1]<a[i]
交换a[i+1]和a[i]
end if
end for
end for
for i=0 to n
输出啊a[i]
end for数组
原本这道题我是有思路的,由于之前作过一维数组的冒泡法排序,可是这个题要输入多个字符串,一开始我是没有思路的,后来意识到能够用二维数组来存放字符串,问题也就解决了。
int n,k编程语言
对各类操做数和运算符,以及正确答案和输入结果都存放在数组中,能够对游戏的过程进行数据保存,最重要的是用一个函数生成运算式,而不是用三个函数生成三种级别的式子。
此次把代码改为了指针版,其实仍是数组用的比较多,仍是指针掌握的不熟练。还有,此次的函数封装要比上一次要多。函数
void Question(char degree)//把上一级选择难度函数的选择级别传入
{
char ques[1000]//放算式
int level = degree-'0'//将难度级别的字符转换成常数
int m,n//n为运算符个数
char a[100]//把数转换成字符串
switch level do
case 1 do n=4;i=3;break;
case 2 do n=2;i=5;break;
case 3 do n=2;i=5;break;
end switch
for i to i>0 j=0,a
m=rand()%n;
if i为奇数
switch m do
m=rand()%4;
1,2,3,4分别表明+,-,*,/ //strcat(ques,"+")链接字符串
end switch
else i为偶数
swtich level do
case 1 do 生成一位数,break;//生成的数放在x[j]中
case 2 do 生成二位数,break;
case 3 do 生成三位数,break;
end switch
if语句排除除法结果不存在和获得小数的状况
itoa(x[j],a,10);
strcat(ques,a)
end if
j++;
end for学习
这段代码主要借鉴了俊伟的,itoa函数减小了很多工做量,这段代码可让三个级别的式子在一个函数里面生成,用三个函数出算式的代码我也有写,可是…………写代码的时候没有看清老师的要求,觉得要写一个生成算式的函数,以前的代码也就删了……呜呜呜,之后必定好好看做业要求。测试
此次做业新加的,毫无技术可言,此次的程序的退出到要返回主界面才能退出……也算是一个改动吧,让退出再也不那么随意。3d
原来的算式生成函数指针
感觉到之前的三个函数多赘余了吧……将不得不说,把输出从数转化成字符串真的可使代码简洁许多。
之前的方法在输出的时候要挨个输出,如今用循环就能够,不过要注意……没完成一个循环,记得对字符串初始化。blog
此次虽然名义上是把上次的函数封装改为指针版,可是……说句实话,*这个符号,我在个人代码里面只让它充当了乘号和修饰的做用,指针掌握的不够熟练,不敢贸然用指针,但指针毕竟是c语言一个很重要的东西,之后仍是要多加练习。 其实此次代码我改动是比较大的(仍是叫重写吧),把主要精力都放在了生成算式上,一些提示性话语和非法输入处理方面作得可能差强人意…… 在生成算式的时候,一开始忘记了最后的初始化字符串……额……改了很久,并且在写代码的时候常常犯一些特别无聊的错误,好比if判断条件后加分号。