C语言博客05--指针
1.本章学习总结
1.1 思维导图
1.2 本章学习体会及代码量学习体会
1.2.1 学习体会
- 指针的概念和地址有关,有点抽象,刚接触时理解起来有点困难。懂得它的指向后可以理解。
- 指针在使用时需搞清楚什么时候加*,什么时候不加*。注意传进去的是地址,在适当的地方加上取地址符&
- 通过指针能改变原有所指向的值,利用此点可以在函数中运用,不必考虑返回值。
- 做指针题时最好把关系图画出来,这样可以思路清晰一点。
1.2.2 代码累计
2.PTA总分
2.1截图PTA中函数题目集的排名得分
2.2 我的总分:
- 总分:110分
3.PTA实验作业
3.1 PTA题目1
说反话-加强版:
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
3.1.1 算法分析
-
char a; 每个单词长度word=0 gets(a); 句子长度len=strlen(a) for(i=len-1;i>=0;i--) { if(a[i]!=空格)word++ else if(word!=0) { for(i+1<=j<=i+word) printf(a[j]) word初始为0 } end for } end for for循环结束后,以输入空格为参照,开始时未输入空格,再单独输出第一个单词 for(j=0;j<word;j++) printf(a[j]); end for
3.1.2 代码截图
3.1.4 PTA提交列表及说明
- 刚开始采用字符数组的方法来做,因未设置好多个空格的情况,导致输出错误。
- 后改用二维数组的方法做,把每个单词的位置作为行,长度作为列,但循环设置出现问题,输出错误
- 改进二维数组,发现此方法不合适。
- 又改为字符数组来做,充分考虑多空格情况后,答案正确
4.大作业
4.1.改造函数介绍
1.函数1
-
构造字符数组存放算术表达式:
不管哪个级别的算式,请都生成一个字符数组存放
CreateExp(char *exp,int level) 传入算式与选择的难度 定义运算符:char op1,op2,op3(op2与op3作为难度二三的运算符,op1为难度一的) int i=rand()%4;控制随机生成运算符 int a,b;作为随机数 switch(i) { case 0:op= case 1:op= case 2:op= case 3:op= }end switch switch(level) { case 1:生成一位数一步加减乘除运算,存入exp; case 2:生成两位数两步加减乘除运算,存入exp; case 3:生成三位数两步加减乘除运算,存入exp; } end switch;
- 代码截图:
-
-
2.函数2
-
ComputeExp(char *exp)传入运算式 定义m存放每个数,sum求和. char c,oldc;c每次为运算式每个元素,oldc作为运算符 int j=0; do { c=exp[j]; if( c<='9'&&c>='0' ) m = 10*m + c - '0'; else { oldc=+, sum+=m oldc=-, sum-=m oldc=*, sum*=m oldc=/, sum/=m } }while(c=='=') end do; return sum;
- 截图函数代码:
-
3.函数3,4
输出正确、错误信息,并统计正确的题数,错误的题数: void correct() { 正确次数+1; switch(rand()%3) { case 0:printf("回答正确!good\n");break; case 1:printf("答案正确!!\n");break; case 2:printf("对了,good\n");break; } } end; void wrong(void) { 错误次数+1 printf("回答错了啊!\n"); }
- 代码截图:
4.函数5
- 退出后计算正确率。
- double rate;
rate=1.000*正确次数/总次数; //计算正确率 - 代码截图:
5.运行截图
4.3 与原有函数代码比较
-
函数1:
- 这一次的函数1按照老师给的要求:不管哪个级别的算式,都生成一个字符数组存放。根据选择难度的不同,生成对应的运算式;原来的函数是按照不同的等级来分装,每一次都重新生成一个运算式,比较麻烦.
-
函数2:
- 这一次的函数2是把运算式传入此函数中,通过这个函数的运算,来计算运算式的结果,并把结果返回主函数;原来的函数是在每一等级中计算结果,并判断用户所输入的结果是否正确,计算次数较多,比较麻烦。
-
函数3,4,5
- 这一次输出正确信息、错误信息以及正确率时,通过多个函数来分别分装,减少了主函数中的内容,使主函数更加简洁。以前的大作业中没有设置这些函数,而是在每个等级的函数中直接运算出来并输出。
4.4 改进大作业总结
- 这次的大作业改进了不少,函数基本全都换掉了,但其中的一些思想:比如生成随机数与随机运算符、计算正确率、退出与否,还是按照原来的方法。第一次按照等级来分装函数,思路简单,但代码量大;这一次按照运算式和计算来分装,显的简洁一些。
- 问题:在函数的传入与返回之间有的还是有些疑惑,编写中在一个函数中调用了另一个函数的值,发现根本调用不了。在判断计算式是否正确的函数中碰到许多问题,就没有编写判断运算式是否合法这个函数。