❶ c语言程序设计
#include<stdio.h>
voidexchange(int*px,int*py);
intmain(void){
intx,y;
scanf("%d%d",&x,&y);
exchange(&x,&y);
printf("x=%d y=%d",x,y);
}
voidexchange(int*px,int*py){
inttemp;
temp=*px;
*px=*py;
*py=temp;
}
❷ c程序设计的作品目录
第1章 C 程序设计的初步知识
1.1 简单 C 程序的组成和格式
1.2 十进制整型数和实型数
1.2.1 常量
1.2.2 十进制整型常量
1.2.3 浮点常量
1.2.4 用定义一个符号名的方法来代表一个常量
1.3 标识符
1.3.1 关键字
1.3.2 预定义标识符
1.3.3 用户标识符
1.4 整型变量和实型变量
1.4.1 变量
1.4.2 整型变量
1.4.3 浮点型变量
1.4.4 给变量置初值
1.4.5 定义不可变的变量
1.5 可进行算术运算的表达式
1.5.1 基本的算术运算符
1.5.2 运算符的优先级与结合性和算术表达式
1.5.3 强制类型转换表达式
1.6 赋值表达式
1.6.1 赋值运算符和赋值表达式
1.6.2 复合的赋值表达式
1.6.3 赋值运算中的类型转换
1.7 自加、自减运算符和逗号运算符
1.7.1 自加运算符(++)和自减运算符(--)
1.7.2 逗号运算符和逗号表达式
习题
第2章 简单的C语句及其顺序程序结构
2.1 赋值语句
2.2 整型数和实型数的简单输入和输出语句
2.2.1 调用 printf 函数输出数据到终端
2.2.2 调用 scanf 函数从终端键盘输入数据
2.3 复合语句和空语句
2.3.1 复合语句
2.3.2 空语句
习题
第3章 分支结构
3.1 关系运算和逻辑运算
3.1.1 C 语言中的逻辑值
3.1.2 关系运算符和关系表达式
3.1.3 逻辑运算符和逻辑表达式
3.2 用if 语句构成的分支结构
3.2.1 if 语句
3.2.2 嵌套的 if 语句
3.3 由条件表达式构成的分支结构
3.4 由switch 语句和 break 语句构成的分支结构
3.4.1 switch 语句
3.4.2 switch 语句的执行过程
3.4.3 在 switch 语句体中使用 break 语句
习题
第4章 循环结构4
4.1 用for语句构成的循环结构
4.1.1 for 循环的一般形式?
4.1.2 for 循环的执行过程
4.1.3 有关 for 语句的说明
4.2 用while 语句构成的循环结构
4.2.1 while 循环的一般形式
4.2.2 while 循环的执行过程
4.3 用do-while语句构成的循环结构
4.3.1 do-while 循环的一般形式
4.3.2 do-while 循环的执行过程
4.4 循环结构的嵌套
4.5 几种循环结构的比较
4.6 break 和 continue 语句在循环体中的作用
4.6.1 break 语句
4.6.2 continue 语句
4.7 语句标号和 goto 语句
4.7.1 语句标号
4.7.2 goto 语句
4.8 程序举例
习题
第5章 函数的初步知识
5.1 库函数
5.2 函数的定义和返回值
5.2.1 函数定义的语法
5.2.2 函数的返回值
5.3 函数的调用
5.3.1 函数的两种调用方式
5.3.2 函数调用时的语法要求
5.4 调用函数和被调用函数之间的数据传递
5.5 函数原型的说明
5.5.1 函数原型的说明语句
5.5.2 函数原型说明语句的位置
5.6 程序举例
习题
第6章 算法和结构化程序设计
6.1 程序和程序设计
6.1.1 程序
6.1.2 程序设计
6.2 算法
6.3 结构化程序设计和模块化结构
6.3.1 结构化程序
6.3.2 模块化结构
6.4 怎样评价一个程序
习题
第7章 字符数据和字符数据处理
7.1 字符常量
7.1.1 常规字符常量
7.1.2 转义字符常量
7.1.3 可对字符量进行的运算
7.2 字符变量
7.3 字符的输入和输出
7.3.1 调用 printf 和 scanf 函数
7.3.2 调用 putchar 和 getchar 函数
7.3.3 调用 getche 和 putche 函数
7.3.4 调用 getch 和 putch 函数
7.4 程序举例
习题
第8章 地址和指针
8.1 什么是地址?什么是指针?
8.2 指针变量的定义和指针变量的基类型
8.3 给指针变量赋值
8.3.1 使指针指向一个对象
8.3.2 给指针变量赋“空”值
8.4 对指针变量的操作
8.4.1 通过指针或地址来引用一个存储单元
8.4.2 移动指针
8.4.3 指针比较
8.5 函数之间地址值的传递
8.5.1 地址或指针变量作为实参
8.5.2 在被调用函数中直接改变调用函数中的变量的值
8.5.3 函数返回地址值
习题?
第9章 一维数组
9.1 一维数组的定义和一维数组元素的引用
9.1.1 一维数组的定义
9.1.2 一维数组元素的引用
9.1.3 一维数组的初始化
9.1.4 通过赋初值定义数组的大小
9.2 一维数组的应用举例(一)
9.3 一维数组和指针
9.3.1 一维数组和数组元素的地址
9.3.2 通过数组的首地址引用数组元素
9.3.3 通过指针来引用一维数组元素
9.3.4 用指针带下标的形式引用一维数组元素
9.4 一维数组名或数组元素作实参
9.4.1 数组元素作实参
9.4.2 数组名作实参
9.4.3 数组元素地址作为实参
9.5 一维数组应用举例(二)
习题
第10章 二维数组
10.1 二维数组的定义和二维数组元素的引用
10.1.1 二维数组的定义
10.1.2 二维数组元素的引用
10.1.3 二维数组的初始化
10.1.4 通过赋初值定义二维数组的大小
10.2 二维数组的应用举例(一)
10.3 二维数组和指针?
10.3.1 二维数组和数组元素的地址
10.3.2 通过地址来引用二维数组元素
10.3.3 通过建立指针数组来引用二维数组元素
10.3.4 通过建立行指针来引用二维数组元素
10.4 通过建立指针数组和一维数组来构造二维数组
10.5 二维数组名和指针数组作为实参
10.5.1 二维数组名作为实参
10.5.2 指针数组作为实参
10.6 二维数组应用举例(二)
习题
第11章 字符串
11.1 用一维字符数组来存放字符串
11.1.1 通过赋初值的方式给一维字符数组赋字符串
11.1.2 在 C 程序执行过程中给一维字符数组赋字符串
11.2 使用指针指向一个字符串
11.2.1 通过赋初值的方式使指针指向字符串
11.2.2 通过赋值运算使指针指向字符串
11.2.3 用字符数组作为字符串和用指针指向的字符串之间的区别
11.3 字符串的输入和输出
11.3.1 输入和输出字符串时的必要条件
11.3.2 逐个字符输入和输出
11.3.3 用格式说明符“%s”进行整串输入和输出
11.3.4 调用 gets和puts 函数在终端按行输入输出字符
11.4 字符串数组
11.5 用于字符串处理的函数
11.6 程序举例
习题
第12章 对函数的进一步讨论
12.1 传给 main () 函数的参数
12.2 通过实参向函数传递函数名或指向函数的指针
12.3 函数的递归调用
习题
第13章 C语言中用户标识符的作用域和存储类
13.1 内部变量、外部变量和存储分类
13.1.1 用户标识符的作用域
13.1.2 内部变量、外部变量和存储分类
13.2 内部变量及其作用域和生存期
13.2.1 auto 变量
13.2.2 register 变量
13.2.3 静态存储类的内部变量
13.3 外部变量及其作用域和生存期
13.3.1 外部变量的作用域和生存期
13.3.2 在同一编译单位内使用extern说明符
13.3.3 在不同编译单位内使用extern说明符
13.3.4 静态外部变量
13.4 函数的存储分类
13.4.1 用 extern 说明函数
13.4.2 用 static 说明函数
13.5 在 Turbo C 集成环境下连接多个编译单位的方法
习题S
第14章 编译预处理
14.1 宏替换S
14.1.1 不带参数的宏定义
14.1.2 带参数的宏定义
14.1.3 终止宏定义
14.2 文件包含
14.3 条件编译
14.4 #line 行
习题
第15章 动态存储分配
15.1 malloc 函数和 free 函数
15.2 calloc 函数
15.3 realloc 函数
习题
第16章 结构体类型和用户定义类型
16.1 用 typedef 说明一种新类型名
16.2 结构体类型
16.3 结构体类型的说明
16.4 结构体类型的变量、数组和指针的定义
16.5 给结构体变量、数组赋初值
16.6 引用结构体类型变量中的数据
16.7 通过结构体组成较复杂的存储结构
16.8 函数之间结构体变量的数据传递
16.8.1 向函数传递结构体变量的成员
16.8.2 向函数传递结构体变量
16.8.3 传递结构体的地址
16.8.4 函数值为结构体类型
16.8.5 函数的返回值可以是指向结构体变量的指针类型
16.9 利用结构体变量构成链表
16.9.1 结构体中含有可以指向本结构体的指针成员
16.9.2 动态链表的概念
16.9.3 单向链表
16.9.4 单向环形链表
16.9.5 双向链表
习题
第17章 C 语言中的整型数和整型变量
17.1 十进制数和二、八、十六进制数之间的转换
17.1.1 十进制数和二进制数之间的转换
17.1.2 十进制数和八进制数之间的转换
17.1.3 十进制数和十六进制数之间的转换
17.1.4 二进制数与八进制数、十六进制数间的转换
17.2 整数在内存中的存储形式
17.2.1 正整数
17.2.2 负整数
17.2.3 无符号整数
17.3 C 语言中的整数类型
17.4 C 语言中的整数类型之间的转换
习题
第18章 共用体、位段结构和枚举类型
18.1 共用体
18.1.1 共用体类型的说明和变量定义
18.1.2 共用体变量的引用
18.1.3 共用体应用举例
18.2 位段结构
18.3 枚举类型
习题
第19章 位运算
19.1 位运算符和位运算
19.1.1 位运算符
19.1.2 位运算符的运算功能
19.2 位运算的简单应用
习题
第20章 在终端上按格式进行数据的输入和输出
20.1 调用 printf() 在终端上按格式进行数据的输出
20.1.1 printf() 函数的一般调用形式
20.1.2 printf () 函数中常用的格式说明
20.1.3 调用 printf (函数时的注意事项
20.2 调用 scanf() 在终端上按格式进行数据的输入
20.2.1 scanf() 函数的一般调用形式
20.2.2 scanf () 函数中常用的格式说明
20.2.3 通过 scanf 函数从键盘输入数据
习题
第21章 文件
21.1 文件的概念
21.2 文件指针
21.3 打开文件
21.4 关闭文件
21.5 getc(fgetc)函数和putc(fputc)函数
21.6 判文件结束函数 feof
21.7 fscanf 函数和fprintf函数
21.8 fgets函数和fputs函数
21.9 fread函数和fwrite函数
21.10 文件定位函数
21.10.1 fseek函数
21.10.2 ftell函数
21.10.3 rewind 函数
习题附录
附录A C 语言的关键字
附录B 双目算术运算中两边运算量类型转换规律
附录C 运算符的优先级和结合性
附录D 常用字符与 ASC Ⅱ代码对照表
附录E Turbo C 2.0 常用库函数
附录F 简单的上机操作和程序的调试
参考文献
张长海 陈娟 编
❸ 历史上最权威最经典的关于C语言的书是哪本
C程序设计之四书五经
自从Dennis M.Ritchie于1973年设计并实现C语言以来,计算机程序设计领域已经发生了巨大的变化。以C语言为根基的C++、Java和C#等面向对象语言相继诞生,并在各自领域大获成功。今天,C及其后裔几乎统治了计算机程序设计世界。可以这么说,C语言的诞生是现代程序语言革命的起点,它改变了程序设计语言发展的轨迹,是程序设计语言发展史中的一个里程碑。
然而,C并不仅仅是其他语言的起点和基础,否则它早已成为程序设计语言发展过程中又一个被遗弃者。和当初发明时一样,C语言今天依然至关重要。它的表达力、效率、简练、紧凑、对机器的最终控制以及跨平台的高度移植性,使其在系统编程、嵌入式编程等领域一直占据着统治地位,而C99标准的制订则再一次使C语言焕发出新的活力。下文介绍C程序设计领域中的几本好书,其中一些堪称经典。
1. Brian W.Kernighan, Dennis M.Ritchie,《C程序设计语言》,机械工业出版社
这是迄今为止在所有程序设计语言书籍中最广受尊敬的一部经典,是任何一名C程序员的必读之作。因为出自C语言的设计者Dennis M.Ritchie和着名的计算机科学家Brian W.Kernighan之手,它被昵称为“K&R C”。是它首先引入了“Hello World!”程序,这个程序几乎成了后来任何一本入门性程序设计语言书籍中的第一个例子。
如同C语言本身简洁紧凑而极具威力一样,这本书轻薄短小而极富张力。通过简洁的描述和典型的示例,它全面、系统、准确地讲述了C语言的各个特性以及C程序设计的基本方法,内容涵盖基本概念、类型和表达式、控制流、函数与程序结构、指针与数组、结构、输入与输出、UNIX系统接口以及标准库等内容。
简洁清晰是这本书最大的特色。这本小书可以教给你许多比它厚几倍的“大部头”的知识。我认为那些动辄洋洋洒洒拼凑出好几百页乃至上千页的技术作者应该好好向K&R学一学。对于中、高级程序员而言,如果希望迅速获得C语言的严肃知识而又不愿意多花费哪怕一丁点时间,这本书就是首选。
顺便说一句,这本书的索引制作非常出色,极具实用价值,这可能首先要归功于正文部分的简明扼要。此外,尽管它看上去很像一本教程,但其实更是一本写给专业程序员的指南。如果你不具备任何其他语言程序设计背景或基本的C语言知识,这本书也许并不适合用作你的C语言启蒙读物。
2. Perter Van Der LinDen,《C专家编程》,人民邮电出版社
C语言是严肃的程序员语言,但这并不意味着C语言书籍必须板着面孔说教。在这本被C程序员昵称为“鱼书”(封面上有一条“丑陋的”腔棘鱼)的着作中,作为SUN公司编译器和操作系统核心开发组成员之一,Peter淋漓尽致地展示了其深厚的技术沉淀、丰富的项目经验、高超的写作技巧以及招牌式的幽默。在这部作品中,作者以流畅的文字、诙谐的笔法将逸闻典故、智慧和幽默自然地融入技术描述中,读来宛若一本小说,极富趣味。
本书讲述了C语言的历史、语言特性、声明、数组、指针、连接、运行时以及内存使用等知识,揭示了C语言中许多隐晦之处,尤其深入解析了声明、数组和指针、内存使用等方面的细节。要想成为一名专家级C程序员,这些内容都是必须掌握的。和其他满是抽象例子的C语言书籍不同,这本书充满了大量的来自真实世界的C程序设计实例,它们对C程序员具有很高的参照价值。另外,每一章都以极富趣味的“轻松一下”收尾,而附录A“程序员工作面试的秘密”则是任何语言的程序员在应聘工作前增强自信的好材料。
我怀疑真正的C专家可能用不着看这本书 — 从内容到组织方式到行文风格都决定了这是一本轻松愉快的“从菜鸟到高手”的进阶读本,所以,它理应拥有更广泛的读者群。初级程序员往往更需要热情的鼓励,在阅读这本书的过程中,你定会深深地被作者对编程的激情所感染。
世间并无完美。我认为这本书的缺陷在于,和大多数平庸的C语言书籍一样,它画蛇添足地加入了一章关于C++的描述。在今天看来,这个描述既不全面也有失公允。不过,鉴于作者是在1994年从一名C程序员的角度去观察C++,这一点也就不足为奇了。
3. Samuel P. Harbison, Guy L. Steele,《C语言参考手册(第五版)》(影印版),人民邮电出版社
在C语言参考手册类书籍里,Samuel P. Harbison 和Guy L. Steele合着的《C: A Reference Manual》是非常出色的一本。这本手册的第五版新增了对C99标准的介绍,以便满足新时期C语言学习的需要。全书共分为两大部分,第一部分专注于C语言特性,第二部分则全面讨论了C标准库。本书涵盖C99、C89、传统的C、所有版本的C运行库以及编写与C++兼容的C代码等一切知识。
这本手册只是中等厚度,但它比“比它更厚”的其他参考手册更清晰地描述了C语言的现在和过去的方方面面。整本手册技术细节描述精确,组织条理清楚,内容完备详尽而又简明扼要。可以这么说,它在广度、深度和精度方面都是出类拔萃的。对于中、高级C程序员而言,这本手册值得常备案头,它几乎肯定要比K&R的着作使用频率更高。
2004年2月1日补充:我手头有这本书的中文版:《C语言参考手册》(机械工业出版社出版)。它在很大程度上减轻了我的查阅负担,不过偶尔也增加了理解上的困难。
4. David Hanson,《C语言接口与实现:创建可重用软件的技术》,机械工业出版社
C语言能够历经三十多年而不衰,一个重要的原因在于它的适应能力。在这“复用”、“面向对象”、“组件”、“异常处理”等先进机制漫天飞舞的年代,C语言仍然能够凭借它小而优雅的语言特性,在相当程度上满足现代软件体系架构提出的要求。只不过,想要达到这个程度,必须要在C的应用功力上达到最高层次。在嵌入式、系统软件以及对性能要求极高的系统开发中,开发人员必须达到这样的层次,熟练掌握C语言的高级特性,才能够同时满足效率和灵活性、复用性的要求。可惜,虽然C语言技术图书汗牛充栋,但是关注这个峰顶之域的作品却是屈指可数。David Hanson的《C Interfaces and Implementations》就是个中翘楚。
David Hanson是业内大名鼎鼎的自由编译器lcc的合作者。在这个项目中,他负责提供高度可复用的基础架构。在不断的实践中,他完全使用ANSI C形成了一整套可复用组件库。这套组件库架构清晰,性能优异,而且提供了很多高级的特性,比如类Win32 SEH的异常处理机制,可移植的线程库,高性能的内存池,丰富的可复用数据结构组件。David Hanson把他在创作这些组件的过程中所积累的心得以及对其源码的精致剖析原原本本地写在了这本书里。这样的着作,当然堪称C语言领域里的铭心绝品。难怪已故着名技术作家Richard Stevens对此书赞不绝口,他说:“这本书中的技术,对于大部分C程序员来说,已经遗忘得太久了。”对于希望能在C语言应用上达到最高层次的核心程序员而言,这本书是难得的必读之作。
其他
除了以上四本书以外,我还乐意推荐Andrew Koenig的着作《C陷阱和缺陷》(人民邮电出版社)和Deitel父子合着的《C How to Program》两本书。
Andrew Koenig是世界上屈指可数的C++专家,他的这本书可能是最薄的一本C语言经典。它简明扼要地讲述了C程序设计中的陷阱和缺陷,包括词法陷阱、语法陷阱、语义陷阱、连接、库函数、预处理器以及可移植性缺陷等,最后一章还给出了关于如何减少程序错误的建议以及前面各章问题的参考答案。尽管这个小册子成书于C89标准制定之前,然而,即使到了C99早已颁布的今天,书中提到的大多数陷阱和缺陷一如十五年前那样使我们警醒。
Deitel父子合着的《C How to Program》一直是非常好的C语言入门教程,我手头的中译本名为《C程序设计教程》(机械工业出版社出版,原书第二版)。除了对技术的正规描述(辅以许多简明扼要的例子)外,每一章后面都带有小结、术语、常见的程序设计错误、良好的程序设计习惯、性能忠告、可移植性忠告、软件工程评述、自我测验练习及答案等。整书内容清晰,组织良好,易于阅读和理解。值得一提的是,有许多入门书读完一遍即可扔掉,而这一本是个例外。
结语
以上这几本书很大程度上局限于描述C语言及标准库本身,如果希望学习更专业的、领域相关的C程序设计技术,你可以在选择阅读这几本书的基础上继续查阅专门书籍。此外,在C语言书籍领域,水平不相上下的作品有很多,这几本只是根据我自身的阅读体验而做出的推荐。
我并不是一名C程序员,我的大多数时间都花在C的后裔语言尤其是C++身上了。然而,正如你知道的那样,C++并不全是类和模板,不全是面向对象和泛型编程,在较低的层面,C++的各个实现一如既往在很大程度上兼容C。C++和C的亲密关系决定了每一本C语言经典都应该是C++程序员的读物。
这世界变化得真是太快。各色新事物层出不穷,让人眼花缭乱、目不暇接。人们也很容易被那些五光十色的花哨玩意儿所吸引,常常会忘记构筑过去、现在和未来的坚实基础。C语言就是这样的基础之一。今天,世界上有许多我们看不见的重要软件是用C语言(以及C++等)编写而成的,正是它们在默默地支撑着这个信息世界的运转。
❹ C语言设计程序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 3 /*定义常量SIZE便于以后的修改*/
struct student /*定义一个结构体数组存放学生的信息*/
{
int number; /*学号*/
char name[20];/*名字*/
char xueyuan[20];/*学院*/
int cla;/*班级*/
int score[3];/*分数*/
int sum;/*总分*/
int average;/*平均分*/
}stu[SIZE];
void menu();/*调用菜单函数*/
void write();/*读入信息*/
void save(int x);/*保存stud.dat文件函数*/
void SaveOneStudent(int i);/*保存一个学生信息*/
void SaveAllStudent(int n);/*保存全部学生信息*/
void inturn (struct student c[]);/*用于对学生的信息按学号排序的函数*/
void save2();/*将排序后的信息存入student.dat文件中*/
int AddStudent(int n);/*增加学生信息*/
void InputOnestudent(int i);/*输入一个同学信息*/
int DelStudent(int n);/*删除学生信息*/
void ModifyStudent(int n);/*修改学生信息*/
void OutputOneStudent(int i);/*查询一个学生信息*/
void SearchMenu(int n);/*查询学生信息操作*/
void SearchNumber(int n);/*按学号查询学生信息*/
void SearchName(int n);/*按姓名查询学生信息*/
void SearchXueyuan(int n);/*按所在学院查询学生信息*/
void SearchCla(int n);/*按所在班级查询学生信息*/
void tongji();/*学生信息统计操作*/
void tongji2();/*统计不及格率操作*/
void zfsc();/*总分排序操作*/
void avecz();/*按平均分统计人数操作*/
void avecz();/*按平均分统计人数操作*/
void search();/*查找最高成绩操作*/
void tongji2();/*统计不及格率操作*/
void read();/*读取student.dat文件文件中学生的信息*/
/*主函数************************************************************************************/
void main()
{
int n=SIZE;
int choice;/*用户选择变量*/
printf("*******************************************************************************\n");
printf("* *\n");
printf("* Hwadee &学生成绩文件管理& Hwadee *\n");
printf("* *\n");
printf("*******************************************************************************\n\n\n");
printf("******************************●●欢迎使用●●*********************************");
while (1)
{
menu();/*调用菜单函数形成操作界面*/
printf("请选择:");
scanf("%d", &choice);
if ( choice==0 )
{
printf("\t\t\t\t谢谢使用!!!");
break;
}
switch(choice) /*多重选择实现功能不同的功能*/
{
case 1:
write();
inturn(stu);
save(SIZE);
break;
case 2:
AddStudent(n);
break;
case 3:
DelStudent(n);
break;
case 4:
ModifyStudent(n);
break;
case 5:
SearchMenu(n);
break;
case 6:
tongji();
break;
case 0:
printf("\n谢谢使用!再见!\n");
default:
printf("\n按键错误!请重新选择!\n");
}/*结束switch*/
}/*结束while*/
}
部分程序清单
/*菜单函数*************************************************************************************/
void menu()
{
printf("************请输入所需操作***********\n");/*选择功能菜单*/
printf("*************************************\n");
printf("1.学生成绩写入及排序\n");
printf("2.增加学生信息\n");
printf("3.删除学生信息\n");
printf("4.修改学生信息\n");
printf("5.查询学生信息\n");
printf("6.学生成绩统计操作\n");
printf("0.退出系统\n");
printf("**************************************\n");
}
/*写入函数*************************************************************************************/
void write()
{
int i;/*计数变量*/
for(i=0;i<SIZE;i++)
{
printf("学号:");
scanf("%d",&stu[i].number);
printf("姓名:");
scanf("%s",&stu[i].number);
printf("学院:");
scanf("%s",&stu[i].xueyuan);
printf("班级:");
scanf("%d",&stu[i].cla);
printf("高数:");
scanf("%d",&stu[i].score[0]);
printf("英语:");
scanf("%d",&stu[i].score[1]);
printf("C语言:");
scanf("%d",&stu[i].score[2]);
stu[i].sum=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2]);/*计算总成绩*/
printf("总成绩:%d",stu[i].sum);
stu[i].average=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;/*计算平均成绩*/
printf("平均成绩:%d\n",stu[i].average);
}
}
/*排序函数**************************************************************************************/
void inturn(struct student m[])
{
int i,j;/*计数变量*/
struct student temp;/*中间变量 类型为结构体*/
for(i=0;i<SIZE-1;i++) /*运用冒泡排序对结构体数组进行排序*/
for (j=i+1;j<SIZE-i-1;j++)
{
if(m[i].number>m[j].number)
{
temp=m[i];
m[i]=m[j];
m[j]=temp;
}
}
printf("\n排序后的学生信息:\n\n");
for (i=0;i<SIZE;i++)
{
printf("学号%d\t姓名%s\t学院%s\t班级%d\t高数%d\t英语%d\tC语言%d\t总成绩%d\t平均成绩%d\n\n",i+1,stu[i].number,stu[i].name,stu[i].xueyuan,stu[i].cla,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].average);
}/*输出排序后的学生信息*/
}
/*写入文件*************************************************************************************/
void save(int x)
{
FILE *fp;/*定义文件指针用于向文件读入数据*/
int i;
if((fp=fopen("student.dat","rb+"))==NULL)/*以二进制读,写方式打开文件*/
{
printf("cannot open file\n");
exit(1);
}
附上出处链接:http://www.51hei.com/mcu/3212.html
❺ C语言程序设计
#include <stdio.h>
main()
{ int select,s1,s2;
int sum;
while (1) /*菜单循环显示和功能循环处理*/
{ printf("\n 欢迎使用简单计算系统!\n\n");/*菜单显示*/
printf("* * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("* 请选择查询对象: *\n");
printf("* 1.加 *\n");
printf("* 2.减 *\n");
printf("* 3.乘 *\n");
printf("* 4.除 *\n");
printf("* 5.谢谢使用,退出本系统! *\n");
INPUT:
printf("* * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" 请选择功能号1—5: ");
scanf("%d",&select);
s1=0;s2=0;
if(select==5) /*退出系统*/
break;
if(select>=6||select<=0) /*输入功能号有误处理*/
{ printf("* * * 输入有误,请重新功能号1-5:* * *\n");
goto INPUT;
}
//aver=0;
switch(select)
{ case 1: /*+功能*/
printf("两位数据\n");
scanf("%d%d",&s1,&s2);
sum=s1+s2;
printf("两数之和%d\n",sum);
break;
case 2: /*-功能*/
printf("两位数据\n");
scanf("%d%d",&s1,&s2);
sum=s1-s2;
printf("两数之差%d\n",sum);
break;
case 3: /**功能*/
printf("两位数据\n");
scanf("%d%d",&s1,&s2);
sum=s1*s2;
printf("两数之积%d\n",sum);
break;
case 4: /*/功能*/
printf("两位数据\n");
scanf("%d%d",&s1,&s2);
sum=s1/s2;
printf("两数之商%d\n",sum);
break;
default:break; } } }
给你个大致框架然后你自己添加语句。。。自己动手好了
❻ 学习C语言 必看的书籍
给C++初学者的50个忠告
1.把C++当成一门新的语言学习(和C没啥关系!真的。);
2.看《Thinking In C++》,不要看《C++变成死相》;
3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看;
4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言;
5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;
6.会用Visual C++,并不说明你会C++;
7.学class并不难,template、STL、generic programming也不过如此——难的是长期坚持实践和不遗余力的博览群书;
8.如果不是天才的话,想学编程就不要想玩游戏——你以为你做到了,其实你的C++水平并没有和你通关的能力一起变高——其实可以时刻记住:学C++是为了编游戏的;
9.看Visual C++的书,是学不了C++语言的;
10.浮躁的人容易说:XX语言不行了,应该学YY;——是你自己不行了吧!?
11.浮躁的人容易问:我到底该学什么;——别问,学就对了;
12.浮躁的人容易问:XX有钱途吗;——建议你去抢银行;
13.浮躁的人容易说:我要中文版!我英文不行!——不行?学呀!
14.浮躁的人容易问:XX和YY哪个好;——告诉你吧,都好——只要你学就行;
15.浮躁的人分两种:a)只观望而不学的人;b)只学而不坚持的人;
16.把时髦的技术挂在嘴边,还不如把过时的技术记在心里;
17.C++不仅仅是支持面向对象的程序设计语言;
18.学习编程最好的方法之一就是阅读源代码;
19.在任何时刻都不要认为自己手中的书已经足够了;
20.请阅读《The Standard C++ Bible》(中文版:标准C++宝典),掌握C++标准;
21.看得懂的书,请仔细看;看不懂的书,请硬着头皮看;
22.别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍;
23.请看《Effective C++》和《More Effective C++》以及《Exceptional C++》;
24.不要停留在集成开发环境的摇篮上,要学会控制集成开发环境,还要学会用命令行方式处理程序;
25.和别人一起讨论有意义的C++知识点,而不是争吵XX行不行或者YY与ZZ哪个好;
26.请看《程序设计实践》,并严格的按照其要求去做;
27.不要因为C和C++中有一些语法和关键字看上去相同,就认为它们的意义和作用完全一样;
28.C++绝不是所谓的C的“扩充”——如果C++一开始就起名叫Z语言,你一定不会把C和Z语言联系得那么紧密;
29.请不要认为学过XX语言再改学C++会有什么问题——你只不过又在学一门全新的语言而已;
30.读完了《Inside The C++ Object Model》以后再来认定自己是不是已经学会了C++;
31.学习编程的秘诀是:编程,编程,再编程;
32.请留意下列书籍:《C++面向对象高效编程(C++ Effective Object-Oriented Software Construction)》《面向对象软件构造(Object-Oriented Software Construction)》《设计模式(Design Patterns)》《The Art of Computer Programming》;
33.记住:面向对象技术不只是C++专有的;
34.请把书上的程序例子亲手输入到电脑上实践,即使配套光盘中有源代码;
35.把在书中看到的有意义的例子扩充;
36.请重视C++中的异常处理技术,并将其切实的运用到自己的程序中;
37.经常回顾自己以前写过的程序,并尝试重写,把自己学到的新知识运用进去;
38.不要漏掉书中任何一个练习题——请全部做完并记录下解题思路;
39.C++语言和C++的集成开发环境要同时学习和掌握;
40.既然决定了学C++,就请坚持学下去,因为学习程序设计语言的目的是掌握程序设计技术,而程序设计技术是跨语言的;
41.就让C++语言的各种平台和开发环境去激烈的竞争吧,我们要以学习C++语言本身为主;
42.当你写C++程序写到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个设计的完整性,然后分析自己的错误并重新设计和编写(参见43);
43.别心急,设计C++的class确实不容易;自己程序中的class和自己的class设计水平是在不断的编程实践中完善和发展的;
44.决不要因为程序“很小”就不遵循某些你不熟练的规则——好习惯是培养出来的,而不是一次记住的;
45.每学到一个C++难点的时候,尝试着对别人讲解这个知识点并让他理解——你能讲清楚才说明你真的理解了;
46.记录下在和别人交流时发现的自己忽视或不理解的知识点;
47.请不断的对自己写的程序提出更高的要求,哪怕你的程序版本号会变成Version 100.XX;
48.保存好你写过的所有的程序——那是你最好的积累之一;
49.请不要做浮躁的人;
50.请热爱C++!
建议你买本书,书比网上的电子版教程好的多,如计算机届超级权威教授 谭浩强 老先生写的《C语言程序设计(第三版)》,全国发行了700万册,可以说是学C语言的人必看的书,我们大学就用这本书,很适合自学,通俗易懂
建议你学习其它计算机知识时也看他的书,他出的书很多,涵盖面广,每一本都很经典
这里有他的教程word版下载
另外,机械工业出版社的 计算机丛书系列也相当经典,全是翻译国外经典教材,国外计算机发展早,水平比国内高很多,看这些教材事半功倍,推荐(美)Al Kelley Ira Pohl的《C语言教程第4版》
学习程序语言要持之以恒,不浮躁,祝你成功!
❼ c语言程序设计实例
// 电话本Dlg.cpp : 实现文件
//
#include stdafx.h
#include 电话本.h
#include 电话本Dlg.h
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// C电话本Dlg 对话框
C电话本Dlg::C电话本Dlg(CWnd* pParent /*=NULL*/)
: CDialog(C电话本Dlg::IDD, pParent)
{
m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);
}
void C电话本Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(C电话本Dlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_EN_CHANGE(IDC_EDIT1, C电话本Dlg::OnName)
ON_EN_CHANGE(IDC_EDIT2, C电话本Dlg::OnPhoto)
ON_EN_CHANGE(IDC_EDIT3, C电话本Dlg::OnAddress)
ON_EN_CHANGE(IDC_EDIT4, C电话本Dlg::OnShow)
ON_BN_CLICKED(IDC_BUTTON1, C电话本Dlg::OnFill)
ON_BN_CLICKED(IDC_BUTTON2, C电话本Dlg::OnInsert)
ON_BN_CLICKED(IDC_BUTTON3, C电话本Dlg::OnFind)
ON_BN_CLICKED(IDC_BUTTON4, C电话本Dlg::OnDelete)
ON_BN_CLICKED(IDC_BUTTON5, C电话本Dlg::OnEdit)
ON_BN_CLICKED(IDC_BUTTON7, C电话本Dlg::OnSave)
END_MESSAGE_MAP()
// C电话本Dlg 消息处理程序
BOOL C电话本Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
ifstream InFile(Wab.fsd,ios::in);
listWabList::iterator ItWab;
char Tmp1[8],Tmp2[16],Tmp3[32];
Wab.clear();
while(InFile Tmp1 Tmp2 Tmp3)
{
OutWab.Name=Tmp1;
OutWab.Photo=Tmp2;
OutWab.Address=Tmp3;
Wab.push_front(OutWab);
}
C电话本Dlg::OnFill();
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void C电话本Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_castWPARAM(dc.GetSafeHdc()), 0);
// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(rect);
int x = (rect.Width() - cxIcon 1) / 2;
int y = (rect.Height() - cyIcon 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标显示。
//
HCURSOR C电话本Dlg::OnQueryDragIcon()
{
return static_castHCURSOR(m_hIcon);
}
void C电话本Dlg::OnName()
{
CEdit *pMaxLen=(CEdit*)GetDlgItem(IDC_EDIT1);
pMaxLen-SetLimitText(6);
GetDlgItemText(IDC_EDIT1,InWab.Name);
}
void C电话本Dlg::OnPhoto()
{
CEdit *pMaxLen=(CEdit*)GetDlgItem(IDC_EDIT2);
pMaxLen-SetLimitText(11);
GetDlgItemText(IDC_EDIT2,InWab.Photo);
}
void C电话本Dlg::OnAddress()
{
CEdit *pMaxLen=(CEdit*)GetDlgItem(IDC_EDIT3);
pMaxLen-SetLimitText(30);
GetDlgItemText(IDC_EDIT3,InWab.Address);
}
void C电话本Dlg::OnShow()
{
// TODO: 如果该控件是 RICHEDIT 控件,则它将不会
// 发送该通知,除非重写 CDialog::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}
void C电话本Dlg::OnFill()
{
CString OutAll,OutTemp,Space,Enter;
Space=_T( );
Enter=_T(\r\n);
listWabList::iterator ItWab;
for(ItWab=Wab.begin();ItWab!=Wab.end();ItWab )
{
OutWab=*ItWab;
OutTemp=OutWab.Name Space OutWab.Photo Space OutWab.Address;
OutAll=OutAll OutTemp Enter;
}
SetDlgItemText(IDC_EDIT4,OutAll);
}
void C电话本Dlg::OnInsert()
{
Wab.push_front(InWab);
C电话本Dlg::OnFill();
}
void C电话本Dlg::OnFind()
{
CString OutAll,OutTemp,Space,Enter;
Space=_T( );
Enter=_T(\r\n);
listWabList::iterator ItWab;
for(ItWab=Wab.begin();ItWab!=Wab.end();ItWab )
{
if(ItWab-Name==InWab.Name)
{
OutTemp=ItWab-Name Space ItWab-Photo Space ItWab-Address;
OutAll=OutAll OutTemp Enter;
}
}
SetDlgItemText(IDC_EDIT4,OutAll);
}
void C电话本Dlg::OnDelete()
{
CString OutAll,OutTemp,Space,Enter;
Space=_T( );
Enter=_T(\r\n);
listWabList::iterator ItWab;
for(ItWab=Wab.begin();ItWab!=Wab.end();ItWab )
{
if(ItWab-Name==InWab.Name)
{
OutTemp=ItWab-Name Space ItWab-Photo Space ItWab-Address;
OutAll=OutAll OutTemp Enter;
break;
}
}
SetDlgItemText(IDC_EDIT4,OutAll);
if(ItWab!=Wab.end()) Wab.erase(ItWab);
}
void C电话本Dlg::OnEdit()
{
CString OutAll,OutTemp,Space,Enter;
Space=_T( );
Enter=_T(\r\n);
listWabList::iterator ItWab;
for(ItWab=Wab.begin();ItWab!=Wab.end();ItWab )
{
if(ItWab-Name==InWab.Name)
{
OutTemp=ItWab-Name Space ItWab-Photo Space ItWab-Address;
OutAll=OutAll OutTemp Enter;
break;
}
}
SetDlgItemText(IDC_EDIT4,OutAll);
if(ItWab!=Wab.end())
{
Wab.erase(ItWab);
Wab.push_front(InWab);
}
}
void C电话本Dlg::OnSave()
{
CString Tmp1,Tmp2,Tmp3;
ofstream OutFile(Wab.fsd,ios::out);
listWabList::iterator ItWab;
for(ItWab=Wab.begin();ItWab!=Wab.end();ItWab )
{
Tmp1=ItWab-Name;
Tmp2=ItWab-Photo;
Tmp3=ItWab-Address;
OutFile Tmp1 ' ' Tmp2 ' ' Tmp3 endl;
}
}
只是个用C语言编写的电话本程序 很有实用意义