1.本章学习总结(2分)

1.1 思维导图

1.2 本章学习体会及代码量学习体会

1.2.1 学习体会

  • 这几周初步学习了几种数组:一维数组、二维数组和字符数组。
  • 指针可以存储变量地址,可以对复杂数据进行处理,对计算机的内存分配进行控制。
  • 相对之前的学习来说,指针的学习更需要深入理解题目,才能找到思路。
  • 指针很重要,是C语言的灵魂,关系到后面数构文件和链表等一系列的学习,因此基础更要打好。

1.2.2 代码累计

2.PTA总分(2分)

2.1截图PTA中函数题目集的排名得分

2.2 我的总分:

125

3.PTA实验作业(1分)

3.1 PTA题目1

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

3.1.1 算法分析

输入一段字符并将它们存入数组str中;
len=str的长度(包括空格);
for i=len-1 to 0 do
if str[i]==' '&&i<len-1
{sp=&str[i+1];
输出该空格后的字符sp;
去掉str数组尾部的所有空格;
str[i]=‘\0’;}
if i==0 sp=&str[i] 输出sp之后的所有字符;

3.1.2 代码截图


3.1.4 PTA提交列表及说明


开始时理解错了题意,将题目错解成将这一字符串倒叙输出,所以编译多次都未通过,后来经过再次仔细审题发现是单词倒序输出,于是想到了利用指针的移动和‘\0’符号的使用达到了倒序输出的目的。

4.大作业(5分)

题目:实现小学四则运算。
在函数那章,我们已经实现小学四则运算这份作业,现在要求大家把之前设计函数升级改造,原来的函数大家都是用全局变量实现不同函数参数传递,这次作业要求改地址传递,减少全局变量的使用。

题目要求:

题目有3个难度级别,分别为:

第一级是1位数的一步加减乘除计算
第二级是2位数的2步加减运算
第三级是3位数的2步加减运算
改进内容:

1.构造字符数组存放算术表达式
不管哪个级别的算式,请都生成一个字符数组存放。不管用户选择哪个级别题目,都能在表达式生成函数中生成一个算术式子。具体函数接口

void CreateExp(char *exp,int level)
{
switch(level)
{
case 1:生成一位数一步加减式子,写入字符数组exp;
case 2:生成2位数2步加减式子,写入字符数组exp;
case 3:生成3位数2步加减式子,写入字符数组exp;
}
// 注意三位数随机数,应该也包含生成一位数,即用rand()%1000就可以。
}
2.表达式是否合法(选做)
对于不合法或者超出该级别小学生学习范围的表达式,视为不合法,需重造一个。不合法表达式体现有除数为0的表达式、1,2级别中出现不能整除的除法表达式或其他不合法情况

int IsExp(char *exp,int level)
{

}
3.表达式运算
根据字符表达式,能计算其结果。有能力同学深入研究表达式优先级。
int ComputeExp(char *exp)
{

}
这块代码可以参考这题做法:

include <stdio.h>

int main()
{
int m=0, sum=0;
char c, oldc='+';
do {
c = getchar();
if( c<='9'&&c>='0' )
m = 10*m + c - '0';//1
else
{
if( oldc == '+' )
sum += m;
else
sum -= m;
m = 0;//2
oldc = c;
}
} while(c!='=');
printf("sum=%d", sum);
return;
}

4.1.改造函数介绍

主要上述三个函数的改造说明

1.函数1

随机数种子
定义字符型数组str[4]={'+','-','*','/'};
switch(level)
{case 1:将随机一位数和符号存储于数组中(随机字符利用str[]数组产生);break;
case 2:将随机两位数和符号存储于数组中(两位数字分别为两个数组元素);break;
case 3:将随机三位数和符号存储于数组中(三位数字分别为三个数组元素);break;}


2.函数2

switch(level)
{case 1:while 除数为0或被除数不能被整除 do 被除数=1-9随机数;break;
case 2:while 被除数不能被整除 do 被除数=10-99随机数;break;
case 3:while 被除数不能被整除 do 被除数=100-999随机数;break;}


3.函数3

两个函数执行一个功能:

第一个函数:
接收参数num1,num2和p;
switch(
p)
{case '+':sum=num1+num2;break;
case '-':sum=num1-num2;break;
case '':sum=num1num2;break;
case '/':sum=num1/num2;break;}
返回sum;
第二个函数:
接收参数*p;
num1=atoi(p);
if num1/10==0 利用函数1一步求出sum
else if num1/100==0 利用函数1求出第一步运算的结果,再利用一次函数1求出sum;
else 利用函数1求出第一步运算的结果,再利用一次函数1求出sum;
返回sum;


4.3 与原有函数代码比较

改造前函数1和改造后的函数1

改造前:直接在主函数中设num1,num2,num3,ch1,ch2等变量。优点:变量调用很明确方便;缺点:变量非常的多,杂乱。
改造后:采用字符数组在函数地址中写入随机生成的式子。优点:在函数中使主函数变得简单,用数组存储省去了设置一堆变量的麻烦;缺点计算的时候还要转化有点麻烦。

改造前函数2和改造后的函数2

改造前:直接在主函数中判断,每个式子生成之后都要用循环判断一次。优点:目的明确;缺点:代码冗长,而且功能单一,完全可以分装入函数。
改造后:专设一个函数来判断,分情况讨论。优点:采用传入地址的方法,直接修改主函数中变量的值,不需要返回值;缺点:书写较繁琐我觉得还可以化简。

改造前函数3和改造后的函数3

改造前:每种情况都设一个函数,三个函数分别计算值。优点:目的明确,引用方便;缺点:繁琐,浪费。
改造后:设一个函数包含三种情况,另一个函数负责计算,利用函数之间的相互调用来完成计算。优点:代码量少,可读性好;缺点:需要耐心思考每一步的指针到底指向的是哪里,然后才能调用,易写难想。

4.4 改进大作业总结
第一次时写的不太顺利,总是会不是漏了这个就是忘了那个,当时刚刚学到字符,也不大会用,很多字符方面的东西一知半解的,老是运行出错,所以大作业也尽量去避免用字符之类的,这是不对的。而学完了指针再看大作业,就显得当初的代码很low了,这一点从代码量也能看出来,当时写了足足有300多行,而现在只有当初的一半多一点。可见指针十分地省空间。再者第一次写的时候十分随意,函数的封装也没怎么注意,主函数非常的长而且拖沓,而且函数和变量的取名也十分随意,想怎么来就怎么来,全局变量设了一堆,幸好没有对大体产生什么干扰,不然按照当时我的水平,肯定手足无措。这一次我注意到了很多细节问题,我相信会比上一次更好更完善,这一次的函数封装是按照老师的步骤来的,给了我一些新的思路,当然,我也相信我的代码还有改进的空间。

转载于:https://www.cnblogs.com/lkjhgfdsa/p/10133712.html

C语言博客作业05--指针相关推荐

  1. C语言|博客作业05

    C语言|博客作业05 这个作业属于哪个课程 https://bbs.csdn.net/forums/csuft_swxy_C?typeId=17321 这个作业要求在哪里 https://bbs.cs ...

  2. C语言博客作业--函数

    C语言博客作业--函数 一,PTA实验作业 6-2 简单实现x的n次方 1.本题PTA提交列表 2.设计思路 double mypow( double x, int n )函数 (1)定义y=1,i用 ...

  3. C语言|博客作业06

    这个作业属于哪个课程 https://bbs.csdn.net/forums/csuft_swxy_C?typeId=17321 这个作业要求在哪里 https://bbs.csdn.net/topi ...

  4. C语言|博客作业04

    C语言|博客作业04 1. 完成云班课的知识点总结作业,并给出截图. 2. 学习总结 这个作业属于哪个课程 https://bbs.csdn.net/forums/csuft_swxy_C?typeI ...

  5. 【C语言博客作业06】

    这个作业属于哪个课程 https://bbs.csdn.net/forums/csuft_swxy_C?category=0&typeId=17328 这个作业要求在哪里 https://bb ...

  6. C语言I博客作业05

    这个作业属于哪个课程 2021秋C语言_中南林涉外社区-2021秋C语言_中南林涉外论坛-CSDN社区云 这个作业要求在哪里 C语言I---作业05-CSDN社区 这个作业的目标 学号 2021856 ...

  7. C语言I———博客作业05

    这个作业属于哪个课程 https://bbs.csdn.net/forums/csuft_swxy_C?category=0&typeId=17321 这个作业要求在哪 https://bbs ...

  8. c语言中11 3等于多少,C语言|博客作业11

    一.本周教学内容&目标 第5章 函数 要求学生掌握各种类型函数的定义.调用和申明,熟悉变量的作用域.生存周期和存储类型. 二.本周作业头 三.本周作业 1.PTA实验作业 请再此处列出自己的排 ...

  9. C语言|博客作业09

    这个作业属于哪个课程 https://bbs.csdn.net/forums/csuft_swxy_C?category=0&typeId=17321 这个作业要求在哪里 https://bb ...

  10. C语言博客作业06--结构体文件

    1.本章学习总结 1.1 思维导图 1.2 本章学习体会 最近学习了结构体.链表和文件的运用,结构体那一部分大体上都能掌握,但是文件那一部分,函数.知识点比较多,掌握得还不够熟练,一些比较复杂和难的部 ...

最新文章

  1. linux的翻译系统开发,Linux系统下的翻译神器——Goldendict
  2. session对象运行机制
  3. python连接sqlite加密_C#连接加密的Sqlite数据库的方法
  4. [Python]--Anaconda Resources Collection
  5. 一、flask的基本使用-flask
  6. Linux系统启动全过程
  7. 宝塔linux_Linux虚拟机上快速搭建宝塔 部署PHP运行环境
  8. 事务四大特性及隔离级别
  9. linux fdisk的分区和格式化和挂载相关操作说明
  10. Excel 导入 SqlServer 导入部分文本为空解决方案
  11. 配置单交换机VLAN划分
  12. 毕业设计开发板-基于C20S单片机恒温开发板
  13. 三大主流负载均衡器对比
  14. Android Verified Boot 2.0简要
  15. 银行卡号编码规则及其应用
  16. Cumt2020九月校赛 by 水一水
  17. 上面两点下面一个三角形_【知识点】三角形全等的判定+性质+辅助线技巧都在这里了!...
  18. 今日头条校招真题——头条校招
  19. Ceph -存储部署 ;
  20. js定时器实现右下角弹窗广告缓慢弹出

热门文章

  1. 奥数之“牛吃草问题”C++实现
  2. 汉字内码UNICODE转换表
  3. 《XML程序设计》要点
  4. 链路层的封装方式与IP选路 (二)
  5. 如何在7分钟内黑掉40家网站?
  6. 不吹牛,这样的面试官才牛逼!
  7. 讲一点分布式的基础知识,图解!
  8. 和日本萌妹一起读深度学习最新论文,阅读难度会降低吗?
  9. RESTful Web 服务 - 介绍
  10. 网络:TCP/IP各层的协议