[编程笔记]第二章 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 ...
 
随机推荐
- C语言 求两数的最大公约数和最小公倍数
			
//作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ #include<stdio.h> //最大公约数 int gys(int x,int ...
 - human pose estimation
			
2D Pose estimation主要面临的困难:遮挡.复杂背景.光照.真实世界的复杂姿态.人的尺度不一.拍摄角度不固定等. 单人姿态估计 传统方法:基于Pictorial Structures, ...
 - 一台电脑安装两个JDK
			
起因:由于嫌自己电脑东西太乱,在上个学期重新格式化整理了一下.下载的jdk也为当时最新的10版本,上次在买jsp的虚拟主机时候也遇到了这个问题,对方提供的jdk只有7版本的,我是10版本的,所以当时打 ...
 - C#反射の一个泛型反射实现的网络请求框架
			
点击下载源码 C#反射の反射详解(点击跳转)C#反射の反射接口(点击跳转)C#反射反射泛型接口(点击跳转)C#反射の一个泛型反射实现的网络请求框架(点击跳转)
 - WPFの无边框窗体以及控件的移动
			
对于WPF,一旦隐藏了标题栏,就无法移动,这时候需要重写移动方法,下面列举常见的三种方式方式. 方式一:重写OnMouseLeftButtonDown protected override void ...
 - Python中的单例模式——装饰器实现剖析
			
Python中单例模式的实现方法有多种,但在这些方法中属装饰器版本用的广,因为装饰器是基于面向切面编程思想来实现的,具有很高的解耦性和灵活性. 单例模式定义:具有该模式的类只能生成一个实例对象. 先将 ...
 - JDK动态代理Demo代码,进一步学习分析
			
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflec ...
 - 【angularjs】使用angular搭建项目,pc端实现网页中的内容不可复制
			
实现目标:不可复制页面内容 js: <script language="javascript"> if (typeof(document.onselectstart) ...
 - Python框架学习之用Flask创建一个简单项目
			
在前面一篇讲了如何创建一个虚拟环境,今天这一篇就来说说如何创建一个简单的Flask项目.关于Flask的具体介绍就不详细叙述了,我们只要知道它非常简洁.灵活和扩展性强就够了.它不像Django那样集成 ...
 - Linux内核入门到放弃-内存管理-《深入Linux内核架构》笔记
			
概述 内存管理的实现涵盖了许多领域: 内存中的物理内存页管理 分配大块内存的伙伴系统 分配较小内存块的slab.slub和slob分配器 分配非连续内存块的vmalloc机制 进程的地址空间 在IA- ...