C语言学习
文章平均质量分 58
重新学习C语言
源码说明:我上传的设置都是0积分,但是csdn的数据库好像会出错,所以需要源码的同学可以可以私信我
BackCatK Chen
生命中最美丽的一次邂逅,就是我遇见你时,你恰好喜欢上我,而我最快乐的经历,就是以为可以陪你一起慢慢变老,看见你为我哭,为我笑,直到地老天荒——致那个人
展开
-
ChatGPT 编写C语言接收数据缓冲区源代码
ChatGPT 编写C语言接收数据缓冲区源代码原创 2023-03-03 09:03:41 · 670 阅读 · 1 评论 -
11.8 变长数组(VLA)
要创建一个能处理任意大小二维数组的函数,比较繁琐(必须把数组作为一维数组传递,然后让函数计算每行的开始处)。另外,该程序还演示了以变长数组作为形参的函数既可处理传统C数组,也可处理变长数组。这里的“变”指的是:在创建数组时,可以使用变量指定数组的维度。需要注意的是,在函数定义的形参列表中声明的变长数组并未实际创建数组。这说明带变长数组形参的函数实际上是在原始数组中处理数组,因此可以修改传入的数组。在学习处理二维数组的函数中可能不太理解,为何只把数组的行数作为函数的形参,而列数却内置在函数体内。原创 2023-02-25 19:02:51 · 1214 阅读 · 1 评论 -
11.7 指针和多维数组
指针和多维数组有什么关系?为什么要了解它们的关系?处理多维数组的函数要用到指针,所以在使用这种函数之前,先要更深入地学习指针。至于第 1 个问题,我们通过几个示例来回答。为简化讨论,我们使用较小的数组。然后数组名zippo是该数组首元素的地址。在本例中,zippo的首元素是一个内含两个int值的数组,所以zippo是这个内含两个int值的数组的地址。下面,我们从指针的属性进一步分析。因为zippo是数组首元素的地址,所以zippo的值和&zippo[0]的值相同。原创 2023-02-23 21:06:37 · 960 阅读 · 1 评论 -
二进制按位赋值(对某位进行0或1赋值)与二进制打印输出
C语言对二进制某位进行0或1赋值,打印二进制原创 2023-02-23 09:33:04 · 774 阅读 · 0 评论 -
VS编译出现‘itoa‘: The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant
'itoa': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: itoa.原创 2023-02-23 09:25:02 · 1503 阅读 · 0 评论 -
11.6 保护数组中的数据
编写一个处理基本类型(如,int)的函数时,要选择是传递int类型的值还是传递指向int的指针。通常都是直接传递数值,只有程序需要在函数中改变该数值时,才会传递指针。对于数组别无选择,必须传递指针,因为这样做效率高。如果一个函数按值传递数组,则必须分配足够的空间来储存原数组的副本,然后把原数组所有的数据拷贝至新的数组中。如果把数组的地址传递给函数,让函数直接处理原数组则效率要高。传递地址会导致一些问题。C 通常都按值传递数据,因为这样做可以保证数据的完整性。原创 2023-02-22 19:56:22 · 293 阅读 · 0 评论 -
C语言判断一个数转二进制的某位是1或者0
判断一个数转二进制的某位是1或者0原创 2022-11-21 10:04:40 · 2851 阅读 · 0 评论 -
11.5 指针操作
C语言学习栏目目录可以对指针进行哪些操作?C提供了一些基本的指针操作,下面的程序示例中演示了8种不同的操作。为了显示每种操作的结果,该程序打印了指针的值(该指针指向的地址)、储存在指针指向地址上的值,以及指针自己的地址。如果编译器不支持%p 转换说明,可以用%u 或%lu 代替%p;如果编译器不支持用%td转换说明打印地址的差值,可以用%d或%ld来代替。下程序清单演示了指针变量的 8种基本操作。除了这些操作,还可以使用关系运算符来比较指针。/*************************原创 2020-11-26 18:43:14 · 324 阅读 · 0 评论 -
11.4 函数、数组和指针
C语言学习栏目目录目录1 使用指针形参2 指针表示法和数组表示法假设要编写一个处理数组的函数,该函数返回数组中所有元素之和,待处理的是名为marbles的int类型数组。应该如何调用该函数?也许是下面这样:total = sum(marbles); // 可能的函数调用那么,该函数的原型是什么?记住,数组名是该数组首元素的地址,所以实际参数marbles是一个储存int类型值的地址,应把它赋给一个指针形式参数,即该形参是一个指向int的指针:int sum(int * ar)原创 2020-11-23 08:45:11 · 251 阅读 · 0 评论 -
11.3 指针和数组
C语言学习栏目目录在上一张中我介绍过指针,指针提供一种以符号形式使用地址的方法。因为计算机的硬件指令非常依赖地址,指针在某种程度上把程序员想要传达的指令以更接近机器的方式表达。因此,使用指针的程序更有效率。尤其是,指针能有效地处理数组。我们很快就会学到,数组表示法其实是在变相地使用指针。我们举一个变相使用指针的例子:数组名是数组首元素的地址。也就是说,如果flizny是一个数组,下面的语句成立:flizny == &flizny[0]; // 数组名是该数组首元素的地址flizny原创 2020-11-23 08:01:35 · 232 阅读 · 0 评论 -
11.2 多维数组
C语言学习栏目目录目录1 初始化二维数组2 其他多维数组假设你是一个气象分析员,要分析5年内每个月的降水量数据,你首先要解决的问题是如何表示数据。一个方案是创建60个变量,每个变量储存一个数据项(我们曾经提到过这一笨拙的方案,和以前一样,这个方案并不合适)。使用一个内含60个元素的数组比将建60个变量好,但是如果能把各年的数据分开储存会更好,即创建5个数组,每个数组12个元素。然而,这样做也很麻烦,如果Tempest决定研究50年的降水量,岂不是要创建50个数组。是否能有更好的方案?处理这种原创 2020-11-20 16:32:06 · 294 阅读 · 0 评论 -
11.1 数组
数组通常被用来储存程序需要的数据。例如,一个内含12个整数元素的数组可以储存12个月的天数。在这种情况下,在程序一开始就初始化数组比较好。下面介绍初始化数组的方法。只储存单个值的变量有时也称为标量变量(scalar variable),我们已经很熟悉如何初始化这种变量:int fix = 1;float flax = PI * 2;代码中的PI已定义为宏。C使用新的语法来初始化数组,如下所示:int main(void){ int powers[8] = {1,2,4.原创 2020-11-20 09:08:43 · 389 阅读 · 2 评论 -
第十一 数组和指针
C语言学习栏目目录本章介绍以下内容:关键字:static运算符:&、*(一元)如何创建并初始化数组指针(在已学过的基础上)、指针和数组的关系编写处理数组的函数二维数组人们通常借助计算机完成统计每月的支出、日降雨量、季度销售额等任务。企业借助计算机管理薪资、库存和客户交易记录等。作为程序员,不可避免地要处理大量相关数据。通常,数组能高效便捷地处理这种数据。我前面简单地介绍了数组,本章将进一步地学习如何使用数组,着重分析如何编写处理数组的函数。这种函数把模块化编程的.原创 2020-11-19 11:49:13 · 139 阅读 · 2 评论 -
10.3 指针简介
C语言学习栏目目录目录1 间接运算符:2 声明指针3 使用指针在函数间通信小结:函数指针?什么是指针?从根本上看,指针(pointer)是一个值为内存地址的变量(或数据对象)。正如char类型变量的值是字符,int类型变量的值是整数,指针变量的值是地址。在C语言中,指针有许多用法。本章将介绍如何把指针作为函数参数使用,以及为何要这样用。假设一个指针变量名是ptr,可以编写如下语句:ptr = &pooh; // 把pooh的地址赋给ptr对于这条语句,我们说pt原创 2020-11-19 10:21:55 · 551 阅读 · 0 评论 -
10.2 查找地址:&运算符
指针(pointer)是 C 语言最重要的(有时也是最复杂的)概念之一,用于储存变量的地址。前面使用的scanf()函数中就使用地址作为参数。概括的说,如果主调函数不使用return返回的值,则必须通过地址才能修改主调函数中的值。接下来,我们将介绍带地址参数的函数。首先介绍一元&运算符的用法。一元&运算符给出变量的存储地址。如果pooh是变量名,那么&pooh是变量的地址。可以把地址看作是变量在内存中的位置。假设有下面的语句:pooh = 24;假设pooh的存储地址是原创 2020-11-19 08:28:32 · 373 阅读 · 1 评论 -
10.1 复习函数
首先,什么是函数?函数(function)是完成特定任务的独立程序代码单元。语法规则定义了函数的结构和使用方式。虽然C中的函数和其他语言中的函数、子程序、过程作用相同,但是细节上略有不同。一些函数执行某些动作,如printf()把数据打印到屏幕上;一些函数找出一个值供程序使用,如strlen()把指定字符串的长度返回给程序。一般而言,函数可以同时具备以上两种功能。为什么要使用函数?首先,使用函数可以省去编写重复代码的苦差。如果程序要多次完成某项任务,那么只需编写一个合适的函数,就可以在需要时使用这个函数原创 2020-09-30 15:27:29 · 328 阅读 · 0 评论 -
第十 函数
C语言学习栏目目录本章介绍以下内容:关键字:return运算符:*(一元)、&(一元)函数及其定义方式如何使用参数和返回值如何把指针变量用作函数参数函数类型ANSI C原型递归如何组织程序?C的设计思想是,把函数用作构件块。我们已经用过C标准库的函数,如printf()、scanf()、getchar()、putchar()和 strlen()。现在要进一步学习如何创建自己的函数。前面章节中已大致介绍了相关过程,本章将巩固以前学过的知识并做进一步的拓展。..原创 2020-09-30 14:23:12 · 151 阅读 · 0 评论 -
9.3 结束键盘输入
C语言学习栏目目录目录1 、文件、流和键盘输入2 、文件结尾在9.1节程序清单中,只要输入的字符中不含#,那么程序在读到#时才会结束。但是, #也是一个普通的字符,有时不可避免要用到。应该用一个在文本中用不到的字符来标记输入完成,这样的字符不会无意间出现在输入中,在你不希望结束程序的时候终止程序。C 的确提供了这样的字符,不过在此之前,先来了解一下C处理文件的方式。1 、文件、流和键盘输入文件(file)是存储器中储存信息的区域。通常,文件都保存在某种永久存储器中(如,硬盘、U盘或.原创 2020-09-28 14:58:36 · 318 阅读 · 0 评论 -
9.2 缓冲区
C语言学习栏目目录如果在老式系统运行9.1节程序清单,你输入文本时可能显示如下:HHeelllloo,, tthheerree..II wwoouulldd[enter]lliikkee aa #以上行为是个例外。像这样回显用户输入的字符后立即重复打印该字符是属于无缓冲(或直接)输入,即正在等待的程序可立即使用输入的字符。对于该例,大部分系统在用户按下Enter键之前不会重复打印刚输入的字符,这种输入形式属于缓冲输入。用户输入的字符被收集并储存在一个被称为缓冲区(buffer)的临时存.原创 2020-09-24 16:45:16 · 153 阅读 · 0 评论 -
9.1 单字符I/O:getchar()和putchar()
C语言学习栏目目录前面文章中提到过,getchar()和 putchar()每次只处理一个字符。你可能认为这种方法实在太笨拙了,毕竟与我们的阅读方式相差甚远。但是,这种方法很适合计算机。而且,这是绝大多数文本(即,普通文字)处理程序所用的核心方法。为了帮助读者回忆这些函数的工作方式,请看程序清单8.1。该程序获取从键盘输入的字符,并把这些字符发送到屏幕上。程序使用while 循环,当读到#字符时停止。/*********************************************.原创 2020-09-24 16:24:50 · 221 阅读 · 0 评论 -
第九 字符输入/输出和输入验证
C语言学习栏目目录本章介绍以下内容:更详细地介绍输入、输出以及缓冲输入和无缓冲输入的区别如何通过键盘模拟文件结尾条件如何使用重定向把程序和文件相连接创建更友好的用户界面在涉及计算机的话题时,我们经常会提到输入(input)和输出(output)。我们谈论输入和输出设备(如键盘、U盘、扫描仪和激光打印机),讲解如何处理输入数据和输出数据,讨论执行输入和输出任务的函数。本章主要介绍用于输入和输出的函数(简称I/O函数)。I/O函数(如printf()、scanf()、getch.原创 2020-09-23 17:27:18 · 146 阅读 · 0 评论 -
8.7 多重选择:switch和break
使用条件运算符和 if else 语句很容易编写二选一的程序。然而,有时程序需要在多个选项中进行选择。可以用if else if...else来完成。但是,大多数情况下使用switch语句更方便。下程序清单演示了如何使用switch语句。该程序读入一个字母,然后打印出与该字母开头的动物名。/************************************************************************功能: 使用switch语句原创 2020-09-15 13:59:16 · 1131 阅读 · 0 评论 -
8.6 循环辅助:continue和break
C语言学习栏目目录目录1 continue语句2 break语句一般而言,程序进入循环后,在下一次循环测试之前会执行完循环体中的所有语句。continue 和break语句可以根据循环体中的测试结果来忽略一部分循环内容,甚至结束循环。1 continue语句3种循环都可以使用continue语句。执行到该语句时,会跳过本次迭代的剩余部分,并开始下一轮迭代。如果continue语句在嵌套循环内,则只会影响包含该语句的内层循环。下程序清单中的简短程序演示了如何使用continue。原创 2020-09-11 09:48:41 · 829 阅读 · 0 评论 -
8.5 条件运算符:?:
C语言学习栏目目录C提供条件表达式(conditional expression)作为表达if else语句的一种便捷方式,该表达式使用?:条件运算符。该运算符分为两部分,需要 3 个运算对象。回忆一下,带一个运算对象的运算符称为一元运算符,带两个运算对象的运算符称为二元运算符。以此类推,带 3 个运算对象的运算符称为三元运算符。条件运算是C语言中唯一的三元运算符。下面的代码得到一个数的绝对值:x = (y < 0) ? -y : y;在=和;之间的内容就是条件表达式,该语句的意思.原创 2020-09-10 09:59:46 · 479 阅读 · 0 评论 -
C语言字符串字符统计strlen与字符串比较strncmp
这几天写了个项目,需要用到字符串比较,又没有<string.h>库,所以自己写了一个函数。代码如下字符串统计int my_strlen(const char *StrDest){ int i; i=0; //统计字符串字数,从字符串第一个字符起计数,只遇到字符串结束标志'\0’停止计数 while((*StrDest++)!='\0') { i++; } return i;}字符串原创 2020-09-07 11:13:53 · 544 阅读 · 0 评论 -
8.4 一个统计单词的程序
现在,我们可以编写一个统计单词数量的程序(即,该程序读取并报告单词的数量)。该程序还可以计算字符数和行数。先来看看编写这样的程序要涉及那些内容。首先,该程序要逐个字符读取输入,知道何时停止读取。然后,该程序能识别并计算这些内容:字符、行数和单词。据此我们编写的伪代码如下:读取一个字符当有更多输入时递增字符计数如果读完一行,递增行数计数如果读完一个单词,递增单词计数读取下一个字符前面有一个输入循环的模型:while ((ch = getchar()) != STOP){...}这原创 2020-09-06 11:56:40 · 1503 阅读 · 0 评论 -
8.3 逻辑运算符
C语言学习栏目目录目录1、优先级2、求值顺序3、范围大家应该很熟悉了if 语句和 while 语句通常使用关系表达式作为测试条件。有时,把多个关系表达式组合起来会很有用。例如,要编写一个程序,计算输入的一行句子中除单引号和双引号以外其他字符的数量。这种情况下可以使用逻辑运算符,并使用句点(.)标识句子的末尾。下程序清单用一个简短的程序进行演示。/*********************************************************************原创 2020-09-02 09:47:23 · 821 阅读 · 0 评论 -
8.2 if else语句
简单形式的if语句可以让程序选择执行一条语句,或者跳过这条语句。C还提供了if else形式,可以在两条语句之间作选择。我们用if else形式修正上一节(8.1 if语句)中程序清单的程序段。if (all_days != 0) printf("总共 %d 天: %.1f%% 的时间低于零下.\n",all_days, 100.0 * (float)cold_days / all_days);if (all_days == 0) printf("没有数据输入!\n");如果程序原创 2020-08-31 18:38:42 · 2278 阅读 · 0 评论 -
8.1 if语句
C语言学习栏目目录目录我们从一个有if语句的简单示例开始学习,大家看下下面的程序清单。该程序读取一列数据,每个数据都表示每日的最低温度(℃),然后打印统计的总天数和最低温度在0℃以下的天数占总天数的百分比。程序中的循环通过scanf()读入温度值。while循环每迭代一次,就递增计数器增加天数,其中的if语句负责判断0℃以下的温度并单独统计相应的天数。...原创 2020-08-21 11:35:45 · 491 阅读 · 0 评论 -
第八 C控制语句:分支和跳转
本章介绍以下内容:关键字:if、else、switch、continue、break、case、default、goto运算符:&&、||、?:函数:getchar()、putchar()、ctype.h系列如何使用if和if else语句,如何嵌套它们在更复杂的测试表达式中用逻辑运算符组合关系表达式C的条件运算符switch语句break、continue和goto语句使用C的字符I/O函数:getchar()和putchar()ctype.h头文件原创 2020-08-21 11:13:46 · 153 阅读 · 0 评论 -
4.7 数组简介
在许多程序中,数组很重要。数组可以作为一种储存多个相关项的便利方式。我们在第10章中将详细介绍数组,但是由于循环经常用到数组,所以在这里先简要地介绍一下。数组(array)是按顺序储存的一系列类型相同的值,如10个char类型的字符或15个int类型的值。整个数组有一个数组名,通过整数下标访问数组中单独的项或元素(element)。例如,以下声明:float a[20];声明a是一个内含20个元素的数组,每个元素都可以储存float类型的值。数组的第1个元素是a[0],第2个元素是a[1],以原创 2020-08-20 14:26:54 · 417 阅读 · 0 评论 -
7.9 嵌套循环
嵌套循环(nested loop)指在一个循环内包含另一个循环。嵌套循环常用于按行和列显示数据,也就是说,一个循环处理一行中的所有列,另一个循环处理所有的行。程序清单演示了一个简单的示例/************************************************************************ 功能:演示嵌套循环 ************************************************************************/原创 2020-08-20 13:44:25 · 1412 阅读 · 0 评论 -
7.8 如何选择循环(for、while、do while)
C语言学习栏目目录如何选择使用哪一种循环?首先,确定是需要入口条件循环还是出口条件循环。通常,入口条件循环用得比较多,有几个原因。其一,一般原则是在执行循环之前测试条件比较好。其二,测试放在循环的开头,程序的可读性更高。另外,在许多应用中,要求在一开始不满足测试条件时就直接跳过整个循环。那么,假设需要一个入口条件循环,用for循环还是while循环?这取决于个人喜好,因为二者皆可。要让for循环看起来像while循环,可以省略第1个和第3个表达式。例如:for ( ; test ; ).原创 2020-07-24 13:25:30 · 1157 阅读 · 0 评论 -
7.7 出口条件循环:do while
while循环和for循环都是入口条件循环,即在循环的每次迭代之前检查测试条件,所以有可能根本不执行循环体中的内容。C语言还有出口条件循环(exit-condition loop),即在循环的每次迭代之后检查测试条件,这保证了至少执行循环体中的内容一次。这种循环被称为 do while循环。程序清单演示了一个示例。/************************************************************************ 功能:出口条件循环 ********.原创 2020-07-24 11:52:10 · 679 阅读 · 0 评论 -
7.6 逗号运算符
逗号运算符扩展了for循环的灵活性,以便在循环头中包含更多的表达式。例如,下程序清单演示了一个打印一类邮件资费/************************************************************************ 功能:一类邮资 ************************************************************************/#include <stdio.h>int main(void)原创 2020-07-24 10:38:30 · 360 阅读 · 0 评论 -
7.5 其他赋值运算符:+=、-=、*=、/=、%=
C语言学习栏目目录C有许多赋值运算符。最基本、最常用的是=,它把右侧表达式的值赋给左侧的变量。其他赋值运算符都用于更新变量,其用法都是左侧是一个变量名,右侧是一个表达式。赋给变量的新值是根据右侧表达式的值调整后的值。确切的调整方案取决于具体的运算符。例如scores += 20 与 scores = scores + 20 相同dimes -= 2 与 dimes = dimes - 2 相同bunnies *= 2 与 bunnies = bunni原创 2020-07-24 09:11:41 · 904 阅读 · 0 评论 -
7.4 for循环
C语言学习栏目目录目录举个栗子for循环把上节(7.3不确定循环和计数循环)叙述的3个行为(初始化、测试和更新)组合在一处。程序清单使用for循环修改了7.2 用关系运算符和表达式比较大小中最后一个程序清单的程序。/************************************************************************ 功能:使用for循环的计数循环 ************************************************原创 2020-07-17 11:39:21 · 249 阅读 · 0 评论 -
7.3不确定循环和计数循环
一些while循环是不确定循环(indefinite loop)。所谓不确定循环,指在测试表达式为假之前,预先不知道要执行多少次循环。例如,程序清单通过与用户交互获得数据来计算整数之和。我们事先并不知道用户会输入什么整数。另外,还有一类是计数循环(counting loop)。这类循环在执行循环之前就知道要重复执行多少次。程序清单6.10就是一个简单的计数循环。/*********************************************************************.原创 2020-07-16 19:28:48 · 1553 阅读 · 0 评论 -
7.2 用关系运算符和表达式比较大小
C语言学习栏目目录目录1、什么是真2、其他真值3、真值的问题4、新的_Bool类型5、优先级和关系运算符while循环经常依赖测试表达式作比较,这样的表达式被称为关系表达式(relational expression),出现在关系表达式中间的运算符叫做关系运算符(relational operator)。前面的示例中已经用过一些关系运算符,下表中列出了 C 语言的所有关系运算符。该表也涵盖了所有的数值关系(数字之间的关系再复杂也没有人与人之间的关系复杂)。关系运算符.原创 2020-07-16 19:04:08 · 2236 阅读 · 0 评论 -
7.1 while循环
1、while语句while循环的通用形式如下:while ( expression )statementstatement部分可以是以分号结尾的简单语句,也可以是用花括号括起来的复合语句。到目前为止,程序示例中的expression部分都使用关系表达式。也就是说,expression是值之间的比较,可以使用任何表达式。如果expression为真(或者更一般地说,非零),执行 statement部分一次,然后再次判断expression。在expression为假(0)之前,循环的判.原创 2020-07-07 14:52:12 · 1274 阅读 · 0 评论