程序设计与实践教材_第1页
程序设计与实践教材_第2页
程序设计与实践教材_第3页
程序设计与实践教材_第4页
程序设计与实践教材_第5页
已阅读5页,还剩119页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序设计与实践

2海第二I殳大学

2015年2月使用

目录

实习要求及时间安排3

成绩评定3

实验内容4

文档格式12

2012年二级考C大纲16

2004年全真考题21

2005年全真考题28

2006年全真考题34

2007年全真考题40

2008年全真考题46

2009年全真考题51

2010年全真考题(B)58

2010年全真考题(C)65

2010年全真考题(E)72

2011年全真考题(A)80

2011年全真考题(B)93

2012年全真考题105

补充知识112

实习要求及时间安排

《程序设计与实践》课程实习为分散进行,共16周。

前8周为课程实习;课程实习要求完成六个程序。要求所有程序按模块化设计,

结构清晰,能够获得最终结果,并提交实验报告(格式见后)。

后8周为参加上海市高等学校计算机等级考试(二级)《C程序设计》考前辅导。

通过辅导和5〜6月份的考试报名(请关注校园网通知),参加每年10月最后一个

星期六或11月第一个星期六考试院组织的统一考试,获取优秀或合格证书。

成绩评定

本课程的总评成绩评定标准为:

总评成绩=60%实习课程成绩+40%上海市二级考成绩

一般上海市二级考成绩不低于45分才能总评合格,该最低成绩视当年上海市二

级考合格率做调整(上海市二级考合格率在50〜60%波动)。

实验内容

实验一:个人资金账户管理

编程实现资金账户的管理,具体要求如下。

1,资金账户的信息统一放在随机文件中,该随机文件包括的数据项有记录ID、

发生日期、发生事件、发生金额(正的表示收入,负的表示支出)和金额。每发

生一笔收支,文件要增加一条记录,并计算一次余额。,

2,程序实现3个功能,包括:(1),能创建资金账户文件并添加收入或支出信息

记录;(2),能显示所有记录,得知资金账户的收支流水账;(3),能查询最后一

条记录,获知账户最后的余额。账户文件名命名为cashbox.dat,文件部分内容如

下;

3,增加修改资金账户的功能。输入一个记录ID,如果文件中已存在该记录,则输

入新的记录信息并更新资金账户文件中相应记录的信息。要求定义和调用函数

UpdateLog()淇功能是修改资金账户记录。

LongIDCreateDateNoteChargeBalance

12006-06-01alimony500.00500.00

22006-06-08shopping-300.00200.00

32006-06-15shopping-60.00140.00

42006-06-20workingpay200.00340.00

52006-08-01scholarship1000.001340.00

部分参考源代码:

/*crashbox.dat是随机文件,记录资金帐户消费流水帐记录信息*/

/*程序的功能:添加新流水帐记录,查询资金帐户最后记录*/

#include"stdio.h"

#include"stdlib.h"

longsize;/*当前最近一次的流水号*/

structLogData{/*记录的结构*/

longlogid;/*记录ID*/

charlogdate[ll];/*记录发生日期*/

charlognote[15];/*记录事件说明*/

doublecharge;/*发生费用:负表示支出,正表示收入*/

doublebalance;/*余额*/

);

intinputchoice()/*选择操作参数*/

{

intmychoice;

printf("\nEnteryourchoice:\n");

printf(n1-AddanewcashL0G.\n2-ListAllCashLOG.\nn);

printf("3-QueryLastCashLOG.\nO-Endprogram.\nn);

M

scanf("%d?&mychoice);

returnmychoice;

}.

longgetLogcount(FILE*cfptr)/*获取文件记录总数*/

(

longbegin,endjogcount;

fseek(cfptr,OL,SEEK_SET);

begin=ftell(cfptr);

fseek(cfptr,size,SEEK_END);

end=ftell(cfptr);

logcount=(end-begin)/size-1;

returnlogcount;

}

voidListAllLog(FILE*cfptr)/*列出所有收支流水帐*/

(-

structLogDatalog;

fseek(cfptr,OL,SEEK_SET);/*定位指针到文件开始位置*/

fread(&log,size,1,cfptr);

printf("logidlogdatalognotechargebalance\nn);

while(!feof(cfptr)){

printf(n%61d%-lls%-15s%1021f%10.21f\nn,

log.logid,log.logdata?log.lognotejog.chargge,log.balance);

fread(&log.size9l,cfptr);

};

)

voidQueryLastLog(FILE*clptr)/*查询显示最后一条记录*/

{.

structLogDatalog;

longlogcount;

logcount=getLogcount(cfptr);

if(logcount>0)/*表示有记录存在*/

(一

fseek(cfptr?size*(logcount-1),SEEK_SET);/*定位最后记录*/

fread(&log,size,1,cfptr);/*读取最后记录*/

printf(nThelastlogis:\nn);

printf(nlogid:%-61d\nlogdata:%-11s\nlognote:%-15s\nn,

log.logidjog.logdatajog.lognote);

printf("charge:%-10.21f\nbalance:%-10.21f\n"?

log.chargejog.balance);/*显示最后记录内容*/

elseprintf(nnologsinfile!\nn);

voidAddNewLog(FILE*c^)tr)/*添加新纪录*/

(

structLogDatalogjastlog;

longlogcount;

printf(nInputlogdate(format:2006-01-01):");

scanf("%sn,log.logdate);

printf(nInputlognote:");

nn

scanf(%s?log.lognote);

printf("InputCharge:Income+andexpend-:");

scanf("%lf\&log.charge);

logcount=getLogcount(cfptr);/*获取记录数*/

if(logcount>0){

fseek(cfptr,size*(logcount-l),SEEK_SET);

fread(&lastlog,size,1,cfptr);/*读入最后记录*/

log.logid=lastlog.logid+l;/*记录号按顺序是上次的+1*/

log.balance=log.charge+lastlog.balance;

)

else{/*如果文件是初始状态,记录数为0*/

log.logid=l;

log.balance=log.charge;

)一

rewind(cfptr);

printf(,,logid=%ld\n,,Jog.logid);

fwrite(&log.sizeof(structLogData),l,cfptr);/*写入记录*/

}

FILE*openfile(char*openmode)/*打开文件*/

(

FILE*中;

nn

if((fp=fopen(cashbox.dat?openmode))==NULL){

printf(ncannotopenfilecashbox.dat!\nn);

exit(0);

)

return(fp);

)

intmain(void)

FILE*巾;

intchoice;

size=sizeof(structLogData);

while((choice=inputchoice())!=0){

switch(choice){

easel:

币=openfile(“ab+”);

AddNewLog(fp);

break;

case2:/*列出所有的收入支出情况*/

fp=openfile("rbn);

ListAllLog(fp);

break;

case3:/*查询最后记录及余额*/

^)=openfile(nrbn);

QueryLastLog(^));

break;

default:

printf("InputError.");

break;

)

)

if(fclose(fp)){

printf(nCannotclosethefile!\nn);

exit(0);

)

return0;

)

实验二自动售货机

下图所示为简易自动售货机,物品架1、2上共有10样商品,按顺序进行编

号分别为1〜10,标有价格与名称,一个编号对应一个可操作按钮,供选择商品使

用。如果物品架上的商品被用户买走,储物柜中会自动取出商品送到物品架上,

保证物品架上一定会有商品。用户可以一次投入较多钱币,并可以选择多样商品,

售货机可以一次性将商品输出并找零钱。

用户购买商品的操作方法如下。

(1)从“钱币入口”放入钱币,依次放入多个硬币或纸币。钱币可支持1元(纸

币、硬币)、2元(纸币)、5元(纸币)、10元(纸币),放入钱币时,控制器会先对钱

币进行检验以识别出币值,并统计币值总额,显示在控制器显示屏中,提示用户

确认钱币放入完毕。

(2)用户确认钱币放入完毕,便可选择商品,只要用手指按对应商品外面的

编号按钮即可。每选中一样商品,售货机控制器会判断钱币是否足够购买,如果

钱币足够,自动根据编号将物品进行计数和计算所需钱币值;如果钱币不足,则

结束购物。

请为自动售货机编程,输入钱币值序列,以-1作为结束,依次输入多个购买

商品编号,若编号超出范围或余额不足则输入结束,输出钱币总额与找回零钱,

以及所购买商品名称及数量。

输入输出示例:

输入:

1122551010-1/*钱币序列*/

123516910-1/*物品编号*/

输出:

Total:36yuan,change:19yuan

Table-water:2;Table-water:1;Table-water:1;Milk:1;Beer:1;Oolong-Tea:1;Green-Tea:1;

实验三:自动寄存柜

某超市门口的自动寄存柜有n个寄存箱,并且有一个投币控制器,顾客想要

寄存小件物品时,只要在投币控制器中投入一个1元硬币,如果此时有空闲的箱

子,寄存柜就会自动打开一个空的箱子,并且打印输出一张小小的密码纸条;如

果没有空闲的箱子,则提示“本柜已满”。当顾客离开超市时,用密码纸条上指

定的数字密码依次输入到开箱控制器,则顾客所存包的箱子门就会自动打开,顾

客取走物品后,关上门。

输入数据时,可先输入寄存箱总数n,再由用户选择是“投硬币”还是“输

密码”。

如果选择“投硬币”,则只有硬币值是1时才开箱。如果有空闲的箱子,则

输出箱子编号及密码(4位数字);如果无空闲的箱子,则提示“本柜已满”。

如果选择“输密码”,若输入的密码与某一箱子密码相符,则显示打开的箱

子编号,否则输出提示“密码错误”。

请编写开箱控制程序实现上述过程。

输入输出示例:

寄存箱总数:10

1.投硬币2.输密码0.退出请选择:1

投币值:1

寄存箱编号:1密码:9342

L投硬币2.输密码0.退出请选择:2

输入密码:9342

1号寄存箱已打开

L投硬币2.输密码0.退出请选择:0

结束

实验四:停车场管理

设有一个可以停放n辆汽车的狭长停车场,它只有一个大门供车辆进出。车

辆按到达停车场时间的先后次序依次从停车场最里面向大门口处停放(即最先到

达的一辆车停放在停车场的最里面)。如果停车场已放满n辆车,则以后到达的

车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上

的第一辆车可以进入停车场。停车场内如有某辆车要开走,则在它之后进入停车

场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来次

序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费,

停留在便道上的车不收停车费。编写程序对该停车场进行管理。

输入数据时,先输入一个整数n(n<=10),再输入若干组数据,每组数据包括3

个数据项:汽车到达或离开的信息(A表示到达、D表示离开、E表示结束)、汽车

号码、汽车到达或离开的时刻。当输入“E00”时程序结束。

若有车辆到达,则输出该汽车的停车位置;若有车辆离开,则输出该汽车在

停车场内停留的时间。

输入输出示例

3

Al1

1号车停入1号位

A22

2号车停入2号位

A33

3号车停入3号位

D14

1号车出停车场,停留时间3

A45

4号车停入3号位

A56

5号车在便道上等待

D47

4号车出停车场,停留时间2

5号车停入3号位

D58

5号车出停车场,停留时间1

E00

实验五;学生成绩管理

设计一个菜单驱动的学生成绩管理程序,管理n个学生的m门考试科目成

绩,实现以下基本功能。

(1)能够新增学生信息,并计算总分和平均分。

(2)能够根据学号修改和删除某学生信息。

(3)能够显示所有学生的成绩信息。

(4)能够分别按总分和学号进行排序。

(5)能够根据学号查询该学生的基本信息。

(6)学生成绩数据最终保存在文件中,能够对文件读、写学生数据。

程序运行时,菜单形式如下。

ManagementforStudents'sscores

1.Appendrecord

2.Listrecord

3.Deleterecord

4.Modifyrecord

5.Searchrecord

6.Sortindescendingorderbysum

7.Sortinascendingorderbysum

8.Sortindescendingorderbynum

9.Sortinascendingorderbynum

W.WritetoaFile

R.ReadfromaFile

O.Exit

Pleaseinputyourchoice:

要求用模块化方式组织程序结构,合理设计各个自定义函数。同时,程序能

够进行异常处理,检查用户输入数据的有效性,在用户输入数据有错误(如类型

错误)或无效时,不会中断程序的执行,程序具有一定的健壮性。

实验六:完美的代价

回文串是一种特殊的字符串,它从左往右读和从右往左读是一样的,有人认

为回文串是一种完美的字符串。现在给出一个字符串,它不一定是回文的,请计

算使得该字符串变成一个回文串的最少交换次数。这里的交换指将字符串中两个

相邻的字符互换位置。

例如所给的字符串为mamad,第一次交换a和d,得到mamda;第二次交换m

和d,得至Umadma;第三次交换最后面的m和a,得至Umadam□

编写程序,从键盘读入数据。第一行是一个整数N(N<=80),表示所给字符串

的长度,第二行是所给的字符串,长度为N且只包含小写英文字母。如果所给

字符串能经过若干次交换变成回文串,则输出所需的最少交换次数;否则,输出

Impossibleo

输入输出示例1

5

mamad

3

输入输出示例2

6

aabbcd

Impossible

实验思考题:值班安排

医院有A、B、C、D、E、F、G共7位大夫,在一星期内(星期一至星期天)

每人要轮流值班一天,如果已知如下信息。

(1)A大夫比C大夫晚1天值班。

(2)D大夫比E大夫晚1天值班。

(3)E大夫比B大夫早2天值班。

(4)B大夫比G大夫早4天值班。

(5)F大夫比B大夫晚1天值班。

(6)F大夫比C大夫早1天值班。

(7)F大夫星期四值班。

就可以确定周一直至周日的值班人员分别为:E,D,B,F,C,A,G。

编写程序,根据输入的条件,输出星期一到星期天的值班人员。

输入数据时,先输入一个整数n,再输入n组条件,要求能够根据输入的条

件确认唯一的值班表,且输入的n组条件中能够直接或间接得到任意两位大夫的

关联联系,例如上面的条件(2)直接显示了D与E间的关系,而通过条件(1)(6)(5)

可以间接得到A与B的关系。

条件的输入格式有以下两种。

格式1:编号比较运算符编号天数

其中比较运算符有两种:〉或<,分别表示“早”和“晚工

例如,A<C1表示A大夫比C大夫晚1天值班。

格式2:编号=数值

例如,F=4表示:F大夫在星期四值班。

输入输出示例

7

A<C1

D<E1

E>B2

B>G4

F<B1

F>C1

F=4

EDBFCAG

文档格式

每个程序均需独立完成相应的实验文档,打包提交。包括:

实验报告,程序源代码,EXE可执行程序

打包文档名称:班级—学号—姓名—实验号

其中:班级前二位为中文后跟大写字母A和一位数字,如:计算A1

学号和姓名需写完整

实验号按实验顺序如下:实验一、实验二、……

注意各部分连接用下划线,不得有空格

各程序名称按Pl、P2、……、P6顺序命名

实验报告模板如下:

程序设计与实践

实验报告

实验一:个人资金账户管理

姓名:XXX

学号:XXX

班级:XXX

实验时间:2015/xx/xx-2015/xx/xx

一:实验名称:个人资金账户管理

注:每个实验名称需对应

二:实验环境:一台安装有VC6.0程序的电脑。

三:实验目的

(1)培养和锻炼对具有一定复杂度和规模的问题的分析与求解能力。

(2)掌握程序设计的综合方法,能综合应用各种数据类型实现较复杂数据的存储。

(3)培养良好的C程序设计风格与代码规范意识。

四:实验内容:

注:此处请按实验要求改写,语句精炼。说明实验题的内容及基本要求。

五:实验步骤:(实验设计,关键代码。实验结果需截图)

注:此处请注意写出程序设计思路,各功能模块的实现算法描述,对

所附关键代码要注释,写明使用的实验数据及测试结果,并对运行结

果给出截图。截图方法:使用Alt+PrtSc键获得窗口的截图,粘贴即

可。

六:实验<1、结:(主要介绍程序的完成情况,重点、难点以及解决方法,有

待改进之处,以及有何收获,体会等)

注:辛辛苦苦做好,总会有些体会想说,除非不是你亲手完成。不要

空白哦!

2012年二级考C大纲

上海市高等学校计算机等级考试(二级)《c程序设计》考试大纲

(2012年修订)

一、考试性质

上海市高等学校计算机等级考试是上海市教育委员会组织的全市高校统一的教学考试,

是检测和评价高校计算机应用基础知识教学水平和教学质量的重要依据之一。该项考试旨在

规范和加强上海高校非计算机专业的计算机教学工作,提高非计算机专业学生的计算机应用

能力。考试对象主要是上海高等学校非计算机专业学生,考试每年举行一次,当年的十月下

旬、十一月上旬的星期六或星期日。凡考试成绩达到合格者或优秀者,由上海市教育委员会

颁发相应的证书。

本考试由上海市教育委员会统一领导,聘请有关专家组成考试委员会,委托上海市教育

考试院组织实施。

二、考试目标

C语言是当前常用的一种简洁、高效、功能丰富的程序设计语言,是理工科大学生学习

计算机编程能力、理解计算机解决问题的方法的重要工具。学生通过该课程的学习,应能了

解、掌握c语言的语法和使用它进行编程的方法,并能上机调试运行解决简单实际问题。

《C程序设计》的考试目标是测试考生掌握C语言知识的程度和综合运用语言知识进行

程序设计的能力。

三、考试细则

考试采用基于网络环境的无纸化上机考试系统。考试时间为120分钟。试卷总分为100

分。

试题由四部分组成:单选题、程序调试题、程序填空题和综合编程题。试卷从局域网的

服务器下载、考试结果上传到服务器,若不按照要求上传到服务器,则考试无效。考试阅卷

采用机器和人工相结合的网上阅卷方式。

四、试卷参考样式

序号题型题量计分考核目标

基本概念

一单选题10题15分

语义知识

常用算法

二程序填空题2题20分程序理解

程序设计

基本语句

三程序调试题3题30分程序调试

程序设计

常用算法

四编程题2题35分

综合应用

合计17题100分

五、考试内容和要求

内容要点和考点要求

C程序的组成、结构

1

及书写规则

.预处理命令理解

C语言源程序结构.外部数据定义知道

•函数main和其它函数定义

理解

.基本词法单位、标识符/常量/运算符等构成规则理解

程序的书写格式

•程序的书写格式与风格知道

.VC编程环境的操作使用掌握

C语言程序设计步骤

.程序的编辑/编译/连接/调试/运行掌握

2基本数据类型

C语言数据类型

.基本类型、数组、结构、指针类型、空类型掌握

.常量和变量掌握

C语言常量.整型、实型(单/双精度)、字符型和字符串常量的表示

理解

方法

C语言变量和C语言•各种类型变量的定义和说明掌握

基本数据类型.变量的初始化掌握

3基本运算和表达式

运算符•运算符种类、功能、目数、优先级、结合性和副作用理解

算术运算•自动类型转换规则掌握

•关系和逻辑运算规则掌握

关系和逻辑运算

•逻辑运算的优化规则理解

位运算•位运算规则和简单位运算知道

.赋值运算中自动类型转换规则(以左值类型为准转换)掌握

赋值运算

•复合赋值理解

其他运算•条件、逗号、求存储空间大小运算知道

.表达式组成规则、各类表达式理解

.描述计算过程/条件判断的表达式理解

表达式.各类型数据混合运算中求值顺序掌握

.表达式运算中的隐式类型转换和强制类型转换

理解

.基本运算执行顺序、表达式结果类型

掌握

4语句

基本语句及顺序结・定义/说明语句,表达式语句,空语句,复合语句、函数

构语句调用语句掌握

•描述条件和情况的if,switch语句、

选择结构语句

・选择语句嵌套掌握

•描述循环执行的while,do-while,for语句

循环结构语句

・循环语句嵌套掌握

•改变程序流程执行次序的break,continue,return语

转移语句

句掌握

5数组

一维数组•一维数组定义、引用和初始化掌握

二维数组.二维数组定义、引用和初始化掌握

•字符数组定义、引用和初始化掌握

字符数组和字符串

•字符串结束标志、初始化、字符串处理函数

理解

6函数定义和调用

.函数原型、函数名、形式参数、函数返回值、函数体一一

函数的定义方法

函数执行过程的描述掌握

函数类型和返回值.不同类型函数定义、缺省类型、空类型理解

函数传值调用•形参、实参及其参数单向传递掌握

.函数原型及作用理解

函数说明•用户定义函数说明理解

•系统库函数说明--用头文件包含

理解

函数参数类型和函•传值调用和传址调用掌握

数的传址调用.数组名作为函数参数理解

函数嵌套调用和递•递归函数的定义和调用知道

归调用.递归函数的执行过程理解

变量的存储类别和

7

编译预处理

变量存储类别的概

•自动、寄存器、外部及内部静态/外部静态各种变量类型

念理解

变量的作用域.在函数外部、函数内部、复合语句内定义变量的作用域理解

变量的生存期和有

•自动、外部及内部静态/外部静态变量的生存期和有效期

效期知道

编译预处理.文件包含和宏定义知道

8指针

指针概念.地址、指针和指针变量的含义和表示掌握

指针与地址运算符.取地址运算符&和取内容运算符*理解

用指针处理数组、字•数组、字符串的指针以及指向数组、字符串的指针变量理解

符串•通过指针引用以上各类型数据理解

用指针作函数参数•通过指针类型参数传递计算结果,改变主调函数实参值理解

­函数指针--返回指针值的的指针函数知道

指针的高级功能•指针数组、指向指针的指针知道

,main函数的命令行参数简介知道

9结构体与共用体

•结构定义方法和引用方法理解

结构体类型数据

•结构体变量初始化理解

结构体数组•结构体数组定义、初始化理解

•指向结构体类型变量的指针变量理解

结构体指针变量

•指向结构体类型数组的指针变量知道

•用指针和结构体构成链表、单向链表的建立、输出、删

链表

除与插入(包括动态空间申请与释放)理解

10文件

基本概念.文件类型一文本文件/二进制文件、文件指针理解

•文件的打开和关闭

文件操作•定位掌握

•文件的读/写

•常用的库函数:

打开和关闭:fopen>fclose

文件结束判断:feofO

常用库函数

定位:fseek>rewind理解

读/写:fputc>fgetc>fputs>fgets>

fprintf>fscanf>fwrite、fread等

算法和数据结构的

11

简单知识

算法和结构化程序.算法概念、表示

设计.结构化程序设计知道

单链表、栈和队列的.单链表建立、查找、插入、删除和合并

操作.栈和队列的建立和基本操作知道

排序和查找•简单的排序算法和查找算法知道

六、几点说明

(一)适用对象

理、工、农、医等专业类非计算机专业本科生

(二)建议学时数

48-64学时,其中16-32学时为实验课

(三)建议计算机配置

1、硬件

中央处理器PentiumIII550MGHz以上

内存128MB以上

硬盘20GB以上

2、软件

操作系统Windows2000及以上

编程环境中文MicrosoftVisualC++6.0或其它C语言编程环境

(四)考试环境

安装并使用“上海市高校计算机等级考试通用平台”进行考试。

客户端安装中文VisualC++6.0或其它C语言编程环境。

(五)参考教材

•《C程序设计》.谭浩强.清华大学出版社.

•《C/C++程序设计》.夏宝岚等.华东理工大学出版社.

全真考题

2004年全真考题

2004年上海市高等学校计算机等级考试试卷

二级(C程序设计)

(本试卷答卷时间为120分钟)

试题一(28分,每小题4分)

解答下列各小题,把正确的解答写在答卷纸的对应栏内。

(1)假设对n(n>0)个学生按下列方法进行分班:每班k(k>0)个学生,最后一个班若不足k人

也单独编成一个班。试用C语言中的条件表达式表示所编班级个数。

(2)设有变量定义:

structrec{

intx;

血y;

}s[]={{4528},{9,36}}5*p=s;

计算表达式(p・>y/p->x*s[l].x+s[l].y)的值。

(3)写出下列程序的输出结果。

#include<stdio.h>

voidmain(){

chars[]=n2473H,c,i;

fdr(i=O;c=s[i];i++){

switch(cJ01){

case2:

case3:putchar(c+4);continue;

case4:putchar(c+4);break;

case5:putchar(c+3);

default:putchar(c+2);

)

putchar('\n');

)

(4)分别写出下歹必个指针变量pl,p2,p3,p4的含义。

int*pl,*p2[5],(*p3)(),(*p4)[5];

(5)写出程序的输出结果(假定类型unsignedint的字长为16位)。

#include<stdio.h>

voidmainQ{

unsignedintul=0x958,u2,u3;

u2=(ul&OxFF)«4;

u3=(ul&OxFFOO)»4;

printf("%x%x%x\n”,u2,u3,u2|u3);

)

(6)阅读如下程序段,把其中的switch语句改写成等价的条件语句。

血x,y;

scanf("%d”,&x);

switch(x!=0){

case0:y=0;break;

case1:switch(x>0){

case1:y=l;break;

case0:y=-l;

)

}

(7)描述函数conv()的功能,并写出下列程序的输出结果。

voidconv(intm){

if(m>=2)

conv(m/2);

printf(n%dH,m%2);

}

voidmain(){

conv(13);

)

试题二(12分,每小题6分)

阅读下列程序并回答问题,把答案写在答卷纸的对应栏内。

(1)【程序2.1]

#include<stdio.h>

voidsort(inta[],intn){

int

fbr(i=O;i<n-l;i++)

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

if(a[i]>a[j])t=a[i],a[i]=a[j],a[j]=t;

voiddelsame(intx[],intn){

inti,j,m=n;

fbr(i=O;i<m;i++){

while(x[i]==x[i+l]){

for(j=i;j<m;j++)

x[j]=x[j+l];

m—;

}

)

returnm;

}

voidmain(){

intx[]={74,4,35,4,65,65,72,74,35},i,m,n;

n=sizeofifx)/sizeof(x[0]);

sort(x,n);

m=delsame(x,n);

for(i=0;i<m;i++)printf(H%3dH,x[i]);

printf(H\nn);

}

(a)函数sort()的功能是什么?(b)函数delsame()的功能是什么?(c)程序的输出是什么?

(2)【程序2.2]

#include<stdio.h>

#defineM4

voidmain(){

inti,j,k,m,a[4];

printf(nEnter4numbers:");

for(i=0;i<M;i++)scanf(H%dH,&a[i]);

fbr(i=M;i>0;i-){

k=a[M-l];

for(j=M-l;j>O;j-)

a[j]=a[j-l];

a[0]=k;

fbr(m=0;m<M;m++)

printf(H%dn,a[m]);

printf(n\nn);

)

}

设一维数组a的4个输入整数是1,2,3,4,则程序的输出是什么?

试题三(12分,每小题6分)

改错。下列程序中都有三个错误,按原来程序的要求,纠正错误,并以“将#XX行改为YYYY"

的形式进行解答,代码左边的“#01“、“#02"、…是附加的行号。

(1)程序3.1输入10个正整数,计算其中的素数之和并输出结果(不考虑溢出情况)。

【程序3.1】

#01#include<stdio.h>

#02intsum(int*b,intm){

#03ints=0,is_prime(long);

#04while(m—)

#05if(is_prime(*b++))s+=*b;

#06returns;

#07}

#08intisjprime(longm){

#09intk;

#10if(m<=1)return0;

#11ififm==2||m==3)return1;

#12fdr(k=2;k*k<=m;k++)

#13if(m%k==0)return0;

#14elsereturn1;

#15}

#16voidmain(){

#17intx[10],i;

#18for(i=0;i<10;i++)scanf(H%dH,x++);

#19printf(Hsum=%d\nn,sum(x,10));

#20}

(2)程序3.2计算字符串s中最后一次出现子串t的地址,通过函数值返回,在主函数中输

出此地址开始的字符串;若未找到,函数返回NULL(例如字符串s为"456712345678abcd",

当子串t为"567"时,输出为“5678abcd";当t为"789"时,输出"未找到")。

【程序3.2】

#01#include<stdio.h>

#02char*fun(char*s,t){

#03char*p,*r,*a;

#04a=null;

#05while(*s){

#06p=s;r=t;

#07while(*r)

#08if(r==p){r++;p++;}

#09elsebreak;

#10if(*r=='\(T)a=s;

#11s++;

#12}

#13returna;

#14)

#15voidmain(){

#16chars[100],t[100],*p;

#17printf(,,\nPleaseenterstrings:H);scanf(n%sH,s);

#18printf(H\nPleaseentersubstringt:H);scanf(H%sH,t);

#19p=fun(s,t);

#20if(p)printf(H\nTheresultis:%s\nH,p);

#21elseprintf(H\nNotfound!\nH);

#22)

试题四(18分,每小题9分)

按指定的要求编写C程序段,把解答写在答卷纸的对应栏内。不要求写完整的程序,也不

必定义语句中出现的变量。

(1)兀的值可以使用下公式计算

请编写函数compute_pi(doubleeps)计算兀的近似值,当公式中某一项的值小于eps(例

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论