[编程笔记]第二章 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 ...
随机推荐
- 【teradata】强制解锁
使用加锁用户释放锁,也可以用其它用户使用如下语句强制解锁 Release lock (pdm_data ),Override
- 设计模式のAdapterPattern(适配器模式)----结构模式
一.产生背景 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能.举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器.您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本 ...
- Android中实现短信发送的一种方式
SendSmsActivity.java: package com.test.smsmangerdemo.sendsmsactivity; import android.support.v7.app. ...
- [matlab] 5.字符运算与微积分
首先介绍一下matlab里的符号计算 符号变量可以看成是数学中含参数 的表达式中的参数 matlab能进行像(a+b)(a-b)=a^2-b^2这样的计算 要进行符号计算首先要定义符号变量 定义符号对 ...
- iptables 设置端口转发/映射
iptables 设置端口转发/映射 服务器A有两个网卡 内网ip:192.168.1.3 外网ip:10.138.108.103 本地回环:127.0.0.1 服务器B有网卡,8001提供服务 内网 ...
- 爬取伯乐在线文章(五)itemloader
ItemLoader 在我们执行scrapy爬取字段中,会有大量的CSS或是Xpath代码,当要爬取的网站多了,要维护起来很麻烦,为解决这类问题,我们可以根据scrapy提供的loader机制. 导入 ...
- 【移动端】单位em相关资料
https://www.cnblogs.com/koubazhuanshu/p/6985331.html https://www.w3cplus.com/css/px-to-em 不建议使用 作者:s ...
- 【css3】nth-child
nth-child含义 :nth-child(an+b) 这个 CSS 伪类匹配文档树中在其之前具有 an+b-1 个兄弟节点的元素,其中 n 为正值或零值. 简单点说就是,这个选择器匹配那些在同系列 ...
- 异常:NoNodeAvailableException
现象 1.启动时候出现 node null not part of the cluster Cluster [********], ignoring... 2.启动时正常,但是请求时出现 NoNode ...
- poj-1330(暴力写的lca)
传送门 一看就是lca的板子题 然而 (写这个的时候我忘了怎么写lca) 于是我就试着写暴力了 本以为会tle结果e了一次后居然a掉了 开心到起飞.嘿嘿嘿 但还是格式输出错误了一次而且在ce之前也de ...