当前位置:首页 » 编程语言 » c语言系列使用方法
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言系列使用方法

发布时间: 2022-07-05 20:04:11

A. c语言中%d系列字符的使用

可以吧,尝试把格式控制字符串放在一个变量中试试看,我从来没有写过这样的代码,但是在汇编中用过类似的格式控制,不过我这个字符串变量中存放的也是个常量字符串。


不知道这个思路是否可行,你试试看吧,通过修改字符串变量,来控制输出格式


以下是汇编代码:

invokewsprintf,addr@szBuffer,addrszFormat,_dwCommandID

其中szFormat变量就是一个格式字符串


int__cdeclwsprintf(_Out_LPTSTRlpOut,_In_LPCTSTRlpFmt,_In_...);


这个是函数原型,第二个参数就是格式字符串,是个指针类型数据,所以上面的例子用的是变量的地址

B. C语言怎么用

头文件~~~

C/C++是指C语或C++,是指一系列的语言
C和C++的关系:
好比是win98跟winXP的关系。C++是在C的基础上增加了新的理论,玩出了新的花样。所以叫C加加。

C和C++的区别:
C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。
C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

再引用高手一些话:
C++与C有什么不同呢?我们现在一步步地来分析一下
一、类,类对于初学者,它是一个累赘。类的封装使得初学者对程序产生厌倦,感到不适和麻烦。
二、引用,引用是C++中最好尽量不要用它,除非万不得已。引用对于初学者就更容易产生混淆,不知道哪个是引用,哪个是变量。
三、函数的重载,初学者学函数的重载好像没什么坏处,但是,这会使初学者潜意识里对C语言的变量类型的重要性产生淡化,要记住C语言是对变量类型最敏感了的,变量的类型在C语言里的重要性是不言而喻的。
四、流操作符,和上面同样的道理,使得对变量类型的重要性产生淡化,有时会产生使初学者莫名其妙的结果。
五、操作符重载,典型的高级应用,初学者可能根本用不着,这个东东会让他们觉得C++很难,门槛高,看不懂。
六、继承,以及虚函数,看起来深奥,实用价值很低。还有些东东我就不发表评论了,如:new,delete操作符等
七、误区:以问答形式:
问:C++是面向对象化的而C是面向过程化的?
答:第二对,第一问错,C++并非完全面向对象化,真正的面向对象化的语言恐怕只有Java才算得上。
问:C++能实现C所不能的功能吗?
答:至少我还没有发现
问:学了C再学C++有障碍吗?比如程序设计思想
答:至少我还没有看见谁有此症状。
问:学了C再学C++又要重头开始吗?
答:不,C++下可以实现C语言的一切功能。
问:我学完了C一定还要学C++才能编程吗?
答:完全没必要。
问:C++比C好在哪里?
答:更加符合软件工程学
问:学完了C再学C++是不是很容易?
答:那要看你是不是真正的学完了C语言。

希望你能对C/C++概念上有所了解。

C. 如何用c语言进行编辑运行和保存用那几个命令

TC2.0
(1)、File(文件)菜单
按Alt+F可进入File菜单, 该菜单包括以下内容:
.Load(加载)
装入一个文件, 可用类似DOS的通配符(如*.C)来进行列表选择。也可装入其它
扩展名的文件, 只要给出文件名(或只给路径)即可。该项的热键为F3, 即只要在主
菜单中按F3即可进入该项, 而不需要先进入File菜单再选此项。
.Pick(选择)
将最近装入编辑窗口的8个文件列成一个表让用户选择, 选择后将该程序装入
编辑区, 并将光标置在上次修改过的地方。其热健为Alt-F3。
.New(新文件)
说明文件是新的, 缺省文件名为NONAME.C, 存盘时可改名。
.Save(存盘)
将编辑区中的文件存盘, 若文件名是NONAME.C时, 将询问是否更改文件名, 其
热键为F2。

(2)、Edit(编辑)菜单
按Alt+E可进入编辑菜单, 若再回车, 则光标出现在编辑窗口, 此时用户可以
进行文本编辑。

(3)Run(运行)菜单
按Alt+R可进入Run菜单, 该菜单有以下各项:
.Run(运行程序)
运行由Project/Project name项指定的文件名或当前编辑区的文件。如果对上
次编译后的源代码未做过修改, 则直接运行到下一个断点(没有断点则运行到结束)。
否则先进行编译、连接后才运行, 其热键为Ctrl+F9。

(4)、Compile(编译)菜单
按Alt+C可进入Compile菜单, 该菜单有以下几个内容:
.Compile to OBJ(编译生成目标码)
将一个C源文件编译生成.OBJ目标文件, 同时显示生成的文件名。其热键为
Alt+F9。

具体见这篇文章
http://www.cnblogs.com/lyss/archive/2006/06/22/432613.html
Turbo C 2.0集成开发环境的使用

进入Turbo C 2.0集成开发环境中后, 屏幕上显示:
——————————————————————————————
File Edit Run Compile Project Options Debug Break/watch
┌————————————Edit——————————————┐
│ Line 1 Col 1 Insert Indent Tab File Unindent c:NONAME.C│
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│—————————Message——————————————— │
│ │
│ │
└————————————————————————————┘
F1-Help F5-Zoom F6-Switch F7-Trace F8-Step F9-Make F10-Menu
———————————————————————————————
其中顶上一行为Turbo C 2.0 主菜单, 中间窗口为编辑区, 接下来是信息窗
口, 最底下一行为参考行。这四个窗口构成了Turbo C 2.0的主屏幕, 以后的编程、
编译、调试以及运行都将在这个主屏幕中进行。下面详细介绍主菜单的内容。

1 主菜单

主菜单 在Turbo C 2.0主屏幕顶上一行, 显示下列内容:
File Edit Run Compile Project Options Debug Break/watch
除Edit外, 其它各项均有子菜单, 只要用Alt加上某项中第一个字母(即大写字
母), 就可进入该项的子菜单中。
(1)、File(文件)菜单
按Alt+F可进入File菜单, 该菜单包括以下内容:
.Load(加载)
装入一个文件, 可用类似DOS的通配符(如*.C)来进行列表选择。也可装入其它
扩展名的文件, 只要给出文件名(或只给路径)即可。该项的热键为F3, 即只要在主
菜单中按F3即可进入该项, 而不需要先进入File菜单再选此项。
.Pick(选择)
将最近装入编辑窗口的8个文件列成一个表让用户选择, 选择后将该程序装入
编辑区, 并将光标置在上次修改过的地方。其热健为Alt-F3。
.New(新文件)
说明文件是新的, 缺省文件名为NONAME.C, 存盘时可改名。
.Save(存盘)
将编辑区中的文件存盘, 若文件名是NONAME.C时, 将询问是否更改文件名, 其
热键为F2。
.Write to(存盘)
可由用户给出文件名将编辑区中的文件存盘, 若该文件已存在, 则询问要不要
覆盖。
.Directory(目录)
显示目录及目录中的文件, 并可由用户选择。
.Change dir(改变目录)
显示当前目录, 用户可以改变显示的目录。
.Os shell(暂时退出)
暂时退出Turbo C 2.0到DOS提示符下, 此时可以运行DOS 命令, 若想回到
Turbo C 2.0中, 只要在DOS状态下键入EXIT即可。
.Quit(退出)
退出Turbo C 2.0, 返回到DOS操作系统中, 其热键为Alt+X。

说明:
以上各项可用光标键移动色棒进行选择, 回车则执行。也可用每一项的第一个
大写字母直接选择。若要退到主菜单或从它的下一级菜单列表框退回均可用Esc键,
Turbo C 2.0所有菜单均采用这种方法进行操作, 以下不再说明。
(2)、Edit(编辑)菜单
按Alt+E可进入编辑菜单, 若再回车, 则光标出现在编辑窗口, 此时用户可以
进行文本编辑。
编辑方法基本与wordstar相同, 可用F1键获得有关编辑方法的帮助信息。
与编辑有关的功能键如下:
F1 获得Turbo C 2.0编辑命令的帮助信息
F5 扩大编辑窗口到整个屏幕
F6 在编辑窗口与信息窗口之间进行切换
F10 从编辑窗口转到主菜单
编辑命令简介:
PageUp 向前翻页
PageDn 向后翻页
Home 将光标移到所在行的开始
End 将光标移到所在行的结尾
Ctrl+Y 删除光标所在的一行
Ctrl+T 删除光标所在处的一个词
Ctrl+KB 设置块开始
Ctrl+KK 设置块结尾
Ctrl+KV 块移动
Ctrl+KC 块拷贝
Ctrl+KY 块删除
Ctrl+KR 读文件
Ctrl+KW 存文件
Ctrl+KP 块文件打印
Ctrl+F1 如果光标所在处为Turbo C 2.0库函数, 则获得有关该函数的帮助
信息
Ctrl+Q[ 查找Turbo C 2.0双界符的后匹配符
Ctrl+Q] 查找Turbo C 2.0双界符的前匹配符

说明:
a. Turbo C 2.0的双界符包括以下几种符号:
花括符 {和}
尖括符 <和>
圆括符 (和)
方括符 [和]
注释符 /*和*/
双引号 "
单引号 '
b. Turbo C 2.0在编辑文件时还有一种功能, 就是能够自动缩进, 即光标定位
和上一个非空字符对齐。在编辑窗口中, Ctrl+OL为自动缩进开关的控制键。
(3)Run(运行)菜单
按Alt+R可进入Run菜单, 该菜单有以下各项:
.Run(运行程序)
运行由Project/Project name项指定的文件名或当前编辑区的文件。如果对上
次编译后的源代码未做过修改, 则直接运行到下一个断点(没有断点则运行到结束)。
否则先进行编译、连接后才运行, 其热键为Ctrl+F9。
.Program reset(程序重启)
中止当前的调试, 释放分给程序的空间, 其热键为Ctrl+F2。
.Go to cursor(运行到光标处)
调试程序时使用, 选择该项可使程序运行到光标所在行。光标所在行必须为一
条可执行语句, 否则提示错误。其热键为F4。
.Trace into(跟踪进入)
在执行一条调用其它用户定义的子函数时, 若用Trace into项, 则执行长条将
跟踪到该子函数内部去执行, 其热键为F7。
.Step over(单步执行)
执行当前函数的下一条语句, 即使用户函数调用, 执行长条也不会跟踪进函数
内部, 其热键为F8。
.User screen(用户屏幕)
显示程序运行时在屏幕上显示的结果。其热键为Alt+F5。

(4)、Compile(编译)菜单
按Alt+C可进入Compile菜单, 该菜单有以下几个内容:
.Compile to OBJ(编译生成目标码)
将一个C源文件编译生成.OBJ目标文件, 同时显示生成的文件名。其热键为
Alt+F9。
.Make EXE file(生成执行文件)
此命令生成一个.EXE的文件, 并显示生成的.EXE文件名。其中.EXE文件名是下
面几项之一。
a. 由Project/Project name说明的项目文件名。
b. 若没有项目文件名, 则由Primary C file说明的源文件。
c. 若以上两项都没有文件名, 则为当前窗口的文件名。
.Link EXE file(连接生成执行文件)
把当前.OBJ文件及库文件连接在一起生成.EXE文件。
.Build all(建立所有文件)
重新编译项目里的所有文件, 并进行装配生成.EXE文件。该命令不作过时检查
(上面的几条命令要作过时检查, 即如果目前项目里源文件的日期和时间与目标文
件相同或更早, 则拒绝对源文件进行编译)。
.Primary C file(主C文件)
当在该项中指定了主文件后, 在以后的编译中, 如没有项目文件名则编译此项
中规定的主C文件, 如果编译中有错误, 则将此文件调入编辑窗口, 不管目前窗口
中是不是主C文件。
.Get info(获得有关当前路径、源文件名、源文件字节大小、编译中的错误数
目、可用空间等信息。
(5)、Project(项目)菜单
按Alt+P可进入Project菜单, 该菜单包括以下内容:
.Project name(项目名)
项目名具有.PRJ的扩展名, 其中包括将要编译、连接的文件名。例如有一个程
序由file1.c, file2.c, file3.c组成, 要将这3个文件编译装配成一个file.exe的
执行文件, 可以先建立一个file.prj的项目文件, 其内容如下:
file1.c
file2.c
file3.c
此时将file.prj放入Project name项中, 以后进行编译时将自动对项目文件中
规定的三个源文件分别进行编译。然后连接成file.exe文件。
如果其中有些文件已经编译成.OBJ文件, 而又没有修改过, 可直接写上.OBJ扩
展名。此时将不再编译而只进行连接。
例如: file1.obj
file2.c
file3.c
将不对file1.c进行编译, 而直接连接。
说明:

当项目文件中的每个文件无扩展名时, 均按源文件对待, 另外, 其中的文件也
可以是库文件, 但必须写上扩展名.LIB。
.Break make on(中止编译)
由用户选择是否在有Warining(警告)、Errors(错误)、Fatal Errors( 致命错
误)时或Link(连接)之前退出Make编译。
.Auto dependencies(自动依赖)
当开关置为on, 编译时将检查源文件与对应的.OBJ文件日期和时间, 否则不进
行检查。
.Clear project(清除项目文件)
清除Project/Project name中的项目文件名。
.Remove messages(删除信息)
把错误信息从信息窗口中清除掉。
(6)、Options(选择菜单)
按Alt+O可进入Options菜单, 该菜单对初学者来说要谨慎使用。
.Compiler(编译器)
本项选择又有许多子菜单, 可以让用户选择硬件配置、存储模型、调试技术、
代码优化、对话信息控制和宏定义。这些子菜单如下:
Model
共有Tiny, small, medium, compact, large, huge 六种不同模式可由同户选
择。
Define
打开一个宏定义框, 同户可输入宏定义。多重定义可同分号, 赋值可用等号。
Code generation
它又有许多任选项, 这些任选项告诉编译器产生什么样的目标代码。
Calling convention 可选择C或Pascal方式传递参数。
Instruction set 可选择8088/8086或80186/80286指令系列。
Floating point 可选择仿真浮点、数学协处理器浮点或无浮点运算。
Default char type 规定char的类型。
Alignonent 规定地址对准原则。
Merge plicate strings 作优化用, 将重复的字符串合并在一起。
Standard stack frame 产生一个标准的栈结构。
Test stack overflow 产生一段程序运行时检测堆栈溢出的代码。
Line number 在.OBJ文件中放进行号以供调试时用。
OBJ debug information 在.OBJ文件中产生调试信息。
Optimization
Optimize for 选择是对程序小型化还是对程序速度进行优
化处理。
Use register variable 用来选择是否允许使用寄存器变量。
Register optimization 尽可能使用寄存器变量以减少过多的取数操
作。
Jump optimization 通过去除多余的跳转和调整循环与开关语句
的办法, 压缩代码。
Source
Indentifier length 说明标识符有效字符的个数, 默认为32个。
Nested comments 是否允许嵌套注释。
ANSI keywords only 是只允许ANSI关键字还是也允许Turbo C
2.0关键字
Error
Error stop after 多少个错误时停止编译, 默认为25个。
Warning stop after 多少个警告错误时停止编译, 默认为100个。
Display warning
Portability warning 移植性警告错误。
ANSI Violations 侵犯了ANSI关键字的警告错误。
Common error 常见的警告错误。
Less common error 少见的警告错误。
Names 用于改变段(segment)、 组( group) 和类
(class)的名字, 默认值为CODE,DATA,BSS。

.Linker(连接器)
本菜单设置有关连接的选择项, 它有以下内容:
Map file menu 选择是否产生.MAP文件。
Initialize segments 是否在连接时初始化没有初始化的段。
Devault libraries 是否在连接其它编译程序产生的目标文件时去寻
找其缺省库。
Graphics library 是否连接graphics库中的函数。
Warn plicate symbols 当有重复符号时产生警告信息。
Stack warinig 是否让连接程序产生No stack的警告信息。
Case-sensitive link 是否区分大、小写字。

.Environment(环境)
本菜单规定是否对某些文件自动存盘及制表键和屏幕大小的设置
Message tracking
Current file 跟踪在编辑窗口中的文件错误。
All files 跟踪所有文件错误。
Off 不跟踪。
Keep message 编译前是否清除Message窗口中的信息。
Config auto save 选on时, 在Run, Shell或退出集成开发环境之前,
如果Turbo C 2.0的配置被改过, 则所做的改动
将存入配置文件中。选off时不存。
Edit auto save 是否在Run或Shell之前, 自动存储编辑的源文件。
Backup file 是否在源文件存盘时产生后备文件(.BAK文件)。
Tab size 设置制表键大小, 默认为8。
Zoomed windows 将现行活动窗口放大到整个屏幕, 其热键为F5。
Screen size 设置屏幕文本大小。

.Directories(路径)
规定编译、连接所需文件的路径, 有下列各项:
Include directories 包含文件的路径, 多个子目录用";"分开。
Library directories 库文件路径, 多个子目录用";"分开。
Output directoried 输出文件(.OBJ, .EXE, .MAP文件)的目录。
Turbo C directoried Turbo C 所在的目录。
Pick file name 定义加载的pick文件名, 如不定义则从current
pick file中取。

.Arguments(命令行参数)
允许用户使用命令行参数。

.Save options(存储配置)
保存所有选择的编译、连接、调试和项目到配置文件中, 缺省的配置文件为
TCCONFIG.TC。

.Retrive options
装入一个配置文件到TC中, TC将使用该文件的选择项。
(7)、Debug(调试)菜单
按Alt+D可选择Debug菜单, 该菜单主要用于查错, 它包括以下内容:
Evaluate
Expression 要计算结果的表达式。
Result 显示表达式的计算结果。
New value 赋给新值。
Call stack 该项不可接触。而在Turbo C debuger 时用于检
查堆栈情况。
Find function 在运行Turbo C debugger时用于显示规定的函数。
Refresh display 如果编辑窗口偶然被用户窗口重写了可用此恢复
编辑窗口的内容。

(8)、Break/watch(断点及监视表达式)
按Alt+B可进入Break/watch菜单, 该菜单有以下内容:
Add watch 向监视窗口插入一监视表达式。
Delete watch 从监视窗口中删除当前的监视表达式。
Edit watch 在监视窗口中编辑一个监视表达式。
Remove all watches 从监视窗口中删除所有的监视表达式。
Toggle breakpoint 对光标所在的行设置或清除断点。
Clear all breakpoints 清除所有断点。
View next breakpoint 将光标移动到下一个断点处。

VC之类的IDE就简单多了。

VC compiler ctrl + F7
build F7
buildexecute ctrl + F5

D. C语言的入门

怎么样学好C语言?!
很多人对学习C语言感到无从下手,经常问我同一个问题:究竟怎样学习C语言?我是一个教师,已经开发了很多年的程序,和很多刚刚起步的人一样,学习的第一个计算机语言就是C语言。经过这些年的开发,我深深的体会到C语言对于一个程序设计人员多么的重要,如果不懂C语言,你想写底层程序这几乎听起来很可笑,不懂C语言,你想写出优秀高效的程序,这简直就是天方夜谭。为什么C语言如此重要呢?

第一:C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。
第二:C语言能够让你深入系统底层,你知道的操作系统,哪一个不是[size=2C语言写的?所有的windows,Unix,Linux,Mac,os/2,没有一个里外的,如果你不懂C语言,怎么可能深入到这些操作系统当中去呢?更不要说你去写它们的内核程序了。
第三:很多新型的语言都是衍生自C语言,C++,Java,C#,J#,perl...哪个不是呢?掌握了C语言,可以说你就掌握了很多门语言,经过简单的学习,你就可以用这些新型的语言去开发了,这个再一次验证了C语言是程序设计的重要基础。还有啊,多说一点:即使现在招聘程序员,考试都是考C语言,你想加入it行业,那么就一定要掌握好C语言。

那么究竟怎样学习C语言呢?

1:工欲善其事,必先利其器
这里介绍几个学习C语言必备的东东:
一个开发环境,例如turbo?C?2.0,这个曾经占据了DOS时代开发程序的大半个江山。但是现在windows时代,用turbo?C有感觉不方面,编辑程序起来很吃力,并且拖放,更没有函数变量自动感应功能,查询参考资料也不方便。建议使用Visual C++,这个东西虽然比较大块头,但是一旦安装好了,用起来很方便。

一本学习教程,现在C语言教材多如牛毛,但推荐大家使用《C语言程序设计》谭浩强主编,此书编写的很适合初学者,并且内容也很精到。
除此以外,现在有很多辅助学习的软件,毕竟现在是Window时代了,学习软件多如牛毛,不象我们当初学习,只有读书做题这么老套。我向大家推荐一个“集成学习环境(C语言)”,里边的知识点总结和例程讲解都非常好,还有题库测试环境,据说有好几千题,甚至还有一个windows下的trubo?C,初学者甚至不用装其它的编译器,就可以练习编程了,非常适合初学者。还有一个“C语言学习系统”软件,不过感觉只是一个题库系统,如果你觉得题做的不够,不妨也可以试试。

2:葵花宝典
学习计算机语言最好的方法是什么?答曰:读程序。
没错,读程序是学习C语言入门最快,也是最好的方法。如同我,现在学习新的J#,C#等其他语言,不再是抱着书本逐行啃,而是学习它们的例程。当然,对于没有学过任何计算机语言的初学者,最好还是先阅读教程,学习完每一章,都要认真体会这一章的所有概念,然后不放过这一章中提到的所有例程,然后仔细研读程序,直到每一行都理解了,然后找几个编程题目,最好是和例程类似的或一样的,自己试图写出这段已经读懂的程序,不要以为例程你已经读懂了,你就可以写出和它一样的程序,绝对不一定,不相信你就试一试吧,如果写不出来,也不要着急,回过头来再继续研究例程,想想自己为什么写不出来,然后再去写这段程序,反反复复,直到你手到擒来为止,祝贺你,你快入门了。

3:登峰造极
写程序的最高境界其实就是掌握各种解决问题的手段(数据结构)和解决问题的方法(算法)。?
是不是写出底层程序就是程序设计高手呢?非也,写底层程序,无非是掌握了硬件的结构,况且硬件和硬件还不一样,要给一个芯片写驱动程序,无非就是掌握这块芯片的各种寄存器及其组合,然后写值读值,仅此而已。这不过是熟悉一些io函数罢了。

那么怎样才算精通程序设计呢?怎样才能精通程序设计呢?举个例子:你面前有10个人,找出一个叫“张三”的人,你该怎么办?第一种方法:直接对这10个人问:“谁叫张三”。第2种方法:你挨个去问“你是不是张三?”,直到问到的这个人就是张三。第三种方法:你去挨个问一个人“你认不认识张三,指给我看”。不要小看这个问题,你说当然会选第一种方法,没错恭喜你答对了,因为这个方法最快,效率最高,但是在程序设计中找到解决问题的最优方法和你用的手段却是考验一个程序员程序设计水平的重要标志,而且是不容易达到的。刚才这个问题类似于数据结构和算法中的:Map数据结构,穷举查找和折半查找。所以掌握好数据结构和一些常用算法,是登峰造极的必然之路。

E. c语言一系列

第一个问题有很多方法。
给你介绍1个吧。
1。加个头文件
windows.h
在程序就最后加句:system("pause");
第二个问题
用到文件。
定义一个文件指针
FILE
*fp;
然后fopen()还是指向。并且用写的方式打开。
就可以写了。
你自个查一下。要是不会的话。
我明天给你写。今儿个晚了。睡咯。

F. 关于C语言入门

na ni 那你就好好雪白

G. C语言入门知识

char a[20],b[20],c[20];上面的a,b,c都是数组变量,在定义时已经为其分配栈内存,而char (*str1)[20],(*str2)[20],(*str3)[20]; 只是分配了4个字节的内存来保存指针变量(即变量本身),而指针的值(即指向)还没有,所以这些指针还不能保存数据!--------------char (*str1)[20],(*str2)[20],(*str3)[20]; str1 str2 str3均为指针,都指向长度为20的char数组.你只定义了指针,但是没有对其进

H. C语言编程(用两种不同的方法,谢谢)

这是采用用结构体

#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#define mycpy(x,y) {strcpy(x.id,y.id);strcpy(x.name,y.name);}
typedef struct student
{
char name[8];//姓名
char id[10];//学号
}student;
student *s;//定义全局变量
int n ;
void sort(student * s,int n)//冒泡从小到大排序
{
int i,j,flag=1;
student temp;
for(i=0;i<n && flag;i++)
{
flag=0;
for(j=0;j<n-1;j++)
{
if(strcmp(s[j].id,s[j+1].id) > 0)
{
flag=1;
mycpy(temp,s[j]);
mycpy(s[j],s[j+1]);
mycpy(s[j+1],temp);
}
}
}
}
void input(student *s,int n)
{
int i;
printf("请输入学生人数:");
scanf("%d",&n);
s=(student *)malloc(sizeof(student)*n);//动态开辟空间
for(i=0;i<n;i++)
{
printf("请输入第%d个学生的姓名:",i+1);
gets(s[i].name);
printf("请输入第%d个学生的学号:",i+1);
gets(s[i].id);
}
}
void output(student *s,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("请输入第%d个学生的姓名:%s\n",i+1,s[i].name);
printf("请输入第%d个学生的学号:%s\n",i+1,s[i].id);
}
}
int del_id(student *s,char *id,int n)//根据学号删除
{
int i,j;
for(i=0;i<n;i++)
{
if(strcmp(id,s[i].id) == 0)
{
for(j=i;j<n;j++)
{
mycpy(s[j],s[j+1]);
}
n--;//总人数减少一个
break;
}
}
}
void del_name(student *s,char *name,int n)//根据姓名删除
{
int i,j;
for(i=0;i<n;i++)
{
if(strcmp(name,s[i].id) == 0)
{
for(j=i;j<n;j++)
{
mycpy(s[j],s[j+1]);
}
n--;//总人数减少一个
break;
}
}
}
int main()
{
input(s,n);//输入
sort(s,n);//排序
output(s,n);//输出
del_id(s,"",n);//根据学号删除
del_name(s,"",n);//根据姓名删除
system("pause");
return 0;
}

I. C语言sort函数如何使用

C语言中没有预置的sort函数。如果在C语言中,遇到有调用sort函数,就是自定义的一个函数,功能一般用于排序。

一、可以编写自己的sort函数。

如下函数为将整型数组从小到大排序。

voidsort(int*a,intl)//a为数组地址,l为数组长度。

{

inti,j;

intv;

//排序主体

for(i=0;i<l-1;i++)

for(j=i+1;j<l;j++)

{

if(a[i]>a[j])//如前面的比后面的大,则交换。

{

v=a[i];

a[i]=a[j];

a[j]=v;

}

}}

对于这样的自定义sort函数,可以按照定义的规范来调用。

二、C语言有自有的qsort函数。

功 能: 使用快速排序例程进行排序

头文件:stdlib.h

原型: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));

参数:

1 待排序数组首地址

2 数组中待排序元素数量

3 各元素的占用空间大小

4 指向函数的指针,用于确定排序的顺序

这个函数必须要自己写比较函数,即使要排序的元素是int,float一类的C语言基础类型。

以下是qsort的一个例子:

#include<stdio.h>

#include<stdlib.h>

intcomp(constvoid*a,constvoid*b)//用来做比较的函数。

{

return*(int*)a-*(int*)b;

}

intmain()

{

inta[10]={2,4,1,5,5,3,7,4,1,5};//乱序的数组。

inti;

qsort(a,n,sizeof(int),comp);//调用qsort排序

for(i=0;i<10;i++)//输出排序后的数组

{

printf("%d ",array[i]);

}

return0;

}

(9)c语言系列使用方法扩展阅读:

sort函数的用法(C++排序库函数的调用)

对数组进行排序,在c++中有库函数帮我们实现,这们就不需要我们自己来编程进行排序了。

(一)为什么要用c++标准库里的排序函数

Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高!

(二)c++标准库里的排序函数的使用方法

I)Sort函数包含在头文件为#include<algorithm>的c++标准库中,调用标准库里的排序方法可以不必知道其内部是如何实现的,只要出现我们想要的结果即可!

II)Sort函数有三个参数:

(1)第一个是要排序的数组的起始地址。

(2)第二个是结束的地址(最后一位要排序的地址的下一地址)

(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。

Sort函数使用模板:

Sort(start,end,排序方法)

下面就具体使用sort()函数结合对数组里的十个数进行排序做一个说明!

例一:sort函数没有第三个参数,实现的是从小到大

#include<iostream>

#include<algorithm>

using namespace std;

int main()

{

int a[10]={9,6,3,8,5,2,7,4,1,0};

for(int i=0;i<10;i++)

cout<<a[i]<<endl;

sort(a,a+11);

for(int i=0;i<10;i++)

cout<<a[i]<<endl;

return 0;

}

编译器

GCC,GNU组织开发的开源免费的编译器

MinGW,Windows操作系统下的GCC

Clang,开源的BSD协议的基于LLVM的编译器

Visual C++:: cl.exe,Microsoft VC++自带的编译器

集成开发环境

CodeBlocks,开源免费的C/C++ IDE

CodeLite,开源、跨平台的C/C++集成开发环境

Orwell Dev-C++,可移植的C/C++IDE

C-Free

Light Table

Visual Studio系列

Hello World

J. 学C语言编程有什么窍门吗

C程序设计》的内容很丰富,按照我们现在的教学大纲,教学的主要内容是基础知识、四种结构的的程序设计、函数与数组的应用和一些简单的算法。在学习时,同学们应该把主要精力放在这些部分,通过实践(练习和上机调试等熟练掌握。当然,在初学C语言时,可能会遇到有些问题理解不透,或者表达方式与以往数学学习中不同(如运算符等),这就要求不气馁,不明白的地方多问多想,鼓足勇气进行学习,待学完后面的章节知识,前面的问题也就迎刃而解了,这一方面我感觉是我们同学最欠缺,大多学不好的就是因为一开始遇到困难就放弃,曾经和好多同学谈他的问题,回答是听不懂、不想听、放弃这样三个过程,我反问,这节课你听过课吗?回答又是没有,根本就没听过课,怎么说自己听不懂呢?相应的根本就没学习,又谈何学的好?
学习C语言始终要记住“曙光在前头”和“千金难买回头看”,“千金难买回头看”是学习知识的重要方法,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识,这是我们学生最不易做到的,然而却又是最重要的。比如:在C语言中最典型的是关于结构化程序设计构思,不管是那种教材,一开始就强调这种方法,这时也许你不能充分体会,但是学到函数时,再回头来仔细体会,温故知新,理解它就没有那么难了。学习C语言就是要经过几个反复,才能前后贯穿,积累应该掌握的C知识。
那么,我们如何学好《C程序设计》呢?
一.学好C语言的运算符和运算顺序
这是学好《C程序设计》的基础,C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。在学习中,只要我们对此合理进行分类,找出它们与我们在数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用到时再记不迟。
先要明确运算符按优先级不同分类,《C程序设计》运算符可分为15种优先级,从高到低,优先级为1 ~ 15,除第2、3级和第14级为从右至左结合外,其它都是从左至右结合,它决定同级运算符的运算顺序。下面我们通过几个例子来说明:
(1) 5*8/4%10 这个表达式中出现3种运算符,是同级运算符,运算顺序按从左至右结合,因此先计算5 *8=40,然后被4除,结果为10,最后是%(求余数)运算,所以表达式的最终结果为10%10 = 0;
(2)a = 3;b = 5;c =++ a* b ;d =a + +* b;
对于c=++a*b来说,按表中所列顺序,+ +先执行,*后执行,所以+ + a执行后,a的值为4,由于+ +为前置运算,所以a的值4参与运算,C的值计算式为4*5=20而不是3*5=15了;而对于d=a++*b来说,由于a + +为后置运算,所以a值为4参与运算,使得d的值仍为20,而a参与运算后其值加1,值为5。 这个例子执行后,a的值为5,b的值为5,c的值为20,d的值也是20;
(3)(a = 3,b = 5,b+ = a,c = b* 5)
例子中的“,”是逗号结合运算,上式称为逗号表达式,自左向右结合,最后一个表达式的结果值就是逗号表达式的结果,所以上面的逗号表达式结果为40,a的值为3,b的值为8,c的值为40。
(4)a=5;b=6;c=a>b?a:b;
例中的a>b?a:b是一个三目运算,它的功能是先做关系运算a>b部分,若结果为真,则取问号后a的值,否则取冒号后b的值,因此c的值应该为6,这个运算可以用来代替if…else…语句的简单应用。

二.学好C语言的四种程序结构
(1)顺序结构
顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
例如;a = 3,b = 5,现交换a,b的值,这个问题就好象交换两个杯子水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为: c = a; a = b; b = c; 执行结果是a = 5,b = c = 3如果改变其顺序,写成:a = b; c = a; b = c; 则执行结果就变成a = b = c = 5,不能达到预期的目的,初学者最容易犯这种错误。 顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算,输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s = 3.14159*r*r,输出圆的面积s。不过大多数情况下顺序结构都是作为程序的一部分,与其它结构一起构成一个复杂的程序,例如分支结构中的复合语句、循环结构中的循环体等。
(2) 分支结构
顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。分支结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。程序流程图是根据解题分析所绘制的程序执行流程图。
学习分支结构不要被分支嵌套所迷惑,只要正确绘制出流程图,弄清各分支所要执行的功能,嵌套结构也就不难了。嵌套只不过是分支中又包括分支语句而已,不是新知识,只要对双分支的理解清楚,分支嵌套是不难的。下面我介绍几种基本的分支结构。
①if(条件)
{
分支体
}
这种分支结构中的分支体可以是一条语句,此时“”可以省略,也可以是多条语句即复合语句。它有两条分支路径可选,一是当条件为真,执行分支体,否则跳过分支体,这时分支体就不会执行。如:要计算x的绝对值,根据绝对值定义,我们知道,当x>=0时,其绝对值不变,而x<0时其绝对值是为x的反号,因此程序段为:if(x<0) x=-x;
②if(条件)

else

这是典型的分支结构,如果条件成立,执行分支1,否则执行分支2,分支1和分支2都可以是1条或若干条语句构成。如:求ax^2+bx+c=0的根
分析:因为当b^2-4ac>=0时,方程有两个实根,否则(b^2-4ac<0)有两个共轭复根。其程序段如下:

d=b*b-4*a*c;
if(d>=0)
{x1=(-b+sqrt(d))/2a;
x1=(-b-sqrt(d))/2a;
printf(“x1=%8.4f,x2=%8.4f\n”,x1,x2);
}
else
{r=-b/(2*a);
i =sqrt(-d)/(2*a);
printf(“x1=%8.4f+%8.4fi\n”r, i);
printf(“x2=%8.4f-%8.4fi\n”r,i)
}
③嵌套分支语句:其语句格式为:
if(条件1) ;
else if(条件2)
else if(条件3)
……
else if(条件n)
else
嵌套分支语句虽可解决多个入口和出口的问题,但超过3重嵌套后,语句结构变得非常复杂,对于程序的阅读和理解都极为不便,建议嵌套在3重以内,超过3重可以用下面的语句。
④switch开关语句:该语句也是多分支选择语句,到底执行哪一块,取决于开关设置,也就是表达式的值与常量表达式相匹配的那一路,它不同if…else 语句,它的所有分支都是并列的,程序执行时,由第一分支开始查找,如果相匹配,执行其后的块,接着执行第2分支,第3分支……的块,直到遇到break语句;如果不匹配,查找下一个分支是否匹配。这个语句在应用时要特别注意开关条件的合理设置以及break语句的合理应用。
(3)循环结构:
循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do –while循环和for循环。四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提倡用goto循环,因为强制改变程序的顺序经常会给程序的运行带来不可预料的错误,在学习中我们主要学习while、do…while、for三种循环。常用的三种循环结构学习的重点在于弄清它们相同与不同之处,以便在不同场合下使用,这就要清楚三种循环的格式和执行顺序,将每种循环的流程图理解透彻后就会明白如何替换使用,如把while循环的例题,用for语句重新编写一个程序,这样能更好地理解它们的作用。特别要注意在循环体内应包含趋于结束的语句(即循环变量值的改变),否则就可能成了一个死循环,这是初学者的一个常见错误。
在学完这三个循环后,应明确它们的异同点:用while和do…while循环时,循环变量的初始化的操作应在循环体之前,而for循环一般在语句1中进行的;while 循环和for循环都是先判断表达式,后执行循环体,而do…while循环是先执行循环体后判断表达式,也就是说do…while的循环体最少被执行一次,而while 循环和for就可能一次都不执行。另外还要注意的是这三种循环都可以用break语句跳出循环,用continue语句结束本次循环,而goto语句与if构成的循环,是不能用break和 continue语句进行控制的。
顺序结构、分支结构和循环结构并不彼此孤立的,在循环中可以有分支、顺序结构,分支中也可以有循环、顺序结构,其实不管哪种结构,我们均可广义的把它们看成一个语句。在实际编程过程中常将这三种结构相互结合以实现各种算法,设计出相应程序,但是要编程的问题较大,编写出的程序就往往很长、结构重复多,造成可读性差,难以理解,解决这个问题的方法是将C程序设计成模块化结构。
(4)模块化程序结构
C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的C程序编写,因此常说:C程序=主函数+子函数。 因些,对函数的定义、调用、值的返回等中要尤其注重理解和应用,并通过上机调试加以巩固。
三.掌握一些简单的算法
编程其实一大部分工作就是分析问题,找到解决问题的方法,再以相应的编程语言写出代码。这就要求掌握算法,根据我们的《C程序设计》教学大纲中,只要求我们掌握一些简单的算法,在掌握这些基本算法后,要完成对问题的分析就容易了。如两个数的交换、三个数的比较、选择法排序和冒泡法排序,这就要求我们要清楚这些算法的内在含义,其中选择法排序和冒泡法排序稍难,但只要明白排序的具体过程,对代码的理解就不难了。如用选择法对10个不同整数排序(从小到大),选择法排序思路:设有10个元素a[1]~a[10],将a[1]与a[2]~a[10]比较,若a[1]比a[2]~a[10]都小,则不进行交换,即无任何操作;若a[2]~a[10] 中有一个比a[1]小,则将其中最大的一个(假设为a[i])与a[1]交换,此时a[1]中存放了10个中最小的数。第二轮将a[2]与a[3]~a[10]比较,将剩下9个数中的最小者a[i]与a[2]交换,此时a[2] 中存放的10个数中第2小的数;依此类推,共进行9轮比较,a[1]到a[10]就已按从小到大的顺序存放。即每一轮都找出剩下数中的最小一个,代码如下:
for(i=1;i<=9;i++)
for(j=i+1;j<=10;j++)
if(a[i]>a[j]
{temp=a[i];
a[i]=a[j];
a[j]=temp;
}
结语:当我们把握好上述几方面后,只要同学们能克服畏难、厌学、上课能专心听讲,做好练习与上机调试,其实C语言并不难学。