首页 > 编程语言 >2022-2023-1 20221414《计算机基础和程序设计》第八周学习总结

2022-2023-1 20221414《计算机基础和程序设计》第八周学习总结

时间:2022-10-22 10:35:42浏览次数:83  
标签:输出 2022 int 20221414 printf 数组 2023 字符串 scanf

作业信息

班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP
作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08
作业目标:面向对象,面向过程,顶点,指针,编译器定义,翻译过程,继承,多态
作业正文:2022-2023-1 20221414《计算机基础和程序设计》第八周学习总结

教材总结

  • 功能设计是按照产品定位的初步要求,在对用户需求及现有产品进行功能调查分析的基础上,对所定位产品应具备的目标功能系统进行概念性构建的创造活动。
  • 面向对象程序设计其本质是以尽可能模拟人类的思维方式来建立模型体现出来的抽象,思维过程和面向对象的方法,以对象为核心。其过程简单地说就是先抽象出对象,然后用对象执行方法的方式解决问题。具体方法有:
    1、先根据需求找出对象
    2、抽象每一个对象为类
    3、找出各对象之间的关系,使用组合、继承、分类、扩展等描述这些关系
    4、找出每个对象实体要做的事,写对象方法
    5、找出每个类在不需要有对象实体的情况下要做的事,写类方法
  • 三个特性:1、封装性;2、继承性;3、多态性。
  • 四个名词解释:
    1.汇编是三种方式中最接近“翻译”的本来意味的,因为汇编过程就是把汇编指令一对一地翻译成01机器码的过程。而采用这种处理方式的语言只有一类:汇编语言。
    2.解释过程,就是对于源文件中的每一条指令,都依次翻译成目标指令,并且执行的过程.需要解释器,由此运行较慢,但也获得了无平台限制的优点。
    3.编译过程,与解释挺像,区别就在于编译是将所有的源代码指令一次性成翻目标代码并执行,并且不需要解释器的参与,所以运行比较快,但有平台依赖性。编译好的程序只能在当前平台运行。
    4.执行:机器理解并运行其所得的机器代码
  • c语言:指针是c语言的精华,也是难度的体现,我还没有学得很懂。这里分享一篇有关文章:让你不再害怕指针——C指针详解

错题

The properties of an abstract data type are tightly related to the implementation of that data type.
我的翻译:一个抽象数据结构的属性与他的实现方式紧密相关。
实际上是分离的。
正确答案:错误
你的作答:正确

代码问题

一,数组存储字符串和scanf_s第三个参数的意义
从这个程序说起(程序目的是输入abcdefg,再把它倒置输出成gfedcba。原题要求递归,但当时我没看到。现在只探讨这一程序报错缘由)
#include<stdio.h>
int main()
{
int i;
char N[7];
printf("input your string:\n");
for (i = 0; i < 7; i++)
{
scanf_s("%s",&N[i],7);
}
for (i = 6; i >= 0; i--)
{
printf("%c", N[i]);
}
return 0;
}
1.0x00007FFE36F62079 (ucrtbased.dll)处(位于 ConsoleApplication10.exe 中)引发的异常: 0xC0000005: 写入位置 0x0000002AA5D00000 时发生访问冲突。
scanf_s在输入数组时需要加入数组长度,即参数“7”。
引用
2.Run-Time Check Failure #2 - Stack around the variable 'N' was corrupted.
意思是:定义的数组N附近的内存被破坏了。可能原因有:堆栈溢出、内存访问越界。这里应该是数组访问越界。这里有两个问题,一个是数组存储字符串(当我把"%s"改为"%c"时就没有问题了,所以这是字符串的问题。),还有一个是scanf_s第三个参数(下面统称三参)的意义。
第一个问题在第十章(10.2)中有讲解。在数组存储字符串时切记少敲一位字符,因为数组最后一位要放结束符。因此,这个存储字符串的数组的长度至少是8(7 + 1)。
然而,做出修改后程序仍然如此报错。经反复实验,数组长度>=三参+6才行。由此我们需要了解这一现象的原因。
先来了解scanf_s函数。scanf_s用法
scanf_s函数特别针对输入字符串的情况。scanf_s最后一个参数是缓冲区的大小,表示最多读取n-1个字符(留一个给'\0')。现在我有两个疑问,一,我每次输入的都是字符串,那么长度8无法存储7个字符串而是把他们当成了一个字符串,为什么?二,三参增加的意义和数组长度随之增加的意义是什么?
通过隔开输入字符串,我发现它每次都是按照一个字符串来存储的,只是几个字符串不隔开输入时'\0'会被替换,刚好变成一个字符串。
而我理解的三参的含义是scanf_s函数向数组申请的缓存区大小,这个缓存区不能超过数组本身内存。在本代码中输入函数最终会到达N【6】,当数组长度为8是刚好只有2个长度(N【6】,N【7】)可以给scanf_s函数当缓存区,故三参最多为二,之后以此类推。
ps:在实验中我发现三参为一时输出空白,测试得其数组内存储的全是'\0',验证了上述部分说法。也验,三参为三时可以同时输入三个长度的字符串,所以根本没必要搞个循环来把一个字符串拆成一个个来输入,倒是可以用于多个最好同大小的字符串的存储。所以代码做如下修改:(就本题而言,直接把"%s"改为"%c"就好了,但这里就是要储存一个字符串)
#include<stdio.h>
int main()
{
int i=0;
char N[8];
printf("input your string:\n");
scanf_s("%s", &N[i],8);
for (i = 7; i >= 0; i--)
{
printf("%c", N[i]);
}
return 0;
}
二,float类型%d输出
看以下代码
#include<stdio.h>
int main()
{
int a, n;
float b,x=0;
b = 0.01;
a = 100000 * 30;
for (n = 1; n <= 30; n++)
{
x = x + b;
b = b * 2;
}
printf("Millionaire gives the stranger: %8ld Yuan\nThe stranger gives millionaire: %8ld Yuan\n", x, a);
return 0;
}
我们要的答案是x=10737418,但答案总是多了个24,可逻辑并没有问题,经调试在出循环时x=10737418.0也没有问题。所以就只有输出问题了。
在把x强制类型转换为int后答案没有了问题,也就是说问题出在一个float变量输出为%8ld格式上。
经查,有相似情况:当float a=7.5f 时printf("%d",a)输出为0的情况:%d只输出低32位的数据,并将这些32位二进制以十进制数输出,编译器首先将7.5从float类型转换为double类型,7.5在内存中的存放方式是0x40f00000,转换成double类型在内存中的数据就是这个0x401e000000000000,这个内存数据可以很明显看出低32位全是0,而%d则只能截取到低32位,所以这个以%d输出7.5的数值当然是0了。如大家不相信可以用%lld 输出看看,这个%lld就很读到低64位数据,读出的结果就是0x401e000000000000,在屏幕上看到一个很大的十进制数。
另外,在查找过程中我也学习了一点vs调试知识,以下是入门文章:vs调试查看中间变量Debug调试—Visual Studio 2022
三,其他
1.“do…while 是先执行一次循环体,然后再判别表达式”。当表达式为“真”时,返回重新执行循环体,如此反复,直到表达式为“假”为止,此时循环结束。
2.在C语言中有两种注释方式:一种是以/开始、以/结束的块注释(block comment);另一种是以//开始、以换行符结束的单行注释(line comment)。
3.调用堆栈溢出可能是错误的运算导致,比如0/0.

进度

未统计

标签:输出,2022,int,20221414,printf,数组,2023,字符串,scanf
From: https://www.cnblogs.com/20221414youer/p/16795679.html

相关文章

  • 2022-10-21 看李晓军视频笔记不测而测第一讲
    http://www.365chanlun.com/live/playBack_45_2151.html还是2022-07-26这一节课日线笔,可能是30分钟线段,可能是5分钟走势,一定是1分钟走势。现在是只有日线一笔,所以之后的......
  • javase重开2022年9月21日
    Boolean类型java中返回trueorfalse而在C语言中返回0表示false其余皆为true类型转换隐式类型转换隐式类型转换支持字节数小的类型自动转换为字节数大的类型,整数类......
  • 2022-2023-1 20221312 《计算机基础与程序设计》第八周学习总结
    作业信息班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08作业目标:面向对象,面向过程,顶点,......
  • 2022-2023-1 20221408《计算机基础与程序设计》第八周学习总结
    第八周学习总结作业信息这个作业属于哪个课程:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP这个作业的要求在哪里:https://www.cnblogs.com/rocedu/p/9577842......
  • 2022.10.21-代码大全-10月读后感2
    近期,我阅读了这本书的软件构造为何如此重要这一部分。我了解到了提高软件的质量和开发者的生产效率都是十分重要的。一些常见的项目,都从软件开发实践的改进中收益。我了解......
  • C4D2023取消永久许可?Maya推出精简版?你不能错过的7个CG软件资讯...
    忙碌了一个月,是不是没有时间看各类CG软件的最新资讯呀,​​云渲染​​小编特意整理了一下各大CG制作软件和渲染器的更新情况,方便大家了解行业最新动态!不知道是不是因为9月......
  • Hello 2022 C
    C.HiddenPermutations对于置换我们知道他是几个环我们手动模拟之后发现他的环的位置和出现的数是一置的只需要出现的顺序倒序再往左移一即可然后我们对于每一个位......
  • 【闲话】2022.10.21
    今天搬到了宾馆进行隔离!开始了快乐的集训生活!欢迎线下面基在路上打了两把雀食(真好玩然后推了一把虹龙洞好家伙三面疮了4次我好菜啊(笑接下来几天可能得到了外网加......
  • 江南信息学第七周练习20221021
    比赛链接  6436计算表达式的值 6656bth的年龄问题 6989比赛准备 7190猜数游戏1 7623粗心的小L2.0 7501因子个数1 7560数字和 7585兔子繁......
  • spark springboot 实例WordCount.scala20221021
    spark解析aa.txt   1、aa.txt           2、pom.xml<dependency><groupId>org.apache.spark</groupId>......