自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(0)
  • 资源 (18)
  • 收藏
  • 关注

空空如也

JavaScript源码大全 v1.0.chm

JavaScript源码大全 v1.0.chm

2011-08-01

Android开发教程笔记完全版.pdf

Android开发教程笔记完全版.pdfAndroid开发教程笔记完全版.pdfAndroid开发教程笔记完全版.pdfAndroid开发教程笔记完全版.pdfAndroid开发教程笔记完全版.pdfAndroid开发教程笔记完全版.pdfAndroid开发教程笔记完全版.pdfAndroid开发教程笔记完全版.pdfAndroid开发教程笔记完全版.pdfAndroid开发教程笔记完全版.pdfAndroid开发教程笔记完全版.pdfAndroid开发教程笔记完全版.pdfAndroid开发教程笔记完全版.pdfAndroid开发教程笔记完全版.pdfAndroid开发教程笔记完全版.pdfAndroid开发教程笔记完全版.pdfAndroid开发教程笔记完全版.pdf

2010-12-29

Java九阴真经Word

九阴真经.doc九阴真经.doc九阴真经.doc九阴真经.doc九阴真经.doc九阴真经.doc

2010-12-29

Java之葵花宝典Word版

葵花宝典.doc葵花宝典.doc葵花宝典.doc葵花宝典.doc葵花宝典.doc葵花宝典.doc葵花宝典.doc

2010-12-29

基于JSP的论坛源码

JSP 论坛 源码 源文件压缩上传 <%@ page language="java" import="com.lbc.bbs.dao.*,com.lbc.bbs.dao.impl.*,java.util.*,com.lbc.bbs.entity.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% request.setCharacterEncoding("utf-8"); //不管在什么情况下·有没有中文的接收我们必须设置他的request的setCharacterEncoding方法 ReplyDao replyDao =new ReplyDaoImpl(); int uId=Integer.parseInt(request.getParameter("uId")); int boardId=Integer.parseInt(request.getParameter("boardId")); int topicId=Integer.parseInt(request.getParameter("topicId")); int replyId=Integer.parseInt(request.getParameter("replyId")); User user2=null; int flag=0; if(session.getAttribute("users")!=null){ user2=(User)session.getAttribute("users"); }else{ user2=new User(); response.sendRedirect("../login.jsp"); } if(user2.getUId()!=uId){ out.print("<script type='text/javascript'>alert('您无权删除该用户帖子');location.replace('../index.jsp')</script>"); }else{ flag=replyDao.deleteReply(replyId); if(flag>0){ response.sendRedirect("../detail.jsp?page=1&boardId="+boardId+"&topicId="+topicId+"&uId="+uId); } } %>

2010-05-29

音视频文件分割器V5.01绿色汉化版

音视频文件分割器V5.01绿色汉化版音视频文件分割器V5.01绿色汉化版音视频文件分割器V5.01绿色汉化版

2010-05-18

学生课绩管理系统代码jsp

学生 课绩管理 系统 代码 jsp学生 课绩管理 系统 代码 jsp学生 课绩管理 系统 代码 jsp学生 课绩管理 系统 代码 jsp学生 课绩管理 系统 代码 jsp学生 课绩管理 系统 代码 jsp学生 课绩管理 系统 代码 jsp学生 课绩管理 系统 代码 jsp学生 课绩管理 系统 代码 jsp学生 课绩管理 系统 代码 jsp学生 课绩管理 系统 代码 jsp学生 课绩管理 系统 代码 jsp学生 课绩管理 系统 代码 jsp学生 课绩管理 系统 代码 jsp学生 课绩管理 系统 代码 jsp学生 课绩管理 系统 代码 jsp学生 课绩管理 系统 代码 jsp学生 课绩管理 系统 代码 jsp

2010-05-18

安国 ver 2.03.04版本软件 量产工具

安国 ver 2.03.04版本软件 量产工具版本号V03.02.01 显示是否支持其它类型主控 Au6981 Au6983 Au6984 Au7640 Au7641 Au7651 Au3150B51 Au3150C53 Au3152 自动量产设置、可调节电流强度:100MA-500MA 模式设定 普通盘 PureMode SCSI Rev: 8.01 本地盘 只读盘 加密盘 AES盘(仅86有效) AutoRun 默认方式手动方式 CD-ROM卷标 预设容量XXX MB LED状态设置和分区容量设置等;

2010-05-18

ChipGenius 芯片精灵

ChipGenius 芯片精灵主要是检测U盘的,1、快速修复U盘:不用拆机即可查询U盘的芯片型号,快速找到对应的量产工具 2、帮你识别假冒U盘:还怕买到假冒U盘吗?随时带上我吧(配合MyDiskTest更佳) 3、专业选购MP3:MP3主控方案一般厂家都不说,而方案又是选购MP3的重要指标 4、识别假IPOD:我一直怀疑自已的IPOD是假的,又无法拆开,这个任务交给我搞定 5、维修好帮手:数码维修人员整天和数码产品打交道,我的出现就是你的得力助手 6、其它USB存储:买读卡器、移动硬盘、USB-Hub....,从专业角度帮你挑选对比 7、其它USB外设:摄像头、USB鼠标、打印机、USB声卡....,免拆壳哦 8、电脑主板芯片组:看芯片型号、找驱动、查主板性能

2010-05-18

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++学生选课系统代码

2010-05-02

网管教程 从入门到精通软件篇.txt

网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的诊断和测试以及恢复系统功能的工具。小编的确一直都想把这方面的命令做个总结,这次辛苦老范给我们整理了这份实用的秘笈。   Bootcfg   bootcfg 命令启动配置和故障恢复(对于大多数计算机,即 boot.ini 文件)。   含有下列参数的 bootcfg 命令仅在使用故障恢复控制台时才可用。可在命令提示符下使用带有不同参数的 bootcfg 命令。   用法:   bootcfg /default  设置默认引导项。   bootcfg /add    向引导列表中添加 Windows 安装。   bootcfg /rebuild  重复全部 Windows 安装过程并允许用户选择要添加的内容。   注意:使用 bootcfg /rebuild 之前,应先通过 bootcfg /copy 命令备份 boot.ini 文件。   bootcfg /scan    扫描用于 Windows 安装的所有磁盘并显示结果。   注意:这些结果被静态存储,并用于本次会话。如果在本次会话期间磁盘配置发生变化,为获得更新的扫描,必须先重新启动计算机,然后再次扫描磁盘。   bootcfg /list   列出引导列表中已有的条目。   bootcfg /disableredirect 在启动引导程序中禁用重定向。   bootcfg /redirect [ PortBaudRrate] |[ useBiosSettings]   在启动引导程序中通过指定配置启用重定向。   范例: bootcfg /redirect com1 115200 bootcfg /redirect useBiosSettings   hkdsk   创建并显示磁盘的状态报告。Chkdsk 命令还可列出并纠正磁盘上的错误。   含有下列参数的 chkdsk 命令仅在使用故障恢复控制台时才可用。可在命令提示符下使用带有不同参数的 chkdsk 命令。   vol [drive:] [ chkdsk [drive:] [/p] [/r]   参数  无   如果不带任何参数,chkdsk 将显示当前驱动器中的磁盘状态。 drive: 指定要 chkdsk 检查的驱动器。 /p   即使驱动器不在 chkdsk 的检查范围内,也执行彻底检查。该参数不对驱动器做任何更改。 /r   找到坏扇区并恢复可读取的信息。隐含着 /p 参数。   注意 Chkdsk 命令需要 Autochk.exe 文件。如果不能在启动目录(默认为 %systemroot%System32)中找到该文件,将试着在 Windows 安装 CD 中找到它。如果有多引导系统的计算机,必须保证是在包含 Windows 的驱动器上使用该命令。 Diskpart   创建和删除硬盘驱动器上的分区。diskpart 命令仅在使用故障恢复控制台时才可用。   diskpart [ /add |/delete] [device_name |drive_name |partition_name] [size]   参数 无   如果不带任何参数,diskpart 命令将启动 diskpart 的 Windows 字符模式版本。   /add   创建新的分区。   /delete   删除现有分区。   device_name   要创建或删除分区的设备。设备名称可从 map 命令的输出获得。例如,设备名称:   DeviceHardDisk0   drive_name   以驱动器号表示的待删除分区。仅与 /delete 同时使用。以下是驱动器名称的范例:   D:   partition_name   以分区名称表示的待删除分区。可代替 drive_name 使用。仅与 /delete 同时使用。以下是分区名称的范例:   DeviceHardDisk0Partition1    大小   要创建的分区大小,以兆字节 (MB)表示。仅与 /add 同时使用。   范例   下例将删除分区: diskpart /delete Device HardDisk0 Partition3 diskpart /delete F:   下例将在硬盘上添加一个 20 MB 的分区:   diskpart /add Device HardDisk0 20   Fixboot

2010-04-25

计算机网络第五版谢希仁习题答案.doc

计算机网络第五版谢希仁习题答案 1-04 为什么说因特网是自印刷术以来人类通信方面最大的变革? 答: 融合其他通信网络,在信息化过程中起核心作用,提供最好的连通性和信息共享 ,第一次提供了各种媒体形式的实时交互能力。 1-05 因特网的发展大致分为哪几个阶段?请指出这几个阶段的主要特点。 答:从单个网络APPANET向互联网发展;TCP/IP协议的初步成型   建成三级结构的Internet;分为主干网、地区网和校园网;   形成多层次ISP结构的Internet;ISP首次出现。 1-06 简述因特网标准制定的几个阶段? 答:(1)因特网草案(Internet Draft) ——在这个阶段还不是 RFC 文档。   (2)建议标准(Proposed Standard) ——从这个阶段开始就成为 RFC 文档。 (3)草案标准(Draft Standard) (4) 因特网标准(Internet Standard) 1-07小写和大写开头的英文名字 internet 和Internet在意思上有何重要区别? 答:(1) internet(互联网或互连网):通用名词,它泛指由多个计算机网络 互连而成的网络。;协议无特指    (2)Internet(因特网):专用名词,特指采用 TCP/IP 协议的互联网络 区别:后者实际上是前者的双向应用

2010-04-25

数据库第四版答案.doc

1 .试述数据、数据库、数据库系统、数据库管理系统的概念。 答: ( l )数据( Data ) :描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和处理的对象十分广泛,表示这些对象的数据也越来越复杂。数据与其语义是不可分的。 500 这个数字可以表示一件物品的价格是 500 元,也可以表示一个学术会议参加的人数有 500 人,还可以表示一袋奶粉重 500 克。 ( 2 )数据库( DataBase ,简称 DB ) :数据库是长期储存在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。 ( 3 )数据库系统( DataBas 。 Sytem ,简称 DBS ) :数据库系统是指在计算机系统中引入数据库后的系统构成,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。解析数据库系统和数据库是两个概念。数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引起混淆。 ( 4 )数据库管理系统( DataBase Management sytem ,简称 DBMs ) :数据库管理系统是位于用户与操作系统之间的一层数据管理软件,用于科学地组织和存储数据、高效地获取和维护数据。 DBMS 的主要功能包括数据定义功能、数据操纵功能、数据库的运行管理功能、数据库的建立和维护功能。解析 DBMS 是一个大型的复杂的软件系统,是计算机中的基础软件。目前,专门研制 DBMS 的厂商及其研制的 DBMS 产品很多。著名的有美国 IBM 公司的 DBZ 关系数据库管理系统和 IMS 层次数据库管理系统、美国 Oracle 公司的 orade 关系数据库管理系统、 s 油 ase 公司的 s 油 ase 关系数据库管理系统、美国微软公司的 SQL Serve ,关系数据库管理系统等。

2010-04-25

oracle实验.ppt

oracle实验.ppt 1.了解Oracle数据库的逻辑结构和物理结构; 2.了解Oracle Enterprise Manager的使用情况; 3.学习关闭和启动数据库实例的方法; 4.学习使用SQL语句创建数据库的方法; 5.学习使用SQL语句删除数据库的方法. 。。。。。。。。。。。。。。。。。

2010-04-25

C语言函数速查.chm

C语言函数速查.chm 原型:extern int iscntrl(int c); 用法:#include <ctype.h> 功能:判断字符c是否为控制字符 说明:当c在0x00-0x1F之间或等于0x7F(DEL)时,返回非零值,否则返回零。 举例: // iscntrl.c #include <syslib.h> #include <ctype.h> main() { int c; clrscr(); // clear screen c='a'; printf("%x:%s\n",c,iscntrl(c)?"yes":"no"); c=0x0d; printf("%x:%s\n",c,iscntrl(c)?"yes":"no"); c=0x7f; printf("%x:%s\n",c,iscntrl(c)?"yes":"no"); getchar(); return 0; } 相关函数:isalnum,isalpha,isdigit,isxdigit,isgraph,isprint,ispunct,isspace

2010-04-25

C语言程序设计第三版谭浩强课后习题答案完整版

1. 5请参照本章例题,编写一个C程序,输出以下信息: ************************** Very Good! ************************** 解: mian() {printf(“**************************”); printf(“\n”); printf(“Very Good!\n”); printf(“\n”); printf(“**************************”); } 1.6 编写一个程序,输入a、b、c三个值,输出其中最大值。 解: mian() {int a,b,c,max; printf(“请输入三个数a,b,c:\n”); scanf(“%d,%d,%d”,&a,&b,&c); max=a; if(max<b) max=b; if(max<c) max=c; printf(“最大数为:“%d”,max); } 第三章 3.6写出以下程序运行的结果。 main() {char c1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’; printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3); printf(“\t\b%c %c”,c4,c5); } 解: aaㄩbbㄩㄩㄩccㄩㄩㄩㄩㄩㄩabc AㄩN 3.7 要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母"A"后面第4个字母是"E"."E"代替"A"。因此,"China"应译为"Glmre"。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。 解: #include <stdio.h> main() { char c1=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’; c1+=4; c2+=4; c3+=4; c4+=4; c5+=4; printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5); } 运行结果: 密码是Glmre 3.9求下面算术表达式的值。 (1)x+a%3*(int)(x+y)%2/4 设x=2.5,a=7,y=4.7 (2)(float)(a+b)/2+(int)x%(int)y 设a=2,b=3,x=3.5,y=2.5 (1)2.5 (2)3.5 3.10写出程序运行的结果。 main() {int i,j,m,n; i=8; j=10; m=++i; n=j++; printf(“%d,%d,%d,%d”,i,j,m,n); } 解: 9,11,9,10 3.12 写出下面表达式运算后a的值,设原来a=12。设a和n都已定义为整型变量。 (1)a+=a (2) a-=2 (3) a*=2+3 (4)a/=a+a (5) a%=(n%=2),n的值等于5 (6)a+=a-=a*=a 解: (1) 24 (2) 10 (3) 60 (4) 0 (5) 0 (6) 0 第四章 4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’。想得到以下输出格式和结果,请写出程序(包括定义变量类型和设计输出)。 a=_3_ _b=_4_ _c=_5 x=1.200000,y=2.400000,z=-3.600000 x+y=_3.600_ _y+z=-1.20_ _z+x=-2.40 c1=ˊaˊ_or_97(ASCII) c2=ˊbˊ_or_98(ASCII) main() {int a=3,b=4,c=5; long int u=51274,n=128765; float x=1.2,y=2.4,z=3.6; char c1=’a’,c2=’b’; printf("a=%2d b=%2d c=%2d\n",a,b,c); printf("x=%f,y=%f,z=%f\n",x,y,z); printf("x+y=%5.2f y+z=%5.2f z+x=%5.2f\n",x+y,y+z,z+x); printf("u=%6ld n=%9ld\n",u,n); printf("%s %s %d%s\n","c1=’a’","or",c1,"(ASCII)"); printf("%s %s %d%s\n","c2=’a’","or",c2,"(ASCII)"); } 4.7用scanf下面的函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=ˊAˊ,c2=ˊaˊ,问在键盘上如何输入? main() { int a,b;float x,y;char c1c2; scanf("a=%d_b=%d",&a,&b); scanf("_x=%f_y=%e",&x,&y); scanf("_c1=%c_c2=%c",&c1,&c2); } a=3_b=7 _x=8.5_y=71.82 _c1=A_c2=a 4.8设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。 main() {float r,h,C1,Sa,Sb,Va,Vb; scanf("%f,%f",&r,&h); C1=2*3.14*r; Sa=3.14*r*r; Sb=4*Sa; Va=4*3.14*r*r*r/3; Vb=Sa*h; printf("C1=%.2f\n",C1); printf("Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n",Sa,Sb,Va,Vb); } 4.9输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9 输出要求有文字说明,取位2小数。 main() {float F,c; scanf("%f",&F); c=5*(F-32)/9; printf("c=%.2f",c); } 4.10编程序,用getchar函数读入两个字符给c1、c2,然后分别用函数和函数输出这两个字符。并思考以下问题:(1)变量c1、c2应定义为字符型或整形?抑二者皆可?(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3)整形变量与字符变量是否在任何情况下都可以互相代替?如: char c1,c2; 与 int c1,c2; 是否无条件的等价? #include"stdio.h" main() {char c1,c2; c1=getchar();c2=getchar(); putchar(c1);putchar(’\n’);putchar(c2);putchar(’\n’); } #include"stdio.h" main() {char c1,c2; c1=getchar();c2=getchar(); printf("c1=%d c2=%d\n",c1,c2); printf("c1=%c c2=%c\n",c1,c2); } 第五章 5.1 什么是算术运算?什么是关系运算?什么是逻辑运算? 解:略。 5.2 C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”? 解:设有一个逻辑表达式,若其结果为“真”,则以1表示;若其结果为“假”,则以0表示。但是判断一个逻辑量的值时,以0代表“真”,以非0代表“假”。例如3&&5的值为“真”,系统给出3&&5的值为1。 5.3 写出下面各逻辑表达式的值。设a=3,b=4,c=5。 (1) a+b>c&&b==c (2) a||b+c&&b-c (3) !(a>b)&&!c||1 (4) !(x=a)&&(y=b)&&0 (5) !(a+b)+c-1&&b+c/2 解: (1) 0 (2) 1 (3) 1 (4) 0 (5) 1 5.4 有3个整数a、b、c,由键盘输入,输出其中最大的数。 解: 方法一 #include <stdio.h> main() { int a,b,c; printf("请输入3个整数:"); scanf("%d,%d,%d",&a,&b,&c); if(a<b) if(b<c) printf("max=%d\n",c); else printf("max=%d\n",b); else if(a<c) printf("max=%d\n",c); else printf("max=%d\n",a); } 方法二:使用条件表达式,可以使程序更加简明、清晰。 程序如下: #include <stdio.h> main() { int a,b,c,temp,max; printf("请输入3个整数:"); scanf("%d,%d,%d",&a,&b,&c); temp=(a>b)?a:b; /* 将a和b中的大者存人temp中 */ max=(temp>c)?temp:c; /* 将a和b中的大者与c比较,取最大者*/ printf("3个整数的最大数是%d\n”,max); } 5.5 有一函数: 写一程序,输入x值,输出y值。 解: #include <stdio.h> main() {int x,y; printf("输入x:"); scanf("%d",&x); if(x<1) /* x<1 */ { y=x; printf("x=%3d, y=x=%d\n",x,y); } else if (x<10) /* 1≤x-10 */ { y=2*x-1; printf("x=%3d, y=2*x-1=%d\n",x,y); } else /* x≥10 */ { y=3*x-11; printf("x=%3d, y=3*x-11=%d\n",x,y); } } 5.6 给一个百分制成绩,要求输出等级’A’、’B’、’C’、’D’、’E’。90分以上为’A’,80~90分为’B’,70~79分为’C’,60分以下为’D’。 解: 程序如下: #include <stdio.h> main() { float score; char grade; printf("请输入学生成绩:"); scanf("%f",&score); while(score>100||(score<0) { printf("\n输入有误,请重新输入:"); scanf("%f",&score); } switch((int)(score/10)) { case 10: case 9: grade=’A’;break; case 8: grade=’B’;break; case 7: grade=’C’;break; case 6: grade=’D’;break; case 5: case 4: case 3: case 2: case 1: case 0: grade=’E’; } printf("成绩是%5.1f,相应的等级是%c。\n",score,grade); } 说明:对输入的数据进行检查,如小于0或大于100,要求重新输入。(int)(score/10)的作用是将 (score/10) 的值进行强制类型转换,得到一个整型值。 5.7 给定一个不多于5位的正整数,要求:① 求它是几位数;② 分别打印出每一位数字;③ 按逆序打印出各位数字。例如原数为321,应输出123。 解: #include <stdio.h> main() { long int num; int indiv,ten,hundred,thousand,ten_thousand,place; /*分别代表个位、十位、百位、千位、万位和位数*/ printf("请输入一个整数(0~99999):"); scanf("%ld",&num); if (num>9999) place=5; else if(num>999) place=4; else if(num>99) place=3; else if(num>9) place=2; else place=1; printf("place =%d\n", place); ten_thousand=num/10000; thousand=num/1000%10; hundred=num/100%10; ten=num%100/10; indiv=num%10; switch(place) { case 5: printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv); printf("\n反序数字为;"); printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,ten_thousand); break; case 4: printf("%d,%d,%d,%d",thousand,hundred,ten,indiv); printf("\n反序数字为:"); printf("%d%d%d%d\n",indiv,ten,hundred,thousand); break; case 3: printf("%d,%d,%d",hundred,ten,indiv); printf("\n反序数字为:"); printf("%d%d%d\n",indiv,ten,hundred); break; case 2: printf("%d,%d",ten,indiv); printf("\n反序数字为:"); printf("%d%d\n",indiv,ten); break; case 1: printf("%d",indiv); printf("\n反序数字为:"); printf("%d\n",indiv); break; } } 5.8 企业发放的奖金根据利润提成。利润I低于或等于10万元时,奖金可提成10% ;利润高于10万元,低于20万元(100000<I≤200000)时,其中10万元按10%提成,高于10万元的部分,可提成7.5% ;200000<I≤400000时,其中20万元仍按上述办法提成(下同),高于20万元的部分按5%提成;400000<I≤600000时,高于40万元的部分按3%提成;600000〈I≤1000000时,高于60万的部分按1.5%提成;I>1000000时,超过100万元的部分按1%提成。从键盘输入当月利润I,求应发放奖金总数。要求:(1)用if语句编程序;(2)用switch语句编程序。 解:计算利润时,要特别注意不同利润的不同提成比例。例如,利润为15万元,其中有10万元按10%的比例提成,另外5万元则按7.5%提成。 (1) 用if语句编程序。 #include <stdio.h> main() { long i; float bonus,bon1,bon2,bon4,bon6,bon10; bon1=100000*0.1; /*利润为10万元时的奖金*/ bon2=bon1+100000*0.075; /*利润为20万元时的奖金*/ bon4=bon2+200000*0.05; /*利润为40万元时的奖金*/ bon6=bon4+200000*0.03; /*利润为60万元时的奖金*/ bon10=bon6+400000*0.015; /*利润为100万元时的奖金*/ printf("请输入利润i:"); scanf("%ld",&i); if(i<=100000) bonus=i*0.1; /*利润在10万元以内按0.1提成奖金*/ else if(i<=200000) bonus=bon1+(i-100000)*0.075; /*利润在10万至20万元时的奖金*/ else if(i<=400000) bonus=bon2+(i-200000)*0.05; /*利润在20万至40万元时的奖金*/ else if(i<=600000) bonus=bon4+(i-400000)*0.03; /*利润在40万至60万元时的奖金*/ else if(i<=1000000) bonus=bon6+(i-600000)*0.015; /*利润在60万至100万元时的奖金*/ else bonus=bon10+(i-1000000)*0.01; /*利润在100万元以上时的奖金*/ printf(”奖金是%10.2f\n",bonus); } 此题的关键在于正确写出每一区间的奖金计算公式。例如利润在10万元至20万时,奖金应由两部分组成:①利润为10万元时应得的奖金。即100000ⅹ0.1;②10万元以上部分应得的奖金。即(num-100000)ⅹ0.075。同理,20万~40万这个区间的奖金也应由两部分组成:①利润为20万元时应得的奖金,即100000ⅹ0.1ⅹ10万ⅹ0.075;②20万元以上部分应得的奖金,即(num-200000)ⅹ0.05。程序中先把10万、20万、40万、60万、100万各关键点的奖金计算出来,即bon1、bon2、bon4、bon6、hon10;然后再加上各区间附加部分的奖金。 (2) 用switch语句编程序。 输入利润i,确定相应的提成等级branch 根据branch确定奖金值 0 奖金=i*0.1 1 奖金=bon1+(i-105)*0.075 2 奖金=bon2+(i-2*105)*0.05 3 4 奖金=bon4+(i-4*105)*0.03 5 6 奖金=bon6+(i-6*105)*0.015 7 8 9 10 奖金=bon10+(i-106)*0.01 输出奖金 #include <stdio.h> main() { long i; float bonus, bon1, bon2, bon4, bon6, bon10; int c; bon1=100000*0.1; bon2=bon1+100000*0.075; bon4=bon2+200000*0.05; bon6=bon4+200000*0.03; bon10=bon6+400000*0.015; printf("请输入利润i:"); scanf("%ld",&i); c=i/100000; if(c>10) c=10; switch(c) { case 0: bonus=1*0.1;break; case 1: bonus=bon1+(i-100000)*0.075;break; case 2 : case 3: bonus=bon2+(i-200000)*0.05; break; case 4: case 5: bonus=bon4+(i-400000)*0.03;break; case 6: case 7: case 8: case 9: bonus=bon6+(i-600000)*0.015;break; case 10: bonus=bon10+(i-1000000)*0.01; } printf("奖金是%10.2f",bonus); } 5.9 输入4个整数,要求按由大到小的顺序输出。 解:此题采用依次比较的方法排出其大小顺序。在学习了循环和数组以后,可以有更多的排序方法。 #include <stdio.h> main() { int t,a,b,c,d; printf("请输入4个整数:"); scanf("%d,%d,%d,%d",&a,&b,&c,&d); printf("\n a=%d,b=%d,c=%d,d=%d\n",a,b,c,d); if(a>b) {t=a; a=b; b=t;} if(a>c) {t=a; a=c; c=t;} if(a>d) {t=a; a=d; d=t;} if(b>c) {t=a; b=c; c=t;} if(b>d) {t=b; b=d; d=t;} if(c>d) {t=c; c=d; d=t;} printf("排序结果如下:\n"); printf("%d, %d, %d, %d\n",a,b,c,d); } 5.10 有4个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1。这4个塔的高度分别为10m。塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。 程序如下: #include <stdio.h> main() { int h=10; float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=-2,y4=-2,x,y,d1,d2,d3,d4; printf("请输入一个点(x,y):"); scanf("%f,%f",&x,&y); d1=(x-x1)*(x-x1)+(y-y1)*(y-y1); /*求该点到各中心点的距离*/ d2=(x-x2)*(x-x2)+(y+y2)*(y+y2); d3=(x+x3)*(x+x3)+(y-y3)*(y-y3); d4=(x+x4)*(x-x4)*(y+y4)*(y+y4); if(d1>1&&d2>1&&d3>1&&d4>1) h=0; /*判断该点是否在塔外*/ printf("该点高度为%d\n",h); } 第六章 第六章 循环控制 6.1输入两个正整数m和n,求其最大公约数和最小公倍数。 main() {long m,n,i=1,j,s; scanf("%ld,%ld",&m,&n); for(;i<=m&&i<=n;i++) {if(m%i==0&&n%i==0) s=i;} if(m>=n) j=m; else j=n; for(;!(j%m==0&&j%n==0);j++); printf("s=%ld,j=%ld\n",s,j); } 6.2输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 #include"stdio.h" main() {char c;int i=0,j=0,k=0,l=0; while((c=getchar())!=’\n’) {if(c>=65&&c<=90||c>=97&&c<=122) i++; else if(c>=48&&c<=57) j++; else if(c==32) k++; else l++;} printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l); } 6.3求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(n=5),n由键盘输入。 #include"math.h" main() {int n,sum=0,i=1,s=2; scanf("%d",&n); while(i<=n) {sum=sum+s;s=s+2*pow(10,i); i++;} printf("sum=%d\n",sum); } 6.4 求 ,(即求1!+2!+3!+4!+5!+…+20!) main() {int n,i=1;long sum=0,s=1; scanf("%d",&n); while(i<=n) {s=s*i;sum=sum+s;i++;} printf("sum=%ld\n",sum); } 6.5 求 main() {double i=1,j=1,k=1,s1=0,s2=0,s3=0,sum; for(;i<=100;i++) s1=s1+i; for(;j<=50;j++) s2=s2+j*j; for(;k<=10;k++) s3=s3+1/k; sum=s1+s2+s3; printf("sum=%f\n",sum); } 6.6打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=1^3+5^3+3^3。 #include"math.h" main() {int x=100,a,b,c; while(x>=100&&x<1000) {a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b; if(x==(pow(a,3)+pow(b,3)+pow(c,3))) printf("%5d",x);x++;} } 6.7一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。编程序找出1000之内的所有完数,并按下面格式输出其因子: 6 its factors are 1、2、3 main() {int m,i,j,s; for(m=6;m<10000;m++) {s=1; for(i=2;i<m;i++) if(m%i==0) s=s+i; if(m-s==0) {printf("%5d its fastors are 1 ",m);for(j=2;j<m;j++) if(m%j==0) printf("%d ",j);printf("\n");} } } 或 main() {int m,i,j,s; for(m=6;m<1000;m++) {s=m-1; for(i=2;i<m;i++) if(m%i==0) s=s-i; if(s==0) {printf("%5d its fastors are 1 ",m);for(j=2;j<m;j++) if(m%j==0) printf("%d ",j);printf("\n");} } } 6.8有一分数序列:    求出这个数列的前20项之和。 main() {int i=1,n;double t,x=1,y=2,s,sum=0; scanf("%ld",&n); while(i<=n) {s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;} printf("%f\n",sum); } 6.9一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米?第10次反弹多高?  main() {int i,n;double h=100,s=100; scanf("%d",&n); for(i=1;i<=n;i++) {h*=0.5;if(i==1) continue;s=2*h+s;} printf("h=%f,s=%f\n",h,s); } 6.10猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。 main() {int i=1,sum=0; for(;i<=10;sum=2*sum+1,i++); printf("sum=%d\n",sum); } 6.11用迭代法求 。求平方根的迭代公式为: 要求前后两次求出的得差的绝对值少于0.00001。 #include"math.h" main() {float x0,x1,a; scanf("%f",&a); x1=a/2; do {x0=x1;x1=(x0+a/x0)/2;} while(fabs(x0-x1)>=0.00001); printf("%.3f\n",x1); } 6.12 用牛顿迭代法求方程在1.5附近的根。 main() {double x,y;x=1.5; do{y=2*x*x*x-4*x*x+3*x-6; x=x-y/(6*x*x-8*x+3);} while(y!=0); printf("x=%.3f\n",x); } 6.13用二分法求方程在(-10,10)之间的根 main() {double x1,x2,y1,y2;x1=-10;x2=10; do{y1=2*x1*x1*x1-4*x1*x1+3*x1-6; x1=x1-y1/(6*x1*x1-8*x1+3);} while(y1!=0); do {y2=2*x2*x2*x2-4*x2*x2+3*x2-6; x2=x2-y2/(6*x2*x2-8*x2+3);} while(y2!=0); printf("x1=%.3f,x2=%.3f\n",x1,x2); } 6.14打印以下图案 * * * * * * * * * * * * * * * * * * * * * * * * * #include"math.h" main() {int i,j,k; for(i=0;i<=3;i++) {for(j=0;j<=2-i;j++) printf(" "); for(k=0;k<=2*i;k++) printf("*"); printf("\n"); } for(i=0;i<=2;i++) {for(j=0;j<=i;j++) printf(" "); for(k=0;k<=4-2*i;k++) printf("*"); printf("\n"); } } 第七章 第七章 数组 7.1 用筛法求之内的素数。 main() { int i,j,a[100]; for(i=2;i<100;i++) { a[i]=i; for(j=2;j<=i;j++) {if(j<i) if(a[i]%j==0) break; if(a[i]-j==0) printf("%5d",a[i]); } } printf("\n"); } 或 #include"math.h" main() {static int i,j,k,a[98]; for(i=2;i<100;i++) {a[i]=i;k=sqrt(i); for(j=2;j<=a[i];j++) if(j<k) if(a[i]%j==0) break; if(j>=k+1) printf("%5d",a[i]); } printf("\n"); } 7.2用选择法对10个整数从小到大排序。 main() { int i,j,a[10],t; for(i=0;i<10;i++) scanf("%d",&a[i]); for(j=1;j<10;j++) for(i=0;i<=9-j;i++) if(a[i]>a[i+1]) {t=a[i+1];a[i+1]=a[i];a[i]=t;} for(i=0;i<10;i++) printf("%5d",a[i]); } 或 main() {static int a[10],i,j,k,t; for(i=1;i<11;i++) scanf("%d",&a[i]); for(j=1;j<10;j++) for(i=1;i<=10-j;j++) if (a[i]>a[i+1]) {t=a[i+1];a[i+1]=a[i];a[i]=t;} for(i=1;i<11;i++) printf("%d",a[i]); printf("\n"); } 7.3求一个3×3矩阵对角线元素之和。 main() {int i=0,j=0,a[3][3],s1,s2; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); s1=a[0][0]+a[1][1]+a[2][2]; s2=a[0][2]+a[1][1]+a[2][0]; printf("s1=%d,s2=%d\n",s1,s2); } 或 main() { static int i,j,s1,s2,a[3][3]; for(i=1;i<=3;i++) for(j=1;j<=3;j++) scanf("%d",&a[i][j]); s1=a[1][1]+a[2][2]+a[3][3]; s2=a[1][3]+a[2][2]+a[3][1]; printf("%d,%d\n",s1,s2); } 7.4已有一个已排好的数组今输入一个数要求按原来排序的规律将它插入数组中。 main() { static int a[10]={1,7,8,17,23,24,59,62,101};int i,j,t; scanf("%d",&a[9]); for(i=9;i>0;i--) if(a[i]<a[i-1]) {t=a[i-1];a[i-1]=a[i];a[i]=t;} for(i=0;i<10;i++) printf("%5d",a[i]);printf("\n"); } 或 main() { static int a[5]={1,4,5,6,7}; int i,t,b; scanf("%d",&b); for(i=0;i<5;i++) {if(b<=a[i]) {t=a[i];a[i]=b;b=t;} printf("%d ",a[i]);} printf("%d",b); } 7.5将一个数组的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:1,4,5,6,8。 main() { int i,b[10]; for(i=0;i<10;i++) scanf("%d",&b[i]); for(i=9;i>-1;i--) printf("%5d",b[i]); printf("\n");} 7.6打印出以下杨辉三角形(要求打印出10行)。 1 1  1 1  2  1 1  3  3  1 1  4  6  4  1 1  5  10 10  5  1 ∶ ∶ main() { static int m,n,k,b[15][15]; b[0][1]=1; for(m=1;m<15;m++) {for(n=1;n<=m;n++) { b[m][n]=b[m-1][n-1]+b[m-1][n]; printf("%-5d",b[m][n]);}printf("\n"); } } } 或 main() { int i,j,n,k,a[10][10]; static a[][1]={{1},{1},{1},{1},{1},{1},{1},{1},{1},{1}}; a[1][1]=1; for(k=2,k<11;k++) for(i=2;i<=k;i++) for(j=2;j<=i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(k=1;k<11;k++) for(i=1;i<=k;i++) for(j=1;j<=i;j++) printf("%d",a[i][j]); } 7.7 打印“魔方阵”,所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为 8 1 6 3 5 7 4 9 2 要求打印出由1~n2的自然数构成的魔方阵。 解: #include <stdio.h> main() { int a[16][16],i,i,k,p,m,n; p=1; while(p==1) /*要求阶数为1~15的商数*/ { printf("Enter n(n=1~15):"); scanf("%d",&n); if((n!=0)&&(n<=15)&&(n%2!=0)) p=0; } for(i=1;i<=n;i++) /*初始化*/ for(j=1;j<=n;j++) a[i][j]=0; j=n/2+1; /*建立魔方阵*/ a[1][j]=1; for(k=2;k<=n*n;k++) { i=i-1; j=j+1; if((i<1)&&(j>n)) { i=i+2; j=j-1; } else { if(i<1) i=n; if(j>n) j=1; } if(a[i][j]==0) a[i][j]=k; else { i=i+2; j=j-1; a[i][j]=k; } } for(i=1;i<=n;i++) /*输出魔方阵*/ { for(j=1;j<=n;j++) printf("%4d",a[i][j]); printf("\n"); } } 7.8找出一个二位数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。 main() {int a[5][5],b[5],c[5],d[5][5],k=0,l=0;int i,j; for(i=0;i<5;i++) for(j=0;j<5;j++) scanf("%d",&d[i][j]); for(i=0;i<5;i++) for(j=0;j<5;j++,a[i][j]=d[i][j]); for(i=0,k=0;i<5;i++,k++) for(j=0;j<4;j++) {if(a[i][j]>=a[i][j+1]) b[k]=a[i][j+1]=a[i][j]; else b[k]=a[i][j+1]; } for(j=0,l=0;j<5;j++,l++) for(i=0;i<4;i++) {if(a[i][j]<=a[i+1][j]) c[l]=a[i+1][j]=a[i][j]; else c[l]=a[i+1][j]; } for(i=0,k=0;i<5;i++,k++) for(j=0,l=0;j<5;j++,l++) if(d[i][j]-b[k]==0) {if(d[i][j]-c[l]==0) printf("d[%d][%d]=%d\n",i,j,d[i][j]); else printf("d[%d][%d]=%d isnot andi\n",i,j,d[i][j]); } } 7.9有个15数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数组中第几个元素的值。如果该数不在数组中,则打印出"无此数" #include"math.h" main() {static int i,j,m,a[15]={1,4,9,13,21,34,55,89,144,233,377,570,671,703,812}; scanf("%d",&m); for(j=0;j<15;j++) printf("%4d",a[j]); printf("\n"); i=7; while(fabs(i-7)<8) {if(m<a[7]) {if(a[i]-m==0) {printf("it is at (%d)\n",i+1);break;}i--;} else if(m>a[7]) {if(a[i]-m==0) {printf("it is at (%d)\n",i+1);break;}i++;} else printf("8\n"); } if(fabs(i-7)-8==0) printf("There is not\n"); } 7.10有一篇文章,共有3行文字,每行有个80字符。要求分别统计出其中英文大写字母、小写字母、空格以及其它字符的个数。 main() {int i,j=0,k=0,l=0,m=0,n=0;char str0[301],str1[100],str2[100],str3[100]; gets(str1);gets(str2);gets(str3); strcat(str0,str1);strcat(str0,str2);strcat(str0,str3); for(i=0;str0[i]!=’\0’;i++) {if(str0[i]>=65&&str0[i]<=90) j++; else if(str0[i]>=97&&str0[i]<=122) k++; else if(str0[i]>=48&&str0[i]<=57) l++; else if(str0[i]==32) m++; else n++;} printf("Daxie Xiaoxie Shuzi Kongge Qita\n"); printf("%5d %7d %5d %6d %4d\n",j,k,l,m,n); } 7.11打印以下图案 * * * * * * * * * * * * * * * * * * * * * * * * * main() {int i,j,k;char a[5][5]; for(i=0;i<5;i++) {for(j=0;j<5;j++) {a[i][j]=’*’;printf("%c",a[i][j]);} printf("\n"); for(k=1;k<=i+1;k++) printf("\40");} printf("\n"); } 7.12有一行电文译文下面规律译成密码: A->Z a->z B->Y b->y C->X c->x … 即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。非字母字符不变,要求编程序将密码回原文,并打印出密码和原文。 main() { int i;char str1[100],str2[100]; gets(str1); for(i=0;str1[i]!=’\0’;i++) if(str1[i]>=65&&str1[i]<=90) str2[i]=155-str1[i]; else if(str1[i]>=97&&str1[i]<=122) str2[i]=219-str1[i]; else str2[i]=str1[i]; printf("%s\n%s\n",str1,str2); } 7.13编一程序,将两个字符串连接起来,不要strcat函数。 main() { int i,j;char str1[100],str2[100],str3[201]; gets(str1); gets(str2); for(i=0;str1[i]!=’\0’;i++) str3[i]=str1[i]; for(j=0;str2[j]!=’\0’;j++) str3[j+i]=str2[j]; printf("%s\n%s\n%s\n",str1,str2,str3); } 7.14编一个程序,将两个字符串S1和S2比较,如果S1>S2,输出一个正数;S1=S2,输出0;S1<S2,输出一个负数。不要用strcpy函数。两个字符串用gets函数读入。输出的正数或负数的绝对值应是相比较的两个字符串相对应字符的ASCII码的差值。例如,’A’与’C’相比,由于’A’<’C’,应输出负数,由于’A’与’C’的码差值为2,因此应输出"-2"。同理:"And"和"Aid"比较,根据第2个字符比较结果,’n’比’i’大5,因此应输出"5"。 #include <stdio.h> #include <string.h> main() { int i,resu; char s1[100],s2[100]; printf("\n input string1:"); gets(s1); printf("\n Input string2:"); gets(s2); i=0; while(s1[i]==s2[i]&&s1[i]!=’\0’) i++; if(s1[i]==’\0’&&s2[i]==’0’) resu=0; else resu=s1[i]-s2[i]; printf("\n result:%d\n",resu); } 7.15 编写一个程序,将字符数组s2中的全部字符拷贝到字符数组s1中,不用strcpy函数。拷贝时,’\0’也要拷贝过去,’\0’后面的字符不拷贝。 解: #include "stdio.h" main() { char s1[80],s2[80]; int i; printf("Input s2:"); scanf("%s",s2); for(i=0;i<strlen(s2);i++) s1[i]=s2[i]; printf("s1:%s\n",s1); } 第八章 第八章 函数 1.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。 maxyueshu(m,n) int m,n; { int i=1,t; for(;i<=m&&i<=n;i++) {if(m%i==0&&n%i==0) t=i; } return(t); } minbeishu(m,n) int m,n; {int j; if(m>=n) j=m; else j=n; for(;!(j%m==0&&j%n==0);j++); return j; } main() {int a,b,max,min; printf("enter two number is: "); scanf("%d,%d",&a,&b); max=maxyueshu(a,b); min=minbeishu(a,b); printf("max=%d,min=%d\n",max,min); } 8.2求方程 的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。 #include"math.h" float yishigen(m,n,k) float m,n,k; {float x1,x2; x1=(-n+sqrt(k))/(2*m); x2=(-n-sqrt(k))/(2*m); printf("two shigen is x1=%.3f and x2=%.3f\n",x1,x2); } float denggen(m,n) float m,n; {float x; x=-n/(2*m); printf("denggen is x=%.3f\n",x); } float xugen(m,n,k) float m,n,k; {float x,y; x=-n/(2*m); y=sqrt(-k)/(2*m); printf("two xugen is x1=%.3f+%.3fi and x2=%.3f-%.3fi\n",x,y,x,y); } main() {float a,b,c,q; printf("input a b c is "); scanf("%f,%f,%f",&a,&b,&c); printf("\n"); q=b*b-4*a*c; if(q>0) yishigen(a,b,q); else if(q==0) denggen(a,b); else xugen(a,b,q); } 8.2写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。 psushu(m) int m; {int i=2,t; for(;i<=m;i++) if(m%i==0&&i<m) break; if(m-i==0) t=1; else t=0; return m; } main() {int a,s; printf("enter sushu is \n"); scanf("%d",&a); s=psushu(a); if(s==1) printf("a is sushu\n"); else printf("s is not sushu\n"); } 8.4写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。 int zhuangzhi(b) int b[3][3]; {int i,j,t; for(i=0;i<3;i++) for(j=0;j>=i&&j<3-i;j++) {t=b[i][j];b[i][j]=b[j][i];b[j][i]=t;} } main() {int a[3][3];int i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf(" %d",a[i][j]); printf("\n");} zhuangzhi(a); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf(" %d",a[i][j]); printf("\n");} } 8.5写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。 main() {char str0[100]; gets(str0); fanxu(str0); puts(str0); } fanxu(str1) char str1[100]; {int i,t,j; char str2[100];strcpy(str2,str1); t=strlen(str1); for(i=0,j=t-1;j>-1;i++,j--) str1[i]=str2[j]; } 8.6写一函数,将两个字符串连接。 lianjie(a,b) char a[100],b[100]; {strcat(a,b); } main() {char str1[100],str2[100]; gets(str1);gets(str2); lianjie(str1,str2); puts(str1); } 8.7写一函数,将两个字符串中的元音字母复制到另一个字符串,然后输出。 fuzhi(a,b) char a[100],b[100]; {int i,j=0; for(i=0;a[i]!=’\0’;i++) if(a[i]==97||a[i]==101||a[i]==105||a[i]==111||a[i]==117||a[i]==65|| a[i]==69||a[i]==73||a[i]==85) {b[j]=a[i];j++;} } main() {char str1[100],str2[100]; gets(str1); fuzhi(str1,str2); puts(str2); } 8.8写一函数,输入一个四位数字,要求输出这四个数字字符,但每两个数字间空格。如输入1990,应输出"1_9_9_0"。 char f(b) char b[4]; {int i=0; for(;i<4;i++) {printf(" "); printf("%c",b[i]);} printf("\n"); } main() {int a,u,v,w,t;char c[4]; scanf("%4d",&a); u=a*0.001;v=0.01*(a-1000*u);w=(a-1000*u-100*v)*0.1;t=a-1000*u-100*v-10*w; c[0]=u+48; c[1]=v+48; c[2]=w+48; c[3]=t+48; f(c); } 8.9编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 char tongji(str0,b) char str0[100]; int b[4]; {int i; for(i=0;str0[i]!=’\0’;i++) {if(str0[i]>=65&&str0[i]<=90||str0[i]>=97&&str0[i]<=122) b[0]++; else if(str0[i]>=48&&str0[i]<=57) b[1]++; else if(str0[i]==32) b[2]++; else b[3]++;} } main() {char str1[100];static int i,a[4]; gets(str1); tongji(str1,a); printf("zimu Shuzi Kongge Qita\n"); for(i=0;i<4;i++) printf("%-8d ",a[i]);printf("\n"); } 8.10写一函数,输入一行字符,将此字符串中最长的单词输出。 cechang(str1,word0) char str1[100],word0[15]; {int i=0,j=0,t=0; static char word1[15]; for(;str1[i]!=’\0’;i++) {if(!(str1[i]>=97&&str1[i]<=122||str1[i]>=65&&str1[i]<=90)) {t=j;j=0;continue;} word1[j]=str1[i];j++; if(j>=t) strcpy(word0,word1);} } main() {char str0[100],longword[15]; gets(str0); cechang(str0,longword); puts(longword); } 8.11写一函数用起泡法对输入的个字符按由小到大的顺序排列。 int paixu(x) int x[]; {int i,j,t; for(j=1;j<10;j++) for(i=0;i<=9-j;i++) if(x[i]>x[i+1]) {t=x[i+1];x[i+1]=x[i];x[i]=t;} } main() {int y[10];int i; for(i=0;i<10;i++) scanf("%d",&y[i]); paixu(y); for(i=0;i<10;i++) printf("%5d",y[i]); printf("\n"); } 8.12用牛顿迭代法求根。方程为: ,系数a,b,c,d由主函数输入。求X在1附近的一个实根。求出后由主函数输出。 double qigen(s,t,u,v) int s,t,u,v; {double x,y;x=1; do{y=s*x*x*x+t*x*x+u*x+v; x=x-y/(3*s*x*x+2*t*x+u);} while(y!=0); return x; } main() {int a,b,c,d;double x; scanf("%d,%d,%d,%d",&a,&b,&c,&d); x=qigen(a,b,c,d); printf("x=%.3f\n",x); } 8.13用递归方法求n阶勒让德多项式的值递归公式为 float p(x0,n) int n;float x0; {float y; if(n==0||n==1) if(n==1) y=x0;else y=1; else y=((2*n-1)*x0*p(x0,n-1)-(n-1)*p(x0,n-2))/n; return(y); } main() {float x,y0;int a,i; scanf("%f,%d",&x,&a); y0=p(x,a); printf("y0=%.3f\n",y0); } 8.14输入10个学生5门课的成绩,分别用函数求:①每个学生平均分;②每门课的平均分;③找出最高分所对应的学生和课程;④求平均分方差:δ=[SXi^2]/n-(SXi/n)^2,为一学生的平均分 float x1[10],x2[5]; float pp(),cc(),find(),xx(); main() {char name[10][20],class[5][20];float score[10][5],o,k=0,max[5];int a[5],i,j; for(i=0;i<10;i++) gets(name[i]); for(j=0;j<5;j++) gets(class[j]); for(i=0;i<10;i++) for(j=0;j<5;j++) scanf("%f",&score[i][j]); pp(score); cc(score); find(score,max,a); o=xx(k); for(i=0;i<10;i++) {puts(name[i]); printf("%.3f\n",x1[i]);} for(j=0;j<5;j++) {puts(class[j]);printf("%.3f\n",x2[j]);} for(j=0;j<5;j++) {printf("%.3f \n",max[j]); puts(name[a[j]]); puts(class[j]);} printf("o=%.3f\n",o); } float pp(f) float f[10][5]; {float sum=0;int i,j; for(i=0,sum=0;i<10;i++) {for(j=0;j<5;j++) sum=sum+f[i][j]; x1[i]=sum/5;} } float cc(y) float y[10][5]; {float sum=0;int i,j; for(j=0;j<5;j++) {for(i=0;i<10;i++) sum=sum+y[i][j]; x1[j]=sum/10;} } float find(z,s,t) float z[10][5],s[5];int t[5]; {int i,j; for(j=0,s[j]=z[0][j];j<5;j++) for(i=0;i<10;i++) if(s[j]<z[i][j]) {s[j]=z[i][j];t[j]=i;} } float xx(q) float q; {float f=0,e=0;int i; for(i=0;i<10;i++) {e=x1[i]*x1[i]+e; f=f+x1[i];} q=e/10-(f/10)*(f/10); return(q); } 8.15写几个函数:①输个职工的姓名和职工号;②按职工号由小到大顺序排序,姓名顺序也随之调整;③要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。 #define N 10 find(a,b) int a[],b[]; {int i,j,s,t,c[N][2]; for(i=0;i<N;i++) {c[i][1]=a[i];c[i][1]=i;} for(i=0;i<N;i++) for(j=0;j<N-i-1;j++) if(c[i][0]>c[i+1][0]) {t=c[i][0];c[i][0]=c[i+1][0];c[i+1][0]=t; s=c[i][1];c[i][1]=c[i+1][1];c[i+1][1]=s;} for(i=0;i<N;i++) b[i]=c[i][1]; return; } lookfor(h,k) int h[],k; {int i,j; for(i=0;i<N;i++) if(h[i]-k==0) j=i; return j; } main() {int number[N],x[N],i,j,u,p;char name[N][20]; for(i=0;i<N;i++) {gets(name[i]); scanf("%d",&number[i]);} scanf("%d",&p); find(number,x); u=lookfor(number,p); for(i=0;i<N;i++) {printf("%d",number[i]); puts(name[x[i]]);} puts(name[x[u]]); } 8.16写一函数,输入一个十六进制数,输出相应的十进制数。 #include"math.h" int x; ff(shu) char shu[]; {int i=strlen(shu)-1,sum=0; for(;i>-1;i++) {if {if(48<=shu[i]<=57) sum=sum+(shu[i]-48)*pow(16,(i-1)); else if(65<=shu[i]<=90) sum=sum+(shu[i]-55)*pow(16,(i-1)); else if(97<=shu[i]<=102) sum=sum+(shu[i]-87)*pow(16,(i-1)); x=1;} else x=0; return x; } main() {char shufu[100];int s; gets(shufu);s=ff(shufu); if(x) printf("s(D)=%d\n",s); else printf("The number is not ox\n"); } 8.17用递归法将一个整数n转换成字符串。例如,输入486,应输出字符串"486"。n的位数不确定,可以是任意位数的整数。 #include"math.h" int x[10]; pf(m,n) unsigned long m;int n; {int y; if(n==0) {y=(int)(m%10);x[0]=y;} else {y=(unsigned long)((m-pf(m,n-1))/pow(10,n))%10;x[n]=y;} return(y); } main() {unsigned long a,b;int i,j,k;char c[11]; scanf("%ld",&a); for(j=0,b=a;b>0.1;j++,b/=10); pf(a,j-1); for(i=0,k=j-1;i<j;i++,k--) c[i]=x[k]+48;c[10]=’\0’; puts(c);} 或 #include"math.h" char x[11]; pf(m,o) unsigned long m;int o; {int j,i; for(i=o-1,j=0;i>-1;i--,j++) x[i]=(int)((unsigned long)(m/pow(10,j))%10)+48; return; } main() {unsigned long a,b;int j,i; scanf("%ld",&a); for(j=0,b=a;b>0.1;j++,b/=10); pf(a,j); puts(x);printf("%d\n",j);} 或 #include"math.h" int x[10];unsigned long m; pf(n) int n; {int y; if(n==0) {y=m%10;x[0]=y;} else {y=(unsigned long)((m-pf(n-1))/pow(10,n))%10;x[n]=y;} return(y); } main() {unsigned long a;int i,j,k;char c[11]; scanf("%ld",&m); for(j=0,a=m;a>0.1;j++,a/=10); pf(j-1); for(i=0,k=j-1;i<j;i++,k--) c[i]=x[k]+48;c[10]=’\0’; puts(c);} 8.18给出年、月、日,计算该日是该年的第几天。 int find(x,y,z) int x,y,z; { int i,t,s,days=0; if(x%4==0) t=1; else t=0; for(i=1;i<y;i++) {if(i==2) s=2-t; else s=0; days=days+30+i%2-s; } days=days+z; return(days); } main() {int year,month,date,day; scanf("%d %d %d",&year,&month,&date); day=find(year,month,date); printf("THE DATE IS THE %dth DAYS\n",day); }   第九章 第九章 编译预处理 9.1定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。 #define CHANGE(a,b,t) t=a;a=b;b=a main() {int c,d,s; scanf("%d,%d",&c,&d); CHANGE(c,d,s); printf("c=%d,d=%d\n",c,d); } 9.2输入两个整数,求他们相除的余数。用带参的宏来实现,编程序。 #define Q(a,b) a%b main() {int c,d,t; scanf("%d %d",&c,&d); t=Q(c,d); printf("t=%d\n",t); } 9.3三角形面积为: 其中S=(a+b+c)/2,a、b、c为三角形的三边。定义两个带参的宏S,一个用来求area,另一个宏用来求。写程序,在程序中用带实参的宏名来求面积area。 #include"math.h" #define SSS(m,n,k) (m+n+k)/2 #define AQRT(m,n,k) sqrt(SSS(m,n,k)*(SSS(m,n,k)-m)*(SSS(m,n,k)-n)*(SSS(m,n,k)-k)) main() {float a,b,c,s,area; scanf("%f %f %f",&a,&b,&c); s=SSS(a,b,c); area=AQRT(a,b,c); printf("s=%.3f area=%.3f\n",s,area); } 或 #include"math.h" #define SSS(m,n,k) (m+n+k)*0.5 #define AQRT(m,n,k) sqrt(((m+n+k)/2)*((m+n+k)/2-m)*((m+n+k)/2-n)*((m+n+k)/2-k)) main() {float a,b,c,t,area; scanf("%f %f %f",&a,&b,&c); t=SSS(a,b,c); area=AQRT(a,b,c); printf("t=%.3f;area=%.3f\n",t,area); } 或 #include"math.h" #define SSS(m,n,k) ((m+n+k)/2) #define AQRT(m,n,k,m,n,k,m,n,k,m,n,k,m,n,k,m,n,k,m,n,k,m,n,k,m,n,k) sqrt(SSS*(SSS-m)*(SSS-n)*(SSS-k)) main() {float a,b,c,t,area; scanf("%f %f %f",&a,&b,&c); t=SSS(a,b,c); area=AQRT(a,b,c,a,b,c,a,b,c,a,b,c,a,b,c,a,b,c,a,b,c,a,b,c,a,b,c); printf("t=%.3f;area=%.3f\n",t,area); } 9.4给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可以定义为LEAP_YEAR,形参为y,既定义宏的形式为 #define LEAP_YEAR(y) (读者设计的字符串) 在程序中用以下语句输出结果: if (LEAP_YEAR(year)) printf("%d is a leap year",year); else printf ("%d is not a leap year",year); #define LEAPYEAR(y) y%4 main() {int y; scanf("%d",&y); if(LEAPYEAR(y)) printf("%d is a not leap year\n",y); else printf("%d is a lear year\n",y); } 9.6请设计输出实数的格式,包括:⑴一行输出一个实数;⑵一行内输出两个实数;⑶一行内输出三个实数。实数用"6.2f"格式输出。 #define PR1(x) printf("%6.2f\n",x) #define PR2(x) printf("%6.2f\t%6.2f\n",x,x) #define PR3(x) printf("%6.2f\t%6.2f\t%6.2f\n",x,x,x) main() {float a;scanf("%f",&a); PR1(a);PR2(a);PR3(a); } 9.7设计所需的各种各样的输出格式(包括整数、实属、字符串等),用一个文件名"fornat.h",把信息都放到这个文件内,另编一个程序文件,用命令#include "fornat.h"以确保能使用这些格式。 分别用函数和带参的宏,从三个数中找出最大的数。 #define MAX(a,b,c) (a>((b>c)? b:c))? a:((b>c)? b:c) main() {float x,y,z,t; scanf("%f,%f,%f",&x,&y,&z); t=MAX(x,y,z); printf("%.4f\n",t); } 9.10用条件编译方法实现以下功能: 输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下一字母(如’a’变成’b’……’z’变成’a’其它字符不变)。用命令来控制是否要译成密码。例如: #define CHANGE 1 则输出密码。若: #define CHANGE 0 则不译为密码,按原码输出。 #define CHANGE 1 main() {char str[80],c;int i=0; gets(str); while(str[i]!=’\0’) { #if CHANGE if(str[i]==90||str[i]==122) str[i]=str[i]-25; else if(str[i]>=65&&str[i]<90||str[i]>=97&&str[i]<122) str[i]=str[i]+1; #endif i++; } puts(str); } 或 #define CHANGE 1 main() {char str[80],*c;int i=0; gets(str);c=str; while(*c!=’\0’) { #if CHANGE if(*c==90||*c==122) *c=*c-25; else if(*c>=65&&*c<90||*c>=97&&*c<122) *c=*c+1; #endif c++; } puts(str); } 第十章 第十章 指针 10.1输入三个整数,按由小到大的顺序输出。 main() { int a,b,c,*p1,*p2,*p3,t; scanf("%d,%d,%d",&a,&b,&c); p1=&a;p2=&b;p3=&c; if(*p1>*p2) {t=p1;p1=p2;p2=t;} if(*p1>*p3) {t=p1;p1=p3;p3=t;} if(*p2>*p3) {t=p2;p2=p3;p3=t;} printf("%d,%d,%d\n",*p1,*p2,*p3); } 或 main() {int a,b,c,*p1,*p2,*p3,t; scanf("%d,%d,%d",&a,&b,&c); p1=&a;p2=&b;p3=&c; if(a>b) {t=*p1;*p1=*p2;*p2=t;} if(a>c) {t=*p1;*p1=*p3;*p3=t;} if(b>c) {t=*p2;*p2=*p3;*p3=t;} printf("%d,%d,%d\n",a,b,c); } 10.2输入三个字符串,按由小到大的顺序输出 #define N 3 #define M 20 main() {char str0[N][M],str1[M],*p,*q; int i,l,m,n; q=str0; for(;p<q+N;p++) gets(p); l=strcmp(q,q+1); if(l>0) {strcpy(str1,q);strcpy(q,q+1);strcpy(q+1,str1);} m=strcmp(q,q+2); if(m>0) {strcpy(str1,q);strcpy(q,q+2);strcpy(q+2,str1);} n=strcmp(q+1,q+2); if(n>0) {strcpy(str1,q);strcpy(q+1,q+2);strcpy(q+2,q+1);} for(p=q;p<q+N;p++) puts(p); } 10.3输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数;①输入10个数;②进行处理;③输出10个数。 f(x,n) int x[],n; {int *p0,*p1,i,j,t,y; i=j=x[0];p0=p1=x; for(y=0;y<n;y++) {if(x[y]>i) {i=x[y];p0=&x[y];} else if(x[y]<j) {j=x[y];p1=&x[y];}} t=*p0;*p0=x[n-1];x[n-1]=t; t=*p1;*p1=x[0];x[0]=t; return; } main() {int a[10],u,*r; for(u=0;u<10;u++) scanf("%d",&a[u]); f(a,10); for(u=0,r=a;u<10;u++,r++) printf(" %d",a[u]); printf("\n"); } 10.4有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。 #define N 10 void shift(p,x) float *p;int x; {float a[N],*q,*o;int i; o=a;q=p; for(i=0;i<x;i++) *(o+i)=*(q+N-x+i); for(p=p+N-1;p>=q;p--) *p=*(p-x); for(i=0;i<x;i++) *(q+i)=*(o+i); return;} main() {float shuzhu[N],*u,*v; int h,i;u=v=shuzhu; scanf("%f",&h); for(;u<v+N;u++) scanf("%f",u); shift(v,h); for(u=v;u<v+N;u++) printf("%.2f ",*u); printf("\n"); } 10.5有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。 #define N 5 main() {int i,j,k,a[N+1],*p; for(i=0,p=a;p<=a+N;i++,p++) *p=i; p=a+1;k=N; for(i=0,j=1;k!=1;j++) {if(p>(a+N)) p=a+1; if(*p!=0) i++; if((i-3)==0) {*p=0;i=0;k--;} p++; } for(i=1;i<=N;i++) if(a[i]!=0) printf("The last number is %d\n",a[i]);} 10.7有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。 #include"stdio.h" #define N 10 main() {char a[N+1],b[N+1],*p,*q; int m; gets(a); scanf("%d",&m); p=a+m;q=b; strcpy(q,p); puts(q); } 10.6写一函数,求一个字符串的长度。在主函数种输入字符串,并输出其长度。 第十一章 11.1定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。 解:Struct {int year; int month; int day; }date; main() {int days; printf(“Input year,month,day:”); scanf(“%d,%D,%d”,&date.year,&date.month,&date.day); switch(date.month) {case 1: days=date.day; break; case 2: days=date.day+31; break; case 3: days=date.day+59; break; case 4: days=date.day+90; break; case 5: days=date.day+120; break; case 6: days=date.day+31; break; case 7: days=date.day+181; break; case 8: days=date.day+212; break; case 9: days=date.day+243; break; case 10: days=date.day+273; break; case 11: days=date.day+304; break; case 12: days=date.day+334; break; } if((date.year%4==0&&date.year%100!=0||date.year%400==0)&&date.month>=3)days+=1; printf(“\n%d/%d is the %dth day in%d.”,date.month,data.day,days,date,year); } 11.2写一个函数days,实现上面的计算。由主函数将年、月、日传递给days 函数,计算后将日数传回主函数输出。 解:struct y_m_d {int year: int month; int day; }date; intdays(struct y_m_d date1) {int sum; switch(data.month) {case 1:sum=date1.day; break; case 2:sum=date1.day+31; break; case 3:sum=date1.day+59; break; case 4:sum=date1.day+90; break; case 5:sum=date1.day+120; break; case 6:sum=date1.day+151; break; case 7:sum=date1.day+181; break; case 8:sum=date1.day+212; break; case 9:sum=date1.day+243; break case 10:sum=date1.day+243; break case 11:sum=date1.day+243; break case 12:sum=date1.day+243; break } }; 11.3编写一个函数print,打印一个学生的成绩数,该数组中有5个学生的数据记录,每个记录包括num、name、sore[3],用主函数输入这些记录,用print函数输出这些记录。 解: #define N 5 struct student {char num[6]; char name[8]; int score[4]; }stu[N]; main() {int I,j ; for(I=0;I<N;I++) {printf(“\Input score of student %d:\n”,I+1); printf(“no.:”); scanf(“%s”,stu[i].num); printf(“name:”); scanf(“%s”,stu[i].name); for(j=0;j<3;j++) {printf(“score%d:”j+1); scanf(“%d”,&stu[i].score[j]); } printf(“\n”); } print(stu); } print(struct student stu[6]) {int I,j; printf(“%5s%10s”,stu[i].num,stu[i].name); for(j=0;j<3;j++) printf(“%9d”,stu[i].score[j]); print(“\n”); } 11.4在上题的基础上,编写一个函数input,用来输入5个学生的数据记录。 解: #define N 5 struct student {char num[6]; char name[8]; int score[4] }stu[N]; input(struct student stu[]) {int I,j; for(I=0;I<N;I++) {printf(“input scores of student %d:\n”,I+1); printf(“NO.:”); scanf(“%s”,stu[i].num); printf(“name: ”); scanf(“%s”, stu[i].name); for(j=0;j<3;j++) {printf(“score%d:”,j++); scanf(“%d”, &stu[i].score[j]);} } printf(“\n”); } } 11.5 有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩) 解:#define N 10 struct student {char num[6] char name[8] int score[4] float avr; }stu[N]; main() {int I,j,max,maxi,sum; float average; for(I=0;I<N;I++) {printf(“\nInput scores of student %d:\n”,I+1); printf(“NO.:”); scanf(“%s”,stu[i].num); printf(“name”); scanf(“%s”,stu[i].name); for(j=0;j<3;j++) {printf(“score %d:”,j+1); scanf(“%d”, &stu[i].score[j]); } } average=0; max=0; maxi=0; for(i=0;i<3;i++) {sum=0; for(j=0;j<3;j++) sum+=stu[i].score[j]; stu[i].avr=sum/3.0; average+=stu[i].avr; if(sum>max) {max=sum; maxi=I; } } average/=N; printf(“NO. name score1 score2 score3 average\n”); for(I=0;I<N;I++) {printf(“%5s%10s”,stu[i].num, stu[i].name); for(j=0;j<3;j++) printf(“%9d”,stu[i].score[j]); printf(“%8.2f\n”,stu[i].avr); } printf(“average=%6.2f\n”,average); printf(“The highest score is:%s,score total:%d.”stu[maxi].name,max); } 11.6 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针,指向字符串开始的空间。New(n)表示分配n个字节的内存空间。 解:new函数如下: #define NULL 0 #define NEWSIZE 1000 char newbuf[NEWSIZE]; char *newp=newbuf; char *new(int n) {if (newp+n<=newbuf+ NEWSIZE) { newp= newp+n; return(newp-n); } else return(NULL); } 11.7写一函数free,将上题用new函数占用的空间释放。Free(p)表示将p指向的单元以后的内存段释放。 解: #define Null o #define NEWSIZE 1000 char newbuf[NEWSIZE]; char *newp=newbuf; free(char *p) {if((p>=newbuf)&&(p<newbuf+NEWSIZE)) newp=p; } 11.8已有a、b亮光链表,每个链表中的结点包括学好、成绩。要求把两个链表合并,按学号升序排列。 解: #include<stdio.h> #define NULL 0 #define LENsizeof(struct student) strut student {long num; int scor; struct student *next }; struct student listA,listB; int n,sum=0; main() {struct student *creat(void); struct student *insert(struct student *,struct student *); void print(struct student *); stuct student *ahead , *bhead,*abh; printf(“\ninput list a:\n”); ahead=creat(); sum=sum+|n; abh=insert(ahead,bhead); print(abh); } struct student *creat(void) {struct student *p1,*p2,*head; n=0; p1=p2=(struct student *)malloc(LEN); printf(“input number&scores of student:\n”); printf(“if number Is 0,stop inputing.\n”); scanf(“%ld,%d”,&p1->num,&p1->score); head=NULL; while(p1->num!=0) {n=n+1; if(n==1)head=p1; else p2->next =p1; p2=p1; p1=(struct student *)malloc(LEN); scanf(“%ld,,%d”,&p1->num,&p1->score); } p2->next=NULL; return(head); } struct student *insert(struct student *ah,struct student *bh) {struct student *pa1 , *pa2,*pb1,*pb2; pa2=pa1=ah; pb2=pb1=bh; do {while((pb1->num>pa1->num)&&(pa1->next!=NULL)) {pa2=pa1; pa1=pa1->next; } if(pb->num<=pa1->num) {if(ah=pa1) ah=pb1; else pa2->next=pb1; pb1=pb1->next; pb2->next=pa1; pa2=pb2; pb2=pb1; } } while((pa1->next!=NULL)||(pa1==NULL&&pb1!=NULL)); if((pb1->num>pa1->num)&&(pa1->next==NULl)) ap1->next=pb1; return(ah); } void print(struct student *head) {struct student *p; printf(“%ld%d\n”,p->num,p->score); p=p->next; while(p!=NULL); } 11.9 13个人围成一圈,从第1个人开始顺序报号1、2、3。凡报到“3”者退出圈子。找出最后留在圈子中的人原来的序号。 解: #define N 13 struct person {int number; int nextop; }link[N+1]; main() {int I,count,h; for(I=1;I<=N;I++) {if(I==N) link[i].nextp=1; else link[i].nextp=I+1; link[i].number=I; } printf(“\n”); count=0; h=N; printf(“sequence that person2 leave the circle:\n”); while(count<N-1) {I=0; while(I!=3) {h=link[h].nextp; if(link[h].number) I++; } printf(“%4d”,link[h].number); link[h].number=0; count++; } printf(“\nThe last one is”); for(I=1;ii<=N;I++) if(link[i].number) printf(“%3d”,lin[i].number); } 11.10有两个链表a和b,设结点中包含学号、姓名。从1链表中删去与b链表中有相同学号的那些结点。 解: #define LA 4 #define LB 5 #define NULL 0 struct student {char nump[6]; char name[8]; struct student *next; }A[LA],b[LB]; main() {struct student a[LA]={{“101”,”Wang”},{“102”,”LI”},{“105”,”zhang”},{“106”,”Wei”}}; struct studentb[LB]={{“103”,”Zhang”},{“104”,”Ma”},{“105”,”Chen”},{“107”,”Guo”}, {“108”,”Lui”}}; int I,j; struct student *p, *p1,*p2,*pt,*head1,*head2; head1=a; head2=b; printf(“list a :\n”); for(p1=head1,i=1;p1<a=LA;i++) {p=p1; p1->next=a+I; printf(“%8s%8s\n”,p1->num,p1->name); p1=p1->next; } p->next=NULL; printf(“\n list b:\n”); for(p2=head2,I=1;p2<b+LB;I++) {p=p2; p2->next=b+I; printf(“%8s%8s\n”,p2->num,p2->name); p2=pa->next; } p->next=NULL; printf(“\n”); p1=head1; while(p1!=NULL) {p2=head2; while(p2!=NULL&&strcmp(p1->num,p2->num)!=0) p2=p2->next; if(strcmp(p1->num,p2->num==0)) if(p1==head1) head1=p1->next; else p->next=p1->next; p=p1; p1=p1->next; } p1=hedad1; printf{“\n result:\n”}; while(p1!=NULL) {printf(“%7s %7s\n”,p1->num,p1->name); p1=p1->next; } } 11.11建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。 解:#define NULL 0 #define LEN sizeof(struct student) struct student {char num[6]; char name[8]; char sex[2]; int age; stuct student *next; }stu[10]; main() {struct student *p,*pt,*head; int I,length,iage,flag=1; int find=0; while(flag==1) {printf(“input length of list(<10):”); scanf(“%d”,&length); if(length<10) flag=0; } for(I=0;I<lenth;I++) {p=(struct student *)malloc(LEN); if(I==0) head=pt=p; else pt->next=p; pt=p; ptintf(“NO:”); scanf(“%s”,p->num); prntf(“name:”); scanf(“%s”,p->name); printf(“sex:”); scanf(“%s”,p->sex); printf(“age:”); scanf(“%s”,p->age); } p->next=NULL; p=head; printf(“\n NO. name sex age\n”); while(p!=NULL) {printf(“%4s%8s%6s%6d\n”,p->num, p->name, p->sex, p->age); p=p->next; } printf(“Input age:”); scanf(“%d”,&iage); pt=head; p=pt; if(pt->age==iage) {p=pt->next; head=pt=p; find=1; } else pt=pt->next; while(pt!=NULL) {if(pt->age==iage) {p->next=pt->next; find=1; } else p=pt; pt=pt->next; } if(!find) printf(“Not found%d.”,iage); p=head; printf(“\n NO.name sex age\n”); while(p!=NULL) { printf(“%4s%8s”,p->num,p->name); printf(“%6s%6d”,p->sex,p->age); p=p->next; } } 11.12将一个链表按逆序排列,即将链头当链尾,链尾当链头。 解: # define NULL 0 struct stu {int num; struct stu *next; } main() {int len=1l struct stu *p1,*p2,*head,*new,*newhead; p1=p2=head=(struct stu * )malloc(sizeof(strct stu)); printf(“input number(0:list end):”); scanf(“%d”,&p1->num); while(p1->num!=o) {p1=(struct stu*)malloc(sizeof(struct stu)); printf(“input number(n:listend):”); scanf(“%d”,&p1->num); if(p1->num==0) p2->next=null; else {p2=>next=p1; p2=p1; len++; } } p1=head; pritnf(“\n the original list:\n”); do {printf(“%4d”,p1->num); if(p1->next!=NULL) p1=p1->next; } while(p1->next!=NULL) {p2=p1; p1=p1->next; } if(I==0) newhead=new=p1; else new=nes->next=p1; p2->next=NULL; } printf(\n\n The new listL\n); p1=newhead; for(I=0l;I<len;I++) {pritf(“4d,p1->num”); p1=p1->next, } printf(“\n”); 第12章 12.1编写一个函数getbits,从一个16位的 单元中取出某几位(即该几位保留原值,其余位为0)。函数调用形式为:getbits(value,n1,n2)其中value为该16位单元中的数据值,n1为欲取出的起始位,n2为欲取出的结束位。 解:main() {unsingned int a; int n1,n2; printf(“input an octal number:”); scanf(“%o”,&a); printf(“input n1,n2:”); scanf(“%d,%d”,&n1,&n2); printf(“result:%o\n”,getbits(a,n1-1,n2)); } getbits(unsigned value,int n1,n2) {unsigned int z; z=~0; z=(z>>n1)&(z<<(16-n2); return(z);; } 12.2写一个函数,对一个16位的二进制数驱除它的奇数位。 解:main() {unsigned getbits(unsigned); unsigne int a; printf(“\ninput an octal number:”); scanf(“%o”,&a); printf(“result:%o\n”,,getbits(a)); } unsigner getbits(unsigned value) {int I,j,m,n; unsigned int z,a q; z=0; for(I=1;I<=15;I+=2) {q=1; for(j=1;j<=(16-I-1)/2;j++) q=q*2; a=value>>(16-i); a=a<<15; a=a>>15; z=z+a*q; } return(z); } 12.3编一程序,检查一下年一所用的计算机系统的C编译在执行有移时是按照逻辑位移的原则,还有按照算术右移的原则。如果是逻辑右移,请编一函数实现算术右移。如果是算术右移,请编写一函数实现逻辑右移。 解: main() {int a,n,m; a=~0; if(a>>5)!=a {printf(“\nTurbo C,logical move!\n”); m=0; } else {printf(“\nTurbo C,arithmetic move!\n”); m=1; } printf(“input an octal number:”); scanf(“%o”,&a); printf(“how mang digit move thwards the right ::”); scanf(“%d”,&n); if(m==0) printf(“Arithmetic right move,result:%o\n”,getbits1(a,n)); else printf(“Logical ritht move,result:%o”, getbits2(a,n)); } getbits1(unsigned value,int n) {unsigned z; z=~0; z=z>>n; z=~z; z=z|(value>>n); return(z); } egtbit2(unsigned valud,int n ) {unsigned z; z=(~(1>>n)&(value>>n)); } 12.4编一函数用来实现左右循环移位。函数名为move,调用方法为: move(value,n) 其中value为要循环位移的数,n为位移的位数。 解: main() {unsigned moveright(unsigned,int); unsigned moveleft(unsigned,int); unsigned a; int n; printf(“\n input an octal number:”); scanf(“%o”,&a); printf(“input n:”); scanf(“%d”,&n); if(n>0) {moveright(a,n); printf(“result:%o\n”,moveright(a,n)); } else {n=-n; moveleft(a,n); printf(“result:%o\n”,moveleft(a,n)); } } unsigned moveright(unsigned value,int n) {unsigned z; z=(value>>n)|(value<<(16-n)); return(z); } unsigned moveleft(unsigned value,int n ) {unsigned z; z=(value>>(16-n))|(value<<n); return(z); } 12.5设计一个函数,使给出一个数的原码,能得到该数的补码。 解: main() {unsigned int a; unsigned int getbits(unsigned); pritf(“\nInput an octal number:”); scanf(“%o”,&a); printf(“result:%o\n”,getbits(a)); } unsigned int getbits(unsigned value) {unsigned int z; z=value&0100000; if(z==0100000) z=~value+1; else z=value; return(z); } 第十三章 13.4从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。输入的字符串以“!”结束。 解:#include <stdio.h> main() { File *fp; Char str[100]; Int I=0; If((fp=fopen(“test”,”w”)==NULL) {printf(“Can not open the file\n”); exit(0); } printf(“Input a string:\n”); gets(str); while(str[i]!=’!’) {if (str[i]>=’a’&&str[i]<=’z’) str[i]=str[I-32]; fputc(str[i],fp); I++; } fclose(fp); fp=fopen(“test”,”r”); fgets(str,strlen(str)+1,fp); printf(“%s\n”,str); fclose(fp); } 13.5有两个磁盘文件”A”和”B”,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件”C”中。 解:#include<stdio.h> main() { FILE *fp; Int I,j,n,i1; Char c[100],t ,ch; If((fp=fopen(“a1”,”r”))==NULL) {printf(“can not open the file\n”); exit(0); } printf(“\n file A:\n”); for(I=0;(ch=fgetc(fp)!=EOF;I++) {c[i]=ch; putchar(c[i]); } fclose(fp); i1=I; if((fp=fopen(“b1”,”r”))==NULL) {printf(“\n can not ipen the file”); exit(0); } printf(“\n file B:\n”); for(I=i1;(ch=fgenc(fp))!=EOF;I++) {c[i]=ch; putchar(c[i]); } fclose(fp); n=I; for(i=0;I<n;I++) for(j=I+1;j<n;j++) if(c[i]>c[j]) {t=c[i]; c[i]=c[j]; c[j]=t; printf(“\n file C:\n”); fp=fopen(“c1”,”w”); for(I=0;I<n;I++) {putc(c[i],fp); putchar(c[i]); } fclose(fp); } 13.6有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号、姓名、三门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中。 解: #include<stdio.h> struct student {char num[10]; char name[8]; int score[3]; float ave; }stu[5]; main() {int I,j,sum; FILE *fp; For(I=0;I<5;I++) {printf(“\n input score of student%d:\n”,I+1); printf(“NO.:”); scanf(“%s”,stu[i].num); printf(“name:”); scanf(“%s”,stu[i].name); sum=0; for(j=0;j<3;j++) {printf(“score %d :”j+1); scanf(“%d”,&stu[i].score[j]); sum+=stu[i].score[j]; } stu[i].ave=sum/3.0 } fp=fopen(“stud”,”w”); for(I=0;I<5;I++) if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) printf(“File write error\n”); fclose(fp); fp=fopen(“stud”,”r”); for(I=0;I<5;I++) {fread(&stu[i],sizeof(struct student),1,fp); printf(“%s,%s,%d,%d,%d,%6.2f\n”,stu[i].num,stu[i].name,stu[i].score[0], stu[i].score[1], stu[i].score[2] ,stu[i].ave); } } 13.7将上题stud文件中的学生数据按平均分进行排序处理,并将已排序的学生数据存入一个新文件stu-sort中。 解: #include <stdio.h> #define N 10 struct student {char num[10]; char name[8]; int score[3]; float ave; }st[N],temp; main() { FILE *fp; Int I,j,n; If((fp=fopen(“stud”,”r”))==NULL) {printf(“can not open the file”); exit(0); } printf(“\n file ‘stud’:”); for(I=0;fread(&st[i],sizef(struct student),1,fp)!=0;I++) {printf(“\n%8s%8s”,st[i].num,,st[i].name); for(j=0;j<3;j++) printf(“%8d”,st[i].score[j]); printf(“%10.f”,st[i].ave); fclose(fp); n=I; for(I=0;I<n;I++) for(j=I+1;j<n;j++) if(st[i].ave<st[j].ave) {temp=st[i]; st[i]=st[j]; st[j]=temp; } printf(“\nnow:”); fp=fopen(“stu-sort”,”w”); for(I=0;I<n;I++) {fwrite(&st[i],sizeof(struct student),1,fp); printf(“\n%8s%8s”,st[i].num,st[i].name); for(j=0;j<3;j++) printf(“%8d”,st[i].score[j]); printf(“%10.2f”,st[i].ave); fclose(fp); } 13.8将上题以排序的学生成绩文件进行插入处理。插入一个学生的3门课成绩,程序先计算新插入学生的平均成绩,然后将它按平均成绩高低顺序插入,插入后建立一个新文件。 解:#include <stdio.h> struct student {char num[10]; char name[8]; int score[3]; float ave; }st[10],s; main() {FILE *fp, * fp1 ; int I,j,t,n; printf(“\n NO.:”); scanf(“%s”,s.num); printf(“name:”); scanf(“%s”,s.name); printf(“score1,score2,score3:”); scanf(“%d,%d,%d”,&s. score[0], &s. score[1], &s. score[2]); s.ave=(s.score[0]+s.score[1]+s.score[2])/3.0; if((fp=fopen(“stu_sort”,”r”))==NULL) {printf(“can not open file.”); exit(0); } printf(“original data:\n”); for(I=0;fread(&st[i],sizeof(struct student),1,fp)!=0;I++) {printf(“\n%8s%8s”,st[i].num,st[i].name); for(j=0;j<3;j++) printf(“%8d”,st[i].score[j]); printf(“%10.2f”,st[i].ave); } n=I; for(t=0;st[t].ave>s.ave&&t<n;t++); printf(“\nnow:\n”); fp1=fopen(“sort1.dat”,”w”); for(I=p;j

2010-04-25

C语言深度解剖_word版

C语言深度解剖 word版 解开程序员面试笔试的秘密第一章关键字......................................................................................................................9 1.1,最宽恒大量的关键字----auto..........................................................................................11 1.2,最快的关键字---- register............................................................................................... 11 1.2.1,皇帝身边的小太监----寄存器............................................................................. 11 1.2.2,使用register 修饰符的注意点.............................................................................11 1.3,最名不符实的关键字----static........................................................................................12 1.3.1,修饰变量...............................................................................................................12 1.3.2,修饰函数...............................................................................................................13 1.4,基本数据类型----short、int、long、char、float、double........................................... 13 1.4.1,数据类型与“模子”............................................................................................... 14 1.4.2,变量的命名规则...................................................................................................14 1.5,最冤枉的关键字----sizeof...............................................................................................18 1.5.1,常年被人误认为函数...........................................................................................18 1.5.2,sizeof(int)*p 表示什么意思?........................................................................18 1.4,signed、unsigned 关键字................................................................................................19 1.6,if、else 组合.................................................................................................................... 20 1.6.1,bool 变量与“零值”进行比较...............................................................................20 1.6.2, float 变量与“零值”进行比较.................................................................................21 1.6.3,指针变量与“零值”进行比较...............................................................................21 1.6.4,else 到底与哪个if 配对呢?...............................................................................22 1.6.5,if 语句后面的分号............................................................................................... 23 1.6.6,使用if 语句的其他注意事项.............................................................................. 24 1.7,switch、case 组合........................................................................................................... 24 1.7.1,不要拿青龙偃月刀去削苹果.............................................................................. 24 1.7.2,case 关键字后面的值有什么要求吗?.............................................................. 25 1.7.3,case 语句的排列顺序...........................................................................................25 1.7.4,使用case 语句的其他注意事项..........................................................................27 1.8,do、while、for 关键字................................................................................................... 28 1.8.1,break 与continue 的区别.....................................................................................28 1.8.2,循环语句的注意点...............................................................................................29 1.9,goto 关键字......................................................................................................................30 1.10,void 关键字....................................................................................................................31 1.10.1,void a?............................................................................................................31 1.10,return 关键字................................................................................................................ 34 1.11,const 关键字也许该被替换为readolny....................................................................... 34 1.11.2,节省空间,避免不必要的内存分配,同时提高效率.................................... 35 1.12,最易变的关键字----volatile.......................................................................................... 36 1.13,最会带帽子的关键字----extern.................................................................................... 37 1.14,struct 关键字..................................................................................................................38 1.14.1,空结构体多大?.................................................................................................38 1.14.2,柔性数组.............................................................................................................39 1.14.3,struct 与class 的区别.........................................................................................40 1.15,union 关键字..................................................................................................................40 1.15.1,大小端模式对union 类型数据的影响............................................................. 40 1.15.2,如何用程序确认当前系统的存储模式?........................................................ 41 1.16,enum 关键字..................................................................................................................42 1.16.1, 枚举类型的使用方法..........................................................................................43 1.16.2,枚举与#define 宏的区别....................................................................................43 1.17,伟大的缝纫师----typedef 关键字................................................................................ 44 1.17.1,关于马甲的笑话.................................................................................................44 1.17.2,历史的误会----也许应该是typerename........................................................... 44 1.17.3,typedef 与#define 的区别...................................................................................45 1.17.4,#define a int[10]与typedef int a[10];.............................................................. 46 第二章符号..............................................................................................................................49 2.1,注释符号..........................................................................................................................50 2.1.1,几个似非而是的注释问题...................................................................................50 2.1.2,y = x/*p................................................................................................................. 51 2.1.3,怎样才能写出出色的注释...................................................................................51 2.1.3.1,安息吧,路德维希.凡.贝多芬................................................................. 51 2.1.3.2,windows 大师们用注释讨论天气问题....................................................51 2.1.3.3,出色注释的基本要求............................................................................... 52 2.2,接续符和转义符..............................................................................................................53 2.3,单引号、双引号..............................................................................................................54 2.4,逻辑运算符......................................................................................................................54 2.5,位运算符..........................................................................................................................55 2.5.1,左移和右移...........................................................................................................55 2.5.2,0x01<<2+3 的值为多少?...................................................................................55 2.6,花括号..............................................................................................................................56 2.7,++、--操作符...................................................................................................................56 2.7.1,++i+++i+++i......................................................................................................... 57 2.7.2,贪心法...................................................................................................................57 2.8,2/(-2)的值是多少?.........................................................................................................58 2.9,运算符的优先级..............................................................................................................58 2.9.1, 运算符的优先级表................................................................................................58 2.9.2,一些容易出错的优先级问题.............................................................................. 60 第三章预处理..........................................................................................................................61 3.1,宏定义..............................................................................................................................62 3.1.1,数值宏常量...........................................................................................................62 3.1.2,字符串宏常量.......................................................................................................62 3.1.3,用define 宏定义注释符号?.............................................................................. 63 3.1.4,用define 宏定义表达式.......................................................................................63 3.1.5,宏定义中的空格...................................................................................................64 3.1.6,#undef....................................................................................................................64 3.2,条件编译..........................................................................................................................65 3.3,文件包含..........................................................................................................................66 3.4,#error 预处理.................................................................................................................. 66 3.5,#line 预处理.....................................................................................................................67 3.6,#pragma 预处理...............................................................................................................67 3.6.8,#pragma pack........................................................................................................ 69 3.6.8.1,为什么会有内存对齐?........................................................................... 70 3.6.8.2,如何避免内存对齐的影响....................................................................... 70 3.7, #运算符.............................................................................................................................72 3.8,##预算符..........................................................................................................................72 第四章指针和数组..................................................................................................................74 4.1,指针.................................................................................................................................74 4.1.1,指针的内存布局...................................................................................................74 4.1.2,“*”与防盗门的钥匙............................................................................................. 75 4.1.3,int *p = NULL 和*p = NULL 有什么区别?.................................................... 75 4.1.4,如何将数值存储到指定的内存地址.................................................................. 76 4.1.5,编译器的bug?....................................................................................................77 4.1.6,如何达到手中无剑、胸中也无剑的地步.......................................................... 78 4.2,数组.................................................................................................................................78 4.2.1,数组的内存布局...................................................................................................78 4.2.3,数组名a 作为左值和右值的区别.......................................................................79 4.3,指针与数组之间的恩恩怨怨..........................................................................................80 4.3.1,以指针的形式访问和以下标的形式访问.......................................................... 80 4.3.1.1,以指针的形式访问和以下标的形式访问指针....................................... 81 4.3.1.2,以指针的形式访问和以下标的形式访问数组....................................... 81 4.3.2,a 和&a 的区别...................................................................................................... 81 4.3.3,指针和数组的定义与声明...................................................................................83 4.3.3.1,定义为数组,声明为指针....................................................................... 83 4.3.3.2,定义为指针,声明为数组....................................................................... 85 4.3.4,指针和数组的对比...............................................................................................85 4.4,指针数组和数组指针......................................................................................................86 4.4.1,指针数组和数组指针的内存布局...................................................................... 86 4.4.3,再论a 和&a 之间的区别.....................................................................................87 4.4.4,地址的强制转换...................................................................................................88 4.5,多维数组与多级指针......................................................................................................90 4.5.1,二维数组...............................................................................................................91 4.5.1.1,假想中的二维数组布局........................................................................... 91 4.5.1.2,内存与尺子的对比....................................................................................91 4.5.1.3,&p[4][2] - &a[4][2]的值为多少?........................................................... 92 4.5.2,二级指针...............................................................................................................93 4.5.2.1,二级指针的内存布局............................................................................... 93 4.6,数组参数与指针参数......................................................................................................94 4.6.1,一维数组参数.......................................................................................................94 4.6.1.1,能否向函数传递一个数组?................................................................... 94 4.6.1.2,无法向函数传递一个数组....................................................................... 96 4.6.2,一级指针参数.......................................................................................................97 4.6.2.1,能否把指针变量本身传递给一个函数................................................... 97 4.6.2.2,无法把指针变量本身传递给一个函数................................................... 98 4.6.3,二维数组参数与二维指针参数.......................................................................... 99 4.7,函数指针........................................................................................................................100 4.7.1,函数指针的定义.................................................................................................100 4.7.2,函数指针的使用.................................................................................................101 4.7.2.1,函数指针使用的例子............................................................................. 101 4.2.7.2,*(int*)&p ----这是什么?....................................................................... 102 4.7.3,(*(void(*) ())0)()------这是什么?.....................................................................102 4.7.4,函数指针数组.....................................................................................................103 4.7.5,函数指针数组的指针.........................................................................................104 第五章内存管理....................................................................................................................107 5.1,什么是野指针................................................................................................................107 5.2,栈、堆和静态区............................................................................................................107 5.3,常见的内存错误及对策................................................................................................108 5.3.1,指针没有指向一块合法的内存........................................................................ 108 5.3.1.1,结构体成员指针未初始化..................................................................... 108 5.3.1.2,没有为结构体指针分配足够的内存..................................................... 109 5.3.1.3,函数的入口校验......................................................................................109 5.3.2,为指针分配的内存太小.....................................................................................110 5.3.3,内存分配成功,但并未初始化.........................................................................110 5.3.4,内存越界............................................................................................................. 111 5.3.5,内存泄漏............................................................................................................. 111 5.3.5.1,告老还乡求良田......................................................................................112 5.3.5.2,如何使用malloc 函数.............................................................................112 5.3.5.3,用malloc 函数申请0 字节内存.............................................................113 5.3.5.4,内存释放..................................................................................................113 5.3.5.5,内存释放之后..........................................................................................114 5.3.6,内存已经被释放了,但是继续通过指针来使用............................................ 114 第六章函数........................................................................................................................... 115 6.1,函数的由来与好处........................................................................................................116 6.2,编码风格........................................................................................................................ 116 6.2,函数设计的一般原则和技巧..........................................................................................121 6.4,函数递归........................................................................................................................123 6.4.1,一个简单但易出错的递归例子........................................................................ 123 6.4.2,不使用任何变量编写strlen 函数......................................................................124 第七章文件结构....................................................................................................................127 7.1,文件内容的一般规则....................................................................................................127 7.2,文件名命名的规则........................................................................................................130

2010-04-25

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除