[编程笔记]第二章 C语言预备知识
/*第二讲 C语言预备专业知识
1.CPU 内存条 硬盘 显卡 主板 显示器之间的关系
CPU不能直接处理硬盘上的数据
文件存储在硬盘,当运行时,操作系统把硬盘上的数据调用到内存条上。
图像以数据的形式通过显卡在显示器上输出
声音以数据的形式发送给声卡输出
这些硬件在主板的插槽上通过主板电路组合在一起 2.Hello World程序是如何运行起来的
源代码,通过编译(Compile) 链接(Build),生成.exe可执行文件。
软件请求操作系统来执行.exe执行文件
操作系统调用CPU来运行程序 3.什么是数据类型?
基本类型数据(不可再分割)*/
【整数】
整型 —— int 4个字节
短整型 —— short int ——2个字节
长整型 —— long int ——8个字节
/int i = 表示i是整型变量,所谓整型变量即指i只能存放整数
【浮点数(实数)】
单精度浮点数 —— float —— 4个字节
双精度浮点数 —— double —— 8个字节
【字符】
单个字符 —— char
字符串 —— 一系列字符的组合 /* 复合类型数据
结构体
枚举
共用体 4.什么是变量?
变量的本质就是内存中的一段存储空间。
int i = 3 ;//
数据3最终是存放在内存中,程序终止之后3所占的空间被释放。
定义变量时,程序请求操作系统,
在内存中找到一个空闲的单元,分配给变量i并存储它的内容。 5.CPU 内存条 VC++6.0 和 操作系统之间的关系
VC++6.0软件请求操作系统,在内存条中分配一段空闲的空间,
将这段空闲的空间与变量i产生关联,以后使用变量i即是在使用
变量i对应的存储空间,最终在CPU中运行程序。 6.变量为什么必须要进行初始化? **
所谓初始化就是给变量赋初值。
如果不进行初始化,系统会将内存释放前的填充值输出。 7.如何去定义变量? **
数据类型 变量名 = 要赋的值 ;
等价于=> 数据类型 变量名
变量名 = 要赋的值
*/
举例:
int i = => int i; i = ;
int i,j => int i;int j ;
int i,j = => int i,int j;i = ;
int i = ;int j = ; => int i;int j;i = ;j = ;
int i,j;i = j = ; => int i,j;i = ;j = ;
/*
8.什么是进制? **
十进制就是逢十进一,计算机之识别二进制
十进制:基数 0 1 2 3 4 5 6 7 8 9
二进制:基数 0 1 printf用法
%d 表示以十进制输出
%x或%X 表示以十六进制输出
%o 表示以八进制输出 进制转换:
把r进制 转成 十进制
把十进制 转成 r进制
不同进制所代表的数值之间的关系
十进制的 3981 转化为十六进制 是 F8D
十进制的3981和十六进制的F8D所代表的本质上都是同一个数字 二进制全部为零的的含义 —— 00000000 的含义
1. 数值为零
2. 字符串结束标记符 '0'
3. 空指针NULL
NULL 本质上也是零,但这个零不代表数字零
而表示的是内存单元的编号零
我们规定:以零为编号的存储单元的内容 不可读,不可写
*/
.常量在C语言中是如何表示的?
整数:
十进制: 传统写法
十六进制: 前面加0x或0X
八进制: 前面加0() 注意是数字零,不是字母o
浮点数:
传统写法: float x = 3.2 ;
科学计数法:float x = 3.2e3 ;//x的值是3200
float x = 1.23.45e- ; //x的值是1.2345
#include<stdio.h>
int main(void){
float x = 123.45e-2F ;
printf("%f\n",x)
return ;
}
字符:
单个字符用单引号''括起来 ;'A'表示字符A 'AB'错误
字符串用双引号""括起来 ; "A"正确
因为"A"代表'A'和'\0'的组合 .常量是以什么样的二进制代码存储在计算机中?
编码
int i = ;
整数是以补码的形式转化为二进制代码存储在计算机中的 ;
实数是以IEEE754标准转化为二进制代码存储在计算机中的 ;
字符的本质实际上也是与整数的存储方式相同 ;
字符'A'先转换为对应的ASCII码 -> 再转换为对应的补码形式 ; .代码规范化
优点:
.使得代码的可读性更强,让自己和别人更清楚的看懂程序
.使得代码的健壮性更高,这样程序更不容易出错 参考书籍:《高质量C/C++编程》
#include<stdio.h>
int main(void)
{
if (xxxxx(xxxx(xx)))
{
while (xxxx(xxx))
{
for (xxxx(xxx))
}
}
if (xxxxx(xx)xx)
{
printf("Say Hello") ;
}
return ;
}
.{}()成对出现
.缩进 区分内部外部的关系
.换行 区分上行下行的功能 .什么是字节?
字节就是存储数据的单位,并且是硬件所能访问的最小单位。
1字节 (B)= 位 ; 1KB = 1024B ;
1M = 1024KB ; 1G = 1024MB ;
//1.5GB = 1.5*2^30*8b .不同类型数据之间相互赋值的问题 **
//在理解补码的基础上学习,暂不考虑
int i = ; //-45的二进制码为
long j = ;
i = j ;
printf("%d %d\n",i,j) ;
float x = 6.6 ;
double y = 8.8 ;
printf("%f %f\n",x,y) ; int i = ; .什么是ASCII?
ASCII码不是一个值,而是一种规定。
ASCII规定了不同的字符使用那个整数值去表示。
它规定了:
'A' = ; 'B' = ;
'a' = ; 'b' = ;
'' = ; #include<stdil.h>
int main(void)
{
char ch = 'A' ;//OK
char ch = 'AB' ;//error是因为不能把字符串赋值给单个字符
char ch = "A" ;//error
char ch = 'B' ;//error 变量不能二次定义
ch = 'C' ;
printf("%c\n",ch) ;
return ;
}
/*
15.字符的存储[字符本质上与整数的存储方式相同] 16.对初学编程者的一些建议
对于编程基础有了一定了解,再深入或入门其他语言就会相对简单。
一定要基础阶段打好基础,学完流程控制之后就可以做一些小项目了。
*/
.基本的输入输出函数用法
printf() —— 将变量的内容输出到显示器上
四种用法:
.printf("字符串\n") ;
.printf("输出控制符",输出参数) ;
.printf("输出控制符1 输出控制符2",输出参数1,输出参数2) ;
输出控制符和输出参数的个数必须一一对应。
.printf("输出控制符 非输出控制符",输出参数) ;
输出控制符包含如下:
%d —— int
%ld —— long int
%c —— char
%f —— float
%lf —— double
%x —— int
%o —— 同上
%s —— 字符串
非输出控制符以它本身,原样输出。
/*
为什么需要输出控制符?
1. 01组成的代码可以表示数据也可以表示指令。
2. 如果01组成的代码是数据的话,同样地,
01代码组合以不同的输出格式输出就会有不同输出结果。
因此需要有不同的输出控制符。
*/
printf中%x的相关用法:
#include<stdio.h>
int main(void)
{
//printf("Hello!\n") ;
int i = ;
printf("%d\n",i) ; //d是十进制
printf("%x\n",x) ; //输出结果是:2f
printf("%X\n",x) ; //输出结果是: 2F
printf("%#X\n",x) ; //输出结果是:0X2F 推荐使用
printf("%#x\n",x) ; //输出结果是:0X2F
return ;
} scanf() —— 通过键盘将数据输入到变量中
两种用法:
用法1: scanf("输入控制符",输入参数) ;
功能: 将从键盘输入的字符转化为输入控制符所规定格式
的数据,然后存入以输入参数的值为地址的变量。 #include<stdio.h>
int main(void)
{
int i ;
scanf("%d",&i) ; //&i表示取地址符,表示i的地址
printf("i = %d\n",i) ;
} 用法2: scanf("非输入控制符 输入控制符",输入参数) ;
功能:将从键盘输入的字符转化为输入控制符所规定格式
的数据,然后存入以输入参数的值为地址的变量中。
非输入控制符必须原样输入。
#include<stdio.h>
int main(void)
{
int i ;
scanf("m%d",&i) ; //m123为正确输入 123非法输入
printf("i = %d\n",i) ; return ;
}
用法3:一次给多个变量键盘赋值
#include<stdio.h>
int main(void)
{
int i,j,k ;
printf("请输入三个值,中间以逗号分隔:\n") ;
scanf("%d %d %d".&i,&j,&k) ;
printf("i = %d,j = %d,k = %d\n",i,j,k) ; return ;
}
如何使用scanf()编写出高质量代码
. 使用scanf之前最好先使用printf()作为输入的提示信息。
. scanf中尽量不要使用非输入控制符,尤其是不要用\n 。
. 应该编写代码对用户的非法输入做适当的处理
while ((ch = getchar()) != '\n')
continue ; .如何编写出更有保存价值和更具有学习价值的程序
/*-----------------------------------
时间:2018-12-28 00:31:42
功能:()
目的:()
测试%x,%X,%#x,%#X的用法
程序代码段:*/
#include<stdio.h>
int main(void)
{ return ;
}
/*
在Vc++6.0中的输出结果是:
----------------------
2f
2F
0X2F
0X2F
-----------------------
总结:
---------------------------------------
*/ /*
19.如何看懂一个程序 如何掌握一个程序
判断一个数字是否是素数
判断一个数字是否是回文数
编程实现求一个十进制数字的二进制形式
把一个数字的每位是奇数的数字取出来组合形成的新数字
求一个数字倒过来的数字 【如何掌握一个程序】
1. 尝试自己去编程解决它
但要意识到大部分人都是无法自己解决的,这时不要气馁,也不要放弃。
如果十五分钟内还想不出来,此时建议直接看答案。
2. 如果解决不了,就看答案
关键是把答案看懂,这个要花很大的精力,也是我们学习的重点。
看懂一个程序要分三步:流程、每个语句的功能、试数
3. 看懂之后尝试自己去修改程序,并且知道修改之后,程序的输出结果。
不建议看懂程序之后就立即自己敲程序
4. 照着答案去敲
5. 调试错误
6. 不看答案,自己独立把答案敲出来
7. 如果程序实在无法彻底理解,就把它背会,没有无法理解的程序。 算法: 解题的方法和步骤
看懂一个程序,分三步:
1. 流程
2. 每个语句功能
3. 试数 调试
看流程 —> 看功能语句 —> 改代码 —> 调试
*/
【试数】
. 把自己当成计算机,按照流程流程执行
. 不要遗漏省略某一步
. 注意格式清楚,逻辑清晰 //试数详细步骤举例
{
#include<stdio.h>
int main(void)
{
int i ;
float sum ; for (i=; i<=; ++i)
{
sum = sum + /i ; //error
sum = sum + / (float)(i) //ture
//sum = sum + (float)(1/i) ;是错的
//更简单的写法是 sum = sum + 1.0/i ;
}
printf("sum = %d\n",sum) ; return ;
}
------------------
//试数
-> i = <= 成立
sum = +/1.0= ++i i =
-> i = <= 成立
sum = +/2.0 ++i i =
-> i = <= 成立
sum = +/2.0+/3.0 ++i i =
-> i = <= 成立
sum = +/2.0+/3.0+/4.0 ++i i =
}
[编程笔记]第二章 C语言预备知识的更多相关文章
- [编程笔记]第一章 C语言概述
//C语言学习笔记 第一讲 C语言概述 第二讲 基本编程知识 第三讲 运算符和表达式 第四讲 流程控制 第五讲 函数 第六讲 数组 第七讲 指针 第八讲 变量的作用域和存储方式 第九讲 拓展类型 第十 ...
- Python核心编程笔记 第二章
2.1 程序输出:print语句 可以使用print语句显示变量的字符串表示,或者仅用变量名查看该变量的原始值. 2.2 程序输出和raw_input()内建函数 ...
- 第二章 C语言编程实践
上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...
- [书籍翻译] 《JavaScript并发编程》 第二章 JavaScript运行模型
本文是我翻译<JavaScript Concurrency>书籍的第二章 JavaScript运行模型,该书主要以Promises.Generator.Web workers等技术来讲解J ...
- 《DOM Scripting》学习笔记-——第二章 js语法
<Dom Scripting>学习笔记 第二章 Javascript语法 本章内容: 1.语句. 2.变量和数组. 3.运算符. 4.条件语句和循环语句. 5.函数和对象. 语句(stat ...
- [HeadFrist-HTMLCSS学习笔记]第二章深入了解超文本:认识HTML中的“HT”
[HeadFrist-HTMLCSS学习笔记]第二章深入了解超文本:认识HTML中的"HT" 敲黑板!!! 创建HTML超链接 <a>链接文本(此处会有下划线,可以单击 ...
- Android群英传笔记——第二章:Android开发工具新接触
Android群英传笔记--第二章:Android开发工具新接触 其实这一章并没什么可讲的,前面的安装Android studio的我们可以直接跳过,如果有兴趣的,可以去看看Google主推-Andr ...
- C#语言————第二章 C#语言快速热身
第二章 C#语言快速热身 ***********一.选择结构**************** 1:if选择结构与java的if选择结构语法完全相同 2:switch选择结构 ①:常量表达式的值可 ...
- 3-8《Ruby元编程》第二章对象模型
<Ruby元编程> 第二章 对象模型 类定义揭秘inside class definitions: class关键字更像一个作用域操作符,核心作用是可以在里面随时定义方法. [].meth ...
随机推荐
- 挂载KVM Guest操作系统磁盘
使用虚拟机时, 发现想要修改虚拟机中的文件非常麻烦, 需要启动虚拟机, 然后再登录进去修改. 对于已经关闭的虚拟机, 为了修改一个文件而启动, 非常耽误时间. 对于一个无法启动的虚拟机(比如启动文件损 ...
- intellij IDEA导入java源码
第一步: 从安装的jdk目录中找到src.zip文件, 这里是java源码的压缩包 第二步: 打开IDEA, 随便一个java相关项目,打开右上角的project structure 第三步: 点开源 ...
- C语言 排序算法总结
#include<stdio.h> #include<stdlib.h> //作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ # ...
- react中使用Ajax请求(axios,Fetch)
React本身只关注于界面, 并不包含发送ajax请求的代码,前端应用需要通过ajax请求与后台进行交互(json数据),可以使用集成第三方ajax库(或自己封装) 常用的ajax请求库 jQuery ...
- SQLite的sqlite3_prepare_v2
original SQL text---<sqlite3_prepare_v2>--->sqlite3_stmt--<sqlite3_reset>-->clear ...
- C++ 星号* 与 引用&
星号 * 1. 声明的时候有*, 表示指针变量 int *p=&a;// '&'的作用就是把a变量在内存中的地址给提取出来 2. * +地址, 表示地址操作符 3. 数字*数字, 表示 ...
- WPF DataGrid 列宽填充表格方法
WPF中使DataGrid 列宽填充表格方法,设置ColumnWidth属性为ColumnWidth="*"即可. 源码: <DataGrid AutoGenerateCol ...
- python3 练习题 day04
'''1.整理装饰器的形成过程,背诵装饰器的固定格式''''''开放封闭原则:为了保证程序的稳定性,和功能的可开放性,在不修改目标函数源代码和调用方式的情况下,对目标函数增加新功能'''# def w ...
- <网络编程>IO复用
IO复用是一种机制,一个进程可以监听多个描述符,一旦某个描述符就绪(读就绪和写就绪),能够同志程序进行相应的读写操作. 目前支持I/O复用的系统调用有select,poll,pselect,epoll ...
- php 数组元素快速去重
1.使用array_unique方法进行去重 对数组元素进行去重,我们一般会使用array_unique方法,使用这个方法可以把数组中的元素去重. <?php $arr = array(,,,, ...