博客作业 - 指针

本文分享了一周内学习指针与字符串处理的心得,深入探讨了指针在代码中的重要作用,特别是在处理字符串时的高效性和灵活性。作者通过实践,掌握了多个字符串处理函数如strcpy、strcat、strcmp和strlen,并通过PTA实验作业,实现了字符串的复杂操作,如汉字的字节存储和小学四则运算的表达式生成与解析。

1.本章学习总结

1.1 思维导图

1474647-20181216223240487-112585589.png

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

1.2.1学习体会

  通过这一周的学习,让我明白了指针的重要性,在很多时候运用,会使得代码功能强大。  但我发现,可以用指针的地方,可以用数组,我比较喜欢用数组写,可能是刚刚学习指针,不怎么熟悉的结果。以后的学习中要多运用指针打打代码,这样把这种新的方法通过锻炼,熟悉起来。指针里面重点是处理字符,字符串的问题,我学会了好几个处理的字符串的函数。比如复制strcpy,赋值strcat连接函数,strcmp比较函数,strlen长度函数。这几个函数在处理很多字符串的问题上可以起到很强的作用。今后的学习中要多用指针,多学习一点string文件里面的函数。减少代码的复杂度。

1.2.2代码累计

1474647-20181217214739721-1775294907.png

2.PTA总分

2.1

1474647-20181217214838008-353290503.png

2.2我的总分:

总分 :110

3.PTA实验作业

3.1题目介绍

1474647-20181217185133396-2056869409.png

3.1.1算法分析

定义字符串长度longth;存放尾数poem数组; 输入二维字符数组char 
- for i=0 to 4  
        scanf("%s",s[i]);//读入

- end for

- for i=0 to 4  //遍历
     - longth = strlen(s[i]);//计算每一行的字符串长度
- 以下2个字节按顺序存放形成汉字
     - poem[2*i]= s[i][longth-2];//最后一个汉字的第一个字节存放
     - poem[2*i+1]= s[i][longth-1];//最后一个汉字的的第二个字节存放

- end for

3.1.2代码截图

1474647-20181217185144089-351000207.png

3.1.3测试数据

1474647-20181217185623780-1150871449.png

1474647-20181217185631345-1871101223.png

3.1.4PTA提交列表和说明

1474647-20181217185213999-975632960.png

Q:不知道怎么处理汉字的存放,没理解汉字是如何输出的。
A:百度后知道了汉字分2个字节存放,连续的2个字节输出就可以打印出一个汉字,然后就用到这种办法,把最后一个字拆分,一个字节一个字节,按顺序存放在一个数组中,形成一个大的字符串,就是结果。

4.大作业(5分)

题目:实现小学四则运算。
题目要求:
题目有3个难度级别,分别为:
第一级是1位数的一步加减乘除计算
第二级是2位数的2步加减运算
第三级是3位数的2步加减运算

4.1改进内容:

1.构造字符数组存放算术表达式
1474647-20181220233021633-189508232.png

1474647-20181220233034314-1173704644.png

2.表达式运算

1474647-20181220233045111-1993145812.png

4.2改造函数介绍

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

1.函数1

传入实参 存放算术式的数组exp的地址,用户等级rank, 用户训练题目量num;
定义 算式和值sum,答对题数yes=0;用户输入值yournum ,循环变量i , 判断是否结束变量flag;存放运算符字符数组char
- for i=1 to num 
- do switch rank;
- case 1://生成一级运算式
 - *(exp+0)=rand()%9+'1';
- *(exp+1)=ch[rand()%2];//随机产生- + 运算符 生成随机0,对应运算符“-”;随机1,对应运算符“+”
- *(exp+2)=rand()%9+'1';
- *(exp+3)='\0';   break;  //末尾存入\0.方便运算
- case 2://生成2级,原理和一级相同
- *(exp+0)=rand()%9+'1';
-  ......                   
- *(exp+2)=ch[rand()%4];//随机产生4种运算符
- *(exp+3)=rand()%9+'1';
 - ......       
- *(exp+5)=ch[rand()%4];
- *(exp+6)=rand()%9+'1';
- ...... 
- *(exp+8)='\0';   break;
- case 3://生成3级,原理和一级相同
- *(exp+0)=rand()%9+'1';
- ...... 
- *(exp+11)='\0';  break;                 
                   
- end switch  
- strcat(exp,"=");//连接等号
- puts(exp);//输出运算式
- sum=ComputerExp(exp);//调用计算函数计算结果 
- 嵌入输出的代码,包括结果,正确率等
- end for


截图函数代码:
函数代码参考上述构造字符数组存放算术表达式

2.函数2


传入存放运算符的数组地址exp
定义 循环变量i;循环累加值m ; 总和值sum ;存放运算符oldc;
- do while(*(exp+i))//遍历运算式数组exp
- if *(exp+i) <='9'&& *(exp+i)>='0' )   then  m=10*m+*(exp+i)-'0';//当字符属于数字时,字符运算把每一个字符转化为数字  
- else   
- do switch(oldc) //否则则为运算符。调用switch语句分别进行运算
- case '+': sum=sum+m;break;
- case '-': sum=sum-m;break;
- case '*': sum=sum*m;break;
- case '/': sum=sum/m;break;
- end switch
- m = 0;//运算完后m归0,方便下一次运算
-  oldc = *(exp+i);//存运算符,方面下一次计算
-  i++;

- end while
- return sum;//返回结果 ,方便调用运算结果


截图函数代码:
函数代码参考上述构造表达式运算

4.3 与原有函数代码比较

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

1.改造前的函数3个级别分别要用3个函数分别构造,但是改造后的函数一个函数就可以解决3个级别的问题,
2.改造前的函数每一种级别都要进行复杂的代数运算,很多个case,一步一步的进行运算,改造后的函数,不管哪一个级别,都可以统一用一个计算函数运算出来,结果返回就行。
3.改造前的函数,输出提示一个级别运用一次,多次使用了相同的东西,变量每个函数都要定义。改造后的函数,所有的变量,都只要定义一次,另外的函数要用就直接传递实参给函数,直接使用。
4.改造前的函数没有使用指针地址,改造后的函数使用了地址,在重复使用一个相同的数的情况上,改造后的函数方便很多,可以直接*取地址,直接使用,但是改造前的函数如果要使用,必须定义全局变量。
5.改造前的函数不管变量上。代码量上都比改造后的函数复杂。改造后的函数简单的2个函数就可以完成所有功能。
6.改造前的函数输出是这样:
1474647-20181221003526801-1184024693.png
1474647-20181221003535662-1091303104.png
1474647-20181221003543581-1702183682.png
改造后函数,一个输出函数,一个表达式直接puts(exp)!!!非常方便,简洁!

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

1.改造前的函数运算是这样的:
1474647-20181221003632612-924902242.png
1474647-20181221003641479-1117398829.png
1474647-20181221003651437-2008237396.png
改造后的运算函数:
直接用 m=10m+(exp+i)-'0',这条语句,处理了所有的运算!
可见用字符数组存放后用字符运算的强大!它的优点很明显,不管一位数,二位数,一步,二步,都可以一下子处理完,不需要分开!

4.4 改进大作业总结

回顾两次作业编写过程,总结碰到问题及后续程序编写注意事项。
总结:第1次编写大作业的时候,很疑惑函数的构造,由于对函数的使用不是很熟悉,所以我第一次并未使用传参数的函数,所有的变量都是在每一个函数定义,虽然在编写的时候简单了很多,但是繁琐很多了,很多变量都重复的在使用,其效果等同与全局变量的使用。在编写的过程中,会碰见取随机值不满足位数的情况,在以后的编写中,要多运用函数传参数的写法,避免多次定义相同变量,只需要在主函数中定义一次,然后可以传参数多次使用。使用函数有个问题,就是多次使用同一个数据,要重复调用,不怎么方便。
第2次的作业:把全局变量改为地址,函数改为地址传参数,解决了第一次编写大作业的问题,只要有函数的地址,重复使用很方便,但是编写的时候也遇见了传参数出现错误的情况,比如定义形参的类型,在使用存储运算表达式的函数中,我想把和sum直接用在另外一个函数,出现错误。原因是这个sum变量是局部变量,不能够和别的函数共享,所以我想到了返回的方法,把sum作为函数的返回值。这样一更改,我的函数头名void又忘记了更改成对应的整形去定义函数,又出现错误,经过同学的指点,才发现了这一点问题。今后的编写中,要注意形参的传递要符合,有返回值函数不能够定义void。局部变量的值不能够给别的函数使用,如果要用,要用全局变量去定义,或者通过返回值使用!

转载于:https://www.cnblogs.com/zhouqb/p/10128946.html

裂缝目标检测数据集 一、基础信息 数据集名称:裂缝目标检测数据集 图片数量: 训练集:462张图片 验证集:21张图片 测试集:9张图片 总计:492张图片 分类类别: crack(裂缝):指物体表面的裂缝,常见于建筑、基础设施等场景,用于损伤检测和风险评估。 标注格式: YOLO格式,包含边界框和类别标签,适用于目标检测任务。 数据格式:图片来源于实际场景,格式兼容常见深度学习框架。 二、适用场景 建筑与基础设施检查: 数据集支持目标检测任务,帮助构建能够自动识别裂缝区域的AI模型,用于建筑物、道路、桥梁等结构的定期健康监测和维护。 工业检测与自动化: 集成至智能检测系统,实时识别裂缝缺陷,提升生产安全和效率,适用于制造业、能源等领域。 风险评估与保险应用: 支持保险和工程行业,对裂缝进行自动评估,辅助损伤分析和风险决策。 学术研究与技术开发: 适用于计算机视觉与工程领域的交叉研究,推动目标检测算法在现实场景中的创新应用。 三、数据集优势 精准标注与任务适配: 标注基于YOLO格式,确保边界框定位准确,可直接用于主流深度学习框架(如YOLO、PyTorch等),简化模型训练流程。 数据针对性强: 专注于裂缝检测类别,数据来源于多样场景,覆盖常见裂缝类型,提升模型在实际应用中的鲁棒性。 实用价值突出: 支持快速部署于建筑监测、工业自动化等场景,帮助用户高效实现裂缝识别与预警,降低维护成本。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值