0-9c语言程序说明书
- 格式:doc
- 大小:140.00 KB
- 文档页数:8
c语言菜鸟教程C语言学习指南C语言简介C语言是一种通用的高级程序设计语言,广泛应用于系统软件和应用软件开发。
它由贝尔实验室的Dennis M.Ritchie在20世纪70年代早期为了开发UNIX操作系统而设计。
C语言基础知识C语言中有一些基础的概念和术语需要了解。
例如,关键字、标识符、变量、数据类型和运算符等。
C语言语法C语言有自己独特的语法规则,程序需要按照这些规则编写才能正确运行。
学习C语言的语法是掌握这门语言的基础。
C语言输入和输出C语言提供了几种用于输入和输出的函数,比如printf()和scanf()等。
学习如何进行输入输出是编写实用程序的基础。
C语言控制语句C语言提供了很多控制语句,如条件语句(if-else)、循环语句(for、while)和跳转语句(break、continue)等。
这些语句能够让程序按照预期的方式执行。
C语言函数函数是C语言的重要组成部分,它能够将代码分成相互独立的模块。
了解如何定义和调用函数是编写可维护代码的关键。
C语言数组数组是一种存储多个相同类型的元素的数据结构。
学习如何使用数组可以更高效地处理大量数据。
C语言指针指针是C语言中的一个重要概念,它能够提供对内存中地址的直接访问。
理解指针的功能可以编写更高效的代码。
C语言结构体结构体是一种自定义的数据类型,它能够存储多个不同类型的数据。
结构体可以帮助我们更好地组织和管理数据。
C语言文件操作C语言提供了一些函数来进行文件的读写操作。
学习如何操作文件可以实现数据的持久化存储。
C语言编程实例通过一些实例来演示C语言的应用,能够更好地理解和掌握这门语言。
C语言进阶技巧C语言中有一些高级技巧和编程陷阱需要注意。
了解这些技巧可以提高代码的质量和效率。
C语言常见问题在学习C语言的过程中,可能会遇到一些常见的问题和困惑。
解决这些问题有助于更好地理解C语言的各个方面。
通过菜鸟教程学习C语言菜鸟教程提供了丰富的C语言学习资源,包括教程、示例代码和在线编译器等。
C程序设计语言(完美中文版)C语言是一种广泛使用的编程语言,以其高效性和灵活性而著称。
它是一种结构化编程语言,被广泛应用于系统编程、嵌入式系统、操作系统、数据库、网络编程等领域。
C语言的特点是简洁、高效、灵活,并且与硬件紧密相关,使得程序员可以更深入地理解计算机的工作原理。
在C语言中,所有的程序都是由函数组成的。
函数是C语言中的基本构建块,可以用来执行特定的任务。
C语言提供了丰富的库函数,可以用来实现各种功能,例如输入输出、字符串处理、数学运算等。
C语言还支持用户自定义函数,使得程序员可以创建自己的函数来满足特定的需求。
C语言中的数据类型包括基本数据类型和复合数据类型。
基本数据类型包括整型、浮点型、字符型等,用于表示基本的数据。
复合数据类型包括数组、结构体、联合体等,用于表示复杂的数据结构。
C语言还支持指针,可以用来实现内存管理和动态数据结构。
C语言中的控制结构包括条件语句、循环语句和跳转语句。
条件语句用于根据条件的真假来执行不同的代码块。
循环语句用于重复执行一段代码,直到满足特定的条件。
跳转语句用于在程序中实现跳转,例如跳转到循环的开始或结束。
C语言还提供了丰富的输入输出函数,可以用来从用户那里获取输入,并将输出结果显示给用户。
这些函数包括printf、scanf、puts、gets等。
通过这些函数,程序员可以与用户进行交互,获取用户输入的数据,并将处理结果展示给用户。
C语言是一种功能强大、灵活多变的编程语言。
它提供了丰富的数据类型、控制结构和输入输出函数,使得程序员可以高效地实现各种功能。
学习C语言可以帮助程序员更好地理解计算机的工作原理,为后续学习其他编程语言打下坚实的基础。
C程序设计语言(完美中文版)2. 模块化编程:C语言支持模块化编程,可以将程序划分为多个模块,每个模块包含一组相关的函数和数据。
这种模块化编程方式有助于提高代码的可读性、可维护性和可重用性。
程序员可以将常用的功能封装成模块,并在需要时引入这些模块,从而简化程序的开发过程。
C语言代码书写规范(仅供参考)一、排版:1-1:程序块要采用缩进风格编写,每层缩进的空格数为4个或一个Tab位(建议后者)。
说明:对于由开发工具自动生成的代码可以有不一致。
1-2:相对独立的程序块、变量说明之后必须加空行示例:如下例子书写不规范if (!valid_ni(ni)){ ... // program code}repssn_ind = ssn_data[index].repssn_index;repssn_ni = ssn_data[index].ni;应书写如下:if (!valid_ni(ni)){ ... // program code}//此行为空行repssn_ind = ssn_data[index].repssn_index;repssn_ni = ssn_data[index].ni;1-3:较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。
1-4:不允许把多条短语句写在一行中,即一行只写一条语句。
示例:如下例子书写不规范int a = 0; double b = 0;应书写如下:int a = 0;double b = 0;1-5:if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。
示例:如下例子书写不规范if(pUserCR == NULL) return;因书写为:if(pUserCR == NULL){return ;}1-7:函数或过程的开始、解耦的定义及循环、判断等语句中的代码都要采取缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。
1-8:程序块的分节符(如C/C++语言的大括号‘{’和‘}’)应各独占一行,并且位于同一列,同时与引用他们的语句左对齐。
第一部分:指导语(一)教学目标(二)自我调节学习下面所列举的不良学习习惯你有吗?●对于布臵的作业拖沓、马马虎虎、偷工减料●虽然很卖力的做作业,但总是以一种很肤浅的方式完成●安排事情没有先后顺序、没有轻重缓急,该做的没做,不该做的却做了一大堆●平时提不起兴趣学习,到临近考试临时抱佛脚这些不良的学习习惯最终都会殊途同归:学业失败、不理想,进而严重挫伤自我效能感、削弱学习动机,周而复始、恶性循环。
时间是及其重要的学习资源,有效地利用学习时间对于学业成功非常重要。
而有效的时间管理则可以促进学习并增强自我效能感,无效的时间利用则消弱信心、降低学习效率。
笔者在这里向大家提供一些建议和方法,平日学习中也简单易行,这就是自我调节学习的首要环节-时间的计划与管理。
这种技能的培养有以下几个过程:第一阶段:观察并记录自己的学习。
用时1周。
第二阶段:制订学习时间计划和学习策略。
用时1周。
第三阶段:重新调整时间计划和学习策略。
用时1周。
第四阶段:坚持执行时间计划和学习策略。
以某同学的C程序设计课的学习为例:A)该同学在学期初始打算给该课程每周1小时的课后复习和作业时间,地点选择在宿舍学习。
实际情况是这样的:该同学晚上8点开始在宿舍完成课后测验作业。
在作业过程中宿舍音乐悠扬、环境嘈杂,舍友时不时的讨论一些话题经常会分散注意力,有时也禁不住加入讨论。
这样在作业过程中做做停停用了1个多小时。
他在做完后预测了自己的各项分数。
该同学在实验课上才开始阅读实验材料,一边阅读一边试图理解还一边上机操作,有些实验内容因没有提前准备而显得措手不急,整个不足两节课的上机时间他匆匆忙忙、杂乱无章的做完实验作业,实验目的不甚理解。
他预估了实验作业分数。
等到作业批改完发现,无论是课后测验还是实验作业成绩都不理想,很多题目高估了分数。
有些作业题课本上就有明确答案或者只要用点心就能找出答案,但由于他作业时心浮气躁,只是锻炼了一会儿眼部肌肉而已,多数题目靠直觉和猜测。
c语⾔程序设计实验指导书《C 语⾔程序设计》实验指导书实验⼀C 程序的运⾏环境⼀、实验⽬的1、了解所⽤的计算机系统的基本操作⽅法,学会独⽴使⽤该系统;2、了解在该系统上如何编辑、编译、连接和运⾏⼀个C 程序;3、通过运⾏简单的C 程序,初步了解C 程序⼆、实验预习1、认真阅读简单的C 程序介绍,C 程序上机步骤部分内容;2、编写好所需要的程序,程序的书写应该清楚整洁,⼀般检查应该是没有明显的错误。
如果在程序中有疑问的地⽅,可以标记起来,以便于上机调试时予以注意。
初学者特别忌讳上机前⾃⼰不编写程序,到时随便地抄别⼈的程序。
三、实验指导1、输⼊并运⾏⼀个简单的程序,从⽽熟悉所⽤系统的上机⽅法与步骤。
(1)选择“File”—“New”—“Win32 console application”,输⼊⼯程名称,确定。
直接选择第⼀项“An empty project”,点击“Finish”。
“File”—“New”—File框下⾯选择⽂件类型“C++ Source File” ,输⼊⽂件名称,点击“OK”。
(2)输⼊下⾯的程序(例题1.1)#includevoid main( ){printf("This is a C program.\n");}(3)选择“Build”菜单下“Compile”选项,快捷键为Ctrl+F7。
编译过程将源代码转化成⽬标⽂件格式,后缀名为.o。
选择“Build”菜单下“Build”选项,快捷键为F7。
如果出现“出错信息”,则应找出原因并改正之,再进⾏编译构建。
(4)如果编译⽆错误,选择“Build”菜单“Execute”选项,运⾏程序,快捷键为Ctrl+F5,观察分析运⾏结果。
2、输⼊并编辑⼀个C 程序(1)同上,新建⼯程和⽂件。
(2)输⼊以下程序(例题1.2,但故意漏打或打错⼏个字符)#includevoid main( ){int a,b,sum ;a=123 ;b=456 ;sum=a+b ;printf("sum is %d\n",sum);}(3)以下步骤同上⼀例题3、输⼊并运⾏⼀个需要在运⾏时输⼊数据的程序(1)清空编辑窗⼝,输⼊下⾯的程序(例题1.3)。
C语言程序设计说明书一、简介C语言是一种通用、高效的编程语言,被广泛用于系统软件和应用程序的开发。
本说明书旨在详细介绍C语言程序设计的基本原理和技巧,帮助读者快速掌握C语言程序设计的核心概念和操作方法。
二、开发环境1. 软件安装为了开始C语言程序设计,您需要安装相应的开发环境。
推荐使用以下软件进行安装:- 编译器:gcc或者MinGW- 集成开发环境(IDE):Code::Blocks、Dev-C++或者Visual Studio2. 配置环境变量安装完成后,需要配置环境变量以便系统能够正确找到编译器和相关的库文件。
请按照软件提供商的官方文档来进行正确的配置。
三、基本语法1. 数据类型C语言提供了多种数据类型,包括整型、浮点型、字符型等。
在声明变量时,需要指定其数据类型。
例如:int num = 10;char ch = 'A';2. 运算符C语言支持各种基本运算符,如加法、减法、乘法、除法等。
还有逻辑运算符、关系运算符等。
运算符的使用可以帮助实现各种计算和逻辑判断。
3. 控制流程C语言提供了多种控制流程语句,如条件语句(if-else)、循环语句(for、while、do-while)等。
通过这些语句可以实现程序的分支和循环执行,增加程序的灵活性和功能性。
四、函数和模块化编程1. 函数的定义和调用函数是C语言程序设计中的重要组成部分,可以实现代码的重用和模块化。
通过函数的定义和调用,可以将程序划分为多个模块,使程序结构清晰明了。
2. 函数参数和返回值函数可以带有参数和返回值。
参数可以是各种数据类型,用来向函数传递数据。
返回值则可以将函数的结果传递给调用者。
3. 递归函数C语言支持递归函数,即函数可以调用自身。
递归函数在解决某些问题时非常有用,但需要小心控制递归的深度,以避免堆栈溢出等问题。
五、数组和指针1. 数组的定义和使用数组是一种容器,可以存储多个相同类型的元素。
通过定义和使用数组,可以方便地处理大量数据和实现复杂的算法。
C语言入门教程(精华版)C语言是一种广泛使用的计算机编程语言,它被广泛应用于操作系统、嵌入式系统、系统软件和应用程序等领域。
C语言具有高效、灵活和可移植性强的特点,是许多高级编程语言的基础。
本教程旨在帮助初学者快速入门C语言编程,我们将从C语言的基本语法、数据类型、运算符、控制结构等方面进行讲解。
通过本教程的学习,你将能够掌握C语言的基础知识,并能够编写简单的C语言程序。
第一部分:C语言的基本语法1. 预处理器指令:用于在程序编译之前执行一些特定的操作,如包含头文件、定义宏等。
2. 主函数:C语言程序的入口点,程序从这里开始执行。
3. 变量声明:用于声明程序中使用的变量,包括变量的类型和名称。
4. 语句:C语言中的执行单元,用于执行特定的操作,如赋值、输入输出等。
5. 函数:用于实现特定的功能,可以重复使用。
在C语言中,每个语句都以分号(;)结束。
C语言中的注释用于解释代码,单行注释以两个斜杠(//)开始,多行注释以/开始,以/结束。
C语言入门教程(精华版)C语言是一种广泛使用的计算机编程语言,它被广泛应用于操作系统、嵌入式系统、系统软件和应用程序等领域。
C语言具有高效、灵活和可移植性强的特点,是许多高级编程语言的基础。
本教程旨在帮助初学者快速入门C语言编程,我们将从C语言的基本语法、数据类型、运算符、控制结构等方面进行讲解。
通过本教程的学习,你将能够掌握C语言的基础知识,并能够编写简单的C语言程序。
第一部分:C语言的基本语法1. 预处理器指令:用于在程序编译之前执行一些特定的操作,如包含头文件、定义宏等。
2. 主函数:C语言程序的入口点,程序从这里开始执行。
3. 变量声明:用于声明程序中使用的变量,包括变量的类型和名称。
4. 语句:C语言中的执行单元,用于执行特定的操作,如赋值、输入输出等。
5. 函数:用于实现特定的功能,可以重复使用。
在C语言中,每个语句都以分号(;)结束。
C语言中的注释用于解释代码,单行注释以两个斜杠(//)开始,多行注释以/开始,以/结束。
c语言入门教程C语言是一种面向过程的编程语言,也是许多编程语言的基础。
学习C语言可以帮助我们更好地理解计算机编程的基本原理和逻辑。
下面是一个简单的C语言入门教程。
1. 安装C语言编译器首先,我们需要安装C语言编译器。
常见的C语言编译器有GCC、Clang等。
可以在官方网站上下载并按照说明进行安装。
2. 编写一个Hello World程序打开一个文本编辑器,输入以下代码:```#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}```保存文件为`hello.c`。
3. 编译和运行程序打开命令行终端,进入保存`hello.c`文件的目录,执行以下命令进行编译:```gcc -o hello hello.c```编译成功后,会生成一个可执行文件`hello`。
执行以下命令运行程序:```./hello```如果一切正常,你将会看到输出`Hello, World!`。
4. 理解代码代码中的`#include <stdio.h>`是一个预处理指令,用于包含stdio库的定义,其中定义了一些输入输出函数,如`printf`。
`int main()`是一个函数的定义,表示程序的入口函数。
在C语言中,所有的程序必须有一个入口函数,并从这个函数开始执行。
`printf("Hello, World!\n");`是一个输出函数,用于在控制台输出`Hello, World!`。
`printf`函数使用格式化字符串的方式输出内容。
`return 0;`表示返回一个整数值0,这个值会被操作系统作为程序的返回值。
5. 进一步学习通过以上简单的示例,你已经初步了解了C语言的基本语法和编写程序的步骤。
下一步,你可以学习更复杂的语法,如变量、运算符、流程控制语句等。
可以参考一些优秀的C语言教程或者书籍,如《C Primer Plus》、《C语言程序设计》等。
C语言参考手册语言ASCII动态内存管理mallocfreerealloc日期和时间工具time字符串库转换成数值格式atoistrtol字符串操作strcpystrcat字符串检验strlenstrcmpstrchrstrstr字符数组操作memsetmemcpy算法qsortbsearch数值rand输入/输出支持文件访问fopenfclose直接输入/输出freadfwrite无格式输入/输出fgetcfputcfgetsfputs有格式输入/输出fscanffprintf文件位置ftellfseekrewindC语言参考手册语言ASCII动态内存管理malloc头文件<stdlib.h>函数原型void*malloc(size_t size);函数说明分配size字节的未初始化内存.为避免内存泄漏,分配的内存需要释放.参数size - 要分配的字节数.返回值成功 - 指向新分配内存的指针.失败 - 空指针.free头文件<stdlib.h>函数原型void free(void*ptr);函数说明解分配之前由malloc()分配的内存.参数ptr - 指向要解分配的内存的指针.返回值(无).示例#include <stdlib.h>int main(void){int*p=malloc(sizeof(int) *4);free(p);}realloc头文件<stdlib.h>函数原型void*realloc(void*ptr, size_t new_size);函数说明重新分配new_size字节大小的内存区域.重新分配按以下二者之一执行:可能的话,扩张或收缩ptr所指向的已存在内存.内容在新旧大小中的较小者范围内保持不变. 若扩张范围,则数组新增部分的内容是未定义的.分配一个大小为new_size字节的新内存块,并复制大小等于新旧大小中较小者的内存区域,然后释放旧内存块.若无足够内存,则不释放旧内存块,并返回空指针.若ptr 是NULL,则行为与调用malloc(new_size)相同.参数ptr - 指向需要重新分配的内存区域的指针.new_size - 数组的新大小.返回值成功 - 指向新分配内存的指针. 原指针ptr被非法化.失败 - 空指针. 原指针ptr保持有效.示例#include <stdio.h>#include <stdlib.h>int main(void){int*pa=malloc(10*sizeof(int));if (pa){printf("%zu bytes allocated. Storing ints: ", 10*sizeof(int));for (int n=0; n<10; n++)printf("%d ", pa[n] =n);}int*pb=realloc(pa, 100*sizeof(int));if (pb){printf("\n%zu bytes allocated, first 10 ints are: ", 100*sizeof(int));for (int n=0; n<10; n++)printf("%d ", pb[n]);printf("\n");free(pb);}elsefree(pa);}输出40 bytes allocated. Storing ints: 0 1 2 3 4 5 6 7 8 9400 bytes allocated, first 10 ints are: 0 1 2 3 4 5 6 7 8 9日期和时间工具time头文件<time.h>函数原型time_t time(time_t*arg);函数说明返回编码成time_t 对象的当前日历时间,并将其存储于arg 指向的time_t对象(除非arg为空指针).参数arg - 指向将存储时间的time_t对象的指针,或空指针.返回值成功 - 编码成time_t对象的当前日历时间.失败 - (time_t)(-1).示例int main(void){time_t result=time(NULL);if(result!=-1)printf("%s(%ju seconds since the Epoch)\n",asctime(gmtime(&result)),(size_t)result);}输出Thu Mar 8 05:40:46 2018(1520487646 seconds since the Epoch)字符串库转换成数值格式atoi头文件<stdlib.h>函数原型int atoi(const char*str);函数说明将字符串转换成整数值.从首个非空白符开始,接收尽可能多的字符以组成合法的整数表示,并将其转换为整数值.若转换的值溢出,则返回值未定义.参数str - 指向字符串的指针.返回值成功 - 对应str内容的整数值.失败 - 0.示例int main(void){printf("%d\n", atoi(" -123junk"));printf("%d\n", atoi("0"));printf("%d\n", atoi("junk")); // 没有可进行的转换printf("%d\n", atoi("2147483648")); // UB: 在int范围之外}输出-123-2147483648strtol头文件<stdlib.h>函数原型long strtol(const char*str, char**str_end, int base);函数说明将字符串转换成整数值.从首个非空白符开始,取尽可能多的字符组成对应进制整数的字符串表示,并将它们转换成一个整数值.若被转换的值溢出,则发生值域错误并返回LONG_MAX 、LONG_MIN 、LLONG_MAX 或LLONG_MIN.参数str - 指向字符串的指针.str_end - 指向指向字符指针的指针.base - 字符串对应整数的进制.返回值成功 - 对应str内容的整数值.失败 - 0.示例int main(void){printf("\"1010\" in bin --> %ld\n", strtol("1010", NULL, 2));printf("\"12\" in oct --> %ld\n", strtol("12", NULL, 8));printf("\"A\" in hex --> %ld\n", strtol("A", NULL, 16));printf("\"junk\" in base36 --> %ld\n", strtol("junk", NULL, 36));}输出"1010" in bin --> 10"12" in oct --> 10"A" in hex --> 10"junk" in base36 --> 926192字符串操作strcpy头文件<string.h>函数原型char*strcpy(char*dst, const char*src);函数说明复制src所指向的字符串(包含'\0'),到首元素为dst所指的字符数组.若dst 不是指向字符数组的指针或src不是指向字符串的指针则行为未定义.若dst数组长度不足则行为未定义.若字符串覆盖则行为未定义.参数dst - 指向要写入的字符数组的指针.src - 指向要复制的字符串的指针.返回值dst的副本.示例int main(void){char*src="Take the test.";char dst[strlen(src) +1]; // +1以适应'\0'strcpy(dst, src);// src[0] = 'M'; // UBdst[0] ='M'; // OKprintf("src = %s\ndst = %s\n", src,dst);}输出src = Take the test.dst = Make the test.strcat头文件<string.h>函数原型char*strcat(char*dst, const char*src);函数说明将src 所指向的字符串的副本附加到dst 所指向的字符串的结尾.若目标数组相对于src 和dst的内容以及'\0'不够大,则行为未定义.若dst或src不是指向字符串的指针,则行为未定义.若字符串重叠,则行为未定义.参数dst - 指向要附加的字符串的指针.src - 指向要复制的字符串的指针.返回值dst的副本.示例int main(void){char dst[50] ="Hello";char src[50] ="World!";strcat(dst, src);strcat(dst, " ...");strcat(dst, " Goodbye World!");puts(dst);}输出Hello World! ... Goodbye World!字符串检验strlen头文件<string.h>函数原型size_t strlen(const char*str);函数说明返回给定字符串的长度.若str不是指向字符串的指针则行为未定义.参数str - 指向要检测的字符串的指针.返回值字符串str的长度.示例#include <stdio.h>#include <string.h>int main(void){const char str[] ="How many characters does this string contain?";printf("without null character: %zu\n", strlen(str));printf("with null character: %zu\n", sizeof str);}输出without null character: 45with null character: 46strcmp头文件<string.h>函数原型int strcmp(const char*lhs, const char*rhs);函数说明以字典序比较两个字符串.若lhs 或rhs不是指向字符串的指针,则行为未定义.参数lhs - 指向要比较的字符串的指针.rhs - 指向要比较的字符串的指针.返回值负值 - lhs 字典序中先出现于rhs.正值 - lhs 字典序中后出现于rhs.零 - lhs 与rhs相等.示例#include <stdio.h>#include <string.h>void demo(const char*lhs, const char*rhs){int rc=strcmp(lhs, rhs);if (rc==0)printf("[%s] equals [%s]\n", lhs,rhs);else if (rc<0)printf("[%s] precedes [%s]\n", lhs,rhs);else if (rc>0)printf("[%s] follows [%s]\n", lhs,rhs);}int main(void){const char*string="Hello World!";demo(string, "Hello!");demo(string, "Hello");demo(string, "Hello there");demo("Hello, everybody!"+12, "Hello,somebody!"+11);}输出[Hello World!] precedes [Hello!][Hello World!] follows [Hello][Hello World!] precedes [Hello there][body!] equals [body!]strchr头文件<string.h>函数原型char*strchr(const char*str, int ch);函数说明寻找ch 在str所指向的字符串中的首次出现位置.若str不是指向字符串的指针,则行为未定义.参数str - 指向字符串的指针.ch - 要搜索的字符.返回值指向str中找到的字符的指针,若未找到该字符则为空指针.示例#include <stdio.h>#include <string.h>int main(void){char target='T';const char*str="Try not. Do, or do not. There is no try.";const char*result=str;while((result=strchr(result, target)) !=NULL){printf("Found '%c' starting at '%s'\n", target, result);++result;}}输出Found 'T' starting at 'Try not. Do, ordo not. There is no try.'Found 'T' starting at 'There is no try.'strstr头文件<string.h>函数原型char*strstr(const char*str, const char*substr);函数说明查找substr 所指的字符串在str所指的字符串中的首次出现的位置.若str 或substr不是指向字符串的指针,则行为未定义.参数str - 指向要检验的字符串的指针.substr - 指向要查找的字符串的指针.返回值指向str中找到的子串首字符的指针.若找不到该子串则为NULL.若substr 指向空字符串,则返回str.示例#include <stdio.h>#include <string.h>void find_str(const char*str, const char*substr){char*pos=strstr(str, substr);if (pos)printf("found '%s' in '%s' at %ld\n", substr, str, pos-str);elseprintf("'%s' was not found in '%s'\n", substr, str);}int main(void){char*str="one twothree";find_str(str, "two");find_str(str, "");find_str(str, "nine");find_str(str, "n");}输出found 'two' in 'one two three' at 4found '' in 'one two three' at 0'nine' was not found in 'one two three'found 'n' in 'one two three' at 1字符数组操作memset头文件<string.h>函数原型void*memset(void*dst, int ch, size_t count);函数说明复制值ch 到dst 所指向对象的首count个字节.若出现dst数组结尾后的访问则行为未定义.若dst为空指针则行为未定义.参数dst - 指向要填充的对象的指针.ch - 填充字节.count - 要填充的字节数.返回值dst的副本.示例#include <stdio.h>#include <string.h>int main(void){char str[] ="ghghghghghghghghghghgh";puts(str);memset(str, 'a', 5);puts(str);}输出ghghghghghghghghghghghaaaaahghghghghghghghghmemcpy头文件<string.h>函数原型void*memcpy(void*dst, const void*src, size_t count);函数说明从src 所指向的对象复制count 个字符到dst所指向的对象.若访问发生在dst数组结尾后则行为未定义.若dst 或src为空指针则行为未定义.若对象重叠,则行为未定义.参数dst - 指向要复制的对象的指针.src - 指向复制来源对象的指针.count - 复制的字节数.返回值dst的副本.示例#include <stdio.h>#include <string.h>int main(void){int arr[3] = {1, 2, 3};int tmp[3];char dst[4];char source[] ="once upon a midnight dreary...";memcpy(dst, source, sizeof dst);for (size_t n=0; n<sizeof dst; ++n)putchar(dst[n]);putchar('\n');memcpy(tmp, arr, 3*sizeof(int));for (size_t n=0; n<3; ++n)printf("%d", tmp[n]);putchar('\n');}输出once123算法qsort头文件<stdlib.h>函数原型void qsort(void*ptr, size_t count, size_t size,int (*comp)(const void*, const void*));函数说明对ptr所指向的数组以升序排序.数组包含count 个长度为size字节的元素.参数ptr - 指向待排序的数组的指针.count - 数组的元素数目.size - 数组每个元素的字节大小.comp - 比较函数.比较函数的签名应等价于如下形式:int comp(const void* a, const void* b);若首个参数小于第二个,则返回负整数值.若首个参数大于第二个,则返回正整数值.若两参数相等,则返回零.返回值(无).示例#include <stdio.h>#include <stdlib.h>#include <limits.h>int compare(const void*a, const void*b){int arg1= (const int) a;int arg2= (const int) b;if (arg1<arg2) return-1;if (arg1>arg2) return1;else return0;// return (arg1 > arg2) - (arg1 < arg2); // 可行的简写// return arg1 - arg2; // 错误的简写(若给出 INT_MIN 则会失败)}int main(void){int ints[] = {-2, 99, 0, -743, 2, INT_MIN, 4};int size=sizeof ints/sizeof*ints;qsort(ints, size, sizeof(int), compare);for (int i=0; i<size; i++)printf("%d\n", ints[i]);}输出-2147483648-743-22499bsearch头文件<stdlib.h>函数原型void*bsearch(const void*key, const void*ptr, size_t count, size_t size,int (*comp)(const void*, const void*));函数说明在ptr 所指向的数组中寻找等于key所指向的元素.数组包含count 个长度为size字节的元素.若数组元素没有初始有序,则行为未定义.参数Key - 指向要查找的元素的指针.ptr - 指向要检验的数组的指针.count - 数组的元素数目.size - 数组每个元素的字节数.comp - 比较函数.比较函数的签名应等价于如下形式:int comp(const void* a, const void* b);若首个参数小于第二个,则返回负整数值.若首个参数大于第二个,则返回正整数值.若两参数相等,则返回零.返回值指向与*key比较相等的指针,在找不到元素时返回空指针.示例#include <stdio.h>#include <stdlib.h>typedef struct{int nr;char const*value;} Data;Data dat[] = {{1, "Foo"}, {2, "Bar"}, {3, "Hello"}, {4, "World"}};int compare(void const*a, void const*b){const Data*const l=a;const Data*const r=b;if (l->nr<r->nr) return-1;else if (l->nr>r->nr) return1;else return0;// return (l->nr > r->nr) - (l->nr <r->nr); // 可行的简洁写法// return l->nr - r->nr; // 错误的简洁写法(若给出INT_MIN就会失败)}int main(void){Data key= { .nr=3 };const Data*res=bsearch(&key, dat, sizeof dat/sizeof dat[0],sizeof dat[0], compare);if (res)printf("No %d: %s\n",res->nr, res->value);elseprintf("No %d not found\n", key.nr);}输出No 3: Hello数值rand头文件<stdlib.h>函数原型int rand();函数说明返回[0, RAND_MAX]范围的随机整数值.参数(无) .返回值[0,RAND_MAX]范围的随机整数值.示例#include <stdio.h>#include <stdlib.h>#include <time.h>int main(void){// 以当前时间为随机数生成器的种子// 若在srand()的调用前使用rand(),则如同以srand(1)播种// srand()中的相同seed产生相同的值数列srand(time(NULL));int random=rand();printf("Random value on [0, %d]: %d\n", RAND_MAX, random);}输出Random value on [0, 2147483647]:1328633460输入/输出支持文件访问fopen头文件<stdio.h>函数原型FILE*fopen(const char*filename, const char*mode);函数说明打开filename所指示的文件,并返回指向关联到该文件的文件流的指针.参数filename - 关联到文件系统的文件名.mode - 访问模式.返回值成功 - 指向新文件流的指针.失败 - 空指针.fclose头文件函数原型函数说明关闭给定的文件流.参数stream - 需要关闭的文件流.返回值成功 - 0.失败 - EOF .示例<stdio .h >int fclose (FILE * stream );#include <stdio.h>#include <stdlib.h>int main(void){int c; // 注意:int,非char,要求处理EOFFILE*fp=fopen("test.txt", "r");if(!fp){perror("File opening failed");return EXIT_FAILURE;}while ((c=fgetc(fp)) !=EOF) // 标准C I/O读取文件循环putchar(c);if (ferror(fp))puts("I/O error when reading");else if (feof(fp))puts("End of file reached successfully");fclose(fp);}直接输入/输出fread头文件<stdio.h>函数原型size_t fread(void*buffer, size_t size, size_t count, FILE*stream);函数说明从给定输入流stream 读取至多count 个对象到数组buffer中.参数buffer - 指向要读取的数组中首个对象的指针.size - 每个对象的字节大小.count - 要读取的对象数.stream - 读取来源的输入文件流.返回值成功读取的对象数,若出现错误或文件尾条件,则可能小于count.若size 或count 为零,则fread返回零且不进行其他动作.fwrite头文件<stdio.h>函数原型size_t fwrite(const void*buffer, size_t size, size_t count, FILE*stream);函数说明写count 个来自给定数组buffer 的对象到输出流stream.参数buffer - 指向数组中要被写入的首个对象的指针.size - 每个对象的大小.count - 要被写入的对象数.stream - 指向输出流的指针.返回值成功写入的对象数,若错误发生则可能小于count.若size 或count 为零,则fwrite返回零并不进行其他行动.示例#include <stdio.h>#include <stdlib.h>enum { SIZE=5 };int main(void){double a[SIZE] = {1, 2, 3, 4, 5};double b[SIZE];int r1, r2;FILE*f1;FILE*f2;f1=fopen("file.bin", "wb");r1=fwrite(a, sizeof a[0], SIZE, f1);printf("wrote %d elements out of %d requested\n", r1, SIZE);fclose(f1);f2=fopen("file.bin", "rb");r2=fread(b, sizeof b[0], SIZE, f2);fclose(f2);printf("read back: ");for (int i=0; i<r2; i++)printf("%f ", b[i]);printf("\n");}输出wrote 5 elements out of 5 requestedread back: 1.000000 2.000000 3.0000004.000000 5.000000 无格式输入/输出fgetc头文件<stdio.h>函数原型int fgetc(FILE*stream);函数说明从给定的输入流读取下一个字符.参数stream - 读取字符的来源.返回值成功 - 获得的字符.失败 - EOF.fputc头文件<stdio.h>函数原型int fputc(int ch, FILE*stream);函数说明写入字符ch 到给定输出流stream.参数ch - 要被写入的字符.stream - 输出流.返回值成功 - 被写入的字符.失败 - EOF.示例#include <stdio.h>#include <stdlib.h>int main(void){int c;char ch;int ret_code=0;FILE*fp=fopen("test.txt", "w");for (ch='a'; ret_code!=EOF&&ch!='z'; ch++)ret_code=fputc(ch, fp);fclose(fp);fp=fopen("test.txt", "r");while ((c=fgetc(fp)) !=EOF)putchar(c);fclose(fp);putchar('\n');}输出abcdefghijklmnopqrstuvwxyfgets头文件<stdio.h>函数原型char*fgets(char*str, int count, FILE*stream);函数说明从给定文件流读取最多count - 1个字符并存储于str所指向的字符数组.若文件尾出现或发现换行符则终止分析,后一情况下str将包含一个换行符.若无错误发生,则紧随写入到str 的最后一个字符后写入'\0'.若count 小于1则行为未定义.参数str - 指向char数组元素的指针.count - 写入的最大字符数(典型的为str的长度) .stream - 读取数据来源的文件流.返回值成功 - 指向字符串的指针.失败 - NULL.fputs头文件<stdio.h>函数原型int fputs(const char*str, FILE*stream);函数说明写入字符串str 的每个字符到stream ,不写入'\0'.参数str - 要写入的空终止字符串.stream - 输出流.返回值成功 - 非负值.失败 - EOF.示例#include <stdio.h>#include <stdlib.h>int main(void){char buf[8];FILE*tmpf=tmpfile();fputs("Alan Turing\n", tmpf);fputs("John von Neumann\n", tmpf);fputs("Alonzo Church\n", tmpf);rewind(tmpf);while (fgets(buf, sizeof buf, tmpf) !=NULL)printf("\"%s\"\n", buf);if (feof(tmpf))puts("End of file reached");}输出"Alan Tu""ring""John vo""n Neuma""nn""Alonzo ""Church"End of file reached有格式输入/输出fscanf头文件<stdio.h>函数原型int fscanf(FILE*stream, const char*format, ...);函数说明从文件流stream读取数据.参数stream - 要读取的输入文件流.format - 格式字符串.返回值成功 - 赋值的接收参数的数量.失败 - EOF.fprintf头文件<stdio.h>函数原型int fprintf(FILE*stream, const char*format, ...);函数说明写结果到文件流stream.参数stream - 要写入的输出文件流.format - 格式字符串.返回值成功 - 传输到输出流的字符数.失败 - 负值.示例#include <stdio.h>#include <stdlib.h>int main(void){char buf[8];FILE*tmpf=tmpfile();fprintf(tmpf, "Alan Turing\n");fprintf(tmpf, "John von Neumann\n");fprintf(tmpf, "Alonzo Church\n");rewind(tmpf);while (fscanf(tmpf, "%s", buf) !=EOF)printf("\"%s\"\n", buf);if (feof(tmpf))puts("End of file reached");}输出"Alan""Turing""John""von""Neumann""Alonzo""Church"End of file reached文件位置ftell头文件<stdio.h>函数原型long ftell(FILE*stream);函数说明返回流stream的文件位置指示器.若流以二进制模式打开,则由此函数获得的值是从文件开始的字节数.若流以文本模式打开,则由此函数返回的值未指定,且仅作为fseek()的输入才有意义.参数stream - 要检验的文件流.返回值成功 - 文件位置指示器.失败 - EOF .fseek头文件<stdio.h>函数原型int fseek(FILE*stream, long offset, int origin);函数说明设置文件流stream的文件位置指示器.若stream 以二进制模式打开,则新位置为从origin 开始后的offset字节.若stream 以文本模式打开,则仅有的受支持的offset 值为零(origin值不受限制)或先前在同一文件流上对ftell()的调用的返回值(origin 值只能是SEEK_SET)。
员工工资管理系统———C语言程序设计课程设计说明书指导教师:***专业班级:应化082设计者:李响周金娟解敏李伟生] 设计时间: 2 0 0 9年 9月员工工资管理系统一、需求分析随着计算机的飞速发展,它的应用已经十分广泛,它在人们的生产、生活、工作和学习中发挥着重要的作用。
例如一个现代化的公司,拥有数千名的员工,那么如何管理这么庞大的职工信息档案呢?这时,开发一个功能完善的职工信息管理系统就必不可少了。
从员工的信息的查询到管理实现了自动化的模式,从而提高了工作效率和减少工作中的出错率,对公司内部的员工管理更加方便。
系统是为公司财会部门设计的。
主要管理的数据包括:员工姓名、年龄、性别、员工号、实发。
该系统具有的功能是:根据职工号对职工的信息进行录入、查询、删除、修改、追加、统计、等。
对各功能模块的界面采用菜单显示方式。
本系统具有通用性,即可广泛适用于多单位,多人数,多功能的使用,并且系统采用模块化设计,主体为一个主函数,分别可以调用其他模块,利用不同子模块具有的不同功能,综合完成系统功能,不但主体与子模块间有相互联系,各个子模块间也有相互作用,从而实现了预期的功能。
二、系统的软硬件环境1、硬件环境:一般来说586电脑就可以提供并支持系统的使用及运行,此外,若想打印或成稿还需要使用打印机; U盘、软盘也是程序的必要载体。
2、软件环境:MS-DOS或Windows环境下安装Turbo C语言系统,安装完毕后即可使用,而且要用到UCDOS。
三、系统功能1、系统总体框图四、模块设计分析:此程序中输入模块:该模块是实现对员工姓名、年龄、性别、员工号、工资的录入并保存到文件“yuangong”中。
查询模块:实现按员工号查询每个员工的姓名、年龄、性别、实发,姓名、员工号、性别、年龄、实发;输入错误员工号,显示查无此人;输入错误字符显示“WRONG”首先定义一个变量X;进入循环体While;当X=1时,执行函数dele_num();否则,输出”Wrong!”;如果X=0,则跳出While循环。
程序编码:#include "conio.h"main(){void sky1();void sky2();void sky3();void sky4();int a,i;system("graftabl 936");textbackground(25);textcolor(10);while(1){clrscr();for(i=0;i<5;i++)printf("\n");printf("\t\t\t&程序菜单&\n");printf("\t┌─────────────────────┐\n"); printf("\t│*1.打印学号姓名,总分*│\n"); printf("\t│*2.完成成绩排序,打印表格*│\n"); printf("\t│*3. 退出程序*│\n"); printf("\t└─────────────────────┘\n"); printf("\t选择1-3\n");textbackground(25);textcolor(10);scanf("%d",&a);switch(a){case 1:sky1();getch();textbackground(10);textcolor(25);continue;case 2:sky2();getch();textbackground(10);textcolor(25);continue;case 3:sky4();getch();break;default:sky3();getch();textbackground(10);textcolor(25);continue;}break;}}void sky1(){int c[5];int i,t,j,m,v;int a[5]={10101,10102,10103,10104,10105},b[5][4]={{84,88,90,65},{78,85,83,85},{70,89,85,84},{80,78,90,75},{73,88,78,82}};char C[5][18]={"小艾","缓缓","飘飘","小鼠","咪咪"};clrscr();for(i=0;i<5;i++){c[i]=0;for(j=0;j<4;j++)c[i]=c[i]+b[i][j];}for(v=0;v<5;v++)printf("\n");printf("\t\t\t\t #成绩表#\n");printf("\t\t\t┌───┬──────────┬─────┐\n"); printf("\t\t\t│学号│姓名│总分│\n"); for(i=0;i<5;i++){printf("\t\t\t├───┼──────────┼─────┤\n"); printf("\t\t\t│%6d│",a[i]);for(m=0;m<18;m++)printf("%c",C[i][m]);printf("│%9d",c[i]);printf(" │\n");}printf("\t\t\t└───┴──────────┴─────┘\n");}void sky2(){int c[5];int i,t,j,m,w,e,v;int a[5]={10101,10102,10103,10104,10105},b[5][4]={{84,88,90,65},{78,85,83,85},{70,89,85,84},{80,78,90,75},{73,88,78,82}};char C[5][18]={"小艾","缓缓","飘飘","小鼠","咪咪"};clrscr();for(i=0;i<5;i++){c[i]=0;for(j=0;j<4;j++)c[i]=c[i]+b[i][j];}for(i=0;i<4;i++){for(j=0;j<4-i;j++)if(c[j]<c[j+1]){t=c[j];c[j]=c[j+1];c[j+1]=t;t=a[j];a[j]=a[j+1];a[j+1]=t;for(e=0;e<18;e++){t=C[j][e];C[j][e]=C[j+1][e];C[j+1][e]=t;}for(w=0;w<4;w++){t=b[j][w];b[j][w]=b[j+1][w];b[j+1][w]=t;}}}printf("\t\t\t\t#成绩表#\n");printf("┌───┬──────────┬───┬───┬───┬───┬───┬──┐\n");printf("│学号│姓名│数学│英语│计算机│哲学│总分│名次│\n");for(i=0;i<5;i++){printf("├───┼──────────┼───┼───┼───┼───┼───┼──┤\n");printf("│%6d│",a[i]);for(m=0;m<18;m++)printf("%c",C[i][m]);for(t=0;t<4;t++)printf("│%6d",b[i][t]);printf("│%6d│%4d│\n",c[i],i+1);}printf("└───┴──────────┴───┴───┴───┴───┴───┴──┘\n");}void sky3(){int i;clrscr();for(i=0;i<=5;i++)printf("\n");printf("\t┌─────────────┐\n");printf("\t││\n");printf("\t│输入错误,请重新选择1-3 │\n");printf("\t││\n");printf("\t└─────────────┘\n") ;}void sky4(){int i;clrscr();for(i=0;i<8;i++)printf("\n");printf("\t\t 结束谢谢!n");printf("\n\n\n\n\t\t班级:电子商务09-1\n");printf("\t\t编著:瞿润江廖群芬);}贵州商业高等专科学校课程设计说明书标题:C语言课程设计系别:计算机科学与技术系专业:电子商务班级:2009级1班姓名:瞿润江廖群芬学号:1060491035 10604091058指导老师:何旭一、考试题目1、打印学号、姓名、总分。
c语言写入id 0-9在C语言当中,输入数字可以用scanf()输入函数来完成。
比如输入的是整型数据,可以用int a;scanf();来达到把输入的数字赋值给a的目的。
类似的,如果是float,double,short,long等,只需在定义变量和输入函数中对应相应的数字类型即可。
方法一:#define_CRT_SECURE_NO_WARNINGS#include#include int main(){int i=0,j=0,m=0;int arr[]={0};printf("请输入三个数:");for(i=0;i<3;i++){scanf("%d",&arr[i]);}for(i=0;i<2;i++){for(j=0;j<2-i;j++){if(arr[j]>arr[j+1]){m=arr[j];arr[j+1]=arr[j];arr[j]=m;}}printf("该数组从大到小的排列顺序为:");for(i=0;i<3;i++){printf("%d",arr[i]);}system("pause");return 0;}#define_CRT_SECURE_NO_WARNINGS#include#include int main(){int a[10]={0};int i=0,j=0,k=0;printf("请输入十个数字");for(i=0;i<10;i++){scanf("%d",&a[i]);}for(i=0;i<10-1;++i){//比较10-1轮for(j=0;j<10-1-i;++j){//每轮比较10-1-i次, if(a[j]<a[j+1]){k=a[j];a[j]=a[j+1];a[j+1]=k;}}printf("该十个数字从小到大依次排列顺序:"); for(i=0;i<10;++i){printf("%d",a[i]);}printf("\n");system("pause");return 0;}方法二:#define_CRT_SECURE_NO_WARNINGS#include#include int main(){int a[10]={0};int i=0,j=0,k=0;printf("请输入10个数字:");for(i=0;i<10;++i){scanf("%d",&a[i]);}for(i=0;i<10-1;++i){for(j=i+1;j<10;++j){if(a[i]>a[j]){k=a[i];a[i]=a[j];a[j]=k;}}}printf("该十个数字从小到大依次排列顺序:"); for(i=0;i<10;++i){printf("%d",a[i]);}printf("\n");system("pause");return 0;}方法三:#define_CRT_SECURE_NO_WARNINGS#include#include int main(){int i,j,t;int a[10]={0};printf("请输入10个整数:"); for(i=0;i<10;++i){scanf("%d",&a[i]);}for(i=1;i<10;++i){t=a[i];for(j=i-1;j>-1&&a[j]>t;j--){ a[j+1]=a[j];}a[j+1]=t;}for(i=0;i<10;++i){printf("%d",a[i]);}system("pause");return 0;}。
单片机C语言程序设计课题研究
机电工程学院
班级:机电0 9 3 2 姓名:
学号:
指导老师:
日期:2011年6月20日
LED数码管0~9循环显示
说
明
书
一、程序清单
1、AT89C51单片机一个
2、共阴数码管一个
3、电阻8个
4、电线9根
5、金属板一块
二、设计要求
利用单片机的P0端口的P0.0-P0.7连接到一个共阴数码管的a-h的笔段上,数码管的公共端接地。
在数码管上循环显示0-9数字,时间间隔1秒。
三、设计思路
1、先用C语言编写好0~9循环的程序
2、用Proteus画好电路图
3、用Proteus检测程序是不是正确
4、再用硬件根据Proteus所画的电路图进行实物连接
5、实物模拟LED数码管显示0~9循环程序
四、显示原理
1、LED数码显示器是由若干个发光二极管组成的,当发光二极管导通时,相应的点或线断发光,将这些二极管排成一定图形,控制不同组合的二极管导通,就可以显示出不同的字形。
2、八段显示器
数码管分共阳极和共阴极,内部原理结构如图所示。
本次使用的是共阴极数码管。
3、流程图
数码管显示程序流程如图所示。
数码管显示程序流程图
五、电路图
六、程序
#include <reg51.H>
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char dispcount;
void delay02s(void)
{
unsigned int i,j,k;
for(i=10;i>0;i--)
for(j=100;j>0;j--)
for(k=124;k>0;k--);
}
void main(void)
{
while(1)
{
for(dispcount=0;dispcount<10;dispcount++)
{
P0=table[dispcount];
delay02s();
}
}
}
七、程序仿真图
八、总结
经过本次的课题研究使我对C语言的操作更加的娴熟了,并能解决一般碰到的难题。
给数码管上电时电压过大,导致数码管有电,但是不会亮,后来加了上拉电阻后就行了,其作用是稳定电流。