【无标题】

二维数组的初始化 :

可以按行分段赋值 int a[2][3]={{1,2,3},{4,5,6}};分行赋值时 可以只给部分元素赋值 int a[3][4]={{1,2},{3,4}};可以省略行下标 不能省略列下标 int a[][4]={1,2,3,4,5} 这样每一行有四个 多的就换下一行就可以了

有一个东西一直忘 就是

%m.nf 的格式说明 随便查查发现还挺不好整的 m表示域宽

#include<stdio.h>
int main(void)
{
	float a = 456.75924;
	printf("%3.2f", a);
	return 0;
}

输出结果如图:这里的话我3.2的含义是输出域宽为3 其中2位是小数 1位是小数点  (整数嘞 啊咧)

结果它小数输出是2位 整数位补全了

#include<stdio.h>
int main(void)
{
	float a = 456.75924;
	printf("%4.4f", a);
	return 0;
}

 如果是这样的代码 输出结果如下边做笔记的同时 我差不多想通了,其实小数位的优先级是高的,也就是先按给定的小数位输出,然后按域宽输出 如果域宽小了 那么把数据补全 ; 如果域宽大了 那么在左边插入空格或0

 我试试两种方式哈        

#include<stdio.h>
int main(void)
{
	float a = 456.75924;
	printf("%9.4f", a);
	return 0;
}

输出结果如图: 

 当输入为:

#include<stdio.h>
int main(void)
{
	float a = 456.75924;
	printf("%010.5f", a);
	return 0;
}

输出为: 

 很棒!和我设想的是一样的

接着学习字符数组的初始化方式

第一种,逐个赋值 每一个都要打上单引号;第二种,把所有单引号去掉;第三种把大括号也去掉, 极简主义哈哈哈  char array []="mingtiannihao "

打着打着突然破防去改输入法去了,把输入法里shift中英文切换给关掉了 系统设置里有一个 而且输入法客户端里也有一个设置要改- - 不然想按shift老换成中文 没法敲代码

在初始化一个字符数组是 char c=“hello”时,采用字符串初始化要比逐个初始化要多占一个字节,用来存放字符串结束标志 "\0",这是由c语言编译系统自动加上的 我觉得很好理解 ;例如本例就要占用6个字节 如果是中文还要更多,一个中文是要占两个字节的 也就是一个“字”

字符的输出方式 %c是逐个输出%s是字符串整个输出  

几点细节:

1.用scanf(“%s”,array)输入数组时,数组名代表数组的起始地址,所以不用加取址符“&”

2.如果一个字符数组中包含多个"\0",则在遇到第一个“\0”时就停止输出

有一个地方没太搞懂,如果字符数组的长度未定,同时又输入多个字符串 怎样界定字符串之间的分隔? 我本来想着“\0”是空格,后来发现不是- - 这边建议复习一下转义字符

 \n  回车换行

\t    横向跳到下一制表位置 

\v   竖向跳格  vertical  对打印机起作用 对屏幕无任何影响

\f    走纸换页  换页符   对打印机起作用 对屏幕无任何影响

\b   退格     

\r    回车

我大概现在能用到的就这些

还是回到这个问题:如果字符数组的长度未定,同时又输入多个字符串 怎样界定字符串之间的分隔?

试着跑一下代码  跑代码的时候出现了很多问题

关于c和c++的关系问题 这里放上一个using namespace std的原理  有兴趣的可以看一下原文 大概理解是c++为了和c的标识符区分开 标识符放在一个特定的命名空间中,如果不适用这个语句,这些标识符是不会被编译器识别的,放在头文件的后面的话所有的标识符都会被识别。

---------------------------------------------为什么要使用using namespace std;-------------------------------------
⭐C++标准为了和C区别开!为了正确地使用命名空间,规定头文件不使用后缀.h。

例如当我们使用<iostream.h>时,相当于在C中调用库函数。

使用using namespace std
例如

#include
#include
#include
using namespace std;
1
2
3
4
这样使用的话,就相当于std命名空间内所有的标识符都已声明且存在,就像他们被声明全局变量一样,我们可以直接使用!

不使用using namespace std
cout和endl实际上是C++中的标识符,使用using namespace std;时,可以直接使用cout等标识符。

#include <iostream>
using namespace std;
int main()
{
   cout<<"halloworld!"<<endl;
}
1
2
3
4
5
6
但是当不使用using namespace std的时候,直接使用cout编译器会不识别,会产生报错:

“error: ‘cout’ was not declared in this scope"和"error: ‘endl’ was not
declared in this scope”

要加上命名空间std::才可以使用!
当程序中使用的标识符过多的话,每一句加std::就显得过于繁琐,所以一般都会在头文件后面加上using namespace std。

#include <iostream>

int main()
{
   std::cout<<"halloworld!"<<std::endl;
原文链接:https://blog.csdn.net/CodeBowl/article/details/118052278

---------------------------------------------------------------------------------------------------------------------------------

第一个问题:关于数组的长度问题 ,如果简单地使用教科书上c语言的方法是不能适应vs的- -

#include<stdio.h>


int main(void)
{
	char array1[5]="hahah";//出现报错“const char[6]的类型不能用于 char array[5]的实体”
	printf("%s", array1);
	return 0;
}

原因上面也解释过了 虽然教科书上写c语言可以不管“\0”来定义数组长度,但是使用vs编译器时,还得用 char array[6] 就是因为字符串数组后有一个结束标志“\0”

 修改后运行成功

第二个问题:动态数组的定义问题

 图中出现了 array2[]="12345" 语句 最后也输出成功了 可见vs编译器还是允许c使用动态数组直接进行初始化的

#include<stdio.h>


int main(void)
{
	char array1[]  , array2[] ;//出现报错 不允许使用不完整的定义类型
	scanf_s("%s", "%s", array1, array2);
	printf("%s""\n", array1);
	printf("%s""\n", array2);
	return 0;
}

如果数组未经初始化 则会出现报错。我也查了很多种办法 花了挺长时间的 利用c++的vector文件也许可以解决这个问题

 well fine  还是不行 不允许使用不完整的定义类型 //19:41 我倒要看看这能花我多长时间 我去查还不行么

真的麻了 我还是不会  我去借本书 c++ c双线吧 md 要不然出现问题也太多了

我出去借本书 顺便买个饭 今晚冲呀  

刚刚看了tup的书 这个作者好有意思哈哈哈哈 这个作者说“许多同事关心此书的早日付印,给了我春天般的温暖。他们温馨地提醒我不要浪费宝贵的光阴。出版社也经常关心我的编写进度,令我无以逃避,只能坐下来,静心编写和调试代码。”

“C++的泰斗Bjarne Stroustrup虽未唔面,但其经典之作 C++Programming Language 始终在我脑中萦绕,给了我突破任何技术障碍的力量”

“书中经常出现程序设计方法的多样性探讨、语言特征上的优缺点描述及编译工具评价等,甚至对C++中的一些名词和术语进行了自以为更确切的中文命名,对于计算机教师和高级程序员来说,应是一种有益的参考。作者不隐晦自己的观点,更欢迎专家来信探讨。”

“书中的每个程序代码从性能和易读风格上力求精简,但有时性能能和风格并不调和,因此,有些代码会很奇异,甚至个别代码会有些晦涩难懂(相对初学者来说),把这些悬念留给亲爱的老师来解释吧,以使课堂教学更加精彩。也把这些代码留给大伙儿一起品味吧,那是共享精华的地方。然而终究还有不足之处,希望与读者们一起来共同提高了。”

感受到了差距...1995年 java和c++就已经称霸世界那时我还没出生 - - (⊙o⊙)…站在巨人的肩膀上行走 首先要爬上巨人的肩膀 现在这个肩膀已经太高了 即使是爬上去 也很费劲   要学的东西实在太多了 每次有这个想法的时候我总是想着今晚睡不了觉了  然后有的时候一摆烂逃避就上瘾 也想不到要学什么了 结果日积月累发现自己很差劲 //21:29 

刚刚用了无线投屏连了一下电脑 还是蛮好玩的 就是不能打游戏

C++程序在编译后,通过同时链接若干个目标文件与若干个库文件而创建可执行程序。库文件是系统提供的程序链接资源,它一般是以版本为文件单位,带有一个特殊的后缀,不同公司的产品有不同的后缀,例如,C++ Borland C++ Builder6.0的库文件的后缀是.bpl 和 .lib.标准c++提供c++标准库,用户库是由软件开发商或程序员提供的。目标文件与库文件链接的结果,是生成计算机可执行的程序。

跟着钱能学English:

调试 debug    编译 compile   源代码 source code  算法 algorithms(记住这个s)

半径 radius     初始化initialize 赋值assignment 

iostream 是C++为特定环境编制的标准输入/输出流类的标准库头文件,也就是说,这个头文件提供了输入/输出设施。#include则是对编译器发出的操作指令,它指示编译器在编译之前,先将尖括号中的文件内容在本程序中原地展开,而头文件的内容,则声明从现在开始标准输入/ 输出的流操作可用,并在链接的作用下,将编译后的输入/输出指令转化成对应的输入/输出硬件设备的操作,从而使输入/输出语句“直接见效”。

C++程序的入口点总是int main(),操作系统启动可执行程序文件时,便装载文件到内存,并从main开始执行程序。main表示一个过程或者一个函数的名字,在C++中,过程和函数可以看做是同一个概念。(→CH3.1)chapter 3.1的意思0.0  "cout"是标准输出设备的名称,"<<"是操作命令,写到这很好奇程序员编书的时候引号会用中式的还是英式的 结果是中式的 毕竟要出版啊哈哈哈 "std::cout" 表示标准库中的cout

这个作者是真的有意思,“如果这章读完后,还没有办法运行这个简单的程序,那么再往下读就是不明智的了,为什么?”给读者问了个问题然后不解答,他好帅!!!!这居然是2005年的时候编的

WPS流程图很好用 可以用来做ppt或者word 我现在才想明白原来cout 和 cin 念 c-out 和 c-in

//今天继续昨天没学完的 5.31 10:43 也会补充上面学英语的一些- -

今天正式开始关于for循环的基础练习 得把这个东西彻底搞会不然学其他语言又要学一遍.....

首先我在想for循环的三个条件是否是无序列的,也就是说是否有优先级 让我们直接上代码吧

int main() {
	for (++i; i <= 10;int i = 1) //此行报错。++i处显示未定义标识符i 也就是定义语句是有优先级的
 {
		printf("%d",i);
			
	}
return 0;
}

 程序报错了  先定义在使用 那么后面两个命令呢

 (插一句刚刚犯了昨天还在书上看到的一个程序员把break语句插入循环内的错误 结果只输出了一项笑死,我把return 0放在循环内了)

 啊这 直接输出一大串序列

 书上给的例子果然是成功的

此例表明,for循环的三个语句并不是没有先后关系,而甚至是发挥独特的作用,每一项的作用都必须对应,不然就会形成上面的错误

第二个问题是++i和i++在for循环里有啥不同的,本质上其实是从 for循环括号内的第三个语句是怎么执行的问题

经过了重新生成后两次代码运行结果完全是一样的....如果i<=10换成i<10会怎么样呢? 

 换成++i 后:

 两次结果还是完全一样的

我再稍微修改一下

 额好像还是完全一样的结果 反正我的结论是 for循环里 ++i 和 i++ 并没有什么不同

这里查了一个博主的 文章 真是彻底解决了我的困惑

---------------------------------------------------------------------------------------------------------------------------------

那如果把i++替换成++i会有什么不一样呢?
首先,for循环的执行逻辑如下:

初始化变量,int i = 0;
判断i < 10;
执行循环体内的代码;
变量自增,i++或者++i;
那么,不难看出,不管使用++i还是i++,对最终的计算结果其实是没有区别的。

但是虽然结果没有区别,但还是有其他不一样的。二者的实现代码如下:

   A  operator ++()         //前++
    {
        i=i+1;
        return *this;
    }
 
    A  operator ++(int)      //后++
    {
        A t=*this;          //先保存一份变量
        ++(*this);          //调用前++
        return t;
     }
1
2
3
4
5
6
7
8
9
10
11
12
可以发现,i++需要一个暂时变量,然后将i加1后,返回的是暂时变量。而++i就是自增后返回i。
所以在空间损耗上,i++要略高于++i,因此,在不影响代码逻辑的前提下,要尽量使用++i。

原文链接:https://blog.csdn.net/qq_41006629/article/details/123983985
---------------------------------------------------------------------------------------------------------------------------------

//一方面证实了我的猜想是正确的,二是说的很清楚为什么书上要使用++i,三是说了for循环的执行逻辑,对我很有用  实验这个过程还是很有意思的 我现在要去开会 离开一会11:35

额说好的离开一会其实离开了一天....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值