C语言程序设计 上机实验指导与习题 参考答案.docx
《C语言程序设计 上机实验指导与习题 参考答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计 上机实验指导与习题 参考答案.docx(40页珍藏版)》请在冰豆网上搜索。
C语言程序设计上机实验指导与习题参考答案
C语言程序设计
上机实验指导与习题
参考答案
仅供教师内部参考
华南农业大学
上机实验1
实验1C语言程序初步1
一实验目的1
二实验内容1
实验2基本数据类型运算和表达式3
一实验目的3
二实验内容3
实验3基本输入与输出5
一实验目的5
二实验内容5
实验4选择结构程序设计4
一实验目的4
二实验内容4
实验5循环结构程序设计一9
一实验目的9
二实验内容9
实验6循环结构程序设计二15
一实验目的15
二实验内容15
实验7数组17
一实验目的17
二实验内容17
实验8字符数组的应用22
一实验目的22
二实验内容22
实验9函数的基本应用24
一实验目的24
二实验内容24
实验10指针与结构体26
一实验目的26
二实验内容26
*实验11链表29
一实验目的29
二实验内容29
*实验12文件32
一实验目的32
二实验内容32
上机实验
实验1C语言程序初步
一实验目的
1了解所用的计算机系统的基本操作方法学会独立使用该系统
2了解在该系统上如何编辑编译连接和运行一个C程序
3通过运行简单的C程序初步了解C程序的特点
4在教师的指导下学会使用JudgeOnline实验系统
二实验内容
1运行第一个C程序
[题目ThefirstCProgram]
将下列程序输入TC或VC编译连接和运行该程序
voidmain
printf"ThefirstCProgram\n"
[具体操作步骤]
以TurboC上的操作为例
1Windows进入后按照第一章中介绍的方法进入TurboC
2在编辑窗口中输入程序
3保存程序取名为a1c
4按照第一章中介绍的方法编译连接和运行程序
2在JudgeOnline系统中提交实现了计算ab功能的程序
[题目1001计算ab]
由键盘输入两个整数计算并输出两个整数的和实现该功能的程序如下
voidmain
intab
scanf"dd"ab
1
printf"d"ab
1在程序编辑窗口中输入程序
2保存程序取名为a2c
3按照前二章中介绍的方法编译连接和运行程序
4在程序运行过程中输入
1530↙
↙表示输入回车符
5如果看到如下输出结果则表明1530的结果正确如果得不到如下结果则需检查并更正程序
45
6按照第三章中介绍的方法进入JudgeOnline实验系统
7显示题目列表点击题号为1001题名为计算ab的题目
8查看完题目要求后点击页面下端的sumbit参照第二章提交程序的方法提交程序a2c
9查看评判结果如果得到accepted则该题通过否则返回第一步检查程序是否正确
2
实验2基本数据类型运算和表达式
一实验目的
1掌握C语言数据类型熟悉如何定义一个整型和实型的变量以及对它们赋值的方法
2掌握不同的类型数据之间赋值的规
3学会使用C的有关算术运算符以及包含这些运算符的表达式特别是自加和自减--运
算符的使用
4进一步熟悉C程序的编辑编译连接和运行的过程
二实验内容
1变量的定义
[题目1117变量定义按要求完成程序]
下面给出一个可以运行的程序但是缺少部分语句请按右边的提示补充完整缺少的语句
voidmain
intab定义整型变量a和b
intij定义实型变量i和j
a5
b6
i314jiab
printf"adbdifjf\n"abij
[具体操作步骤]
1将代码补充完整
2在TC或VC上运行通过
3在JudgeOnline实验系统上提交
2赋值表达式与赋值语句
[题目1118赋值表达式与赋值语句写出程序运行结果]
阅读下面程序写出运行结果
voidmain
floata
intbc
charde
a35
ba
c330
dc
3
e\\
printf"fddcc"abcde
运行结果为
35000003330J\
[提示]赋值语句具有类型转换的功能但可能会改变数据
3基本运算
[题目1119基本运算写出程序运行结果]
阅读下面程序写出运行结果
voidmain
intabc
floatd15ef
a357
b1510
cb
e1510
fd10
printf"dddfff"abcdef
运行结果为
0211500000010000001500000
[提示]除法分整除与普通除法之分
4
实验3基本输入与输出
一实验目的
1熟练掌握putchargetcharprintfscanf函数的使用方法
2掌握各种类型数据的输入输出的方法能正确使用各种格式转换符
二实验内容
[题目1126字符的输入与输出]
编程实现由键盘输入一个字符后在屏幕上输出该字符
[第一组自测数据][第二组自测数据]
[键盘输入][键盘输入]
a↙↙
[正确输出][正确输出]
a
参考程序
include"stdioh"
main
charch
chgetchar
putcharch
[题目1127计算加法]
编程实现由键盘输入一个加法式输出正确的结果两个加数均为整数
[第一组自测数据][第二组自测数据]
[键盘输入][键盘输入]
1020↙-1560↙
[正确输出][正确输出]
3045
参考程序
include"stdioh"
main
intab
scanf"dcd"ab
printf"d"ab
[题目1014求圆面积]
由键盘输入圆半径r请计算该圆的面积注取314159结果保留两位小数位另外程序只
要能对r在0到10000范围的情况输出正确答案即可
[第一组自测数据][键盘输入]
5
652↙[键盘输入]
[正确输出]112↙
1335502[正确输出]
[第二组自测数据]39408
[提示]结果保留两位小数可采用printf函数的格式控制字符来实现
参考程序
include"stdioh"
main
floatarear
scanf"f"r
area314159rr
printf"02f"area
2
[题目1015计算摄氏温度值]
从键盘输入一个华氏温度值要求按格式输出其对应的摄氏温度值精确到小数点后两位
数学公式描述为
5
CF32
9
[第一组自测数据][第二组自测数据]
[键盘输入][键盘输入]
100↙100↙
[正确输出][正确输出]
37783778
[提示]注意公式中的除为普通除法
参考程序
include
voidmain
floatfc
scanf"f"f
c509f-32
printf"2f"c
3
实验4选择结构程序设计
一实验目的
1了解C语言表示逻辑的方法以0代表假以非0代表真
2学会正确使用逻辑运算符和逻辑表达式
3熟练掌握if语句和switch语句
4结合程序掌握一些简单的算法
二实验内容
[题目1120判断点是否在圆]
由键盘输入一个点的坐标要求编程判断这个点是否在单位圆上点在圆上输出Y不在圆上输出
N使用小数点后3位精度进行判断
[第一组自测数据][第二组自测数据]
[键盘输入][键盘输入]
07070707↙8>0505↙
[正确输出][正确输出]
YN
[提示]1平面上的点与圆的关系分为在圆内在圆上在圆外三种本题要求判断是否在圆上2
判断两实数相等采用判断这两实数的差的绝对值小于规定误差精度本题为0001的方法实现
参考程序
include"stdioh"
include"mathh"
voidmain
floatab
scanf"ff"ab
iffabsaabb-11e-3
printf"Y\n"
elseprintf"N\n"
[题目1017求数的位数]
由键盘输入一个不多于9位的正整数要求输出它是几位数
[第一组自测数据][第二组自测数据]
[键盘输入][键盘输入]
349213↙10000↙
[正确输出][正确输出]
65
[提示]划定一位数二位数九位数的范围后用ifelseifelse语句实现判断
4
参考程序
main
intnplace
scanf"ld"n
ifn99999999place9
elseifn9999999place8
elseifn999999place7
elseifn99999place6
elseifn9999place5
elseifn999place4
elseifn99place3
elseifn9place2
elseplace1
printf"ld\n"place
[题目1018数的排序]
由键盘输入三个整数abc按从小到大的顺序输出这三个数
[第一组自测数据][第二组自测数据]
[键盘输入][键盘输入]
654590↙963↙
[正确输出][正确输出]
456590369
参考程序
include
main
intabct
scanf"ddd"abc
ifabtaabbt
ifactaacct
ifbctbbcct
printf"ddd"abc
[题目1016字符变换]
由键盘输入5个字符将其中的大写字母变成小写其它类型的字符不变并按输入顺序逐个输出
[第一组自测数据][第二组自测数据]
[键盘输入][键盘输入]
ApPLe↙aB5↙
[正确输出][正确输出]
appleab5
[提示]下面代码实现由键盘读入一个字符并按题意处理后输出
chara
agetchar
ifaAaZaa32
putchara
5
现在题目要求处理5个字符怎么做呢请自己思考
参考程序
include
main
charabcde
scanf"ccccc"abcde
ifaZaAaa32
ifbZbAbb32
ifcZcAcc32
ifdZdAdd32
ifeZeAee32
printf"ccccc"abcde
[题目1019数的整除]
由键盘输入5个整数逐个判断它们能否被27整除能的输出YES不能的输出NO注意
输出时一个判断结果占一行5个数的判断共占5行
[第一组自测数据][第二组自测数据]
[键盘输入][键盘输入]
8271757732554↙8271757732554↙
[正确输出][正确输出]
NONO
YESYES
YESYES
NONO
YESYES
[提示]整除即除得余数为0
参考程序
include"stdioh"
main
intabcde
scanf"ddddd"abcde
ifa270printf"YES\n"elseprintf"NO\n"
ifb270printf"YES\n"elseprintf"NO\n"
ifc270printf"YES\n"elseprintf"NO\n"
ifd270printf"YES\n"elseprintf"NO\n"
ife270printf"YES\n"elseprintf"NO\n"
[题目1020正负奇偶判断]
由键盘输入非零整数x判断该数正负正数输出positive负数输出negative接着判断该数的奇
偶性奇数输出odd偶数输出even
[第一组自测数据]negative
[键盘输入]odd
-43↙[第二组自测数据]
[正确输出][键盘输入]
6
98↙positive
[正确输出]even
参考程序
include"stdioh"
main
intn
scanf"d"n
ifn0printf"negative\n"
elseprintf"positive\n"
ifn20printf"even\n"
elseprintf"odd\n"
[题目1023简单计算器]
下面程序是实现一个简单的运算器保留两位小数点如果由键盘输入1050计算机可以输出结
果6000如果输入8*6计算机输出4800如果输入204计算机输出500如果输入8-6计算机
输出200请在空处填上适当的代码运行通过后并提交
include"stdioh"
voidmain
floatabc
charop
scanf"fcf"
switchop
case
case-_
case_
case__
defaultprintf"error"
return
printf"result"c
[第一组自测数据][第二组自测数据]
[键盘输入][键盘输入]
452↙501-23↙
[正确输出][正确输出]
902710
7
参考程序
include
intmain
floatabc
charop
scanf"fcf"aopb
switchop
casecabbreak
case-ca-bbreak
casecabbreak
casecabbreak
defaultprintf"error"
break
printf"result2f"c
8
实验5循环结构程序设计一
一实验目的
1熟悉掌握用while语句do-while语句和for语句实现循环的方法
2掌握在程序设计中用循环实现一些常用算法如穷举迭代递推等
二实验内容
[题目1024计算阶乘]
输入正整数n计算n结果用长整型数表示注n123n
[第一组自测数据][第二组自测数据]
[键盘输入][键盘输入]
5↙8↙
[正确输出][正确输出]
12040320
参考程序
include
main
longin1a
scanf"ld"a
fori1iainni
printf"ld\n"n
[题目1025计算数列和]
有数列1357911
现要求由键盘输入n计算输出该数列的前n项和
[第一组自测数据][第二组自测数据]
[键盘输入][键盘输入]
2↙5↙
[正确输出][正确输出]
425
9
参考程序
include
main
longnsum0it1
scanf"ld"n
fori1ini
sumsumt
tt2
printf"ld\n"sum
或
include
main
longnsum
scanf"ld"n
sumnn
printf"ld"sum
注评判系统不对程序实现细节进行分析只对运行结果进行评测
[题目1026加一行字符中的数字]
由键盘输入一行字符总字符个数从1个至80个均有可能以回车符表示结束将其中每个数字
字符所代表的数值累加起来输出结果
[第一组自测数据][第二组自测数据]
[键盘输入][键盘输入]
abc123↙A6H7T65↙
[正确输出][正确输出]
624
[提示]1可以使用下面程序段逐个读入键盘输入的一行字符
charch
whilechgetchar\n
2数字字符转为对应的数值可用ach-0
参考程序
include
main
charc
ints0a
whilecgetchar\n
ifc0c9
ac-48
ssa
printf"d"s
10
[题目1029求最大公约数]
由键盘输入两个正整数mnmn用长整数表示计算它们的最大公约数
[第一组自测数据][第二组自测数据]
[键盘输入][键盘输入]
1624↙1725↙
[正确输出][正确输出]
81
[提示]公约数是既能整除m又能整除n的数题目要求满足这一条件的最大的一个
参考程序
include
main
longrmntemp
scanf"ldld"mn
whilem0
rnm
nm
mr
printf"ld\n"n
或
include
main
longmntis
scanf"ldld"mn
tmnnm
forit-1i1i--
ifmi0ni0
sibreak
printf"d"s
[题目1030字符变换]
由键盘输入一个句子总字符个数从1个至80个均有可能以回车符表示结束将其中的大写字
符变成小写其它类型的字符不变最后输出变换后的句子
[第一组自测数据][第二组自测数据]
[键盘输入][键盘输入]
HowAreYou↙ThiSISMyfIrStCProgrAm↙
[正确输出][正确输出]
howareyouthisismyfirstcprogram
11
参考程序
include
main
charc
whilecgetchar\n
ifcAcZ
cc32
putcharc
[题目1037计算数列和]
有数列
编程实现由键盘输入n计算输出数列前n项和结果保留四位小数
[第一组自测数据][第二组自测数据]
[键盘输入][键盘输入]
20↙30↙
[正确输出][正确输出]
326603880403
参考程序
include
main
intitn
floata2b1s0
scanf"d"n
fori1ini
ssab
taaabbt
printf"4f\n"s
[题目1044输出最小值]
从键盘输入十个整数输出最小值
[自测数据]
[键盘输入]
1245768758743559921↙
[正确输出]
5
12
参考程序
include"stdioh"
main
intitmin
scanf"d"min
fori1i10i
scanf"d"t
iftminmint
printf"d\n"min
*[题目1031统计单词个数]
由键盘输入一个句子总字符个数从1个至80个均有可能以回车符表示结束以空格分割单词
要求输出单词的个数
[第一组自测数据][第二组自测数据]
[键盘输入][键盘输入]
HowAreYou↙Therearemanystudentsandmany
[正确输出]trees↙
3[正确输出]
7
参考程序
include
main
intinum0word0
charc
fori0cgetchar\ni
ifcword0
elseifword0
word1
num
printf"d"num
*[题目1042百万富翁]
一个百万富翁遇到一个陌生人陌生人找他谈了一个换钱的计划该计划如下我每天给你m元
而你第一天只需给我一分钱第二天我仍给你m元你给我2分钱第三天我仍给你m元你给我4
分钱依次类推你每天给我的钱是前一天的两倍直到一个月38天百万富翁很高兴欣接受这
个契约现要求编写一个程序由键盘输入m计算多少天后百万富翁开始亏钱
[第一组自测数据]18
[键盘输入][第二组自测数据]
100↙[键盘输入]
[正确输出]10000↙
13
[正确输出]25
参考程序
include
include
main
intnmi
scanf"d"m
fori1i38i
if001pow2i-1-1-im0break
printf"d"i-1
14
实验6循环结构程序设计二
一实验目的
1进一步熟悉掌握用while语句do-while语句和for语句实现循环的方法
2掌握在程序设计中使用多重循环
二实验内容
[题目1028求素数]
输出2到200之间包括2200的所有素数注要求1行1个素数按由小到大的顺序输出
[提示]采用双重循环外层循环产生2到200之间的数内层循环对数进行判断是否