C语言程序的设计习题集沈国荣-参考答案

合集下载

C语言程序设计习题集参考答案

C语言程序设计习题集参考答案

附录:参考答案第一章程序设计基本概念一.选择题1-5 B A C D C 6 – 10 C A C B A二.填空题1.函数的说明部分,函数体2.变量的定义部分,执行部分3.最外层的一对大括弧内的部分4.输入和输出函数5.函数6.小写7.省第二章C程序设计的初步知识一.选择题1-5 D D A C B 6-10 A A D A A 11- 15 A B B C A 16-20 D A C B B二.填空题1. 9,62. 12,63. 15,64. 18,65. K,56.基本数据类型,构造类型,指针,空类型7.数组,结构体,共用体8.整型,字符型,实型,枚举类型9.整型,实型,字符,字符串10.用一个标识符代表一个常量11.数值型常量12.大写,小写13.数据类型,数据类型14.标识符15.基本型,短整型,长整型,无符号型,int,short,long,unsigned16.L,l 17. 十进制形式,指数形式18.fg_ab_ c_ _ de.h_ _ _ _ _ _j_ _ _k 19.‟\0‟ 20 75.5 21.double 22.-1038- 103823.x=3.600000 ,I= 3 24.赋值,算术,逻辑,条件,关系,逗豆25.(1)2 26.a<b||a<c.(2)3 .a>c&&b>cCC .a<c||b<ca=2,b=2,c=4 .a%2= = 127.(1)3 (2)2 (3)3 28. 2,1 29 4,8 30.强制类型转换第三章顺序结构一.选择题1-5 A B A B B 6-9 D C C D二.填空题1.控制语句、空语句、复合语句、表达式语句、函数调用语句2.函数调用3.在终端设备上按照指定的格式进行输出4.格式说明和普通字符5.%%6.地址,a的地址7.变量地址,变量名8.分号9.包含它的函数,调用函数10.花括弧11.GFEDCB 12.10<cr>40<cr>4<cr>4<cr>(<cr>表示回车换行符)13.10110 14.32<cr>16,15<cr>40<cr>13,13 15.PEOPLEpeople and computer第四章选择结构一.选择题1-5 B D B B A 6-10 A A A C D二.填空题1.if(a<=b) {x=1;printf(“####x=%d\n”,x); else {y=2;printf(“****y=%d\n”,y);}2.a= = 0 b= = 0 _derta < 03.x=1 y= 0x=24.x/10case 0:case 1: case 2: case 3:case 4: case 5:case 9:第五章循环结构一.选择题1-5 C C B C B 6-10 D A B C A二.填空题1表达式1;while(表达式2)表达式3;2.终止包含它的最内层循环的执行。

C语言程序设计习题集及参考答案

C语言程序设计习题集及参考答案

C语言程序设计习题集及参考答案C语言程序设计习题集及参考答案一、简介C语言是一种广泛使用的程序设计语言,它具有高效、灵活和易于维护的特点。

在学习C语言的过程中,通过练习题的方式可以帮助我们加深对语言的理解和应用。

本文将提供一些C语言的练习题,并给出参考答案,以帮助读者巩固所学知识。

二、习题集1、选择题(1) C语言中的基本数据类型包括哪些? A. int, float, char B. int, float, double C. char, float, double D. int, float, boolean (2) 下列哪个标识符是合法的C语言变量名? A. 123 B. _abc C. ab-c D. a bc(3) 下面哪个运算符的优先级最高? A. + B. && C. ++ D. !2、填空题(1) 在C语言中,整数的默认存储类型是____________。

(2) 写出计算a和b的最大值的表达式:max = a ______ b; (3) 写出判断一个数是否为偶数的表达式:num % ______ == 0。

3、编程题(1) 编写一个程序,输出1到10之间的所有奇数和偶数。

(2) 编写一个程序,判断一个整数是否为素数。

如果是素数,输出"Yes",否则输出"No"。

(3) 编写一个程序,输入一个字符串,然后将字符串中的所有字母转换为大写。

三、参考答案1、选择题(1) C语言中的基本数据类型包括int、float和char,因此答案为A。

(2) 在C语言中,合法的标识符不能以数字开头,不能包含特殊字符和空格,因此选项A和C是错误的。

选项B中使用下划线作为变量名的一部分是合法的,因此是正确的选项。

选项D中的a和bc之间没有分隔符,不符合标识符的命名规则,因此也是错误的。

因此,答案为B。

(3) 在C语言中,运算符的优先级从高到低依次为:()、[]、.&、!、++、--、~、* &、+ -、% 、/ %、<< >>、< > <= >= 、== !=、& ^ |、&& ||以及所有的逻辑运算符。

C语言程序设计习题集答案

C语言程序设计习题集答案

《高级语言程序设计》习题集(答案可能有错,仅供参考!)淮南师范学院计算机与信息工程系2013年5月目录选择及填空题 (1)程序输出选择题 (13)程序完善题 (20)程序阅读题 (30)编程题 (51)选择及填空题1.C语言程序编译过程中产生的文件有( B )。

A. 索引文件和文本文件两种B. 目标文件和可执行文件C. 二进制文件一种D. ASCII码文件和二进制文件两种2.C语言源程序的基本单位是( A )。

A. 函数B. 标识符C. 表达式D. 语句3.C程序的运行需要经过编译和连接两步进行。

4.C语言的编译单位是文件。

5.C语言源程序的基本单位是( A )。

A. 函数B. 标识符C. 表达式D. 语句6.以下叙述正确的是( C )。

A) C语言比其他语言高级B) C语言可以不用编译就能被计算机识别执行C) C语言以接近英语国家的自然语言和数学语言作为语言的表达形式D) C语言出现的最晚、具有其他语言的一切优点7.在一个C语言程序中( B )。

A) main函数必须出现在所有函数之前 B) main函数可以在任何地方出现C) main函数必须出现在所有函数之后 D) main函数必须出现在固定位置8.C++语言中工程文件的扩展名是( B )。

A. .cppB. .prjC. .cD. .obj9.C文件的扩展名是( C )。

(A).cpp (B).prj (C).c (D).txt------------------------------------------------------------------------------------------------------------------------- 1.符合结构化原则的三种基本控制结构是:选择结构、循环结构和顺序结构。

2.C语言中用于结构化程序设计的三种基本结构是()。

A) 顺序结构、选择结构、循环结构 B) if、switch、breakC) for、while、do-while D) if、for、continue------------------------------------------------------------------------------------------------------------------------- 1.若有以下定义,则能使值为3的表达式是( D )。

(word完整版)C语言程序设计课后习题1-8参考答案

(word完整版)C语言程序设计课后习题1-8参考答案

C语言程序设计课后习题1—8参考答案习题1参考答案一、简答题1、冯诺依曼计算机模型有哪几个基本组成部分?各部分的主要功能是什么?答:冯诺依曼计算机模型是由运算器、控制器、存储器、输入设备、输出设备五大功能部件组成的。

运算器又称算术逻辑部件,简称ALU,是计算机用来进行数据运算的部件。

数据运算包括算术运算和逻辑运算。

控制器是计算机的指挥系统,计算机就是在控制器的控制下有条不紊地协调工作的.存储器是计算机中具有记忆能力的部件,用来存放程序和数据.输入设备是用来输入程序和数据的部件。

输出设备正好与输入设备相反,是用来输出结果的部件。

2、简述计算机的工作原理。

答:计算机的工作原理可简单地概括为:各种各样的信息,通过输入设备,进入计算机的存储器,然后送到运算器,运算完毕把结果送到存储器存储,最后通过输出设备显示出来。

整个过程由控制器进行控制。

3、计算机软件系统分为哪几类?答:软件内容丰富,种类繁多,通常根据软件用途将其分为两大类:系统软件和应用软件。

系统软件是指管理、监控、维护计算机正常工作和供用户操作使用计算机的软件。

这类软件一般与具体应用无关,是在系统一级上提供的服务。

系统软件主要包括以下两类:一类是面向计算机本身的软件,如操作系统、诊断程序等。

另一类是面向用户的软件,如各种语言处理程序(像BC、VC等)、实用程序、字处理程序等。

在操作系统的基础上运行。

4、什么叫软件?说明软件与硬件之间的相互关系。

答:软件是指计算机程序及有关程序的技术文档资料。

两者中更为重要的是程序,它是计算机进行数据处理的指令集,也是计算机正常工作最重要的因素。

在不太严格的情况下,认为程序就是软件。

硬件与软件是相互依存的,软件依赖于硬件的物质条件,而硬件则需在软件支配下才能有效地工作.在现代,软件技术变得越来越重要,有了软件,用户面对的将不再是物理计算机,而是一台抽象的逻辑计算机,人们可以不必了解计算机本身,可以采用更加方便、更加有效地手段使用计算机。

C语言程序设计习题集答案

C语言程序设计习题集答案

本文由青青de爱昵贡献 doc文档可能在WAP端浏览体验不佳。

建议您优先选择TXT,或下载源文件到本机查看。

【单项选择题参考答案】 【1.1】答案: A 注释:int 是 C 语言的关键字 【1.2】答案: B 【1.3】答案:A 【1.4】答案:B 注释:include 是预处理命令;scanf 是函数 名;type 不是 C 语言的关键字. 【1.5】答案:D 【1.6】答案:D 【1.7】答案:A 【1.8】答案:A 注释: int 型表示整数 的范围是 -32768~ 32767. 【1.9】答案:D 注释:整型常量-1 在计算机中表示为补码 1111 1111 1111 1111,用十六进制显示这个 数时,最左边的 1 不会被解释为符号位,而 是与右边其它位共同转换为十六进制数. 【1.10】答案:B 注释: 长整型数 32768 在计算机内的表示是 1000 0000 0000 0000,以一般整型进行输出 时,此数恰是-32768 的补码. 【1.11】答案:C 注释: 长整型数 65539 在计算机内的表示是 0001 0000 0000 0000 0011, 以一般整型进行 输出时,仅将右侧 16 位二进制数转换为十 进制数. 【1.12】答案:A 注释: 语言中, 型的负数是采用补码表 C int 示的. 【1.13】答案:D 【1.14】答案:C 注释:变量 c 是字符型,可用字符常量为它 赋值.字符常量必须用单引号括起来,所以 B 是错误的;在单引号或双引号内的反斜线 '\'用于表示转义字符,A 选项在无引号时使 用反斜线是错误的;C 选项单引号内出现反 斜线表示它与后面的数字组成一个转义字 符;单引号只允许括起一个字符,D 选项在 单引号内出现 4 个字符,是错误的. 【1.15】答案:C 【1.16】答案:D 注释:空字符和空格符是不同的两个字符, 空格符的 ASCII 码值是 32, 空字符的 ASCII 值是 0. 【1.17】答案:A 【1.18】答案:B 【1.19】答案:A 【1.20】答案:C 【1.21】答案:B 注释:单纯从 C 语言语法来说,选项 B,C 都是正确的, 但是选项 C 中第一个运算的两 个对象都是整型常数, 其结果也是整型数 0, 最后的运算结果也就是 0 了. 【1.22】答案:C 【1.23】答案:A 注释:将条件表达式增加一个括号,此式变 为 anext 是 a[0]的地址, 引用其成员 n 再做前增 1 运算, 结果就是 2. 【1.80】答案:B 【1.81】答案:D 【1.82】答案:A 【1.83】答案:C 注释:联合变量 temp 的成员是占用同一存 储单元,它的长度是 4 个字节.266 的二进 制表示是 100001010,存放在存储单元的低 端两个字节,如下图: 高字节 00000001 低字节 0 0 0 0 1 0 1 0 引用 temp.ch 进行输出,只取最低的第一个 字节. 【1.84】答案:D 注释: 由于结构指针指向了结构数组的 0 号 元素, 所以表达式(p++)->m 的含义是先取出 m(变量 a 的地址) ,然后指针 p 加 1.表达 式*(p++)->m 的含义是先取出 m 的内容 (变 量 a 的值)然后指针 p 再加 1. , 表达式(*p).m 的含义是取出 m(变量 a 的地址) .表达式 *(++p)->m 的含义是先将指针 p 加 1,然后 再取 m 的内容(变量 b 的值) . 【1.85】答案:D 【1.86】答案:B 【1.87】答案:C 【1.88】答案:A 【1.89】答案:D 【1.90】答案:D 【1.91】答案:A 【1.92】答案:B 【1.93】答案:A 【1.94】答案:D 注释: 函数 fopen 中的第二参数是打开模式, "r"模式是只读方式,不能写文件;"a+"模式 是读/追加方式,允许从文件中读出数据, 但所有写入的数据均自动加在文件的末尾; "w"模式是写方式,允许按照用户的要求将 数据写入文件的指定位置,但打开文件后, 首先要将文件的内容清空."r+"模式是读/ 写方式,不但允许读文件,而且允许按照用 户的要求将数据写入文件的指定位置, 且在 打开文件后,不会将文件的内容清空.本题 的要求是"修改"文件的内容,因此只能选择 答案 D. 【1.95】答案:C 【1.96】答案:D 【1.97】答案:C 【1.98】答案:B 注释:语句 z=2*(N+Y(5+1)引用了两个宏定 义.C 语言是区分字母大小的,第二个宏定 义中的 N 直接用 3 替换,用 5+1 替换 n,则 有 z=2*(3+(3+1)*5+1);结果是 48.注意对 于带参数的宏亦是直接的文本替换, 此例中 n 用 5+1 去替换,结果是(N+1)*5+1,而 不是(N+1)*(5+1). 【1.99】答案:C 注 释 : 宏 替 换 后 的 结 果 是 printf("%d",10/3*3). 【1.100】答案:C 【阅读程序题参考答案】 【2.1】参考答案:D 注释: 程序中除法运算的两个操作数均是整 型,运算结果也是整型. 【2.2】参考答案:B 注释:C 语言允许在程序块(分程序)中说明 变量. 【2.3】参考答案:C 注释:变量 i 中的负号传送给变量 n 后,因 n 是无符号数,已不作为负号处理. 【2.4】参考答案:D 注释:对变量 x 的――操作是后缀形式,变 量 x 的减 1 操作要在执行完 printf 函数之后 才进行, 所以变量 x 的值在输出的时候仍然 保持原值 10. 【2.5】参考答案:B 注释:C 语言在执行 printf()时,对函数中的 表达式表列的处理顺序是从后向前, 即先处 理 n- -,再处理 n++,最后处理 n,而且每 一个表达式作为一个处理单元, 也就是说在 不同的表达式中自增自减运算是单独考虑 的. 【2.6】参考答案:A 注释:变量 x 和变量 y 做按位与,结果为 0x0200,右移 4 位为 0x0020,再与 0x005f 做按位或,最后结果为 0x007f. 【2.7】参考答案:A 注释: 逗号表达式的结果是用逗号分开的最 后一个表达式的值, 此题由于 c=='A'的值是 0,所以逗号表达式的值为 0. 【2.8】参考答案: B 【2.9】参考答案: A 【2.10】参考答案: C 注释:在输出格式描述"%m.ns"中,m 是输 出总长度,n 是实际字符的个数,这里 m 没 有给出, 则输出总长度就是实际输出字符的 个数. 【2.11】参考答案: C 【2.12】参考答案:B 【2.13】参考答案:C 【2.14】参考答案:B 【2.15】参考答案:D 【2.16】参考答案:A 【2.17】参考答案: C 【2.18】参考答案:A 【2.19】参考答案: C 注释:在 switch 语句中,case 本身仅起到语 句标号的作用,不会改变语句的流程,执行 break 语句才能退出当前的 switch 语句. 【2.20】参考答案: D 注释:siwtch 语句的表达式中,变量 c 是后 缀的增一运算,第一次执行 do-while 循环 时,执行 case 'A'后面的语句. 【2.21】参考答案: D 【2.22】参考答案: B 【2.23】参考答案: B 注释:fabs()是浮点数绝对值函数. 【2.24】参考答案: A 【2.25】参考答案: C 注释:C 语言允许在程序块(分程序)内说 明变量, 如果在程序块内说明的变量和程序 块外的变量同名, 在块外说明的变量在块内 是不可见的.可将此题和【2.11】进行比较, 加深理解. 【2.26】参考答案: C 【2.27】参考答案: B 【2.28】参考答案: ① D ② A 【2.29】参考答案:D 【2.30】参考答案: B 注释:输出结果为字符串长度. 【2.31】参考答案: D 注释:字符串拷贝函数 strcpy()要求的两个 参数都是字符串首地址. 本题中第二个参数 是字符串常量, 接受这个字符串的第一个参 量不是直接给出字符数组名, 而是进行了地 址运算后的结果.由于 str 字符串的长度是 13,除 2 取整后是 6,第一个参数给出的地 址是字符数组 str 的首地址加 6, 也就是原来 字符串中第二个空格的位置, 把"es she"从该 处放入,字符串 str 变为"How does she". 【2.32】参考答案: C 注释:main 函数调用 func 函数时,第一个 实参使用的是逗号表达式的值,也就是 x+y 的结果.由于对变量 x,y,z 进行的是后缀 运算,所以函数 func 的参数值是 13 和 8. 【2.33】参考答案: C 【2.34】参考答案: ① C ② A ③ C 【2.35】参考答案: C 【2.36】参考答案: B 注释:函数 fun 进行了递归调用,实际进行 的运算是 5×4×3×2×1×3×10. 主函数内 说明的局部变量 w 屏蔽了外部变量 w, 所以 在主函数中外部变量 w 是不可见的, 在调用 printf 函数时表达式"fun(5)*w"中 w 的值是 10. 【2.37】参考答案: D 注释:main 函数三次调用了函数 funa,在 funa 函数中的静态变量 c 仅在第一次调用时 进行了初始化, 再次调用时不再对静态变量 赋初值. 【2.38】参考答案: B 注释:main 函数和 num 函数中都说明了变 量 a 和 b,由于它们是内部变量,所以它们 分别在说明它们的函数内有效.外部变量 x 和 y 在函数 num 之后被说明,而在 num 函 数中又要引用它们,所以在 num 函数中用 关键字"extern"说明变量 x 和 y 是一个外部 变量,也就是通知计算机这两个变量在 fun 函数以外被说明,此处不是定义两个 int 型 变量. 【2.39】参考答案: D 注释:函数 f 中的变量 c 是静态变量,仅在 第一次调用函数 f 时它被初始化为 3,第二次 调用函数 f 时 c 的值是 4,第三次调用函数 f 时 c 的值是 5. 【2.40】参考答案: D 【2.41】参考答案: D 注释:程序中有三个"x"分别在三个不同的 函数中,这三个"x"都是自动变量,所以三 个"x"分别局部于三不同的函数,在三个函 数中对"x"的操作互不影响. 【2.42】参考答案: A 【2.43】参考答案: A 注释: *(++p)和*++p 都是指针变量值前加 1, 第一次指向 a[1],第二次指向 a[2];a+3 是 a[3]的地址. 【2.44】参考答案: C 注释:②句没有语法错误,但是 a+6 指向数 组之外,因为 a 是 a[0]的地址,a+1 是 a[1] 的地址,a+2 是 a[2]的地址,显然数组 a 没 有 a[6]分量.③句错误,因为 a[1]是地址常 量,它是 a[1][0]的地址,对于地址常量是不 可以进行赋值运算的. 【2.45】参考答案: ① D ② A 注释:如果 FMT 定义为"%x\n",则输出的 16 进制数据用小写字母表示. 【2.46】参考答案: A 注释:语句"p=&a[0]"表示将数组 a 中元素 a[0]的地址赋给指针变量 p,则 p 就是指向 数组首元素 a[0]的指针变量, "&a[0]"是取数 组首元素的地址.对于指向数组首址的指 针,p+i(或 a+i)是数组元素 a[i]的地址, *(p+i)(或*(a+i))就是 a[i]的值. 【2.47】参考答案: B 【2.48】参考答案: D 【2.49】参考答案: D 【2.50】参考答案: A 注释:变量 g 是指向函数的指针,(*g)(a,b) 是调用指针 g 所指向的函数. 【2.51】参考答案: C 注释:p 是指针,pp 是指向指针的指针. 【2.52】参考答案: A 注释: 对于指向数组的指针变量可以做下标 运算,p[i]和 alpha[i]都是指向字符串的首地 址,*p[i]取出字符串的第一个字符. 【2.53】参考答案: ① D ② A ③ D ④ D ⑤ B 注释:pp 是一个二维指针数组,pp+1 指向 数组的第二维,*(pp+1)是第二维的起始地 址,**(pp+1)是第二维第一个元素的地址, ***(pp+1)是第二维第一个元素的内容,所 以,①的参考答案应选 D.*(pp+1)+1 是第 二维第二个元素的地址,*(*(pp+1)+1)是第 二维第二个元素,(*(*(pp+1)+1))[4]则是第 二维第二个元素所指字符串下标为 4 的元 素,即是字符 w,故③应当选 D. 【2.54】参考答案: ① B ② C 【2.55】参考答案:D 【2.56】参考答案:C 注释: 联合体成员的取值是最后一次给成员 赋的值. 【2.57】参考答案: B 注释:整型数组 i 和字符数组 c 共用存储空 间,给 i 赋值也等于给 c 赋值,所以 s->c[0]=0x39,所以输出 9. 【2.58】参考答案:A 注释:基本概念.EOF 是由 C 语言在头文 件 stdio.h 中定义的,用户可以直接使用. 【程序填空题参考答案】 【3.1】答案: ① a+b ② a-b ③ a-b 【3.2】答案:① 1.0/(float)(i*i) ② sqrt(6*s) 【3.3】答案:① *k=p 【3.4】答案:① t=t*i ② t=t>0?-1:1 【3.5】答案:① d=1 ② k++ ③ k<=n 【3.6】答案: ① x>=0 ② x0 ③ m=m/10 【3.9】答案:① i==j ② k!=i&&k!=j 【3.10】答案:① i<=9 ② j%3!=0 【3.11】 答案: m=n ② r!=0 ③ return(n) ① 【3.12】答案:① float a[10],x ② i<=9 ③ i<=8 ④ j<=9-i ⑤ a[j]>a[j+1] ⑥ a[j]=a[j+1] ⑦ i<=9 ⑧ i%5==0 【3.13】答案:① &a[i] ② continue 注释:①是基本概念,使用 scanf 函数输入 数组元素的值.当输入的元素值小于 0 时, 应当跳过后面的语句,取下一个数,所以② 要填入 continue. 【3.14】答案:① s[j++]=s[i] ② s[j]=s[i] 【3.15】答案:① s[j++]=s[i] 【3.16】答案:① x[i++] 【3.17】答案:① i=strlen(a);i>=j;i-- ② a[i+1]=a[i] 【3.18】答案:① '\0' ② str1[i]-str2[i] 【3.19】答案:① j++ ② '\\' ③ j++ ④ '\\' ⑤ j++ ⑥ '\0' 【3.20】答案:① t[k]!= '\0' ② t[k]== '\0' 【3.21】 答案: <=n ② s ③ 0 ④ fun(k) ① 【3.22】答案:① a[fmax(a,N)] ② k=p 【3.23】 答案: last*n%1000 ② x!=min-x ① ③ flag=0 【3.24】答案:① (x0+a/x0)/2 ② a,x1 注释:根据迭代公式,①处应当是计算迭代 值 x1=(x0+a/x0)/2.按照求平方根的要求, 当 迭 代 的 精 度 不 能 满 足 "(fabs(x1-x0)>0.00001)"时,则要继续迭代, 因此②处应当填写"a,x1".程序中调用了求 绝对值的库函数 fabs( ). 【3.25】答案:① 2+age(n-1) ② age(5) 注释:由于程序是递归算法,因此首先要建 立问题的递归数学模型. 根据原题的描述可 以写出如下递归公式: age(n) = 10 (n=1) age(n) = 2+age(n-1) (n>1) 对照程序和递归公式可以看出:n 的含义是 第 n 位学生.很显然,要求第 5 位学生的年 龄,②处应当是调用函数 age,实参的值应 当是 5.在①处应该是函数的递归调用,根 据递归公式,应当填写:2+age(n-1). 【 3.26 】 答 案 : ① return(1) ② return (sum(n-1)+n) 注释:按照常规的编程方法,此问题可采用 一个循环语句实现.阅读程序,没有发现循 环语句,这时,应当认为原来的编程者使用 的是非常规的算法. 对于这样常规算法需要 用循环实现而没有使用循环的程序, 就可以 肯定地认为,一定是使用了递归算法. 将问题"求1~n 的累加和"的公式写 成递归定义,可以是如下形式; sum(n)=1 当 n=1 时 sum(n)=sun(n-1)+n 当 n>1 时 根据此递归定义,可以很容易完成程序. 【3.27】答案:① return(1) ② n*facto(n-1) 注释: 我们熟悉的求 n!的算法一般是采用循 环语句实现, 但在此程序中根本没有循环语 句.这时我们应该想到:是采用递归算法实 现的.首先写出求 n!的递归公式; n!=1 当 n=1 时 n!=n*(n-1) 当 n>1 时 根据此递归定义,可以很容易完成程序. 【 3.28 】 答 案 : ① com=n ② com=combin(n-1,m-1) + combin(n-1,m) 注释: 题目的说明中已经给出组合问题的递 归定义,不需要读者自己寻找递归表达式. 程序中的语句"if (n<2*m) m=n-m;"完成了 题目中叙述的"用公式(1)进行简化"的工作. 【 3.29 】 答 案 : ① *str=='\0' ② 1+strlen(str+1) 注释: 求串长算法的关键是确定串结束标记 '\0'的位置.根据求串长的方法,可以得到如 下递归算法:指针 str 指向字符串的首字符 如果 当前字符(*str)== 串结束标记'\0' 则 串长=0 否则 串长 = 1+除第一个字符之外的剩余 字符串的串长 因此,在①的位置上应当填写"*str=='\0'", 以判断当前字符(*str)是否是串结束标记 '\0'. 在②的位置应当是根据上面的递归算法 进 行 递 归 调 用 , 因 此 应 当 填 写 "1+strlen(str+1)". 【3.30】 答案: &n ② m%10 ③ m/10 ④ ① m>0 ⑤ r(m) 【3.31】答案:① prt(c, n-1) ② prt(' ' , n-i) ③ prt('*', i) 注释:函数 prt 的功能是输出 n 个字符 c. 【3.32】答案:① y(x, n-1) 注释:这显然是一个递归问题,首先要对原 来的数学函数定义形式进行变形, 推导出原 来函数的等价递归定义. 可以推导出原来函 数的递归定义如下. y(x,n)=x 当 n=0 时 y(x,n)=sqrt(x+y(x,n-1)) 当 n>0 时 【3.33】 答案: p-- ② *p='\0' ③ *p=c ④ ① p-- ⑤ *s++ 注释:在递归算法中,指针 s 指向字符串首 部要反向的字符,即要将指针 s 所指向的字 符与指针 p 所指向的字符串尾的字符('\0') 进行交换,在交换过程中,将尚没有交换的 字符串的中间部分作为一个整体, 进行递归 处理.程序中首先执行"c=*s",将首字符存 入临时变量;然后执行"*s=*p",将尾字符 存入串首; 执行"revstr(s+1)"是递归处理串的 中间部分,这时,在②处应当填入"*p='\0'", 即存入串结束标记. 这是这一程序中的关键 所在.在③处要完成将存在临时变量 c 中的 字符存入串尾的工作,应当填写"*p=c". 【3.34】答案:① str+1 ② return ①改为 n-2 【3.35】 答案: p>=q ② max=s ③ p,max ① ④ p+1,q ⑤ &array[0], &array[9] 注释: 本程序中的排序部分采用的是递归算 法.函数 sort 的两个形参的含义是:对指针 p 和指针 q 之间的数据进行排序.由语句 "for( s=p+1; s<=q; s++)"中指针 p 和指针 q 之间的关系可以得出:指针 p 不应在指针 q 之后,因此①处应填"p>=q",⑤处应填 "&array[0],&array[9]". 由于变量 max 是指向当前最大值的指针, 则 当找到新的最大值时, max 中保存的应该是 新的最大值的指针, 因此②处应填"max=s". 当调用函数 swap 交换两个变量值的时候, 要求实参是变量的地址,因此,③处应填 "p,max"将最大值存入指针 p 所指的单元. 由于问题的要求是"从大到小"排序,通过执 行一次函数 sort 使最大值已经放到了指针 p 所指的单元中,因此,下一遍排序的时候, 只要对指针 p 之后的元素进行即可, 所以④ 处应填"p+1,q". 【3.36】答案:① a+1 ② n%10+'0' 【3.37】答案:① s<t ② s++ ③ t-【3.38】答案;①*(p+4*i+j) 注释:p 是一个一级指针,赋值后保存二维 数组 a 的首地址,做加法运算加 1 时, 实际地 址增加一个它所指向的数据类型的长度. 在 C 语言中,多维数组在计算机中是按行存储 的, 所以在本题中要通过指针访问二维数组 中的数据,必须将二维下标转换为一维下 标. 【3.39】答案:① '\0' 或 0 ② ++ 注释:在 C 语言中,进行字符串处理时,必 须注意串结束标记'\0', 它是在进行串处理时 的最基本的要求,所以①中要填入'\0'.为了 使用 putchar 输出一个字符串,则必须有改 变指针的运算,这里只能使用++运算. 【3.40】答案:① p++ ② w[i+1]=w[i] 【3.41】答案:① && ② *a<*b ③ *a++, *b++ ④ == ⑤ != ⑥ '\0' ⑦ w=s ⑧ n++ ⑨ t=s[i];s[i]=s[j];s[j]=t; ⑩ s3[0] 【3.42】答案:① *++pa ② *++pa ③ *pa ④ return(total) ⑤ n<=2 || n>=MAXNUM+1 ⑥ num+n 【3.43】 答案: stu.name ② &stu.score ③ ① p->name ④ p->score 注释:这是结构中的最基本概念. 【 3.44 】 答 案 : ① struct student ② strcmp(stu[i].name,str)==0 ③ break 注释: 程序的主体是一个二重循环, 内层 for 循环完成查找学生的工作. ①处是进行结构 数组说明并初始化, 按照结构变量说明的格 式规定,应该填写:strcut student.②处为 if 语句的逻辑条件,应当是当查找到指定的 学生后输出学生的情况,因此应当填写: strcmp(stu[i].name,str)==0.③处应当将控制 退出内层的 for 循环,只能选择 break 语句. 【3.45】答案:① p+n ② gets(p->name) ③ p+n 注释: 本程序是通过函数完成对于结构数组 的输入和输出操作. 函数 data_in 和 data_out 十分相似, 都是通过结构指针 p 和结构指针 q 来操作结构数组的元素.由于指针 q 在两 个函数中的作用相同, 所以①和③填写的内 容也应该是相同的;由 for 语句中的循环终 止条件"p<q"可以看出, 应该指在数组的最 q 后一个元素之后, 所以①和③应当填入 p+n. ②应当完成姓名的输入工作,应当为 gets(p->name). 【3.46】答案:① j=i-1 ② > ③ j-- ④ j+1 ⑤ j+1 注释:程序的基本思想是:对于输入的第 i 个整数 num,从数组 array 中已有的元素中 倒序开始查找.若数组 array 中的第 j 个元 素的值大于 num,则将数组中的元素 j 向后 移动一个位置;否则,就应将 num 插入到 当前位置作为元素 j.因此,程序的基本设 计思想就是插入排序. 程序中内层的 for 循环完成查找插入位置的 工作,因此答案①,②和③有密切的关系, 要统一考虑.同样,程序中的答案④和⑤也 有密切的关系,要统一考虑. 【3.47】答案:① != '\n' ② p=top 【3.48】答案:① p1->next 【3.49】答案:① head ② p ③ p=head 注释: 程序在从键盘接受字符的同时就在建 立起链表, 所建立的链表本身就已经是反序 排列的, 因此在反序输出字符串的时候实际 只需沿着链表的第一个结点开始, 顺序操作 即可. 【3.50】答案:① return ② (struct data *) malloc(sizeof(struct data)) ③ input( ) ④ p!=NULL ⑤ p=p->next 【 3.51 】 答 案 : ① (struct student *) ② tail=tail->next ③ head 注释: ①malloc 函数的作用是在内存开辟指 定字节数的存储空间, 并将此存储空间的地 址返回赋给尾指针 tail,但是此地址为 void 型, 应将其强制转换为所要求的结构指针类 型. ②新开辟的结点的内存地址存于 tail 所指向 的已建立的链表的尾结点的结构成员 next, 新结点连入链表以后,尾指针 tail 应指向新 的结点. 【3.52】 答案: (struct student *) ② (struct ① list *) ③ return(head) 【3.53】答案:① FILE ② !feof(fp) 注释:FILE 是文件结构类型名.feof()是测 试文件结束标志的函数. 【3.54】答案:① "second.txt" ② fclose(fp) 【 3.55 】 答 案 : ① 3 ② !feof(f1) 或 feof(f1)==0 ③ f2 ④ fclose(f2) ⑤ fclose(f1) 注释:程序中使用了带参数的 main 函数, 其中整型参数 argc 为命令行中字符串的个 数, 此程序运行时输入的字符串有可运行程 序名, 文件 1 和文件 2, argc 不应小于 3. 故 字符串指针 argv[0]指向可运行程序名, 字符 串指针 argv[1]指向输入文件名, 字符串指针 argv[2]指向输出文件名,由上所述②处给出 循环条件是输入文件是否结束, ③处需要填 出输出文件名.最后两处是关闭两个文件, 原则上关闭文件没有顺序要求, 但习惯上是 后打开的文件先关闭. 【3.56】答案:① *argv[1] ② (*funcp)(n) ③ s+=i 注释: 程序执行时输入的命令及参数的个数 (操作系统规定用空格表示字符串的分隔) 由系统赋给主函数的形数 argc,输入的命令 和参数以字符串的格式保存, 字符串的首地 址分别赋给指针数组 argv 的各个元素, 其中 argv[1]是'+'或'-',分别表示累加或阶乘.程 序根据 argv[1]所指向的字符串的内容给指 向函数的指针变量 funcp 赋值.②处要求的 语句是根据指向函数的指针变量的内容对 相应的函数实现调用,所以选择 A 或 B 是 错误的; funcp 是被调函数的地址, 据 *funcp 实现了对函数的调用,根运算符的结合性, (*funcp)表示取 funcp 的目标,而*funcp(n) 则 funcp 先和(n)结合,funcp 就被解释为函 数名,显然是错误的. 【3.57】答案:① "w" ② -32 ③ "r" 【3.58】答案:① "bi.dat" ② &j ③ fp 【 3.59 】 答 案 : ① fgetc(fp))!=EOF ② &keyword[i].word[0] ③ s++ ; q++ ; ④ *s==*q ⑤ (word=getword(cp))!=NULL 【 3.60 】 答 案 : ① "a+" ② rewind(fp) ③ !=NULL ④ flag=0 ⑤ ferror(fp)==0 【编写程序题参考答案】 【4.1】参考答案: #include main( ) { int year; float money,rate,total; /* money:本金 rate: 月利率 total:本利合计*/ printf("Input money and year =?"); scanf("%f%d", &money, &year); /* 输入本 金和存款年限 */ if(year==1) rate=0.00315; /* 根据年限确定 利率 */ else if(year==2) rate=0.00330; else if(year==3) rate=0.00345; else if(year==5) rate=0.00375; else if(year==8) rate=0.00420; else rate=0.0; total=money + money * rate * 12 * year; /* 计算到期的本利合计 */ printf(" Total = %.2f\n", total); } 【4.2】参考答案: #include main( ) { int year, month, days; printf("Enter year and month:"); scanf("%d%d", &year, &month); switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31; break; /* 处理"大"月 */ case 4: case 6: case 9: case 11: days=30; break; /* 处理"小"月 */ case 2: if(year%4==0&&year%100!=0 || year%400==0) days=29; /* 处理闰年平月 */ else days=28; /* 处理不是闰年平月 */ break; default: printf("Input error!\n"); /* 月份错误 */ days=0; } if( days!=0 ) printf("%d, %d is %d days\n", year, month, days); } 【4.3】参考答案: #include main ( ) { float data1, data2; /* 定义两个操作数变 量 */ char op; /* 操作符 */ printf("Enter your expression:"); scanf("%f%c%f", &data1, &op, &data2); /* 输入表达式 */ switch(op) /* 根据操作符分别进行处理 */ { case '+' : /* 处理加法 */ printf("%.2f+%.2f=%.2f\n", data1, data2, data1+data2); break; case '-' : /* 处理减法 */ printf("%.2f-%.2f=%.2f\n", data1, data2, data1-data2); break; case '*' : /* 处理乘法 */ printf("%.2f*%.2f=%.2f\n", data1, data2, data1*data2); break; case '/' : /* 处理除法 */ if( data2==0 ) /* 若除数为 0 */ printf("Division by zero.\n"); else printf("%.2f/%.2f=%.2f\n", data1, data2, data1/data2); break; default: /* 输入了其它运算符 */ printf("Unknown operater.\n"); } } 【4.4】分析:打印此图形用两重循环实现. 图形要重复 n 行, 故采用循环结构实现循环 n 次,循环体内部打印一行'*'号,把上述思路 表示为: for(i=1;i<=n;i++) 打印一行'*'号; 每行有 n 个'*'号,再采用循环结构实现 n 次 循环,循环内部用格式输出语句打印一个'*' 号,即: for(j=1;j<=n;j++) printf("*"); 按照上述思路,实现打印矩形. 参考答案: main() { int i,j,n; printf("\nPlease Enter n:"); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("*"); printf("\n"); } } 【4.5】 分析: 此图形和上题的区别在于在每 一行先要打印空格,然后再打印 n 个'*'号, 在上题第一层循环体内打印'*'号的循环前 面增加一个循环打印空格. 每行空格的个数 是逐行减少的, 由于第一层循环的控制变量 i 是逐行增 1,所以用一个固定值的数减去 i 就可实现对空格个数的控制, 在此题中固定 值可使用变量 n. 参考答案: main( ) { int i,j,n; printf("\nPlease Enter n:"); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n-i;j++) printf(" "); for(j=1;j<=n;j++) printf("*"); printf("\n"); } } 【4.6】分析:此题和上题的区别在于每行'*' 的数量逐行减少, 可以使用上题控制空格个 数的思路来控制'*'号的个数,请注意每行'*' 的个数都是奇数. 参考答案: main( ) { int i,j,n; printf("\nPlease Enter n:"); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n-i;j++) printf(" "); for(j=1;j<=2*i-1;j++) printf("*"); printf("\n"); } } 【4.7】 分析: 此题图形是第 3 题图形的垂直 反转,在编程上我们可以变换一个思路.对 于图形中的第 i 行(1≤i≤n) ,共需要输出 2n-i 个字符, 其中前面的 i-1 个字符为空格, 后面的字符为'*'号.按照这一思路可以编写 出如下程序. 参考答案: main( ) { int i,j,n; printf("\nPlease Enter n:"); scanf("%d", &n); for( i=1;i<=n;i++ ) /* 重复输出图形的 n 行 */ { for( j=1;j<=2*n-i;j++ ) /* 重复输出图形 一行中的每个字符 */ if(j<=i-1) printf(" "); /* 输出前面的空格 */ else printf("*"); /* 输出后面的*号 */ printf("\n"); } } 【4.8】 分析: 此题和第 3 题的区别仅是每行 的'*'个数增加 n-1 个. 参考答案: main( ) { int i,j,n; printf("\nPlease Enter n:"); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n-i;j++) printf(" "); for(j=1;j<=2*i-1+(n-1);j++) printf("*"); printf("\n"); } } 【4.9】分析:对于空心图形,我们可以在上 题的基础上,对于打印'*'号的循环进行修 改 , 仅 在 循 环 开 始 值 (j=1) 和 循 环 结 束 值 (j=2*(i-1)+n)时打印'*'号, 其它位置都打印空 格.另一种思路是将每行打印的空格和'*' 的两个循环合为一体考虑, 在判断出需要打 印'*'的两个位置及第一行和最后一行相应 位置外,其余位置都打印空格. 参考答案: main( ) { int i,j,n; printf("\nPlease Enter n:"); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=2*n+i-3;j++) if(j==n-i+1 || j>n-i+1 && (i==1||i==n)) printf("*"); else printf(" "); printf("*\n"); } } 【4.10】分析:此图形可以理解为两个空心 梯形反向连接而成, 因此可以利用上题的思 路进行输出. 参考答案: main( ) { int i,j,n; printf("\nPlease Enter n:"); scanf("%d",&n); for(i=1;i<=n;i++) /* 输出图形的上半部分 (含中心行) */ { for(j=1;j<=2*n-i-1;j++) if(j==i) printf("*"); else printf(" "); printf("*\n"); } for(i=1;i<n;i++) /* 输出图形的下半部分 (不含中心行) */ { for(j=1;j<=n+i;j++) if(j==n-i) printf("*"); else printf(" "); printf("*\n"); } } 【4.11】分析:此题与上题的区别在于打印 '*'号的位置不同,编程时要找出应打印'*'号 的位置和两个循环变量 i, 以及行数 n 的关 j 系. 参考答案: main( ) { int i,j,n; printf("\nPlease Enter n:"); scanf ("%d", &n); for(i=1;i<=n;i++) /* 输出图形的上半部分 (含中心行) */ { for(j=1;j<=2*n-i;j++) if(j==n-i+1 || j>n-i+1 && i==1) printf("*"); else printf(" "); printf("*\n"); } for(i=1;i<n;i++) /* 输出图形的下半部分 (不含中心行) */ { for(j=1;j<=3*(n-1)-i;j++) if(j==i+1 || j>i+1 && i==n-1) printf("*"); else printf(" "); printf("*\n"); } } 【4.12】参考答案: main( ) { int i,j,n; printf("\nPlease Enter n:"); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) if(j==n-i+1 || i==1 || i==n) printf("*"); else printf(" "); printf("\n"); } } 【4.13】参考答案: main( ) { int i,j,n; printf("\nPlease Enter n: "); scanf("%d", &n); for(i=1;i<=n;i++) /* 输出图形的上半部分 (含中心行) */ { for(j=1;j<=n-i;j++) if(j==1 || j==n-i+1) printf("* "); else printf(" "); printf("\n"); } for(i=1;i<n;i++) /* 输出图形的下半部分 (不含中心行) */ { for(j=1;j<=i+1;j++) if(j==1 || j==i+1) printf("* "); else printf(" "); printf("\n"); } } 【4.14】参考答案: main( ) { int i,j,n; printf("\nPlease Enter n: "); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) if(j==1 || j==i || j==n) printf("*"); else printf(" "); printf("\n"); } } 【4.15】参考答案: main( ) { int i,j,n; printf("\nPlease Enter n: "); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n+i-1;j++) if(j>n-i) printf("*"); else printf(" "); printf("\n"); } for(i=1;i<n;i++) { for(j=1;j<=2*n-i-1;j++) if(j>i) printf("*"); else printf(" "); printf("\n"); } } 【4.16】参考答案: main( ) { int i,j,n; printf("\nPlease Enter n: "); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n+i-2;j++) if(j==n-i+1) printf("*"); else printf(" "); printf("*\n"); } } 【4.17】分析:首先对图形进行设计,坐标 的 X 轴和 Y 轴分别对应屏幕的列和行,一 个正弦函数的周期为 0~360 度,我们把一 个步长定义为 10 度,打印时每换一行等于 函数的自变量增加 10 度; 屏幕的列宽为 80, 函数值为 0 对应屏幕的第 40 列,sin(x)的值 在-1~1,变换成列数为以 0 为中心的-30~ 30,对应屏幕上第 10~70 列.设计程序时, 控制换行的自变量 i 乘以 10 得到正弦函数 的 X 值,调用库函数 sin()求出函数值再乘 以 30 输出的列宽,因为我们以屏幕的第 40 列为 0 点,故再加上 40 得到应在屏幕上显 示的点. 参考答案: #define PAI 3.14159 #include <math.h> main( ) { double x; int y,i,yy; for(i=1; i<80; i++) /* 打印图形的第一行 */ if(i==40) printf("*"); /* i 控制打印的列位置 */ else printf("-"); printf("\n"); for(x=10.0;x<=360.0;x+=10.) /* 从 10 度 到 360 度 */ { y = 40+30*sin(x*PAI/180.0); /* 计算对应 的列 */ yy = 40>y ? 40 : y; /* 下一行要打印的字符 总数 */ for (i=1;i<=yy;i++) /* 控制输出图形中的 一行 */ { if(i==y) printf("*"); /* i 控制打印的列位 置 */ else if(i==40) printf("|"); /* 打印中心的竖 线 */ else printf(" "); } printf("\n"); } } 【4.18】分析:首先设计屏幕图形,如果预 计圆形在屏幕上打印 20 行,所以定义圆的 直径就是 20,半径为 10,圆的方程是 X2× Y2=R2,因为图形不是从中心开始打印而是 从边沿开始,所以 Y 从 10 变化到-10,根据 方程求出 X,对求得的 X 值再根据屏幕行宽 进行必要的调整得到应打印的屏幕位置. 参考答案: #include <math.h> main( ) { double y; int x,m; for(y=10;y>=-10;y--) /* 圆的半径为 10 */ { m = 2.5 * sqrt(100-y*y); /* 计算行 y 对应 的列坐标 m */ for(x=1;x<30-m;x++) printf(" "); /* 输出圆左侧的空白 */ printf("*"); /* 输出圆的左侧 */ for(;x<30+m;x++) printf(" "); /* 输出圆的空心部分 */ printf("*\n"); /* 输出圆的右侧 */ } } 【4.19】参考答案: #include #include <math.h> main( ) { double y; int x, m, n, yy; for( yy=0;yy<=20;yy++) { y = 0.1*yy; m = acos(1-y)*10; n = 45 * (y-1)+31; for( x=0;x<=62;x++ ) if( x==m && x==n ) printf("+"); else if(x==n) printf("+"); else if(x==m || x==62-m) printf("*"); else printf(" "); printf("\n"); } } 【4.20】分析:编程的关键为两点,一是使 用控制输出的行和列, 这方面的内容在前面 已经叙述,另一点是输出的数字和所在行, 列关系.此题第一行输出的数字恰好是列 数, 从第二行起每行的数字均比上一行增 n. 参考答案: main( ) { int i,j,n; printf("\nPlease Enter n: "); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("%4d",(i-1)*n+j); printf("\n"); } } 【4.21】分析:此题的关键是找到输出数字 和行,列数的关系.审查图形中每行中数字 的关系发现, 右边数字和前面数字之差逐次 增 1;同列数字依然是这样的关系,编程的 关键转换为找到每一行左方的第一个数字, 然后利用行和列的循环变量进行运算就可 得到每个位置的数字.用 ai,j 此表示第 i 行 第 j 列的数字,则 a11=1;由第 i 行第一列 的数字推出第 i+1 行第一列的数字是 ai+1,1 = ai,1+i;同样由第 j 列推出第 j+1 列的数字 是 ai,j+1 = ai,j+i+j. 另外只有当 j<i 时才输出 数字. 参考答案: main( ) { int i,j,m,n,k=1; /* k 是第一列元素的值 */ printf("Please enter m=" "); scanf("%d",&m); for(i=1;i<=m;i++) { n=k; /* n 第 i 行中第 1 个元素的值 */ for(j=1;j<=m-i+1;j++) { printf("%3d",n); n = n+i+j; /* 计算同行下一个元素的值 */ } printf("\n"); k=k+i; /* 计算下一行中第 1 个元素 */ } } 【4.22】参考答案: main( ) { int i,j,n; printf("\nPlease Enter n: "); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) if(j<=i) printf(" 1"); else printf("%3d",j-i+1); printf("\n"); } } 【4.23】 分析: 可用不同的方案解决此问题, 为了开阔读者的思路, 这里给出了两个参考 答案,其中第二个答案是使用了递归方法. 方案一: 首先寻找数字输出数字和行列的关系. 每圈有四个边, 把每边的最后一个数字算为 下边的开始, 最外圈每边数字个数是 n-1 个, 以后每边比外边一边少两个数字. 因为数字是一行一行输出的, 再分析每行数 字的规律.实际没有的数字有三种规律:位 于对角线之间的数字是上半图增一, 下半图 减一.对角线左侧的各列,右侧比左侧增加 了一圈数字, 例如数字 39 和它左侧的 22 比 较,数字 39 所在的圈每边 4 个数字,左侧 22 加上一圈 16 个数字在加 1 就是 39. 同理, 对角线右侧的各列,则减少一圈的数字个 数. 根据以上分析, 用两个对角线将图形分为四 个区域,如下图所示,图中黑斜体字为对角 线上的数字. 1234567 24 25 26 27 28 29 8 23 40 41 42 43 30 9 22 39 48 49 44 31 10 21 38 47 46 45 32 11 20 37 36 35 34 33 12 19 18 17 16 15 14 13 为叙述方便我们称四个区域为上,下,左, 右区.设 i,j 为行列号,n 为图形的总行数, 则 满 足 各 区 的 范 围 是 , 上 区 : j>=i 且 j<=n-i+1 ; 下区:j<=i 且 j>=n-i+1 ;左区: ji 且 j>n-i+1 . 现在问题是, 如果知道一行在不同区域开始 第一个位置的数字, 然后该区后续的数字就 可利用前面分析的规律得到. 对于右区开始各行第一个数字最易求出, 为 4*(n-1)-i+1.后续一个和同行前一个数字之 差是 4*[n-1-(j-1)*2]+1,其中方括号内是每边 的数字个数. 对角线上的数字是分区点, 对角线上相临数 字仍然相差一圈数字个数, 读者自行分析得 到计算公式. 右区开始的第一个数字可以从上区结束时 的数字按规律求出. 下述程序用变量 s 保存分区对角线上的数 字. 参考答案一: main() { int i,j,k,n,s,m,t; printf("Please enter n:"); scanf("%d",&n); for(i=1;i<=n;i++) { s=(i<=(n+1)/2)? 1:3*(n-(n-i)*2-1)+1; m=(i<=(n+1)/2)? i:n-i+1;/* m-1 是外层圈数 */ for(k=1;k<m;k++) s+=4*(n-2*k+1); for(j=1;j<=n;j++) { if(j>=n-i+1 && j<=i) /* 下区 */ t=s-(j-(n-i))+1; if(j>=i && j<=n-i+1) /* 上区 */ t=s+j-i; if(j>i && j>n-i+1) /* 右区 */ t-=4*(n-2*(n-j+1))+1; if(j1) 若令:ai,j=fun(ai-1,i-1+4(N-2i-1),当:i< (N+1)/2 且 j<(N+1)/2 时,min=MIN(i,j),则 有: a2,2 = fun(a1,1, min, min, n) ai,j=fun(a2,2, i-min+1, j-min+1, n-2*(min-1) ) 我们可以根据上述原理,分别推导出 i 和 j 为其它取值范围时的 min 取值. 根据上述递 归公式,可以得到以下参考程序. 参考答案二: #include #define MIN(x,y) (x>y) ? (y) : (x) fun ( int a11, int i, int j, int n) { int min, a22; if( i==j && i<=1 ) return(a11); else if( i==j && i<=(n+1)/2) return( fun(a11,i-1,i-1,n)+4*(n-2*i+3)); else if( i==1 && j!=1) return( a11+j-1 ); else if( i!=1 && j==n) return( a11+n+i-2 ); else if( i!=1 && j==1 ) return ( a11+4*n-3-i ); else if( 。

C语言程序设计习题参考答案

C语言程序设计习题参考答案

C 语言程序设计习题答案习题一 C 语言程序设计概述一、名词解释(1)程序P1 (2)程序设计P1 (3)机器语言P1 (4)汇编程序P2(5)高级语言P2 (6)编译程序P3 (7)解释程序P3 (8)算法P4(9)结构化的程序设计P9二、简述题1. 设计程序时应遵循哪些基本原则?P4答:正确性、可靠性、简明性、有效性、可维护性、可移植性。

2. 算法的要素是什么?算法具有哪些特点?答:算法的要素是:操作与控制结构;算法的特点有:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。

3. 算法的表示形式有哪几种?答:算法的表示形式有:自然语言、传统流程图、伪代码、结构化的流程图(N_S 流程图,盒图)。

4. 有哪三种基本结构?答:三种基本结构是:顺序结构、选择结构和循环结构。

5. 传统流程图与N-S 流程图最大的区别是什么?答:N-S 流程图去掉了在传统流程图中常用的流程线,使得程序的结构显得更加清晰、简单。

三、用传统流程图、N-S 图分别表示求解以下问题的算法。

1. 有3个数a ,b ,c ,要求按由大到小的顺序把它们输出。

2. 依次将10个数输入,求出其中最大的数 和最小的数并输出。

3. 求1+2+3+…+100的值。

4. 求1×2×3×…×10的值。

5. 求下列分段函数的值。

6. 求100~200之间的所有素数。

7. 求一元二次方程ax 2+bx+c=0的根。

分别考虑d=b 2-4ac 大于0、等于0和小于0三种情况。

四、注释下面C 程序的各个组成部分。

main() /*主函数 */{ /*程序开始 */int a,k,m; /*定义三个用来存放整数的变量 */a=10; /*将整数10赋值给变量a */k=2; /*将整数2赋值给变量k */m=1; /*将整数1赋值给变量1 */a=(k+m)*k/(k-m); /*先求出算术表达式的值,并将其赋值给变量a */printf("%d\n",a); /*在屏幕上打印出变量a 的值 */} /*程序结束 */习题二 数据类型、运算符与表达式一、选择题1~10:BCDCB DDBCA11~20: ADDAA DBADC21~28: DABAD CDD3X (X<1) 4X-1 (X=1) 5(X-1)+6 (1<X<5) 6-3X (X ≥5)二、填空题1.字母L 或字母l2.字符或%c 、整数或%d3.在程序运行过程中,其值可以在一定的范围内变化的量。

《C语言程序设计教程》习题参考答案

《C语言程序设计教程》习题参考答案

本文由huangwen199002贡献 doc文档可能在WAP端浏览体验不佳。

建议您优先选择TXT,或下载源文件到本机查看。

语言程序设计教程》 《C 语言程序设计教程》习题参考答案 默认分类 2007-09-10 12:38:44 阅读 6618 评论 13 【习题 1】 一、简答题(在课本中寻找答案,略) 1.1 C 程序的基本结构包括哪些内容? 1.2 如何定义标识符? 1.3 输入格式、输出格式的组成包括哪些内容? 1.4 C 语言函数分为哪两类? 1.5 计算表达式的值应该考虑哪些方面? 1.6 上机调试程序的步骤如何? 二、判断并改错 1.7 C 程序执行的入口是 main()函数,所以 main 函数必须放在程序的开头。

 错误:main 函数可以放在程序的任何位置。

并不限定在程序的开头。

 1.8 定义一个函数包括数据说明部分和执行语句部分,两者可以交叉出现。

 错误:不可以交叉出现,数据说明部分在执行语句部分的前面。

 1.9 编辑与编译不是一回事。

 错误:不是一回事。

编辑完成源程序的输入和修改;编译是对源程序进行语法检查,如果无语法错误,则 生成目标程序。

 1.10 scanf("%d,%d",&x,&y);的正确输入格式:3,4<回车>。

 正确 1.11 注释内容太多会影响程序的执行效率。

 错误:不会影响程序的执行效率。

因为在编译时,编译系统将注释内容删除或用空格代替,所以注释内容 不会编译到目标程序中。

 1.12 所有的数学公式可以直接出现在源程序中。

 错误:数学公式需要转换成 C 语言能够接受的公式才能出现在源程序中。

 三、编程题 1.13 在屏幕上输出自己名字的拼音。

 提示:中文名字叫“张三”,对应的拼音为“Zhang San”,输出用 printf()函数。

 1.14 输入圆的半径,求圆的周长,并将结果保留两位小数输出到屏幕上。

 提示:定义圆的半径 r,圆的周长:2*3.14*r,输出结果保留 2 位小数可以用%.2f 1.15 输入两个整数,输出其中最大者。

《C语言程序设计》课后习题答案(第四版)

《C语言程序设计》课后习题答案(第四版)

第1章程序设计和C语言11.1什么是计算机程序11.2什么是计算机语言11.3C语言的发展及其特点31.4最简单的C语言程序51.4.1最简单的C语言程序举例61.4.2C语言程序的结构101.5运行C程序的步骤与方法121.6程序设计的任务141-5 #include <stdio.h>int main ( ){ printf ("**************************\n\n");printf(" Very Good!\n\n");printf ("**************************\n");return 0;}1-6#include <stdio.h>int main(){int a,b,c,max;printf("please input a,b,c:\n");scanf("%d,%d,%d",&a,&b,&c);max=a;if (max<b)max=b;if (max<c)max=c;printf("The largest number is %d\n",max); return 0;}第2章算法——程序的灵魂162.1什么是算法162.2简单的算法举例172.3算法的特性212.4怎样表示一个算法222.4.1用自然语言表示算法222.4.2用流程图表示算法222.4.3三种基本结构和改进的流程图262.4.4用N S流程图表示算法282.4.5用伪代码表示算法312.4.6用计算机语言表示算法322.5结构化程序设计方法34习题36第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例373.2数据的表现形式及其运算393.2.1常量和变量393.2.2数据类型423.2.3整型数据443.2.4字符型数据473.2.5浮点型数据493.2.6怎样确定常量的类型513.2.7运算符和表达式523.3C语句573.3.1C语句的作用和分类573.3.2最基本的语句——赋值语句593.4数据的输入输出653.4.1输入输出举例653.4.2有关数据输入输出的概念673.4.3用printf函数输出数据683.4.4用scanf函数输入数据753.4.5字符数据的输入输出78习题823-1 #include <stdio.h>#include <math.h>int main(){float p,r,n;r=0.1;n=10;p=pow(1+r,n);printf("p=%f\n",p);return 0;}3-2-1#include <stdio.h>#include <math.h>int main(){float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;p1=p*((1+r5)*5); // 一次存5年期p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次p5=p*pow(1+r0/4,4*5); // 存活期存款。

PAT《C语言程序设计》题目集参考答案(上)

PAT《C语言程序设计》题目集参考答案(上)

PAT《C语言程序设计》题目集参考答案(上) PAT《C语言程序设计》题目集参考答案(上)参考答案1. 1011 A+B和C (15分)```c#include <stdio.h>int main() {int T, i;long long A, B, C;scanf("%d", &T);for (i = 1; i <= T; i++) {scanf("%lld %lld %lld", &A, &B, &C);if (A + B > C) {printf("Case #%d: true\n", i);} else {printf("Case #%d: false\n", i);}}return 0;}```2. 1024 科学计数法 (20分)```c#include <stdio.h>#include <string.h>int main() {char str[10010];scanf("%s", str);int len = strlen(str);if (str[0] == '-') {printf("-");}int pos = 0; // 记录E的位置 while (str[pos] != 'E') {pos++;}// 输出整数部分if (str[i] == '.') {continue;}printf("%c", str[i]);}int exp = 0; // 指数for (int i = pos + 2; i < len; i++) {exp = exp * 10 + (str[i] - '0');}if (exp == 0) { // 指数为0,直接输出return 0;}if (str[pos + 1] == '-') { // 指数为负数,补零 printf("0.");for (int i = 0; i < exp - 1; i++) {printf("0");}printf("%c", str[1]);printf("%c", str[i]);}} else { // 指数为正数for (int i = 1; i < pos; i++) {if (str[i] == '.') {continue;}printf("%c", str[i]);if (i == exp + 2 && pos - 3 != exp) { printf(".");}}for (int i = 0; i < exp - (pos - 3); i++) { printf("0");}}return 0;}3. 1046 划拳 (15分)```c#include <stdio.h>int main() {int n, aFail = 0, bFail = 0;scanf("%d", &n);for (int i = 0; i < n; i++) {int a, aHan, b, bHan;scanf("%d %d %d %d", &a, &aHan, &b, &bHan); if (a + bHan == aHan && a + bHan != b) {bFail++;} else if (a + bHan == b && a + bHan != aHan) { aFail++;}}printf("%d %d", aFail, bFail);return 0;}4. 1071 小赌怡情 (15分)```c#include <stdio.h>int main() {int T, K;scanf("%d %d", &T, &K);for (int i = 0; i < K; i++) {int n1, b, t, n2;scanf("%d %d %d %d", &n1, &b, &t, &n2);if (T < t) {printf("Not enough tokens. Total = %d.\n", T); continue;}if ((n1 < n2 && b == 1) || (n1 > n2 && b == 0)) { T += t;printf("Win %d! Total = %d.\n", t, T);} else {T -= t;printf("Lose %d. Total = %d.\n", t, T); if (T == 0) {printf("Game Over.\n");break;}}}return 0;}```5. 1076 Wifi密码 (15分)```c#include <stdio.h>int main() {int n;scanf("%d", &n);char ssid[4], password[10010];for (int i = 0; i < n; i++) {scanf("%s %s", ssid, password);if (password[0] == '0') {printf("%c", password[2]); } else if (password[0] == '1') { printf("%c", password[4]); } else if (password[0] == '2') { printf("%c", password[6]); } else if (password[0] == '3') { printf("%c", password[8]); }}return 0;}```6. 1084 外观数列 (20分)```c#include <stdio.h>#include <string.h>int main() {int D, N, count;scanf("%d %d", &D, &N);char str[10010];sprintf(str, "%d", D);for (int i = 1; i < N; i++) {char next[20010] = "\0";int len = strlen(str);int j = 0;while (j < len) {int count = 1;while (j + 1 < len && str[j] == str[j + 1]) { count++;j++;}char temp[10];sprintf(temp, "%d%c", count, str[j]);strcat(next, temp);j++;}strcpy(str, next);}printf("%s", str);return 0;}```7. 1088 三人行 (20分)```c#include <stdio.h>int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);}void simplify(int numerator, int denominator) { int flag = 0; // 标记是否输出符号if (numerator < 0) {numerator = -numerator;flag = !flag;}if (denominator < 0) {denominator = -denominator;flag = !flag;}if (flag) {printf("(-");}if (numerator == 0) {printf("0");} else if (numerator >= denominator) {printf("%d", numerator / denominator);if (numerator % denominator != 0) {printf(" ");printf("%d/%d", numerator % denominator, denominator); }} else {printf("%d/%d", numerator, denominator);}if (flag) {printf(")");}}void printResult(int a, int b, int numerator, int denominator) { simplify(a, b);printf(" + ");simplify(numerator, denominator);printf(" = ");simplify(a * denominator + b * numerator, b * denominator); printf("\n");}int main() {int a, b, c, d;scanf("%d/%d %d/%d", &a, &b, &c, &d);int numerator1, denominator1, numerator2, denominator2; // 加法numerator1 = a * d + b * c;denominator1 = b * d;printResult(a, b, c, d);// 减法numerator2 = a * d - b * c;denominator2 = b * d;printResult(a, b, -c, d);// 乘法int numerator3 = a * c;int denominator3 = b * d;simplify(a, b);printf(" * ");simplify(c, d);printf(" = ");simplify(numerator3, denominator3); printf("\n");// 除法int numerator4 = a * d;int denominator4 = b * c;simplify(a, b);printf(" / ");simplify(c, d);printf(" = ");if (c == 0) {printf("Inf");} else {simplify(numerator4, denominator4); }return 0;}```8. 1092 最好吃的月饼 (20分)```c#include <stdio.h>int main() {int N, M;scanf("%d %d", &N, &M);int count[10010] = {0};for (int i = 0; i < M; i++) {int num;scanf("%d", &num);count[num]++;}// 找出最大销量int maxCount = 0;for (int i = 1; i <= N; i++) { if (count[i] > maxCount) { maxCount = count[i];}}// 输出销量最大的月饼int flag = 0;for (int i = 1; i <= N; i++) { if (count[i] == maxCount) { if (flag) {printf(" ");}printf("%d", i);flag = 1;}}return 0;}```9. 1099 build A Binary Search Tree (30分) ```c#include <stdio.h>#include <stdlib.h>#include <algorithm>#include <queue>using namespace std;struct Node {int data;int left;int right;} nodes[110];int values[110], index = 0;void inOrder(int root) {if (root == -1)return;inOrder(nodes[root].left);nodes[root].data = values[index++]; inOrder(nodes[root].right);}void bfs(int root) {queue<int> q;q.push(root);int flag = 0;while (!q.empty()) {int front = q.front();q.pop();if (flag)printf(" ");printf("%d", nodes[front].data); flag = 1;if (nodes[front].left != -1)q.push(nodes[front].left);if (nodes[front].right != -1)q.push(nodes[front].right);}}int main() {int N;scanf("%d", &N);for (int i = 0; i < N; i++) {scanf("%d %d", &nodes[i].left, &nodes[i].right); }for (int i = 0; i < N; i++) {scanf("%d", &values[i]);}sort(values, values + N);inOrder(0);bfs(0);return 0;}```10. 1101 Quick Sort (25分)```c#include <stdio.h>#include <algorithm>#include <stack>using namespace std;int a[100010], b[100010]; // b数组记录在该元素左边的所有元素中最大的元素int result[100010];stack<int> s;int main() {int n;scanf("%d", &n);for (int i = 0; i < n; i++) {scanf("%d", &a[i]);if (i == 0) {b[i] = -1;} else {b[i] = max(b[i - 1], a[i - 1]);}}int minVal = 0x7FFFFFFF; // 最小值,默认为无穷大for (int i = n - 1; i >= 0; i--) {if (i == n - 1) {if (a[i] < minVal) {result[i] = a[i];minVal = a[i];}} else {if (a[i] < minVal && a[i] >= b[i]) { result[i] = a[i];minVal = a[i];}}}int count = 0;for (int i = 0; i < n; i++) {if (result[i] != 0) {count++;s.push(result[i]);}}printf("%d\n", count);while (!s.empty()) {printf("%d", s.top());s.pop();if (!s.empty()) {printf(" ");}}return 0;}```11. 1104 Sum of Number Segments (20分) ```c#include <stdio.h>int main() {int n;scanf("%d", &n);double num, sum = 0;scanf("%lf", &num);sum += num * i * (n - i + 1);}printf("%.2f", sum);return 0;}```12. 1112 Stucked Keyboard (20分)```c#include <stdio.h>#include <string.h>int main() {int k;char s[10010];scanf("%d %s", &k, s);int len = strlen(s);int count[128] = {0}; // 记录字符出现的次数int isPrint[128] = {0}; // 记录字符是否已经输出过count[s[i]]++;}char prev = '\0';for (int i = 0; i < len; i++) {if (count[s[i]] % k != 0) { // 出现次数不是k的倍数,输出该字符 printf("%c", s[i]);isPrint[s[i]] = 1;} else { // 出现次数是k的倍数,如果之前没有输出过,输出一次if (!isPrint[s[i]]) {printf("%c", s[i]);isPrint[s[i]] = 1;}}if (s[i] != s[i + 1]) { // 上一个字符和当前字符不同,说明之前已经输出过isPrint[s[i]] = 0;}}return 0;}```13. 1113 Integer Set Partition (25分) ```c#include <stdio.h>#include <stdlib.h>#include <algorithm>using namespace std;int main() {int n;scanf("%d", &n);int a[100010], sumL = 0, sumR = 0; for (int i = 0; i < n; i++) {scanf("%d", &a[i]);}sort(a, a + n);for (int i = 0; i < n / 2; i++) {sumL += a[i];}for (int i = n / 2; i < n; i++) {sumR += a[i];}printf("%d %d", n % 2, sumR - sumL); return 0;}```14. 1114 Family Property (25分)```c#include <stdio.h>#include <algorithm>using namespace std;struct Person {int id;int fid, mid;int k;int cid[6];int flag;} person[1005];struct Family {int id;int people;double area;double perArea;int flag;} family[10000];int father[10000];bool cmp(Family a, Family b) { if (a.perArea != b.perArea) {return a.perArea > b.perArea; } else {return a.id < b.id;}}int find(int x) {while (x != father[x]) { x = father[x];}while (a != father[a]) { int z = a;a = father[a];father[z] = x;}return x;}void Union(int a, int b) { int faA = find(a);int faB = find(b);if (faA > faB) {father[faA] = faB; } else if (faA < faB) { father[faB] = faA; }}int main() { int n;scanf("%。

C语言程序设计课后习题1-8参考答案.docx

C语言程序设计课后习题1-8参考答案.docx

C 语言程序设计课后习题1-8参考答案习题 1参考答案一、简答题1、冯诺依曼计算机模型有哪几个基本组成部分?各部分的主要功能是什么?答:冯诺依曼计算机模型是由运算器、控制器、存储器、输入设备、输出设备五大功能部件组成的。

运算器又称算术逻辑部件,简称 ALU ,是计算机用来进行数据运算的部件。

数据运算包括算术运算和逻辑运算。

控制器是计算机的指挥系统,计算机就是在控制器的控制下有条不紊地协调工作的。

存储器是计算机中具有记忆能力的部件,用来存放程序和数据。

输入设备是用来输入程序和数据的部件。

输出设备正好与输入设备相反,是用来输出结果的部件。

2、简述计算机的工作原理。

答:计算机的工作原理可简单地概括为:各种各样的信息,通过输入设备,进入计算机的存储器,然后送到运算器,运算完毕把结果送到存储器存储,最后通过输出设备显示出来。

整个过程由控制器进行控制。

3、计算机软件系统分为哪几类?答:软件内容丰富,种类繁多,通常根据软件用途将其分为两大类:系统软件和应用软件。

系统软件是指管理、监控、维护计算机正常工作和供用户操作使用计算机的软件。

这类软件一般与具体应用无关,是在系统一级上提供的服务。

系统软件主要包括以下两类:一类是面向计算机本身的软件,如操作系统、诊断程序等。

另一类是面向用户的软件,如各种语言处理程序(像BC 、 VC 等)、实用程序、字处理程序等。

应用程序是指某特定领域中的某种具体应用,供最终用户使用的软件,它必须在操作系统的基础上运行。

4、什么叫软件?说明软件与硬件之间的相互关系。

答:软件是指计算机程序及有关程序的技术文档资料。

两者中更为重要的是程序,它是计算机进行数据处理的指令集,也是计算机正常工作最重要的因素。

在不太严格的情况下,认为程序就是软件。

硬件与软件是相互依存的,软件依赖于硬件的物质条件,而硬件则需在软件支配下才能有效地工作。

在现代,软件技术变得越来越重要,有了软件,用户面对的将不再是物理计算机,而是一台抽象的逻辑计算机,人们可以不必了解计算机本身,可以采用更加方便、更加有效地手段使用计算机。

C语言程序设计教程课后习题参考答案

C语言程序设计教程课后习题参考答案

《C语言程序设计教程》课后习题参考答案习题11.(1)编译、链接.exe(2)函数主函数(或main函数)(3)编辑编译链接2.(1)-(5):DDBBC(6)-(10):ABBBC3.(1)答:C语言简洁、紧凑,使用方便、灵活;C语言是高级语言,同时具备了低级语言的特征;C语言是结构化程序设计语言,具有结构化的程序控制语句;C语言有各种各样的数据类型;C语言可移植性好;生成目标代码质量高,程序执行效率高。

(2)编辑、编译、链接、执行(3)一个C程序由一或多个函数组成,一函数若干条语句构成,每条语句的末尾必须以分号结束。

(4)标识符,关键字,运算符,分隔符,常量,注释符等4. 从键盘输入一个双精度小数,打印出它的余弦值。

#include <stdio.h>#include <math.h>main( ){double x;scanf(“%lf”, &x);printf(“%lf\n”, cos(x) );}第2章1.(1)BDE、ACFG(2)D(3)C(4)C2.(1)错(2)错(3)错(4)对(5)错3.(1)a=3,b=-27(2)a=11,b=6,c=6(3)3(4)1010110(5)-998(6)1)202)83)704)05)06)04.(1)#include <stdio.h>main( ){double r, h ,v;r = 2.5;h = 3.5;v = 3.14*r*r*h;printf(“v=%lf\n”, v);}(2)#include <stdio.h>main( ){char ch;ch = getchar( );printf(“%c\n”, ch + 32);}(3)#include <stdio.h>main( ){printf(“ *\n”);printf(“ ***\n”);printf(“ *****\n”);printf(“*******\n”);}(4)#include <stdio.h>main( ){double x;scanf(“%lf”, &x);printf(“%d , %lf\n”, (int)x, x – (int)x );}(5)#include <stdio.h>main( ){double a=3, b=5;double result = (-2 * a + ( 4*a – b )/( 2*a + b ) )/( (a - 4*b)/(a + b) );printf(“%lf\n”, result);}习题31.(1)D(2)AD(3)C(4)B(5)A(6)-(10):BDACB2.(1)3.141593,3.1416,3.142(2)c=K(3)| 123.46|,|123 |(4)x= 1.23,y= 50.00(5)03.(1)scanf(%f”, c); 改为:scanf(“%f”, &c);f = (9/5)*c+32;改为:f = (9.0/5)*c + 32;printf(“摄氏温度%f度相当于华氏温度%f度”, &c, &f); 改为:printf(“摄氏温度%f度相当于华氏温度%f度”, c, f); (2)补充定义:int h;h = 500/60改为: h = 500 / 60;m = 500% 60 改为:m = 500%60;printf(“500分钟是%d小时%d分钟,”&h, &m); 改为:printf(“500分钟是%d小时%d分钟” , h, m);4.(1)#include<stdio.h>main( ){char x,y;scanf(“%c%c”, &x, &y);printf(“%d\n”, (x-‘0’) + (y-‘0’) );}(2)#include <stdio.h>main( ){char x, y;char tmp;printf(“Input two characters:”);scanf(“%c%c”, &x, &y);printf(“Before swap: x=%c, y=%c\n”, x, y);tmp = x;x = y;y = tmp;printf(“After swap: x=%c, y=%c\n”, x, y); }(3)#include <stdio.h>main( ){char ch;ch = getchar( );printf(“%c\n”, ch - 32);}第4章1.(1)-(5):CAACA2.(1)BBB(2)AAABBBCCC(3)end(4)d=20(5)s=2,t=3(6)firstthird(7)y=0y=5y=10y=53.(1)y<z x<z x<y(2)ch>=’A’ && ch<=’Z’ch>=’a’&&ch<=’z’ch = ch-32(3)x>2&&x<=10x>-1&&x<=2(4)t=x;x=y;y=t;4.(1)#include <stdio.h>main( ){int x, y , z, t;scanf(“%d%d%d”, &x, &y, &z);if ( x>y ){ t=x; x=y; y=t;}if( x > z ){t = x; x = z; z= t; }if( y > z ){t = y; y= z; z = t;}printf(“%d %d %d\n”, x, y ,z);}(2)#include <stdio.h>main( ){int score;scanf(“%d”, &score);if ( score < 0 || score > 100 )printf(“成绩不合理\n”);else if( score>=90 )printf(“优秀\n”);else if( score>=80 )printf(“良好\n”);else if( score >= 70 )printf(“中等\n”);else if( score >= 60 )printf(“及格\n”);elseprintf(“不及格\n”);}(3)#include <stdio.h>main( ){int n;int g,s,b,q;//各位上的数值scanf(“%d”, &n);g = n%10;//个位s = n/10%10;//十位b = n/100%10;//百位q = n/1000%10;//千位if( n < 10 ) //一位数{printf(“%d\n”, 1);//位数printf(“%d\n”, g); //各位上的数值}else if ( n < 100 ) //两位数{printf(“%d\n”, 2);//位数printf(“%d %d\n”, g,s);}else if ( n < 1000 ) //三位数{printf(“%d\n”, 3);//位数printf(“%d %d %d\n”, g, s, b);}else if ( n < 10000 ) //四位数{printf(“%d\n”, 4);//位数printf(“%d %d %d %d\n”, g, s, b, q);}}(4)#include <stdio.h>main( ){int n;scanf(“%d”, &n);if( n % 3==0 && n%5==0 && n%7==0 )printf(“能同时被3、5、7整除\n”);else if( n%3==0 && n%5==0)printf(“能被3和5整除\n”);else if( n%3==0 && n%7==0 )printf(“能被3和7整除\n”);else if( n%5==0 && n%7==0 )printf(“能被5和7整除\n”);else if( n%3==0 || n%5==0 || n%7==0 ){if( n%3==0 )printf(“能被3整除\n”);else if( n%5==0 )printf(“能被5整除\n”);elseprintf(“能被7整除\n”);}elseprintf(“不能被3、5、7中任一个数整除\n”);}(5)#include <stdio.h>main( ){int carType;//车型。

《C语言程序设计》课后习题答案(第四版)

《C语言程序设计》课后习题答案(第四版)

第1章程序设计和C语言11.1什么是计算机程序11.2什么是计算机语言11.3C语言的发展及其特点31.4最简单的C语言程序51.4.1最简单的C语言程序举例61.4.2C语言程序的结构101.5运行C程序的步骤与方法121.6程序设计的任务141-5 #include <stdio.h>int main ( ){ printf ("**************************\n\n");printf(" Very Good!\n\n");printf ("**************************\n");return 0;}1-6#include <stdio.h>int main(){int a,b,c,max;printf("please input a,b,c:\n");scanf("%d,%d,%d",&a,&b,&c);max=a;if (max<b)max=b;if (max<c)max=c;printf("The largest number is %d\n",max); return 0;}第2章算法——程序的灵魂162.1什么是算法162.2简单的算法举例172.3算法的特性212.4怎样表示一个算法222.4.1用自然语言表示算法222.4.2用流程图表示算法222.4.3三种基本结构和改进的流程图262.4.4用N S流程图表示算法282.4.5用伪代码表示算法312.4.6用计算机语言表示算法322.5结构化程序设计方法34习题36第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例373.2数据的表现形式及其运算393.2.1常量和变量393.2.2数据类型423.2.3整型数据443.2.4字符型数据473.2.5浮点型数据493.2.6怎样确定常量的类型513.2.7运算符和表达式523.3C语句573.3.1C语句的作用和分类573.3.2最基本的语句——赋值语句593.4数据的输入输出653.4.1输入输出举例653.4.2有关数据输入输出的概念673.4.3用printf函数输出数据683.4.4用scanf函数输入数据753.4.5字符数据的输入输出78习题823-1 #include <stdio.h>#include <math.h>int main(){float p,r,n;r=0.1;n=10;p=pow(1+r,n);printf("p=%f\n",p);return 0;}3-2-1#include <stdio.h>#include <math.h>int main(){float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;p1=p*((1+r5)*5); // 一次存5年期p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次p5=p*pow(1+r0/4,4*5); // 存活期存款。

c语言程序设计编程题库及详解答案

c语言程序设计编程题库及详解答案

c语言程序设计编程题库及详解答案1. 编写一个C语言程序,实现两个整数的加法运算。

答案:```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("两个整数的和是:%d\n", sum);return 0;}```2. 编写一个C语言程序,实现求一个数的阶乘。

答案:```c#include <stdio.h>int factorial(int n) {if (n == 0) return 1;return n * factorial(n - 1);}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);printf("%d 的阶乘是:%d\n", num, factorial(num)); return 0;}```3. 编写一个C语言程序,实现判断一个数是否为素数。

答案:```c#include <stdio.h>#include <math.h>int isPrime(int n) {if (n <= 1) return 0;for (int i = 2; i <= sqrt(n); i++) {if (n % i == 0) return 0;}return 1;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (isPrime(num)) {printf("%d 是素数。

c语言程序设计课后习题答案

c语言程序设计课后习题答案

博学笃行自强不息
c语言程序设计课后习题答案
C语言程序设计课后习题答案
引言:
C语言是一种广泛应用于程序设计和系统开发的高级计算机语言。

掌握C语言的编程技巧对于学习计算机科学和软件工程至关重要。

在学习C语言的过程中,课后习题是一种很好的巩固知识和提高编程能力的方式。

本文将为读者提供一些C语言程序设计课后习题的答案,以帮助读者更好地理解和掌握C语言编程。

1. 编写一个程序,将输入的两个整数进行相加,并输出结果。

```c
#include <stdio.h>
int main() {
int num1, num2, sum;
printf(\
1。

C语言程序设计习题集(有答案)

C语言程序设计习题集(有答案)

C语言程序设计习题集(有答案) C语言程序设计习题集(有答案)C语言是一门广泛应用于软件开发和系统编程领域的计算机程序设计语言。

掌握C语言编程的基础知识和技能对于从事相关行业的人来说至关重要。

为了帮助读者加深对C语言的理解和应用,本文提供了一份C语言程序设计习题集,每道习题都附有答案,供读者参考和自我检测。

1. 输入输出问题描述:编程实现一个简单的输入输出程序。

要求从标准输入读入一个整数,然后输出该整数,并换行。

解答:```c#include <stdio.h>int main() {int num;scanf("%d", &num);printf("%d\n", num);return 0;}```2. 条件判断问题描述:编写一个程序,判断一个给定的整数是否为偶数。

如果是偶数,则输出"Even",否则输出"Odd"。

解答:```c#include <stdio.h>int main() {int num;scanf("%d", &num);if (num % 2 == 0) {printf("Even\n");} else {printf("Odd\n");}return 0;}```3. 循环结构问题描述:编写一个程序,计算并输出1到100之间所有偶数的和。

解答:```c#include <stdio.h>int main() {int sum = 0;for (int i = 2; i <= 100; i += 2) {sum += i;}printf("Sum: %d\n", sum);return 0;}```4. 数组问题描述:编写一个程序,从键盘输入5个整数,然后按照输入的顺序将它们输出。

C语言程序设计》课后习题详细答案

C语言程序设计》课后习题详细答案
(2)在同一行上的/ * main function * /显然是注释;C语言规定:注释由/*开头,由*/结束,但在*号和/之间不得插入任何空格,而在此处“/ *”和“* /”之间存在空格,因此,/ * main function * /的写法是错误的,而应写成:/* main function */。
printf(″(1) a=%d,b=%d,c=%d\n″,a,b ,c);
t=c; c=b; b=a; a=t;
printf(″(2) a=%d,b=%d,c=%d\n″,a,b,c);
}
第四章选择结构习题分析与解答
一、选择题
4.1【参考答案】A)
4.2【参考答案】A)
4.3【参考答案】A)
4.4【参考答案】D)
(6)设计输出语句。输出a、b、c和ave。
(7)把以上内容放在主函数的一对花括号中。
(8)编写程序如下:
main()
{ double a,b,c,ave;
printf(″Enter a ,b ,c :″);
scanf(″%lf%lf%lf″, &a, &b, &c );
ave=(a+b+c)/3;
2.15【参考答案】[1]4.2[2]4.2
2.16【参考答案】[1]{[2]}[3]定义[4]执行
2.17【参考答案】[1]关键字[2]用户标识符
2.18【参考答案】[1]int[2]float[3]double
2.19【参考答案】float a1=1.0, a2=1.0;
或float a1=1, a2=1;(系统将自动把1转换为1.0)
3.27【参考答案】x=127, x=127 , x=$127 ,x=$000127, x=%06d

C语言程序设计习题解答

C语言程序设计习题解答

《C语言程序设计》习题解答沈国荣隋雪莉闵芳目录第1章 C语言程序设计概述1第2章数据类型及其运算2第3章语句与输入输出3第4章选择结构程序设计4第5章循环结构程序设计7第6章数组9第7章函数12第8章编译预处理14第9章指针15第10章结构体与共用体18第11章位运算21第12章文件操作22第1章 C语言程序设计概述一、选择题1. 函数、main()函数2. /*、*/3. .C、.OBJ、.EXE4. 顺序结构、选择结构、循环结构三、编程题1.【参考代码】#include<stdio.h>int main( ){printf( "(学校名称)\n" ) ;printf( "(姓名)\n" ) ;return 0 ;}2.【参考代码】#include<stdio.h>int main( ){printf( "(学校名称)\n(姓名)\n" ) ; return 0 ;}第2章数据类型及其运算注:第5题B选项为:'\'' '\017' '\t'二、填空题1. 字母、数字、下划线2. 1、4、4、83. -164. 3.55. 06. 97. 68. -609. y%2==110. 1、0、1三、程序阅读题1. b2. 03. 04. 10,25. 9,10,9,106. 3,1,0,07. 3,20,30,1第3章语句与输入输出一、选择题二、填空题1. 123.472. D3. 回车4. 10,2三、程序阅读题1. 2612. 203. 201,104. y=4630y=46305. *3.140000,3.142*6. c:dec=120,oct=170,hex=78,ASCII=x7. x=1 y=2 *sum*=310 squared is : 1008. 2 48 20.2 20.29. x+y+z=4810. 55, ,A四、编程题1.【参考代码】#include<stdio.h>int main( ){char ch;printf("请输入一个字符:\n");scanf("%c",&ch);printf("%c的ASCII码为:%d\n", ch,ch);return 0 ;}2.【参考代码】#include<stdio.h>#define PI 3.1416int main( ){double r, h;double cl,cs,cv;printf("请输入圆的半径:");scanf("%lf", &r);printf("请输入圆柱高:");scanf("%lf", &h);cl=2*PI*r;cs=PI*r*r;cv=PI*r*r*h;printf("圆的周长为:%.4lf\n", cl);printf("圆的面积为:%.4lf\n", cs);printf("圆柱的体积为:%.4lf\n", cv);return 0 ;}3.【参考代码】#include<stdio.h>int main( ){int splitInt,one,ten,hundred;printf("输入要处理的整数:");scanf("%d",&splitInt);hundred = splitInt/100;ten = splitInt%100/10;one = splitInt%10;printf("个位:%d,十位:%d,百位:%d\n",one,ten,hundred);return 0 ;}第4章选择结构程序设计二、程序阅读题1. 102. 2,2,23. 64. 97,b5. c=-16. 88887. 20,08. 2,19. 1,12,22,1-2,210. a=1,b=3三、程序完善题1. a>b、c>x四、编程题1.【参考代码】#include<stdio.h>int main( ){int a, b, c,d,min;printf("输入4个整数:");scanf("%d%d%d%d",&a,&b,&c,&d);if(a < b) min = a;else min = b;if(c < min) min=c;if(d<min) min=d;printf("%d\n",min);return 0 ;}2.【参考代码】#include<stdio.h>int main( ){int num,a,b,c,d;printf("请输入一个四位整数:");scanf("%d",&num);a=num/1000;b=num%1000/100;c=num%100/10;d=num%10;printf("各位数字之和为:%d\n",a+b+c+d);return 0 ;}3.【参考代码】#include<stdio.h>int main( ){int x;printf("请输入x:");scanf("%d",&x);printf("y的值为:");if(x<0)printf("%d\n",x);else if(x<50)printf("%d\n",3*x-2);else if(x<100)printf("%d\n",4*x+1);elseprintf("%d\n",5*x);return 0 ;}4.【参考代码】#include<stdio.h>int main( ){int dj;float zl,je,yfk;printf("请输入等级(1~4): ");scanf("%d",&dj);if (dj>4||dj<1){printf("无此等级的苹果!\n");return 0;}printf("请输入重量(公斤): ");scanf("%f",&zl);printf("\n");switch (dj){case 1 : je=5.5*zl; break;case 2 : je=4.3*zl; break;case 3 : je=3.0*zl; break;case 4 : je=2.5*zl; break;}printf("您选择苹果级别: %d 级\n",dj);printf("您购买苹果重量: %.2f公斤\n",zl);printf("您应付金额为: %.2f元\n",je);printf("\n");printf("顾客所付金额: ");scanf("%f",&yfk);if (yfk<je){printf("Data Error!\n");return 0;}printf("应找您: %.2f元\n",yfk-je);return 0 ;}第5章循环结构程序设计一、选择题二、程序阅读题1. 1,2,02 . m=4,n=23. A2C4E64. 1325. 46. k=0,m=57. x=88. 1.69. 998988三、程序完善题1. ( ch > 'Z' && ch <= 'Z' + 4 ) ||(ch > 'z' )ch - 262. k k/10 continue3. i + t * 10s = s + t4. fabs( t ) >= 1e-6 f = -f5. i<10 j%3 !=0四、编程题1.【参考代码】#include<stdio.h>int main( ){int n , i , j , k ;printf( "Output:\n" ) ;for(n = 100 ; n<1000 ; n++ ){i = n % 10 ;/* 个位*/j = ( n / 10 ) % 10 ;/*十位*/k = n / 100 ;/* 百位*/if ( n == i * i * i + j * j * j + k * k * k )printf( "%d\n" , n ) ;}return 0 ;}2. 【参考代码】#include<stdio.h>int main ( ){int i , m , n , t , p , k ;printf( "Please input: " ) ;scanf ( "%d,%d" , &m , &n ) ;if( m < n ){t = n ;n = m ;m = t ;}p = m * n ;while ( n != 0 )/*余数不为0,继续相除,直到余数为0 */ {i = m % n ;m = n ;n = i ;}k = p / m ;printf( "%d,%d\n" , m , k );return 0 ;}3. 【参考代码】#include<stdio.h>int main( ){int i , n , t , sum ;t = 1 ;sum = 0 ;printf( "Please input: n = " ) ;scanf( "%d" , &n ) ;for( i = 1 ; i <= n ; i++ ){t = t * i ;sum = sum + t ;}printf( "1!+2!+…+%d!= %d\n" , n , sum ) ;return 0 ;}4. 【参考代码】#include<stdio.h>int main( ){int i , m ;double sum = 0 , k = 1 ;printf( "Please input : m=" ) ;scanf( "%d" , &m ) ;for( i = 1 ; i <= m ; i++ ){sum = sum + k / i ;k = -k ;}printf( "sum=%4.2f\n" , sum ) ;return 0 ;}第6章数组二、程序阅读题1 82430,24125t*M6mo7 fwo三、程序完善题1 k = i j = ia[k] = max a[j] = max2 sum += score[i] score[i]<avg3s[i] = s[i] + a[i][j]printf( "\n" ) ;4j = strlen( str ) – 1str[j] = k5( c = getchar( ) ) != '#' num[c-'A'] += 1四、编程题1. 【参考代码】#include<stdio.h>#define N 5int main( ){int a[N] , i , j , r , temp ;printf( "Please input %d numbers\n" , N ) ;for( i = 0 ; i < N ; i++ )scanf( "%d" , &a[i] ) ;for( i = 0 ; i < N - 1 ; i++ ){r = i ;for( j = i + 1 ; j < N ; j++ )if( a[j] < a[r] )r = j ;if( r != i ){temp = a[r] ;a[r] = a[i] ;a[i] = temp ;}}printf( "The array after sort:\n" ) ;for( i = 0 ; i < N ; i++ )printf( "%5d" , a[i] ) ;printf( "\n" ) ;return 0 ;}2. 【参考代码】#include<stdio.h>int main( ){int a[10] = { 1 , 2 , 3 , 6 , 7 , 8 , 9 , 10 } ;int x , j , k = 0 ;printf( "Please input :x= " ) ;scanf( "%d" , &x) ;if( x > a[7] )a[8] = x ;else{for( j = 0 ; j < 8 ; j++ )if( x < a[j] )break ;for(k = 8 ; k > j ; k-- )a[k] = a[k - 1] ;a[j] = x ;}for( j = 0 ; j < 9 ; j++ )printf( "%5d" , a[j] ) ;printf( "\n" ) ;return 0 ;}3. 【参考代码】#include<stdio.h>int main( ){int a[5][5] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, 22,23,24} ;int i , j ,sum = 0 ;for ( i = 0 ; i < 5 ; i++ ){for ( j = 0 ; j < 5 ; j++)printf( "%4d" , a[i][j] ) ;printf( "\n" ) ;}for( i =0 ;i < 5 ; i++ )sum += a[i][i] ;printf( " sum=%4d\n" , sum ) ;return 0 ;}4. 【参考代码】#include<stdio.h>int main( ){char s1[100] , s2[30] ;int i , j ;printf( "Please input s1:" ) ;gets( s1 ) ;printf( "Please input s2:" ) ;gets( s2 ) ;for( i = 0 ; s1[i] != '\0' ; i++ ) ;for( j = 0 ; s2[j] != '\0' ; j++ , i++ )s1[i] = s2[j] ;s1[i] = '\0' ;printf( "Output\ns1:" ) ;puts( s1 ) ;return 0 ;}5. 【参考代码】#include<stdio.h>int main( ){char s1[100] ;int i ;printf( "Please input s1:" ) ;gets( s1 ) ;for( i = 0 ; s1[i] != '\0' ; i++ ) ;printf( "The length of s1 is %d\n" ,i ) ;return 0 ;}第7章函数一、选择题二、程序阅读题1max is 22 a=1,b=23 1 114 a=11,b=12,c=25 667 8 978 1780 1 2 0 1 2三、程序完善题1 float area ( float r ) return s2z = fun( x , y ) z = z * x3count =fun( score ) count++四、编程题1. 【参考代码】#include<stdio.h>int main( ){void f(int n) ;int n ;printf( "Please input: n= " ) ;scanf( "%d" , &n ) ;if( n <= 0)printf( "Wrong number!\n" ) ;elsef( n ) ;return 0 ;}void f(int n){if( n % 2 == 1 )printf( "%d is a odd number.\n" , n ) ;elseprintf( "%d is a even number.\n" , n ) ; }2. 【参考代码】#include < stdio.h >#include < math.h >int main( ){void f( int m ) ;int m ;printf( "Please input: m= " ) ;scanf( "%d" , &m ) ;f( m ) ;return 0 ;}void f( int m ){int i , k ;k = sqrt( m );for(i = 2 ; i <= k ; i++ )if( m % i == 0 )break;if (i >= k + 1 )printf( "%d is a Prime Number.\n" , m ) ;elseprintf( "%d is not a Prime Number.\n" , m ) ; }3. 【参考代码】#include<stdio.h>int gys( int m , int n ){int r ;r = m % n ;while( r != 0 ){m = n ;n = r ;r = m % n ;}return n ;}int gbs( int m , int n , int r ){return m * n / r ;}int main( ){int m , n , t ;printf( "Please input(m,n):" ) ;scanf( "%d%d" , &m , &n ) ;if( m < n ){t = m ;m = n ;n = t ;}t = gys( m , n ) ;printf( "gys=%d\n" , t ) ;t = gbs( m , n , t ) ;printf( "gbs=%d\n" , t ) ;return 0 ;}4. 【参考代码】#include<stdio.h>int main( ){void mystrcat( char s1[100] , char s2[30] ) ;char s1[100] , s2[30] ;printf( "Please input s1:" ) ;gets( s1 ) ;printf( "Please input s2:" ) ;gets( s2 ) ;mystrcat( s1 , s2 ) ;printf( "Output\ns1:" ) ;puts( s1 ) ;return 0 ;}void mystrcat( char s1[100] , char s2[30] ){int i , j ;for( i = 0 ; s1[i] != '\0' ; i++ ) ;for( j = 0 ; s2[j] != '\0' ; j++ , i++ )s1[i] = s2[j] ;s1[i] = '\0' ;}第8章编译预处理二、程序阅读题16,1821535第9章指针二、填空题1. 地址,NULL(或0)2 . char a, *p; ,scanf("%c", &a); ,p=&a;3. *m4. for( k=0; k<10; k++ )5. *(p+i) ,p[i] ,*(x+i)6. str[i]或*( str + i ) ,i三、程序阅读题1. gae2. bcdABCD3. 7, 8, 84. 8 45. 3 14 26. efgh7. w,one8. 7四、程序完善题1. a[i] 或*( a + i )2. *p!='\0' *p-'0'3. p1 p2-x4. max(int a , int b );p = max四、编程题1.【参考代码】#include<stdio.h>void sort( int *a , int *b , int *c );int main(){int m , n , t ;printf( "Please input(m n t):" ) ;scanf( "%d%d%d" , &m , &n , &t ) ;sort( &m , &n , &t ) ;printf( "The result is :%d\t%d\t%d\n" , m , n , t ) ;return 0 ;}void sort( int *a , int *b , int *c ){int temp ;if( *a > *b ) { temp = *a ; *a = *b ; *b = temp ; }if( *a > *c ) { temp = *a ; *a = *c ; *c = temp ; }if( *b > *c ) { temp = *b ; *b = *c ; *c = temp ; }}2.【参考代码】程序1:#include <stdio.h>int strcompare( char *str1 , char *str2 );int main( ){int m ;char s1[20] , s2[20] , *p1 , *p2 ;printf( "Please input(string1):" ) ;scanf( "%s" , s1 ) ;printf( "Please input(string2):" ) ;scanf( "%s" , s2 ) ;m = strcompare ( s1 , s2 ) ;printf( "The result of strcompare is: %d\n" , m ) ;return 0 ;}int strcompare( char *str1 , char *str2 ){int i = 0 ;while( ( *( str1 + i ) == *( str2 + i ) ) &&( *( str1 + i ) != '\0' ) ) i++ ;return( *( str1 + i ) - *( str2 + i ) ) ;}程序2:#include <stdio.h>int strcompare( char *str1 , char *str2 );int main( ){int m ;char s1[20] , s2[20] , *p1 , *p2 ;printf( "Please input(string1):" ) ;scanf( "%s" , s1 ) ;printf( "Please input(string2):" ) ;scanf( "%s" , s2 ) ;p1 = s1 ;p2 = s2 ;m = strcompare ( p1 , p2 ) ;printf( "The result of strcompare is: %d\n" , m ) ;return 0 ;}int strcompare( char *str1 , char *str2 ){int i = 0 ;while( ( *( str1 + i ) == *( str2 + i ) ) &&( *( str1 + i ) != '\0' ) ) i++ ;return( *( str1 + i ) - *( str2 + i ) ) ;}程序3:#include <stdio.h>int strcompare( char str1[] , char str2[] );int main( ){int m ;char s1[20] , s2[20] , *p1 , *p2 ;printf( "Please input(string1):" ) ;scanf( "%s" , s1 ) ;printf( "Please input(string2):" ) ;scanf( "%s" , s2 ) ;p1 = s1 ;p2 = s2 ;m = strcompare ( p1 , p2 ) ;printf( "The result of strcompare is: %d\n" , m ) ;return 0 ;}int strcompare( char *str1 , char *str2 ){int i = 0 ;while( ( str1[i] == str2[i] ) &&( str1[i] != '\0' ) )i++ ;return( str1[i]- str2[i] ) ;}第10章结构体与共用体一、选择题二、填空题1. 162 . p->next=head->next head->next=p3. p->next三、程序阅读题1. 51,60,212. 163. 1001,ChangRong,1098.0四、程序完善题1. sizeof( struct ps ) 或sizeof( bt )2. p=p->next3. person[i].sex五、编程题1.【参考代码】#define N 3#include <stdio.h>struct student{char num[6] ;char name[8] ;int score[2] ;float ave ;} ;void input( struct student stu[N] ) ;void average( struct student stu[N] ) ;int max( struct student stu[N] ) ;int main( ){int i , j ;struct student stu[N] ;input( stu ) ;average( stu ) ;printf( "No\tName\tScore1\tScore2\tAverage\n" ) ;for( i = 0 ; i < N ; i++ ){printf( "%s\t%s\t" , stu[i].num , stu[i].name ) ;for( j = 0 ; j < 2 ; j++ )printf( "%d\t" , stu[i].score[j] ) ;printf( "%8.2f\n" , stu[i].ave ) ;}i = max( stu ) ;printf( "\nThe max is:\n" ) ;printf( "No\tName\tScore1\tScore2\tAverage\n" ) ;printf( "%s\t%s\t" , stu[i].num , stu[i].name ) ;for( j = 0 ; j < 2 ; j++ )printf( "%d\t" , stu[i].score[j] ) ;printf( "%5.2f\n" , stu[i].ave ) ;return 0;}void input( struct student stu[N]){int i , j ;for(i=0;i<N;i++){printf("\nPlease input No%d student:\n",i+1);printf("No:");scanf("%s",stu[i].num);printf("Name:");scanf("%s",stu[i].name);for(j=0;j<2;j++){printf("score %d:",j+1);scanf("%d",&stu[i].score[j]);}}}void average( struct student stu[N]){int i , j , sum ;for(i=0;i<N;i++){for(j=0 , stu[i].ave = 0 ;j<2;j++)stu[i].ave += stu[i].score[j];stu[i].ave = stu[i].ave / 2 ;}}int max( struct student stu[N]){int i , max , index;max = stu[0].ave ;index = 0 ;for( i = 1 ; i < N ; i++ ){if( max < stu[i].ave ){max = stu[i].ave ;index = i ;}}return index;}2.【参考代码】#include<stdio.h>#include<stdlib.h>struct node{short int data ;struct node *next ;} ;typedef struct node NODE ;struct node *CreatLink( ) ;void PrintLink( NODE *head ) ;int max( NODE *head );int main( ){NODE *head ;int max_value ;head = CreatLink( ) ;PrintLink( head ) ;max_value = max( head ) ;printf( "The max is:%d\n" , max_value ) ;return 0 ;}struct node *CreatLink( ){NODE *head , *p , *q ;short int num ;head = ( NODE * )malloc( sizeof( NODE ) ) ;head->next = NULL ;p = head ;printf( "Please input( end of -1)!:\n" ) ;scanf( "%d" , &num ) ;while( num != -1 ){q = ( NODE *)malloc( sizeof( NODE ) ) ;q->data = num ;p->next = q ;p = q ;scanf( "%d" , &num ) ;}p->next = NULL ;return head ;}void PrintLink( NODE *head ) {NODE *p;p = head->next ;printf( "The data is:\n" ) ;while( p != NULL ){printf( "%4d" , p->data ) ;p = p->next ;}printf( "\n" ) ;}int max( NODE *head ){NODE *p;short int max = -32768;p = head->next ;while( p != NULL ){if( max < p->data )max = p->data ;p = p->next ;}return max ;}第11章位运算1. 0000 11112 . x | ff003. 4 3三、程序阅读题1. 02. 11 223. 0四、编程题1.【参考代码】#include<stdio.h>int main(){short int data , low ,high ;printf( "Please input( short int):" ) ;scanf( "%d" , &data ) ;low = data & 0x00ff ; /* 0x00ff表示低字节全1 */high = data & 0xff00 ; /* 0xff00表示高字节全1 */printf( "data:0x%x,the value of low byte is:0x%x\n" , data , high ) ;printf( "data:0x%x,the value of high byte is:0x%x\n" , data , low ) ;return 0 ;}2.【参考代码】#include <stdio.h>int main( ){short int data , result ;printf( "Please intput(short int):" ) ;scanf( "%d" , &data ) ;result = data ^ 0x000f ; /* 0x000f表示低4位全1,高12位全0 */ printf( "The data is 0x%x \nThe result is :0x%x\n" , data,result ) ;return 0 ;}第12章文件操作一、选择题二、填空题1. 二进制ASCII(文本)2 . FILE *fp# include <stdio.h>3. n – 1 buf的首地址4. 15. 用以获得文件读写位置标记指针的位置,函数返回值为当前文件读写位置标记指针相对于文件开头的字节数6. 使文件读写位置标记指针重新返回文件的开头三、程序阅读题1. 1 22. end3. 34. hello,四、程序完善题1. ! feof (fp) fgetc (fp)2. fopen (“num.dat”,”r”) fp,”%d”,&temp z++3. ( ch=getchar() )ch , fp五、编程题1.【参考代码】#include<stdio.h>#include<stdlib.h>#include<string.h>int main( ){FILE *fp ;char str[100] , [10] ;int i = 0 ;if( ( fp = fopen( "upper.txt" , "w+" ) ) == NULL ){printf( "Cannot open file!\n" ) ;exit( 0 ) ;}printf( "Please input(string):\n" ) ;gets( str ) ;while( str[i] != '!' ){if( str[i] >= 'a' && str[i] <= 'z' )str[i] = str[i] - 32 ;fputc( str[i] , fp ) ;i++ ;}rewind( fp ) ;fgets( str , strlen( str ) + 1 , fp ) ;printf( "\nThe result is :\n" ) ;printf( "%s\n" , str ) ;fclose( fp ) ;return 0 ;}2.【参考代码】#include<stdio.h>#include<stdlib.h>#define N 5struct student{char num[10] ;char name[8] ;int score[3] ;float ave ;} stu[N] ;int main( ){int i , j , sum ;FILE *fp ;for( i = 0 ; i < N ; i++ ){printf( "\nPlease input student information: \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 ;}if( ( fp = fopen( "stud.dat" , "w" ) ) == NULL ){printf( "cannot open stud for write!\n" ) ;exit( 0 ) ;}for( i = 0 ; i < N ; i++ ){fwrite( &stu[i] , sizeof( struct student ) , 1 , fp ) ;}fclose( fp ) ;if( ( fp = fopen( "stud.dat" , "r" ) ) == NULL ){printf( "cannot open stud for read!\n" ) ;exit( 0 ) ;}printf( "\nNo\tName\tScore1\tScore2\tAverage\n" ) ;for( i = 0 ; i < N ; i++ ){fread( &stu[i] , sizeof( struct student ) , 1 , fp ) ;printf( "\n%s\t%s\t%d\t%d\t%5.2f\n" , stu[i].num , stu[i].name , stu[i].score[0] , stu[i].score[1] , stu[i].score[2] ,stu[i].ave ) ;}fclose( fp ) ;return 0 ;}3.【参考代码】#include<stdio.h>#include<stdlib.h>#define N 5struct student{char num[10] ;char name[8] ;int score[3] ;float ave ;} stu[N] ;int main( ){int i , j , min , index ;FILE *fp ;struct student temp ;/*从stud.dat文件中读入数据,存放在stu数组中*/if( ( fp = fopen( "stud.dat" , "r" ) ) == NULL ){printf( "cannot open stud for read!\n" ) ;exit( 0 ) ;}printf( "\nThe data is :" ) ;printf( "\nNo\tName\tScore1\tScore2\tAverage\n" ) ;for( i = 0 ; i < N ; i++ ){fread( &stu[i] , sizeof(struct student ) , 1 , fp ) ;printf( "\n%s\t%s\t%d\t%d\t%5.2f\n" , stu[i].num , stu[i].name , stu[i].score[0] , stu[i].score[1] , stu[i].score[2] ,stu[i].ave ) ;}fclose( fp ) ;/*对stu数组中数组元素按其平均值数据域排序*/for( i = 0 ; i < N -1 ; i++ ){min = stu[i].ave ;index = i ;for( j = i + 1 ; j < N ; j++ ){if( min > stu[j].ave )index = j ;}if( index != i ){temp = stu[i] ;stu[i] = stu[index] ;stu[index] = temp ;}}/*将排序之后的stu数组存放在stu_sort文件中*/if( ( fp = fopen( "stu_sort.dat" , "w" ) ) == NULL ){printf( "cannot open stud for write!\n" ) ;exit( 0 ) ;}for( i = 0 ; i < N ; i++ ){fwrite( &stu[i] , sizeof(struct student) , 1 , fp ) ;}fclose( fp ) ;/*将stu_sort文件中的数据,读出存放在stu数组中*/if( ( fp = fopen( "stu_sort.dat" , "r" ) ) == NULL ){printf( "cannot open stud for read!\n" ) ;exit( 0 ) ;}printf( "\nThe result is:" ) ;/*将stu数组中的数据输出*/printf( "\nNo\tName\tScore1\tScore2\tAverage\n" ) ;for( i = 0 ; i < N ; i++ ){fread( &stu[i] , sizeof(struct student) , 1 , fp ) ;printf( "\n%s\t%s\t%d\t%d\t%5.2f\n" , stu[i].num , stu[i].name , stu[i].score[0] , stu[i].score[1] ,stu[i].score[2] , stu[i].ave ) ;}fclose( fp ) ;return 0 ;}。

C语言-习题集参考答案全部

C语言-习题集参考答案全部

目录- 1 -目录第一章C语言基础知识参考答案 ................................................................................ - 2 - 第二章顺序结构参考答案.......................................................................................... - 5 - 第三章选择结构参考答案.............................................................................................. - 7 - 第四章循环结构参考答案............................................................................................ - 11 - 第五章函数参考答案................................................................................................ - 15 - 第六章指针参考答案.................................................................................................... - 18 - 第七章一维数组参考答案............................................................................................ - 21 - 第八章二维数组参考答案.......................................................................................... - 28 - 第九章字符串参考答案.......................................................................................... - 31 - 第十章对C语言的深入讨论参考答案 ....................................................................... - 33 - 第十一章结构体与共用体参考答案............................................................................ - 34 - 第十二章文件参考答案........................................................................................ - 35 -全国计算机等级考试二级教程C 语言习题集参考答案- 2 - 第一章C语言基础知识参考答案一,选择题1 C2 D3 A4 C5 A6 D7 C 分析:C答案以数字开头了8 D 分析:int 是关键字9 C 10 D 11 B12 D 分析:Visual C++6.0中int类型的变量占的字节数为4。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《C语言程序设计》习题解答国荣隋雪莉闵芳目录第1章 C语言程序设计概述 (2)第2章数据类型及其运算 (3)第3章语句与输入输出 (4)第4章选择结构程序设计 (6)第5章循环结构程序设计 (9)第6章数组 (12)第7章函数 (15)第8章编译预处理 (18)第9章指针 (19)第10章结构体与共用体 (21)第11章位运算 (25)第12章文件操作 (26)第1章 C语言程序设计概述1. 函数、main()函数2. /*、*/3. .C、.OBJ、.EXE4. 顺序结构、选择结构、循环结构三、编程题1.【参考代码】#include<stdio.h>int main( ){printf( "(学校名称)\n" ) ;printf( "()\n" ) ;return 0 ;}2.【参考代码】#include<stdio.h>int main( ){printf( "(学校名称)\n()\n" ) ;return 0 ;}第2章数据类型及其运算注:第5题B选项为:'\'' '\017' '\t'二、填空题1. 字母、数字、下划线2. 1、4、4、83. -164. 3.55. 06. 97. 68. -609. y%2==110. 1、0、1三、程序阅读题1. b2. 03. 04. 10,25. 9,10,9,106. 3,1,0,07. 3,20,30,1第3章语句与输入输出1. 123.472. D3. 回车4. 10,2三、程序阅读题1. 2612. 203. 201,104. y=4630y=46305. *3.140000,3.142*6. c:dec=120,oct=170,hex=78,ASCII=x7. x=1 y=2 *sum*=310 squared is : 1008. 2 48 20.2 20.29. x+y+z=4810. 55, ,A四、编程题1.【参考代码】#include<stdio.h>int main( ){char ch;printf("请输入一个字符:\n");scanf("%c",&ch);printf("%c的ASCII码为:%d\n", ch,ch);return 0 ;}2.【参考代码】#include<stdio.h>#define PI 3.1416int main( ){double r, h;double cl,cs,cv;printf("请输入圆的半径:");scanf("%lf", &r);printf("请输入圆柱高:");scanf("%lf", &h);cl=2*PI*r;cs=PI*r*r;cv=PI*r*r*h;printf("圆的周长为:%.4lf\n", cl);printf("圆的面积为:%.4lf\n", cs);printf("圆柱的体积为:%.4lf\n", cv);return 0 ;}3.【参考代码】#include<stdio.h>int main( ){int splitInt,one,ten,hundred;printf("输入要处理的整数:");scanf("%d",&splitInt);hundred = splitInt/100;ten = splitInt%100/10;one = splitInt%10;printf("个位:%d,十位:%d,百位:%d\n",one,ten,hundred);return 0 ;}第4章选择结构程序设计1. 102. 2,2,23. 64. 97,b5. c=-16. 88887. 20,08. 2,19. 1,12,22,1-2,210. a=1,b=3三、程序完善题1. a>b、c>x四、编程题1.【参考代码】#include<stdio.h>int main( ){int a, b, c,d,min;printf("输入4个整数:");scanf("%d%d%d%d",&a,&b,&c,&d);if(a < b) min = a;else min = b;if(c < min) min=c;if(d<min) min=d;printf("%d\n",min);return 0 ;}2.【参考代码】#include<stdio.h>int main( ){int num,a,b,c,d;printf("请输入一个四位整数:");scanf("%d",&num);a=num/1000;b=num%1000/100;c=num%100/10;d=num%10;printf("各位数字之和为:%d\n",a+b+c+d);return 0 ;}3.【参考代码】#include<stdio.h>int main( ){int x;printf("请输入x:");scanf("%d",&x);printf("y的值为:");if(x<0)printf("%d\n",x);else if(x<50)printf("%d\n",3*x-2);else if(x<100)printf("%d\n",4*x+1);elseprintf("%d\n",5*x);return 0 ;}4.【参考代码】#include<stdio.h>int main( ){int dj;float zl,je,yfk;printf("请输入等级(1~4): ");scanf("%d",&dj);if (dj>4||dj<1){printf("无此等级的苹果!\n");return 0;}printf("请输入重量(公斤): ");scanf("%f",&zl);printf("\n");switch (dj){case 1 : je=5.5*zl; break;case 2 : je=4.3*zl; break;case 3 : je=3.0*zl; break;case 4 : je=2.5*zl; break;}printf("您选择苹果级别: %d 级\n",dj);printf("您购买苹果重量: %.2f公斤\n",zl);printf("您应付金额为: %.2f元\n",je);printf("\n");printf("顾客所付金额: ");scanf("%f",&yfk);if (yfk<je){printf("Data Error!\n");return 0;}printf("应找您: %.2f元\n",yfk-je);return 0 ;}第5章循环结构程序设计1. 1,2,02 . m=4,n=23. A2C4E64. 1325. 46. k=0,m=57. x=88. 1.69. 998988三、程序完善题1. ( ch > 'Z' && ch <= 'Z' + 4 ) ||(ch > 'z' ) ch - 262. k k/10 continue3. i + t * 10 s = s + t4. fabs( t ) >= 1e-6 f = -f5. i<10 j%3 !=0四、编程题1.【参考代码】#include<stdio.h>int main( ){int n , i , j , k ;printf( "Output:\n" ) ;for(n = 100 ; n < 1000 ; n++ ){i = n % 10 ; /* 个位*/j = ( n / 10 ) % 10 ; /* 十位*/k = n / 100 ; /* 百位*/if ( n == i * i * i + j * j * j + k * k * k )printf( "%d\n" , n ) ;}return 0 ;}2. 【参考代码】#include<stdio.h>int main ( ){int i , m , n , t , p , k ;printf( "Please input: " ) ;scanf ( "%d,%d" , &m , &n ) ;if( m < n ){t = n ;n = m ;m = t ;}p = m * n ;while ( n != 0 ) /* 余数不为0,继续相除,直到余数为0 */ {i = m % n ;m = n ;n = i ;}k = p / m ;printf( "%d,%d\n" , m , k );return 0 ;}3. 【参考代码】#include<stdio.h>int main( ){int i , n , t , sum ;t = 1 ;sum = 0 ;printf( "Please input: n = " ) ;scanf( "%d" , &n ) ;for( i = 1 ; i <= n ; i++ ){t = t * i ;sum = sum + t ;}printf( "1!+2!+…+%d!= %d\n" , n , sum ) ;return 0 ;}4. 【参考代码】#include<stdio.h>int main( ){int i , m ;double sum = 0 , k = 1 ;printf( "Please input : m=" ) ;scanf( "%d" , &m ) ;for( i = 1 ; i <= m ; i++ ){sum = sum + k / i ;k = -k ;}printf( "sum=%4.2f\n" , sum ) ;return 0 ;}第6章数组1 82 43 0,24 125 t*M6 mo7 fwo三、程序完善题1 k = i j = ia[k] = max a[j] = min2 sum += score[i] score[i]<avg3 s[i] = s[i] + a[i][j] printf( "\n" ) ;4 j = strlen( str ) – 1 str[j] = k5 ( c = getchar( ) ) != '#' num[c-'A'] += 1四、编程题1. 【参考代码】#include<stdio.h>#define N 5int main( ){int a[N] , i , j , r , temp ;printf( "Please input %d numbers\n" , N ) ;for( i = 0 ; i < N ; i++ )scanf( "%d" , &a[i] ) ;for( i = 0 ; i < N - 1 ; i++ ){r = i ;for( j = i + 1 ; j < N ; j++ )if( a[j] < a[r] )r = j ;if( r != i ){temp = a[r] ;a[r] = a[i] ;a[i] = temp ;}}printf( "The array after sort:\n" ) ;for( i = 0 ; i < N ; i++ )printf( "%5d" , a[i] ) ;printf( "\n" ) ;return 0 ;}2. 【参考代码】#include<stdio.h>int main( ){int a[10] = { 1 , 2 , 3 , 6 , 7 , 8 , 9 , 10 } ;int x , j , k = 0 ;printf( "Please input :x= " ) ;scanf( "%d" , &x) ;if( x > a[7] )a[8] = x ;else{for( j = 0 ; j < 8 ; j++ )if( x < a[j] )break ;for(k = 8 ; k > j ; k-- )a[k] = a[k - 1] ;a[j] = x ;}for( j = 0 ; j < 9 ; j++ )printf( "%5d" , a[j] ) ;printf( "\n" ) ;return 0 ;}3. 【参考代码】#include<stdio.h>int main( ){int a[5][5] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, 22,23,24} ;int i , j ,sum = 0 ;for ( i = 0 ; i < 5 ; i++ ){for ( j = 0 ; j < 5 ; j++)printf( "%4d" , a[i][j] ) ;printf( "\n" ) ;}for( i =0 ;i < 5 ; i++ )sum += a[i][i] ;printf( " sum=%4d\n" , sum ) ;return 0 ;}4. 【参考代码】#include<stdio.h>int main( ){char s1[100] , s2[30] ;int i , j ;printf( "Please input s1:" ) ;gets( s1 ) ;printf( "Please input s2:" ) ;gets( s2 ) ;for( i = 0 ; s1[i] != '\0' ; i++ ) ;for( j = 0 ; s2[j] != '\0' ; j++ , i++ )s1[i] = s2[j] ;s1[i] = '\0' ;printf( "Output\ns1:" ) ;puts( s1 ) ;return 0 ;}5. 【参考代码】#include<stdio.h>int main( ){char s1[100] ;int i ;printf( "Please input s1:" ) ;gets( s1 ) ;for( i = 0 ; s1[i] != '\0' ; i++ ) ;printf( "The length of s1 is %d\n" ,i ) ;return 0 ;}第7章函数1 max is 22 a=1,b=23 1 114 a=11,b=12,c=25 66 7 8 97 8 178 0 1 2 0 1 2三、程序完善题1 float area ( float r ) return s2 z = fun( x , y ) z = z * x3 count =fun( score ) count++四、编程题1. 【参考代码】#include<stdio.h>int main( ){void f(int n) ;int n ;printf( "Please input: n= " ) ;scanf( "%d" , &n ) ;if( n <= 0)printf( "Wrong number!\n" ) ;elsef( n ) ;return 0 ;}void f(int n){if( n % 2 == 1 )printf( "%d is a odd number.\n" , n ) ;elseprintf( "%d is a even number.\n" , n ) ;}2. 【参考代码】#include < stdio.h >#include < math.h >int main( ){void f( int m ) ;int m ;printf( "Please input: m= " ) ;scanf( "%d" , &m ) ;f( m ) ;return 0 ;}void f( int m ){int i , k ;k = sqrt( m );for(i = 2 ; i <= k ; i++ )if( m % i == 0 )break;if (i >= k + 1 )printf( "%d is a Prime Number.\n" , m ) ;elseprintf( "%d is not a Prime Number.\n" , m ) ; }3. 【参考代码】#include<stdio.h>int gys( int m , int n ){int r ;r = m % n ;while( r != 0 ){m = n ;n = r ;r = m % n ;}return n ;}int gbs( int m , int n , int r ){return m * n / r ;}int main( ){int m , n , t ;printf( "Please input(m,n):" ) ;scanf( "%d%d" , &m , &n ) ;if( m < n ){t = m ;m = n ;n = t ;}t = gys( m , n ) ;printf( "gys=%d\n" , t ) ;t = gbs( m , n , t ) ;printf( "gbs=%d\n" , t ) ;return 0 ;}4. 【参考代码】#include<stdio.h>int main( ){void mystrcat( char s1[100] , char s2[30] ) ;char s1[100] , s2[30] ;printf( "Please input s1:" ) ;gets( s1 ) ;printf( "Please input s2:" ) ;gets( s2 ) ;mystrcat( s1 , s2 ) ;printf( "Output\ns1:" ) ;puts( s1 ) ;return 0 ;}void mystrcat( char s1[100] , char s2[30] ){int i , j ;for( i = 0 ; s1[i] != '\0' ; i++ ) ;for( j = 0 ; s2[j] != '\0' ; j++ , i++ )s1[i] = s2[j] ;s1[i] = '\0' ;}第8章编译预处理1 6,182 153 5第9章指针二、填空题1. 地址,NULL(或0)2 . char a, *p; ,scanf("%c", &a); ,p=&a;3. *m4. for( k=0; k<10; k++ )5. *(p+i) ,p[i] ,*(x+i)6. str[i]或*( str + i ) ,i三、程序阅读题1. gae2. bcdABCD3. 7, 8, 84. 8 45. 3 14 26. efgh7. w,one8. 7四、程序完善题1. a[i] 或*( a + i )2. *p!='\0' *p-'0'3. p1 p2-x4. max(int a , int b ); p = max四、编程题1.【参考代码】#include<stdio.h>void sort( int *a , int *b , int *c );int main(){int m , n , t ;printf( "Please input(m n t):" ) ;scanf( "%d%d%d" , &m , &n , &t ) ;sort( &m , &n , &t ) ;printf( "The result is :%d\t%d\t%d\n" , m , n , t ) ;return 0 ;}void sort( int *a , int *b , int *c ){int temp ;if( *a > *b ) { temp = *a ; *a = *b ; *b = temp ; }if( *a > *c ) { temp = *a ; *a = *c ; *c = temp ; }if( *b > *c ) { temp = *b ; *b = *c ; *c = temp ; }}2.【参考代码】程序1:#include <stdio.h>int strcompare( char *str1 , char *str2 );int main( ){int m ;char s1[20] , s2[20] , *p1 , *p2 ;printf( "Please input(string1):" ) ;scanf( "%s" , s1 ) ;printf( "Please input(string2):" ) ;scanf( "%s" , s2 ) ;m = strcompare ( s1 , s2 ) ;printf( "The result of strcompare is: %d\n" , m ) ;return 0 ;}int strcompare( char *str1 , char *str2 ){int i = 0 ;while( ( *( str1 + i ) == *( str2 + i ) ) &&( *( str1 + i ) != '\0' ) ) i++ ;return( *( str1 + i ) - *( str2 + i ) ) ;}程序2:#include <stdio.h>int strcompare( char *str1 , char *str2 );int main( ){int m ;char s1[20] , s2[20] , *p1 , *p2 ;printf( "Please input(string1):" ) ;scanf( "%s" , s1 ) ;printf( "Please input(string2):" ) ;scanf( "%s" , s2 ) ;p1 = s1 ;p2 = s2 ;m = strcompare ( p1 , p2 ) ;printf( "The result of strcompare is: %d\n" , m ) ;return 0 ;}int strcompare( char *str1 , char *str2 ){int i = 0 ;while( ( *( str1 + i ) == *( str2 + i ) ) &&( *( str1 + i ) != '\0' ) ) i++ ;return( *( str1 + i ) - *( str2 + i ) ) ;}程序3:#include <stdio.h>int strcompare( char str1[] , char str2[] );int main( ){int m ;char s1[20] , s2[20] , *p1 , *p2 ;printf( "Please input(string1):" ) ;scanf( "%s" , s1 ) ;printf( "Please input(string2):" ) ;scanf( "%s" , s2 ) ;p1 = s1 ;p2 = s2 ;m = strcompare ( p1 , p2 ) ;printf( "The result of strcompare is: %d\n" , m ) ;return 0 ;}int strcompare( char *str1 , char *str2 ){int i = 0 ;while( ( str1[i] == str2[i] ) &&( str1[i] != '\0' ) )i++ ;return( str1[i]- str2[i] ) ;}第10章结构体与共用体1. 112 . p->next=head->next head->next=p3. p->next三、程序阅读题1. 51,60,212. 163. 1001,ChangRong,1098.0四、程序完善题1. sizeof( struct ps ) 或sizeof( bt )2. p=p->next3. person[i].sex五、编程题1.【参考代码】#define N 3#include <stdio.h>struct student{char num[6] ;char name[8] ;int score[2] ;float ave ;} ;void input( struct student stu[N] ) ;void average( struct student stu[N] ) ;int max( struct student stu[N] ) ;int main( ){int i , j ;struct student stu[N] ;input( stu ) ;average( stu ) ;printf( "No\tName\tScore1\tScore2\tAverage\n" ) ;for( i = 0 ; i < N ; i++ ){printf( "%s\t%s\t" , stu[i].num , stu[i].name ) ;for( j = 0 ; j < 2 ; j++ )printf( "%d\t" , stu[i].score[j] ) ;printf( "%8.2f\n" , stu[i].ave ) ;}i = max( stu ) ;printf( "\nThe max is:\n" ) ;printf( "No\tName\tScore1\tScore2\tAverage\n" ) ;printf( "%s\t%s\t" , stu[i].num , stu[i].name ) ;for( j = 0 ; j < 2 ; j++ )printf( "%d\t" , stu[i].score[j] ) ;printf( "%5.2f\n" , stu[i].ave ) ;return 0;}void input( struct student stu[N]){int i , j ;for(i=0;i<N;i++){printf("\nPlease input No%d student:\n",i+1);printf("No:");scanf("%s",stu[i].num);printf("Name:");scanf("%s",stu[i].name);for(j=0;j<2;j++){printf("score %d:",j+1);scanf("%d",&stu[i].score[j]);}}}void average( struct student stu[N]){int i , j , sum ;for(i=0;i<N;i++){for(j=0 , stu[i].ave = 0 ;j<2;j++)stu[i].ave += stu[i].score[j];stu[i].ave = stu[i].ave / 2 ;}}int max( struct student stu[N]){int i , max , index;max = stu[0].ave ;index = 0 ;for( i = 1 ; i < N ; i++ ){if( max < stu[i].ave ){max = stu[i].ave ;index = i ;}}return index;}2.【参考代码】#include<stdio.h>#include<stdlib.h>struct node{short int data ;struct node *next ;} ;typedef struct node NODE ;struct node *CreatLink( ) ;void PrintLink( NODE *head ) ;int max( NODE *head );int main( ){NODE *head ;int max_value ;head = CreatLink( ) ;PrintLink( head ) ;max_value = max( head ) ;printf( "The max is:%d\n" , max_value ) ;return 0 ;}struct node *CreatLink( ){NODE *head , *p , *q ;short int num ;head = ( NODE * )malloc( sizeof( NODE ) ) ;head->next = NULL ;p = head ;printf( "Please input( end of -1)!:\n" ) ;scanf( "%d" , &num ) ;while( num != -1 ){q = ( NODE *)malloc( sizeof( NODE ) ) ;q->data = num ;p->next = q ;p = q ;scanf( "%d" , &num ) ;}p->next = NULL ;return head ;}void PrintLink( NODE *head ){NODE *p;p = head->next ;printf( "The data is:\n" ) ;while( p != NULL ){printf( "%4d" , p->data ) ;p = p->next ;}printf( "\n" ) ;}int max( NODE *head ){NODE *p;short int max = -32768;p = head->next ;while( p != NULL ){if( max < p->data )max = p->data ;p = p->next ;}return max ;}第11章位运算1. 0000 11112 . x | ff003. 4 3三、程序阅读题1. 02. 11 223. 0四、编程题1.【参考代码】#include<stdio.h>int main(){short int data , low ,high ;printf( "Please input( short int):" ) ;scanf( "%d" , &data ) ;low = data & 0x00ff ; /* 0x00ff表示低字节全1 */high = data & 0xff00 ; /* 0xff00表示高字节全1 */printf( "data:0x%x,the value of low byte is:0x%x\n" , data , high ) ;printf( "data:0x%x,the value of high byte is:0x%x\n" , data , low ) ;return 0 ;}2.【参考代码】#include <stdio.h>int main( ){short int data , result ;printf( "Please intput(short int):" ) ;scanf( "%d" , &data ) ;result = data ^ 0x000f ; /* 0x000f表示低4位全1,高12位全0 */ printf( "The data is 0x%x \nThe result is :0x%x\n" , data,result ) ;return 0 ;}第12章文件操作二、填空题1. 二进制ASCII(文本)2 . FILE *fp # include <stdio.h>3. n – 1 buf的首地址4. 15. 用以获得文件读写位置标记指针的位置,函数返回值为当前文件读写位置标记指针相对于文件开头的字节数6. 使文件读写位置标记指针重新返回文件的开头三、程序阅读题1. 1 22. end3. 34. hello,四、程序完善题1. ! feof (fp) fgetc (fp)2. fopen (“num.dat”,”r”) fp,”%d”,&temp z++3. ( ch=getchar() ) ch , fp五、编程题1.【参考代码】#include<stdio.h>#include<stdlib.h>#include<string.h>int main( ){FILE *fp ;char str[100] , filename[10] ;int i = 0 ;if( ( fp = fopen( "upper.txt" , "w+" ) ) == NULL ){printf( "Cannot open file!\n" ) ;exit( 0 ) ;}printf( "Please input(string):\n" ) ;gets( str ) ;while( str[i] != '!' ){if( str[i] >= 'a' && str[i] <= 'z' )str[i] = str[i] - 32 ;fputc( str[i] , fp ) ;i++ ;}rewind( fp ) ;fgets( str , strlen( str ) + 1 , fp ) ;printf( "\nThe result is :\n" ) ;printf( "%s\n" , str ) ;fclose( fp ) ;return 0 ;}2.【参考代码】#include<stdio.h>#include<stdlib.h>#define N 5struct student{char num[10] ;char name[8] ;int score[3] ;float ave ;} stu[N] ;int main( ){int i , j , sum ;FILE *fp ;for( i = 0 ; i < N ; i++ ){printf( "\nPlease input student information: \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 ;}if( ( fp = fopen( "stud.dat" , "w" ) ) == NULL ){printf( "cannot open stud for write!\n" ) ;exit( 0 ) ;}for( i = 0 ; i < N ; i++ ){fwrite( &stu[i] , sizeof( struct student ) , 1 , fp ) ;}fclose( fp ) ;if( ( fp = fopen( "stud.dat" , "r" ) ) == NULL ){printf( "cannot open stud for read!\n" ) ;exit( 0 ) ;}printf( "\nNo\tName\tScore1\tScore2\tAverage\n" ) ;for( i = 0 ; i < N ; i++ ){fread( &stu[i] , sizeof( struct student ) , 1 , fp ) ;printf( "\n%s\t%s\t%d\t%d\t%5.2f\n" , stu[i].num , stu[i].name , stu[i].score[0] , stu[i].score[1] , stu[i].score[2] ,stu[i].ave ) ;}fclose( fp ) ;return 0 ;}3.【参考代码】#include<stdio.h>#include<stdlib.h>#define N 5struct student{char num[10] ;char name[8] ;int score[3] ;float ave ;} stu[N] ;int main( ){int i , j , min , index ;FILE *fp ;struct student temp ;/*从stud.dat文件中读入数据,存放在stu数组中*/if( ( fp = fopen( "stud.dat" , "r" ) ) == NULL ){printf( "cannot open stud for read!\n" ) ;exit( 0 ) ;}printf( "\nThe data is :" ) ;printf( "\nNo\tName\tScore1\tScore2\tAverage\n" ) ;for( i = 0 ; i < N ; i++ ){fread( &stu[i] , sizeof(struct student ) , 1 , fp ) ;printf( "\n%s\t%s\t%d\t%d\t%5.2f\n" , stu[i].num , stu[i].name , stu[i].score[0] , stu[i].score[1] , stu[i].score[2] ,stu[i].ave ) ;}fclose( fp ) ;/*对stu数组中数组元素按其平均值数据域排序*/for( i = 0 ; i < N -1 ; i++ ){min = stu[i].ave ;index = i ;for( j = i + 1 ; j < N ; j++ ){if( min > stu[j].ave )index = j ;}if( index != i ){temp = stu[i] ;stu[i] = stu[index] ;stu[index] = temp ;}}/*将排序之后的stu数组存放在stu_sort文件中*/if( ( fp = fopen( "stu_sort.dat" , "w" ) ) == NULL ){printf( "cannot open stud for write!\n" ) ;exit( 0 ) ;}for( i = 0 ; i < N ; i++ ){fwrite( &stu[i] , sizeof(struct student) , 1 , fp ) ;}fclose( fp ) ;/*将stu_sort文件中的数据,读出存放在stu数组中*/if( ( fp = fopen( "stu_sort.dat" , "r" ) ) == NULL ){printf( "cannot open stud for read!\n" ) ;exit( 0 ) ;}printf( "\nThe result is:" ) ;/*将stu数组中的数据输出*/printf( "\nNo\tName\tScore1\tScore2\tAverage\n" ) ;for( i = 0 ; i < N ; i++ ){fread( &stu[i] , sizeof(struct student) , 1 , fp ) ;printf( "\n%s\t%s\t%d\t%d\t%5.2f\n" , stu[i].num , stu[i].name , stu[i].score[0] , stu[i].score[1] ,stu[i].score[2] , stu[i].ave ) ;}fclose( fp ) ;return 0 ;}。

相关文档
最新文档