已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在VS2012中的主程序必须是带有类型标识符的,不然编译不能通过。例如:#include main (void) printf(欢迎来到C语言世界!n)以上这个程序是编译同步过的,要写成如下:#include int main (void) printf(欢迎来到C语言世界!n)Visual Studio 2012 命令行上面编译命令:cl /EHsc basic.cpp常量 整数 十进制: 传统写法 十六进制: 前面加0x或者0X 八进制: 前面加0例一:# include int main(void) int m = 0256, n = 256; /0256为八进制,256为十进制 printf (%o %o n, m , n); return 0;输出结果为:256 400 浮点数 字符书籍:林锐 高质量C/C+编程机械工业出版社 Turbo C 2.0 实用大全进制和printfprintf (%X) /十六进制 大写输出,输出格式为:十六进制数字printf (%#X) /带前缀的 十六进制,输出格式为:0x十六进制数字int main(void) int m = 666, n = 888; printf (%dn, m , n); return 0;输出结果是:666& 区地址符scanf用法1 _ 不含输入控制符的用法# include int main (void) int i; scanf(%d, &i); prinf(i =%dn, i); return 0;scanf用法2 _ 含输入控制符的用法# include int main (void) int i; scanf(m%d, &i); /检测有m开头输入后数据才是合法输入 如:123 非法 m123 输出123 prinf(i =%dn, i); return 0;sacnf用法3 _ 一次给多个变量键盘赋值.swf# include int main (void) int i,j; scanf(%d %d, &i, &j); prinf(i =%d j = %dn, i, j); return 0;如何编写高质量的scanf 的代码。1.在写scanf代码前最好用printf显示提示信息。2.在写scanf最好不要使用非输入控制符,不要用/n。流程控制:(学习C语言的重点) 1.什么事流程控制 程序代码执行的顺序 2.流程控制的分类 顺序 选择 循环if的简单用法: # inclued int main(void) if(1) printf(AAAA/n); /会输出AAAA if(0) printf(AAAA/n); /不会输出AAAA一些常见的需要算法知识的C语言程序:判断一个数字是否是素数判断一个数字是否是回文数编程实现求一个十进制数字的二进制形式求一个数字的每位是奇数的数字取出来组合形成的新数字求一个数字倒过来的数字如何看懂一个程序,分三步:1. 流程2. 每个语句的功能3. 试数如何学习一些需要算法的程序【如何掌握一个程序】1.尝试自己去编程解决它但要意识到大部分人都是自己无法解决的,这时不要气馁, 也不要自卑, 如果十五分钟还想不出来, 此时我建议您就可以看答案了2.如果解决不了, 就看答案关键是把答案看懂, 这个要花很大的精力,也是我们学习的重点,看懂一个程序要分三步: 流程、每个语句的功能、 试数3.看懂之后尝试自己去修改程序,并且知道修改之后程序的输出结果的含义不建议看懂程序之后就立即自己敲程序4.照着答案去敲5.调试错误6.不看答案,自己独立把答案敲出来7.如果程序实在无法彻底理解, 就把它背会,不过无法彻底理解的程序非常少, 我自己几乎没有碰到过数据类型的强制转换:/* 功能:比较输入数字的大小,并且进行排序 目的: 掌握If的用法 时间:2013-1-31*/# include int main (void) int a, b, c; int t; /t 变量为转换时候的中间变量 printf (请输入第一个数:); scanf (%d, &a); printf (请输入第二个数:); scanf (%d, &b); printf (请输入第三个数:); scanf (%d, &c); /比较三个数字的大小,a为最大,b为中间,c为最小。 /将 符号就可以将三个数字按照从小到的的顺序进行排列。 if (a b) t = a; a = b; b = t; if (a c) t = a; a = c; c = t; if (b bc-*/for的用法:/* 功能:求1+2+3+.+100的和 目的: for的简单的用法 时间:2013年1月31日13:08:02*/# include int main(void) int i; int sum = 0; /定义此变量的时候一定要将定义的变量赋值为零, /不然定义的变的里面将是一个垃圾值,使计算的结果不正确。 for (i = 1; i = 100; +i) sum = sum + i; printf(1+2+3+.+100=%d, sum); return 0;注意:再学习了If和For命令之后,不要将for循环与if判断命令混淆。 if是判断指令,而for是循环指令/*功能:理解数据间进行运算是必要的类型转换时间:2013年2月2日12:34:18*/# include int main (void)int i;float sum = 0;for (i = 1; i 回文数的理解: 扩展:对一个整型数据进行倒叙排列/*功能:判定一个从键盘输入的数字是否是回文数 回文数:顺序写和倒叙写都是同一个数字。 如:121 212 因此判断一个回文数即使将数字的顺序进 行倒叙排列后,判读值是与输入数相同。 同-则 是 不同-则 不是目的:掌握回文数的理解和方法的实现,并进一步 对数字的倒叙排列进行理解。时间:2013年2月3日16:28:21*/# include int main(void) int i, j = 0; int val; /定义输入待判断的数 int temp = 0; printf (请输入一个数字: ); scanf (%d, &val); printf (n); i = val; /将输入数字进行倒叙排列,用于对比是否是回文数 while (i) /此程序有多个parintf,用于详细观察程序的每一 /步执行的结果而写的输出语句 printf (计算前val=%dn, val); printf (计算前i=%dn, i); printf (计算前temp=%dn, temp); temp = 10 * temp + i % 10; i /= 10; +j; /用于详细观察程序的每一步执行的结果而写的输出语句 printf (第%d次计算后temp=%d i=%dnn, j, temp, i); /*试数:1计算前val=123 /输入值不变 计算前i=123 计算前temp=0 第1次计算后temp=3 / temp = 10 * temp + i % 10 i=12 / i /= 102计算前val=123 /输入值不变 计算前i=12 计算前temp=3 第2次计算后temp=32 / temp = 10 * temp + i % 10 i=1 / i /= 103计算前val=123 /输入值不变 计算前i=1 计算前temp=32 第3次计算后temp=321 / temp = 10 * temp + i % 10 i=0 / i /= 10 计算结果的temp值是: 321 */ /将已经进行倒叙排列输入的数输出 printf (计算结果的值是: %dnn, temp); /将输入数与最终计算出的结果进行对比,判断是否是回文数 if (val = temp) printf (%d是一个回文数!n, val); else printf (%d不一个回文数!n, val); printf (开始还原为输入数n); /这段程序的目的是用for实现将计算出判断是否为回文数的值还原为输入数。 printf (n); i = temp; /清零 temp ,用于for 循环时的反向计算 j = 0; /清零 j 用于for循环时输出准确的计算次数 for (temp = 0; i != 0; i /= 10 ) /此程序有多个parintf,用于详细观察程序的每一 /步执行的结果而写的输出语句 printf (计算前val=%dn, val); printf (计算前i=%dn, i); temp = 10 * temp + i % 10; +j; /计算 for 循环运行的次数 printf (第%d次计算后temp=%d i=%dnn, j, temp, i); printf (计算结果的值是: %d, temp); return 0;/*总结:输入一个数能够将数字经过两次运算后重新还原成原来的数。如输入:123 经过 While 运算后是 321 再经过 for 运算后是 123 */函数函数的调用必须匹配为什么需要函数: 避免了写重复性的代码 有利于程序的模块化什么叫函数: 逻辑上:能够完成特定功能的独立代码 物理上:能够接受数据当然也可以不接受数据 能够对接受数据进行处理 能将数据处理的结果进行传递 总结:函数是个工具,为了解决大量类似的问题而设计的 函数可以当作是一个黑匣子。例子:int cont(void) /括号中的void表示该函数不能接收数据 int表示函数会返回int类型的数据 return 10;void cont(void) /函数名前面的void表示该函数没有返回值 括号中的void表示该函数不能接收数据如何定义函数: 格式: 函数的返回值 函数的名字(函数的形参列表) 函数执行体 1.函数定义的本质是详细的描述函数之所以能够实现某个特定的功能 的具体方法。 2.return 表达式的含义: 1终止被调用函数,向主函数返回表达式的值 2如果表达式为空,则只终止函数,不向被调 用的函数返回任何值 3break是用来终止循环和switch,return是 用来终止函数。例子:void f() return; /终止函数,不会向主函数返回任何值int f() return 10; /1.终止函数 2.向主函数返回10 3.函数的返回值的类型也称为函数的类型,因为,如果函数名前的返回类 型和函数执行的 return 表达式中的类型如果不同,则最终函数的返 回值的类型以函数前的返回值类型为准。例子:# include /定义int类型的函数 fint f()return 10.5;int main()double a;a = f();printf(%dn, a) /最终的输出结果是:double类型的10,即 10.000000,说明 f 函数返回的值是将浮点型 的10.5强制输出为 int 类型的10,而不是 10.5,因此说明当函数的返回与函数的类型发 生冲突(矛盾)时,以函数类型为准,因此 在构造(定义)函数时,应避免此类发生。return 0;函数的分类:有参函数 和 无参函数有返回值函数 和 无返回值函数值传递函数 和 地址传递函数库函数 和 用户函数普通函数 和 主函数(mian函数)一个程序必须有且只能有一个主函数,主函数可以调用普通函数,反之则不可以。普通函数可以互相调用。主函数是程序的入口也是出口。函数调用和定义: 1.顺序:先定义后调用 2.如果函数调用写在了函数的前面,就必须加前置声明。 3.告诉编译器即将可能出现的若干个的字母的组合所代表的是函数。 4.告诉编译器函数的返回值和形参具体情况。 5.函数声明是一个语句,末尾结束要加分号。如:int max(int a); 6.对库函数的申明是通过“# include ”来实现的。形参和实参:形参和实参的个数必须相同。形参和实参的位置必须一一对应。形参和实参的类型必须兼容。函数的合理的设计:在软件开发中合理的设计函数来解决实际问题的时候,一个函数额功能尽量独立,单一,多学习,多模仿牛人的代码。局部变量:在函数的内部定义的变量或者是形参叫局部变量。全局变量:不是定义在函数的内部的变量,即在程序定义了头文件之后定义的变量,且全局变量所有的函数都可以不在声明就直接使用,使用后如果为对变量进行清空和重置操作,下次使用此变量的时候还未上次使用后的值。全局变量和局部变量冲突问题:# include int i = 99;int f(int i) printf(i = %d,i);int main(void) f(8);程序执行结果是: i = 8在一个函数的内部定义的变量与全局定义的变量命名的重复(一样)的时候,局部变量会把全局变量屏蔽掉,最终的输出是局部变量定义后或者是执行的结果。注意:实参和形参永远不是同一个变量。指针:指针就是地址,地址就是指针地址就是内存单元的编号指针变量是存放地址的变量指针和指针变量是两个不同的概念但是要注意: 通常我们叙述时会把指针变量简称为指针,实际它们含义并不一样例子程序:# include int main(void)int * p; /p是变量的名字, int * 表示p变量存放的是int类型变量的地址 /int * p; 不表示定义了一个名字叫做*p的变量 /int * p;应该这样理解: p是变量名,p变量的数据类型是int * 类 型,所谓int * 类型 实际就是存放int变量地址的类型 int i = 3;int j;p = &i;/*1. p保存了i的地址, 因此p指向i2. p不是i,i也不是p,更准确的说: 修改p的值不影响i的 值,修改i的值也不会影响p的值3. 如果一个指针变量指向了某个普通变量, 则 *指针变量 就完全等同于 普通变量 例子:如果p是个指针变量,并且p存放了普通变量i的地址则p指向了普通变量i*p 就完全等同于 i或者说: 在所有出现*p的地方都可以替换成i在所有出现i的地方都可以替换成*p *p 就是以p的内容为地址的变量*/j = *p; /等价于 j = i;printf(i = %d, j = %dn, i, j);return 0;指针的重要性:1.表示一些复杂的数据结构2.快速的传递数据3.使函数返回一个以上的值4.能够方便的处理字符串5.能直接访问硬件6.是理解面向对象语言的引用基础 总结:指针是C语言的灵魂指针的定义:地址:内存单元的编号 从零开始的非负整数 范围: 指针: 指针就是地址,地址就是指针 地址就是内存单元的编号 指针变量是存放地址的变量 指针和指针变量是两个不同的概念 但是要注意:通常我们叙述时会把指针变量简称为指针,实际它们含义并不一 指针的本质就是一个操作受限的非负整数指针的分类:1.基本类型的指针 例子:int * p; /p是变量的名字, int * 表示p变量存放的是int类型变量的地址 /int * p; 不表示定义了一个名字叫做*p的变量 /int * p;应该这样理解: p是变量名,p变量的数据类型是int * 类 型,所谓int * 类型 实际就是存放int变量地址的类型 int i = 3; int j; p = &i;/*1. p保存了i的地址, 因此p指向i2. p不是i,i也不是p,更准确的说: 修改p的值不影响i的 值,修改i的值也不会影响p的值3. 如果一个指针变量指向了某个普通变量, 则 *指针变量 就完全等同于 普通变量 例子:如果p是个指针变量,并且p存放了普通变量i的地址则p指向了普通变量i*p 就完全等同于 i或者说: 在所有出现*p的地方都可以替换成i在所有出现i的地方都可以替换成*p *p 就是以p的内容为地址的变量*/j = *p; /等价于 j = i;printf(i = %d, j = %dn, i, j);2. 指针和数组: 指针和一维数组 数组名: 一维数组名是个指针常量 即 数组名是指针地址 它存放的时一维数组第一个元素的地址 例: int a9 printf(%#X, &a0) /数组a9的第一个元素的地址 printf(%#X, a) /数组a的内容 /* 最终输出结果相同,证明了一维数组名是个指针常量 即 数组名是指针地址 它存放的时一维数组第一个元素的地址 */ 因此在设计函数的时候,要对数组进行操作或者要传递数组的内容的时候, 调用或者是接受数组的数据的函数必须定义为指针类型的变量。 例:# include void OutArr();void Arr();int main(void)int a9 = 1, 2, 3, 4, 5, 6, 7, 8, 9int b9 = 9, 8, 7, 6, 5, 4, 3, 2, 1printf(%d,a3);Arr(a, 9)return 0; /Arr函数就任意输出任意一个一维数组的内容void OutArr(int * pArr, int len) /确定一个数组需要两个 /参数,首地址和数组的长度 int i;for(i = 0; i len; +i)printf(%d , pArri); / 被调用函数内的 /*(pArr+i) 与 pArri等价 / 同样也等价于调用函数 /(主函数)的 ai 和 *aireturn;void Arr(int * pArr, int * len)pArr3 = 88; return; 下标和指针的关系: 如果p是个指针变量,则 pi 永远等价于*(p+i) 确定一个数组 即如果一个函数要处理一份一维数组,则需要接收该数组的哪些信息 数组名或是数组的首地址第一个元素的地址 数组长度 指针变量的运算: 不能相加 不能相乘 不能相加 也不能相除 如果两个指针变量指向的是同一连续空间中的不同存储单元 则这两个指针变量才可以相减 例:# include int main(void) int a = 9; int b = 10; int a4; int b5; int * p; int * q; p = &a; q = &b; printf(%d, p - q); /无意义 q = &a3; q = &b4; printf(%d, p - q); /无意义 q = &a3; q = &b4; printf(两个数组之间间隔%d个单元, p - q); /有意义 return 0;一个指针变量到底占几个字节 预备知识: sizeof(数据类型) 功能:返回值就是该 数据类型 所占的字节数 例子:sizeof(int) = 4 sizeof(char) = 1 sizeof(double) = 8 sizeof(变量名) 功能:返回值就是该 变量 所占的字节数 假设 p指针 指向char类型变量(1个字节) 假设 q指针 指向int类型变量(4个字节) 假设 r指针 指向double 类型变量(8个字节) p q r 本身所占的字节数是否一样 ? 答案:p q r 本身所占的字节数是一样的 总结:一个指针变量无论指向的变量占几个字 节,该指针变量都占4个字节 注意:一个变量的的地址使用的是该变量的首字节的地址 来表示 指针和二维数组专题: 动态内存分配: 传统数组的缺点: 1.数组的长度必须事先制定,且正能是常整数,不能是变量 例: int a5; /ok int len = 5; int a len; /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 穿心莲药代动力学研究-洞察及研究
- 2025年全国硕士研究生招生考试试题库(附含参考答案)
- 强化学习与语义分割场景理解的结合研究-洞察及研究
- 品牌传播效率提升策略-第2篇-洞察及研究
- 林业信息化对采收效率的影响-洞察及研究
- 2026年家庭废旧衣物回收服务合同
- 儿童英语绘本教学活动方案
- 基孔肯雅热诊断和治疗方案培训考试题(附答案)
- 电力行业安全规范及防护措施
- 《红楼梦》人物关系及隐喻写法详解
- 矿井热害及其治理(简单版)
- 单位减少存档人员表
- 商务英语翻译实务完整版教学ppt课件全套教程
- 煤矿井下隔爆水棚安装设计说明
- 盘锦浩业芳烃抽提装置操作规程
- 人工智能在教育中的应用42页PPT课件
- 生活中二次曲面
- 机械制图试习题库及答案
- (高清版)辐射供暖供冷技术规程JGJ142-2012
- 利雅路燃气燃烧器说明书
- 人教版九年级化学第1-6单元试题含答案(共4页)
评论
0/150
提交评论