C语言程序设计实验任务书Word格式文档下载.docx
- 文档编号:18166613
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:39
- 大小:78.67KB
C语言程序设计实验任务书Word格式文档下载.docx
《C语言程序设计实验任务书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验任务书Word格式文档下载.docx(39页珍藏版)》请在冰豆网上搜索。
0'
;
n2=n1*10+(c2-'
);
printf("
%d\n"
n2);
程序运行时输入:
12<
回车>
,执行后输出结果是什么?
①getchar()函数用来输入两个字符分别赋给变量c1和c2;
②n1=c1-'
相当于n1='
1'
-'
,字符1的ASCII码值比0大一,所以n1中的值为1,c2-'
相当于'
2'
;
③把字符串转换为多位数的算法。
3.若有以下程序
voidmain()
{inti,j;
intx,y;
i=%d,j=%d"
&
i,&
j);
%d%d"
x,&
y);
i=%d,j=%d\n"
i,j);
%4d%4d\n"
x,y);
要求给i赋值为10,j赋值为20,x赋值为10,y赋值为20,则应该怎样从键盘输入数字?
①在调用scanf()函数时在格式串中若包含有格式描述符之外的字符时,则要求在输入数据时在对应的位置上输入完全匹配的字符;
②scanf()函数只包含格式描述符时可用跳格键Tab、空格和回车分隔数据;
③在调用printf()函数时在格式串中若包含有格式描述符之外的字符时,则在输出数据时在对应的位置上输出完全匹配的字符,%d之类的格式符位置输出对应输出项的值;
故输出时要注意插入适当的非格式符以便区分各个输出结果。
4.计算定期存款本利之和
设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,试编程计算n年后的本利之和deposit。
要求定期存款的年利率rate、存款期n和存款本金capital均由键盘输入。
5.键盘输入与屏幕输出练习
问题1要使下面程序的输出语句在屏幕上显示1,2,34,则从键盘输入的数据格式应为以下备选答案中的。
main()
{
chara,b;
intc;
%c%c%d"
a,&
b,&
c);
%c,%c,%d\n"
A)1234B)1,2,34
C)’1’,’2’,34D)1234
问题2在与上面程序的键盘输入相同的情况下,要使上面程序的输出语句在屏幕上显示1234,则应修改程序中的哪条语句?
怎样修改?
问题3要使上面程序的键盘输入数据格式为1,2,34,输出语句在屏幕上显示的结果也为1,2,34,则应修改程序中的哪条语句?
问题4要使上面程序的键盘输入数据格式为1,2,34,而输出语句在屏幕上显示的结果为'
'
34,则应修改程序中的哪条语句?
[提示:
利用转义字符输出字符单引号字符。
]
问题5要使上面程序的键盘输入无论用下面哪种格式输入数据,程序在屏幕上的输出结果都为'
34,则程序应修改程序中的哪条语句?
第1种输入方式:
1,2,34↙(以逗号作为分隔符)
第2种输入方式:
1234↙(以空格作为分隔符)
第3种输入方式:
1234↙(以Tab键作为分隔符)
第4种输入方式:
1↙
2↙
34↙(以回车符作为分隔符)
实验二逻辑结构程序设计
1.了解C语言表示逻辑量的方法。
2.学会正确使用逻辑运算符和逻辑表达式
3.熟练掌握if语句和switch语句。
4.结合程序掌握一些简单的算法。
5.学习调试程序。
二、实验内容
1.若输入10,20,30则程序的执行结果是20,30,10请填充下列程序。
#include“stdio.h”
voidmain()
{inta,b,c;
______________;
_________________;
_________;
a=b;
b=c;
__________;
printf("
%d,%d,%d"
a,b,c);
2.下列源程序中包含有一些错误,调试下列程序,使之具有如下功能:
输入a、b、c三个整数,求最小值。
#include“stdio.h”
{
inta,b,c;
scanf("
a,b,c);
if((a>
b)&
&
(a>
c))
if(b<
c)
min=%d\n"
b);
else
c);
if((a<
(a<
a);
再次运行程序,输入为“2,1,3”,程序输出却是“min=2”。
用单步执行的方法,马上发现变量a、b、c的值是不对的,原因是程序要求输入数据的分隔符是空格(还允许使用回车或<
Tab>
键)。
改正输入数据的分隔方式后,程序没有输出,还是用单步执行的方法,监视程序的执行过程,发现程序中条件设计有误,经过改正的程序如下:
{inta,b,c;
c);
if((a<
a)
elseif((b<
a)&
(b<
elseif((c<
(c<
b))
else
Nofindminimum\n"
);
}
上述程序是按在三个数中仅有一个最小值时才称其为最小值进行设计的。
另外,注意程序的书写格式,一定要采用缩进格式,即不同层次(分支)的语句左起的空格不同,这样可以有效地提高程序的可读性。
①类似a<
b<
c表达式的表示方法;
②if语句的嵌套;
③调试工具的使用。
④求最值的简单算法。
3.参考上一题,编写一个C程序,求a、b、c、d四个数中的最大者。
编程点拨:
①多定义一个变量,并一开始令变量max=a;
②if(max<
b)max=b;
其余多个数据中求最值依此类推。
4.输入4个整数,要求按由小到大顺序输出。
得到正确结果后,修改程序使之按由大到小顺序输出。
①输入函数scanf()的使用;
②简单的排序算法;
③通过中间变量t交换a和b值的方法:
t=a;
a=b;
b=t;
。
5.根据以下函数关系,对输入的每个x值,计算出相应的y值。
#include
{floatx,y;
%f"
x);
if()
y=;
elseif()
y=;
else
x=%f,y=%f"
相关知识点:
if语句的嵌套;
数学函数的调用方式。
6.模仿第5题,写程序实现以下函数:
用scanf函数输入x的值,求y值。
运行程序,输入x的值(分别为x<
1、1≤x<
10、x>
10三种情况),检查输出的y值是否正确。
①用if的嵌套实现分段函数;
②比较运算符的正确使用;
③算术运算符*的正确使用。
7.阅读分析以下程序的功能。
voidmain()
{intchoice;
intvalue;
Convert:
\n"
/*显示菜单*/
1:
decimaltohexadecimal\n"
2:
hexadecimaltodecimal\n"
3:
decimaltooctal\n"
4:
octaltodecimal\n"
enteryourchoice:
"
%d"
choice);
switch(choice)
{case1:
/*选中1时处理*/
printf("
enterdecimalvalue:
"
scanf("
value);
%dinhexadecimalis:
%x\n"
value,value);
break;
case2:
/*选中2时处理*/
printf("
enterhexadecimalvalue:
%x"
%xindecimalis:
case3:
/*选中3时处理*/
%dinoctalis:
%o\n"
case4:
/*选中4时处理*/
enteroctalvalue:
%o"
%oindecimalis:
}
①用switch语句实现菜单的方法;
②数制转换的方法。
8.编写程序,要求对输入的数字1~7转换成文字星期几,对其它数字不转换。
例如,输入5时,程序应该输出Friday。
编辑、调试和运行该程序,然后输入4。
其输出结果是什么?
为什么是这样的结果?
该程序有哪些错误?
如何修改?
①switch语句的正确使用;
②break在switch语句中的作用。
实验三循环控制
1.熟练掌握用while语句、dowhile语句和for语句实现循环的方法。
2.掌握在程序设计中用循的方法实现一些常用算法。
并进一步学习调试程序的方法。
3.掌握一维数组和二维数组的定义、赋值和输入输出的方法。
4.掌握字符数组和字符串函数的使用。
5.掌握与数组有关的算法。
1.程序求1+…+100,填空,实现该功能。
ints,i;
s=0;
/*第5行*/
for()
s=s+i;
1+...+100=%d\n"
s);
思考:
(1)第5行能不能去掉?
其作用是什么?
(2)不用for语句,用while语句改写该程序,实现同样的功能。
2.比较下列两个程序。
(验证)
/*c40102_1.c*/
{inti,n,sum=0;
i);
n=i;
while(i<
=10)
{sum+=i;
i++;
%d+...+10=%d"
n,sum);
/*c40102_2.c*/
do
}while(i<
=10);
分别运行这两题,若输入7,这两个程序的结果分别是多少?
若输入12,这两个程序的结果又分别是多少?
比较为什么会有这样的区别?
3.预习程序,若输入12345,分析输出结果是多少?
上机验证。
{longdata;
%ld"
data);
while(data)
{printf("
%ld,"
data%10);
data=data/10;
4.程序实现求Fibonacci数列的前n个数。
(验证、调试)
运行程序,写出运行结果;
采用单步跟踪技术运行该程序,观察一下变量的变化。
{longintf1,f2;
inti,n;
Inputn:
/*第5行*/
n);
/*第6行*/
f1=f2=1;
for(i=1;
i<
n;
i++)
%ld\t%ld\n"
f1,f2);
/*第9行*/
f1=f1+f2;
f2=f2+f1;
(1)f1、f2这两个变量为什么定义为longint型?
(2)第5行和第6行的相互作用,你会用这种方式来实现输入吗?
(3)注意第9行的输出“%ld”中的“1”是字母“L”的小写形式,不是数字1。
5.预习下列程序,写出预习结果并上机验证。
{inti,j,x;
for(i=0,x=0;
2;
{x++;
for(j=0;
j<
3;
j++)
{if(j%2)continue;
x++;
x=%d\n"
x);
思考:
用一句话概括if(j%2)语句的作用。
嵌套for循环的执行过程及continue语句的作用。
6.程序输入一批考试分数,用1作为结束标志,若输入大于100分,则提示重新输入,然后计算最高分、最低分与平均分。
请调试、检查程序中的错误,并改正之。
{intmark;
intn=0;
sum=0;
intmax=100;
min=0;
for(;
;
);
{scanf("
&
mark);
if(mark>
100)
{printf("
Mark>
100,Pleasereinput\n"
break;
if(mark=-1)
n++;
sum=sum+mark;
if(mark>
max)
max=mark;
if(mark<
min)
min=mark;
sum=sum/n;
max=%d,min=%d,aver=%d\n"
max,min,sum);
提示:
该程序有很多错误,下面给出某些错误的说明。
当求一批数中的最大值时,若已知一批数的最小值,则将这个最小值作为最大值的初始值;
当求最小值时,情况相反,即若已知这批数的最大值,则将这个最大值作为最小值的初始值。
本例中求一批分数的最高分,则最高分的初始值应该设为0,然后在程序循环中逐渐地升高,直至求出最高分;
本例中还要求这批分数的最低分,则最低分的初始值设为100,然后在程序循环中逐渐地降低,直至求出最小值。
实现“若输入大于100分,则提示重新输入”功能的语句有错;
实现“用1作为结束标志”功能的语句有错。
(1)“一批数据”是几个数据?
输入的数据如何结束?
程序中哪一行是实现结束这个要求的,写出该语句。
(2)程序中哪个语句是实现”若输入大于100分,则提示重新输入”这个要求的,写出该语句。
(3)写出您的测试数据及运行结果,注意输入的数据序列中最后一个应是-1。
7.编程:
输入20个1~90的整数,分类统计1~30、31~60、61~90的数各有多少个?
(1)count1计1~30的个数,count2计31~60的个数,count3计61~90的个数。
(2)用for循环20次实现该程序的功能:
输入一个整数x,判断该数所在的范围,若x是1~30,则count1加1;
若x是31~60,则count2加1;
若x是61~90,则count3加1。
(3)最后,输出统计的结果。
{intcount1=0,count2=0,count3=0;
inti,x;
printf(“Pleaseinput20numbers:
”);
for(i=0;
20;
{scanf(“%d”,&
………/*补充完成程序*/
/*输出统计结果*/
……………
补充完成该程序。
8.编程:
素数是除了1和其本身以外,不能被其他自然数整除的自然数。
从键盘输入一个数,判断该数是不是素数?
a)输入这个数x。
b)用for循环2~x-1,用2~x-1的每一个数去除x,若有一个数整除x,则说明x不是素数;
否则,x就是素数。
c)最后,将判断结果输出。
stdlib.h>
{inti,x;
Enteronenaturalinteger:
%d"
for(i=2;
x-1;
i++)/*补充完成该程序*/
其实,只需要判断2~
之间的整数能否整除x就可以判断x是否为素数,此时,如何修改程序?
9.编程:
显示所有的水仙花数。
谓水仙花数,是指一个3位数,其各位数字立方和等于该数字本身。
例,153是水仙花数,因为153=13+53+33。
有两种解题思路,选择其中之一编程实现:
(1)利用三重循环,将这三个数通过一定的运算符连接成一个3位数,然后判断是否是水仙花数。
=9;
for(j=0;
for(k=0;
k<
k++)
注意,因水仙花是一个三位数,百位i是从1开始,不能从0开始,十位j和个数位k可以从0开始。
(2)利用一个循环,对100~999范围内的每个3位数逐位分离后进行判断。
for(i=100;
999;
{a=i/100;
b=(i-a*100)/10;
c=i%10;
………
10.编程:
输出下列图形。
分析:
这是由星号构成的5行5列的三角形图形。
每一行的星号数量为:
1、3、5、7、9。
考虑两点,一是每一行上星号的生成规则,二是每一行第一个星号字符的输出位置。
每一行的星号与行号有关,即2*i+1,其中i是行号;
每一行的输出位置比上一行少一个空格,可以这样实现:
for(j=1;
=40-i;
j++)printf(“%c”,‘’),其中i是行号。
实验四数组
(1)掌握一维数组和二维数组的定义、赋值和输入输出的方法;
(2)掌握字符数组和字符串函数的使用;
(3)掌握与数组有关的算法(特别是排序算法)。
1.调试下列程序,使之具有如下功能:
输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。
写出调试过程。
#inclue<
#defineN10
{inti,a[N],av;
for(i=0;
N;
a[i]);
if(i%3==0)
i!
=N;
av+=a[i];
av=%f\n"
av);
上面给出的程序是完全可以运行的,但是运行结果是完全错误的。
调试时请注意数组元素的输入问题、输出格式问题等。
请使用前面实验所掌握的调试工具,判断程序中的错误并改正。
①数组元素值的输入;
②求和求平均值的相关变量初始化问题;
③输出格式符的正确使用。
④数组元素的格式化输出。
2.下面程序是输入5个数据,然后求它们的和并输出结果。
{inti,a[5
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 实验 任务书
![提示](https://static.bdocx.com/images/bang_tan.gif)