二维数组的初始化 :
可以按行分段赋值 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
额说好的离开一会其实离开了一天....