- 博客(134)
- 收藏
- 关注
原创 第84节 操作字符串数组
一.用数组存储多个字符串的方案1.用二维字符数组char name[5][10]={“Zhao”,“Qian”,“Sun”,“Li”,“Zhou”};2.用指针数组char* name[5]={“Zhao”,“Qian”,“Sun”,“Li”,“Zhou”};二.姓氏排序#include <stdio.h>#include <string.h>void sort(char* name[], int n);void print(char* name[], int n)
2021-06-03 00:24:34
334
1
原创 第83节 多维数组作函数参数
一.用多维数组名作函数参数1.写函数,求3×4矩阵中所有元素中的最大值#include <stdio.h>int max_value(int array[][4]);int main(){ int a[3][4] = { {11,32,45,67},{22,44,66,88},{15,72,43,37} }; printf("max value is %d \n", max_value(a)); return 0;}int max_value(int array[][4])
2021-06-01 01:05:44
641
原创 第82节 使用指针操作二维数组
一、使用“指向”二维数组“元素”的指针#include <stdio.h>int main(){ int a[3][4] = { 1,3,5,7,9,11,13,15,17,19,21,23 };//可看作: int a[3][4] = { a[0],a[1],a[2] }; 其中a[0]是首元素,且a[0]是一维数组名;//a[0]可看作: int a[0][4] = { a[0][0],a[0][1],a[0][2],a[0][3] };其中a[0]为数组名; int* p =
2021-05-30 23:43:53
941
1
原创 第81节 二维数组的存储及地址表示
#include <stdio.h>int main(){ int a[3][4] = { {1,2,3,4}, {11,12,13,14}, {21,22,23,24}, }; //以下四种输出都是元素a[2][3]的地址 printf("%p\n", &a[2][3]); printf("%p\n", a[2] + 3); printf("%p\n", *(a + 2) + 3); // =>*((&a[0]+2)+3) =...
2021-05-26 23:12:55
1503
2
原创 第80节 二维数组元素的引用
一、二维数组元素由其行、列下标决定以float a[3][4];为例:1.引用a[2][3]—行、列下标均是整数2.引用a[2-1][2*2-1]—行、列下标可以是整型表达式3.a[1][2]=3.14/2;—数组元素作为赋值表达式的左值4.a[3][4]=15;—错误!最后一个元素是a[2][3],“越界”二、输入输出二维数组元素1.二维数组行序优先输出#include <stdio.h>int main(){ int a[3][5]; //定义3行5列的二维数组 in
2021-05-25 23:09:54
3229
原创 第79节 二维数组及其定义
一、体会二维数组1.概念: 具有两个下标的数组,多行、多列;2.举例: float a[3][4];3.含义: 数组存储类型均为float型,数组a共有3行、4列元素;4.元素:a01230a[0][0]a[0][1]a[0][2]a[0][3]1a[1][0]a[1][1]a[1][2]a[1][3]2a[2][0]a[2][1]a[2][2]a[2][3]二、初始化二维数组1.分行给二维数组赋初值,如(直观、方便)int
2021-05-24 23:52:19
893
原创 第78节 编写自己的字符串函数
一.编写字符串函数的意义1.借此学习文字处理的方法;2.C库函数功能,不能满足所有要求;3.你可以成为开发系统函数的人;二.字符串复制(下标法)#include <stdio.h>char* scopy(char* str1, const char* str2);int main(){ char s1[50]; scopy(s1, "I am happy."); printf("%s\n", s1); return 0;}char* scopy(char* str1,
2021-05-23 23:54:02
217
原创 第77节 字符和字符串处理函数
一.字符函数和字符串函数1.C语言中进行文字处理的方法①自编代码完成②利用库函数2.字符库函数include <ctype.h>3.串处理函数include <string.h>二.字符函数 include <ctype.h>实例: 利用库函数统计数字字符个数#include <stdio.h>int main(){ char str[50] = { 0 }; int i = 0, n = 0; printf("输入字符串: "
2021-05-23 12:32:57
116
2
原创 第76节 实战字符串处理四例
实战一: 字符串有多长#include <stdio.h>int main(){ char str[50] = { 0 }; //初始化 printf("输入字符串: "); gets(str); //输入回车结束 int i = 0; //用于下标和计数 while (str[i] != '\0') { ++i; } printf("字符串长度: %d", i);}运行结果:输入字符串: abc1234567890字符串长度: 13实战二:统计数字字符个数
2021-05-23 00:17:55
113
原创 第75节 字符串/字符数组/字符指针
一.字符串和字符串结束标志1.用双撇号括起来的部分就是字符串常量如:“abc”,“Hello!”,“a+b”,“He Lijian”2.字符串常量"abc"在内存中占4个字节,而不是3字节abc\09798990字符’\0’为"字符串结束标志"'\0’的ASCII值为0二.字符数组和字符串1.从存储机制上,字符串是以’/0’为结束标志的字符数组.2.用字符串常量来初始化字符数组.例如char str[]={“I am happy”};char str[
2021-05-22 19:21:06
159
原创 第74节 编写查找和排序函数
一.回顾: 有序表中的二分查找#include <stdio.h>#define SIZE 10int main(){ int d[SIZE] = { 1,3,9,12,32,41,45,62,75,77 }; int low, high, mid, key, index = -1; printf("Input a key you want to search: "); scanf_s("%d", &key); low = 0, high = SIZE - 1; wh
2021-05-14 23:08:06
182
原创 第73节 实现线性表基本操作的函数
一.数据结构与其基本操作1.四类数据结构: ①集合结构 ②线性结构 ③树型结构 ④图型结构2.基本操作:增加、删除、修改、查找、合并…3.数组是存储线性结构的一种方案二.删除指定位置上的数据#include <stdio.h>#define SIZE 100 //定义常量用大写int deleData(int[], int, int);//参数可省略名字int main(){ int n = 10; //数组中实际有用的元素 int d[SIZE] = { 1,3,9,12
2021-05-13 23:35:00
337
原创 第72节 指针作函数参数
一.回顾: 用数组名作函数的参数1.回顾:用数组名作函数的参数,传递的是数组首元素的地址。▲ 函数定义 void sort(int arr[], int n)▲ 函数调用 int score[20]; sort(score, 20);2.拓展:用指针变量作函数参数,传递的是数组首元素的地址。▲ 定义:void select_sort(int *p, int n)▲ 调用:int score[20]; select_sort(score, 20);二.冒泡排序函数的新写法#include &l
2021-05-09 12:32:13
154
原创 第71节 数组名作为函数参数
一.用数组元素作函数实参1.有两个数组: int a[8]={26,1007,956,705,574,371,416,517}; int b[8]={994,631,772,201,262,763,1000,781};2.请在数组c中存储a、b中对应数的最大公约数: c[8]={2,1,4,3,2,7,8,11}#include <stdio.h>int gcd(int m, int n){ int r; while (r = m % n) { m = n;
2021-05-08 00:28:08
434
2
原创 第70节 指针的运算
一.为什么要学指针1.用指针,直接操纵内存,这是C语言高效工作的原因2.指针是了解计算机工作的窗口二.指针的“算术”运算1.指针变量加/减一个整数例如:p++,p–,p+i,p-i,p+=i,p-=i等。for(p=a; p<a+5; p+=2)printf("%d", *p);2.两个指针变量相减,结果为两指针之间的元素个数 p2-p1=(a+4)-(a+1)=4-1=3指针相减 = (地址1-地址2) / sizeof(类型)#include <stdio.h>
2021-05-07 22:41:46
199
原创 第69节 用指针法访问数组元素
一.你将发现一个内幕!#include <stdio.h> #define n 5int main(){ unsigned int a[n] = { 123,5,9,11,33 }; printf("%x\n", a); printf("%x\n", &a[0]); printf("%d\n", a[0]); printf("%d\n", *a);}运行结果:135fd94135fd94123123结论: 数组名,即数组的地址!数组首元素的地址!
2021-05-07 00:30:56
573
1
原创 第68节 首尝排序—冒泡排序法
一.算法思想方法: 相邻两数比较,若前大后小,则交换(升序排列)二.算法实现n=6个数的排序n个数的排序需要5趟的扫描(0~4)需要n-1趟的扫描(0~n-2)第0趟扫描,从a[0]和a[1]比较开始,至a[4]和a[5]比较为止,最大的数保存在a[5]中第0趟扫描,从a[0]和a[1]比较开始,至a[n-2]和a[n-1]比较为止,最大的数保存在a[n-1]中第1趟扫描,从a[0]和a[1]比较开始,至a[3]和a[4]比较为止,最大的数保存在a[4]中第1趟
2021-05-05 23:47:46
93
原创 第67节 经典: 查找的艺术(二分法)
一.数组中的基本操作: 顺序查找元素任务: 输入关键字key,在数组中找出其位置.#include <stdio.h>#define SIZE 10 //定义常量,便于维护;int main(){ int d[SIZE] = { 34,43,98,72,12,47,31,1,78 };//数组全部初始化; int i; //用于循环计数和数组下标的传递; int key; //进行索引查找的数据; int index = -1; //保存数组的下标,赋初值便于判断; prin
2021-05-05 11:51:29
155
5
原创 第66节 数组越界访问的后果
一.数组只可以使用"授权"的空间例: int x,y,a[10]; //定义有10个整型元素的数组a允许访问的数组下标从0开始的10个元素:a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]访问a[10]就为越界!!!C语言允许越界访问,但a[10]存放数据未知,极可能导致结果出错。二.越界的后果以下程序将存放余数的数组设为a[100],确保转换后的进制数不越界;#include <stdio.h>int main(){ in
2021-05-04 23:44:13
477
2
原创 第65节 一维数组的应用
应用1: 利用数组求Fibonacci数列的前20项数列规律: 1,1,2,3,5,8,13,21,…Fn=Fn-1+Fn-2(n≥3);#include <stdio.h>int main(){ int i, f[20] = { 1,1 }; for (i = 2; i < 20; ++i) { f[i] = f[i - 1] + f[i - 2]; } for (i = 0; i < 20; ++i) { if (i % 5 == 0) prin
2021-05-04 23:08:32
109
原创 第13节 在VS中设置新建项目默认路径
1、点击–>“工具”2、选择–>“选项”3、选择–>“项目和解决方案”4、选择-> ”位置“–>"项目位置"自定义默认路径5、点击–>“确定”,保存后下次新建项目就是此默认路径...
2021-05-04 21:52:08
2030
原创 第64节 数组的引入和定义
一.定义一维数组1.定义语法: 类型标识符 数组名[常量表达式]; 例: int a[10];a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]2.数组长度: 下标从0开始到9结束,最后一个元素是a[9]不是a[10].3.动态定义:3.1 定义数组时,在C89中标准中,数组长度可以是常量、符号常量,但不能含变量;3.2 定义数组时,在C99中标准中,数组长度可以是变量,但在实际中不赞成这样用;3.3 注意: 使用数组时,数组下标可
2021-05-03 23:07:20
388
原创 第63节 银行储蓄系统再开发
整体框架/声明头文件及自定义函数;/#include <stdio.h>#include <Windows.h>int 函数_验证密码();void 函数_业务驱动();void 函数_显示菜单();double 函数_获得余额();double 函数_取款业务(double);double 函数_存款业务(double);void 函数_改密业务();void 函数_保存数据(double);/主函数内,写好基本框架;/int ma
2021-05-03 15:25:49
118
原创 第62节 应用系统设计思路
一.应用程序结构及开发方法1.设计方法: 自顶向下–>逐步细化–>模块化设计–>结构化编码2.常用结构: main–>菜单–>功能1,…功能n–>细化功能模块二.应用程序结构设计思路1.设计原则:高内聚、低耦合 函数高内聚: 代码相关性强,责任单一; 函数低耦合: 各模块间相互联系少(参数少,全局变量少);2.具体技术 提取出独立的功能,与通用的功能 慎用全局变量、静态局部变量 尽量使用值传递,慎用传地址/包含文件#include<
2021-05-02 23:17:55
344
原创 第61节 C语言的库函数
一.相关概念函数库(例:数学函数库)函数库是由系统建立的具有一定功能的函数的集合 库中存放函数的名称和对应的目标代码,以及连接过程中所需的重定位信息 用户也可以根据自己的需要建立自己的用户函数库库函数(例:sqrt函数) 存放在函数库中的函数 库函数明确定义了功能、参数和返回值 三种库函数: ①C标准规定的库函数②编译器特定的库函数③用户定义的库函数连接程序 将编译程序生成的目标文件连接在一起生成一个可执行文件。头文件(例:math.h) 在使用某一库函数时,都要在
2021-05-02 11:07:19
233
原创 第12节 VS中修改编译器C执行标准
1.项目或源文件–>属性–>C/C+±->语言–>C语言标准或C++语言标准2.注意: 配置选项中Release和Debug都要设置一遍.
2021-05-01 23:14:33
628
原创 第60节 变量的存储类别
一.程序运行中的内存分配1.程序运行时内存分区: 程序区/静态数据区/动态数据区1.1 程序区: 存放运行中的代码;1.2 静态数据区: 存放全局变量/静态变量;1.3 动态数据区: 存放局部变量.2.四种存储类别2.1.自动的(auto) [ˈɔːtəʊ]2.2 寄存器的(register) [ˈredʒɪstə®]2.3 外部的(extern) [ˈekstɜːn]2.4 静态的(static) [ˈstætɪk]二.自动变量(auto variable) [ˈveəriəbl]
2021-05-01 23:04:56
168
原创 第59节 全局变量和局部变量
一.体验局部变量和全局变量#include <stdio.h>void fun1();void fun2();int main(){ int x = 1; x++; printf("%d\n", x); //x=2; fun1(); printf("%d\n", x); //fun1()执行后,内存被释放; fun2(); printf("%d\n", x); //fun2()执行后,内存被释放; return 0;}void fun1(){ i
2021-04-30 23:45:51
360
2
原创 第58节 调试技术: 进入函数内部
一.调试程序#include <stdio.h>float max(float x, float y);int main(){ float a, b, c; a = 1; b = 2; c = max(a, b); printf("The max is %f\n", c); return 0;}float max(float x, float y){ float z; z = (x < y) ? x : y; return z;}二.在vs中调试F
2021-04-30 20:30:58
2459
1
原创 第11节 VS调试:逐语句/逐过程/跳出
F10 逐过程F11 逐语句逐语句,就是每次执行一行语句,如果碰到函数调用,它就会进入到函数里面。逐过程,碰到函数时,不进入函数,把函数调用当成一条语句执行。跳出,是当你进入到函数内,跳出可以让你直接执行函数内剩余的语句,直到返回到该函数被调用时的后面的语句处。若要查看函数调用内容,请使用“逐语句”。若要避免单步执行函数,请使用“逐过程”。...
2021-04-30 19:24:51
1666
2
原创 第10节 VS快速开发常用快捷键
1. 注释代码 Ctrl + K + C2. 取消注释 Ctrl + K + U3. 删除一行 Ctrl + L4.交换上下两行: Shift + Alt + T5.将部分代码对齐格式化 Ctrl + K + U6.将所有代码对齐格式化 Ctrl + K + U
2021-04-28 23:19:37
259
原创 第9节 VS使用第三方库的三个步骤
1.指定头文件的包含目录(附加包含目录)选中项目 --> 右键 --> 属性 --> Debug或Release --> C/C++ --> 常规 --> 附加包含目录2.指定.lib所在的目录(附加库目录)选中项目 --> 右键 --> 属性 --> Debug或Release --> 链接器 --> 常规 --> 附加库目录3.指定.lib文件(附加依赖项)选中项目 --> 右键 --> 属性 -->
2021-04-28 22:23:52
2855
原创 第8节 VS中Debug与Release介绍
Debug 调试版本: 包含调试信息,并且不进行任何优化,便于程序员调试. Debug模式下生成两个文件,除了.exe或.dll文件外,还有一个.pdb文件,该文件记录了代码中断点等调试信息.Release 发布版本: 不对源代码进行调试,编译时对应用程序的速度进行优化,使得程序在代码大小和运行速度上都是最优的.Release模式下生成的目标文件(.exe或.dll)比较小....
2021-04-28 21:58:41
545
1
原创 第7节 代码添加书签/快速查找/定位
一.代码设置书签代码添加书签,方便查阅大量代码时,快速切换需要浏览的位置和在多个项目中无缝切换;Ctrl+K+K 添加或取消书签;Ctrl+K+P 上一书签;Ctrl+K+N 下一书签;调用书签视图二.转到变量定义选中变量–>F12 , 快速切换到定义变量的位置; 使用频率最高的快捷键之一!三.向上/上下查找Crtl + F3 向下查找相同的词; 针对项目Shift+F3 向上查找相同的词; 针对项目在文件中查找: 针对整个解决方案/文件夹/当前项目/当前文档等;
2021-04-28 00:47:51
436
原创 第6节 VS设置断点等调试技巧
一.代码中设置断点在代码行号左侧,左键点击,若出现红点,增加断点成功;再次点击,取消断点;增加断点 快捷键: F9开始调试 快捷键: F5禁用断点 快捷键: Crtl+F9二.设置断点触发条件鼠标移到断点位置右键,可进行"删除断点",“禁用断点”,“条件”,“操作”,"编辑标签"等操作;条件: 为断点增设触发条件,如下图表示当i==5时触发;...
2021-04-27 23:07:32
7893
1
原创 第5节 vs中新建文件/筛选器/文件夹
一.项目中新建文件选中项目中的一个文件夹–>右键–>添加–>新建项: 创建一个新文件;选中项目中的一个文件夹–>右键–>添加–>现有项: 磁盘上已有文件添加进项目中,或者被排除的文件被添加进来;二.新建筛选器新建: 选中一个项目或文件夹目–>右键–>添加–>新建筛选器;用途: 使用VS开发项目时,有时源文件过多,想按功能进行分类管理,这个时候就可以使用筛选器(filter);注意: 筛选器不对应磁盘真实目录结构;创建筛选器后,工程目录下
2021-04-26 22:46:12
7081
原创 第4节 设置VS代码字体/行号/主题
一.设置代码字体工具—选项—环境—字体和颜色:常用设置有字体、大小、颜色等;二.设置代码行号工具—选项–文本编辑器—C/C++常规—行号:显示和关闭行号;工具—选项–文本编辑器—C/C++常规—导航栏:显示和关闭导航栏,方便定位;...
2021-04-26 21:19:49
571
原创 C语言及程序设计_贺利坚
一.C语言及程序设计01 人人学点程序设计02 程序设计语言03 搭建C语言运行平台04 C语言程序初体验05 本课的学习策略建议06 让代码积累"看得见"07 分支结构程序体验08 数值数据类型及表示09 变量的使用10 标识符及其命名11 算术运算符与算术表达式12 自增与自减13 数值型数据的存储14 指针及其运算15 数据的输入16 数据的输出17 赋值运算符与赋值表达式18 逗号运算符与逗号表达式19 字符数据及字符类型20 表达"条件"—条件表达式21
2021-04-25 23:38:46
190
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人