C语言程序设计案例操作和分析以课后习题为例.docx
- 文档编号:13467442
- 上传时间:2023-06-14
- 格式:DOCX
- 页数:25
- 大小:290.26KB
C语言程序设计案例操作和分析以课后习题为例.docx
《C语言程序设计案例操作和分析以课后习题为例.docx》由会员分享,可在线阅读,更多相关《C语言程序设计案例操作和分析以课后习题为例.docx(25页珍藏版)》请在冰点文库上搜索。
C语言程序设计案例操作和分析以课后习题为例
C语言程序设计案例操作和分析
——以课后习题为例
一引言
(一)研究的缘起
1第四章主要讲的是选择结果程序设计,前面第3章介绍了顺序结构程序设计。
在顺序结构中,各语句是按自上而下的顺序执行的,执行完上一个语句就自动执行下一个语句,是无条件的。
实际上,在很多情况下,需要根据某个条件是否满足来决定是否执行指定的操作任务,或者从给定的两种或多种操作作选择其一。
这是选择结构要解决的问题。
2选择结构在进行程序处理的时候,就需要运用到选择语句。
同时也需要各种运算符、关系表达式以及它们之间的优先次序。
(二)本文的研究思路、方法及意义
1对于按逆序输出位数及每位数字问题,,输出它的位数就需要用到strlen函数,输出它的逆序数字则要用到streev函数。
2对于公司奖金计算问题,主要根据i属于的不同范围,计算不同的奖金额。
3对于利用坐标求高度问题,先确定属于圆内的点的高度都为10,圆外点的高度都为0。
(三)相关理论基础
1用strlen函数输出位数,用streev函数输出它的逆序数字
2计算公司奖金计算问题,
计算bon1=100000*0.1的值
计算bon2=bon1+100000*0.075的值
计算bon4=bon2+200000*0.05的值
计算bon6=bon4+200000*0.03的值
计算bon10=bon6+400000*0.015的值
3利用坐标求高度问题,在圆范围之内的坐标高度为10,圆外的坐标高度为0。
二算法分析及流程图
(一)按逆序输出位数及每位数字问题
1给一个不多于5位的正整数,要求:
1>求出它是几位数;
2>分别输出每一位数字;
3>按逆序输出各位数字,例如321,应输出123。
(1)算法分析:
输入一个不多于5位的数字,输出它的位数就需要用到strlen函数,输出它的逆序数字则要用到streev函数。
(2)N-S图
限定数字范围小于1000
输入字符串
根据strlen和streev函数输出结果
程序结束
图1.1
(二)公司奖金计算问题
2企业发放的奖金根据利润提成。
利润I低于或等于100000元时,奖金可提10%;利润高于100000元,低于200000元(100000
高于200000元的部分按5%提成;4000001000000时,超过1000000元的部分按1%提成。
从键盘输入当月利润I,求应发奖金总数。
要求:
(1)用if语句编程序;
(2)用switch语句编程序。
(1)算法分析:
根据利润的不同来计算相应的奖金,则需要用到条件语句if或switch,定义6个变量i、bonus、bon1、bon2、bon6、bon10,其中i为利润,bonus及bon1、bon2、bon6、bon10为奖金额。
(2)N-S图
定义6个变量i,bonus,bon1,bon2,bon6,bon10
计算bon1=100000*0.1的值
计算bon2=bon1+100000*0.075的值
计算bon4=bon2+200000*0.05的值
计算bon6=bon4+200000*0.03的值
计算bon10=bon6+400000*0.015的值
根据相应的i的值,计算不同i值对应的奖金额bonus
输出奖金值,程序结束
图1.2
(三)利用坐标求高度问题
3有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1,。
这4个塔的高度为10m,塔以外无建筑物。
今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。
(1)算法分析:
在以(2,2),(-2,2),(-2,-2),(2,-2)为圆心,1为半径的圆上的高度都为10,其他地方的高度均为0,定义15个变量x,y,x1,y1,x2,y2,x3,y3,x4,y4,d1,d2,d3,d4,h.x1,y1;x2,y2;x3,y3;x4,y4分别是4个圆心的坐标,d1,d2,d3,d4分别为所在4个圆内的点的高度,h定义为高度。
(2)N-S图
定义变量h为高度
分别定义变量x,y,x1,y1,x2,y2,x3,y3,x4,y4,d1,d2,d3,d4为圆心坐标和圆内高度
根据不同的坐标值,分别输出h的值,即建筑物的高度
程序结束
图1.3
三实验过程分析
(一)数据和函数说明
1按逆序输出位数及每位数字问题
(1)编写程序:
#include
#include
intmain()
{
charnum[1000];
scanf("%s",num);
printf("你输入的是%d位数,逆序数是%s",strlen(num),strrev(num));
return0;
}
运行结果;
(2)程序分析:
程序第2行用了头文件#include
程序第5行是对输入数字的限定,输入的数字不能大于1000,即输入的数字不多于5位。
输出函数运行之后的值,程序结束。
2公司奖金计算问题
(1)编写程序
用If语句编写的程序:
#include"stdio.h"
voidmain()
{
longi;
floatbonus,bon1,bon2,bon4,bon6,bon10;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
printf("请输入利润i:
");
scanf("%ld",&i);
if(i<=100000)
bonus=i*0.1;
elseif(i<=200000)
bonus=bon1+(i-100000)*0.075;
elseif(i<=400000)
bonus=bon2+(i-200000)*0.05;
elseif(i<=600000)
bonus=bon4+(i-400000)*0.03;
elseif(i<=1000000)
bonus=bon6+(i-600000)*0.015;
else
bonus=bon10+(i-1000000)*0.01;
printf("奖金是%10.2f\n",bonus);
}
用switch语句编写的程序:
#include
intmain()
{
inti;
doublebonus,bon1,bon2,bon4,bon6,bon10;
intbranch;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
printf("请输入利润i:
");
scanf("%d",&i);
branch=i/100000;
if(branch>10)branch=10;
switch(branch)
{case0:
bonus=i*0.1;break;
case1:
bonus=bon1+(i-100000)*0.075;break;
case2:
case3:
bonus=bon2+(i-200000)*0.05;break;
case4:
case5:
bonus=bon4+(i-400000)*0.03;break;
case6:
case7:
case8:
case9:
bonus=bon6+(i-600000)*0.015;break;
case10:
bonus=bon10+(i-100000)*0.01;
}
printf("奖金是%10.2f\n",bonus);
return0;
}
(2)程序分析:
1>用if语句编写的程序:
程序第4行定义长整型变量i,程序第5行定义实型变量bonus,bon1,bon2,bon4,bon6,bon10。
程序第6,7,8,9,10行分别计算bon1=100000*0.1;bon2=bon1+100000*0.075;bon4=bon2+200000*0.05;bon6=bon4+200000*0.03;bon10=bon6+400000*0.015的值。
程序第11行输入变量i的值。
程序第13行开始为if条件语句,当i<=100000时,bonus=i*0.1;当1000001000000时,bonus=bon10+(i-1000000)*0.01。
程序第25行输出奖金额,%10.2f表示输出奖金的数据最小宽度为10位,小数部分输出2位或截取的字符个数是2个。
光标换行,程序结束。
2>用switch编写的程序
程序第4行定义变量i,,程序第7,8,9,10,11行分别计算bon1=100000*0.1;bon2=bon1+100000*0.075;bon4=bon2+200000*0.05;bon6=bon4+200000*0.03;bon10=bon6+400000*0.015的值。
程序第12行输入变量i的。
在程序第16行以后的case后面的语句中,最后都有一个break语句,它的作用是使流程转到switch语句的末尾(即右花括号处)。
程序第29行输出奖金,%10.2f表示输出奖金的数据最小宽度为10位,小数部分输出2位或截取的字符个数是2个。
光标换行,程序结束。
3利用坐标求高度问题
(1)编写程序
#include
intmain()
{
inth_45=10;
floatx1_45=2,y1_45=2,x2_45=-2,y2_45=2,x3_45=-2,y3_45=-2,x4_45=2,y4_45=-2,x_45,y_45,d1_45,d2_45,d3_45,d4_45;
printf("请输入一个点(x,y):
");
sacnf("%f,%f",&x_45,&y_45);
d1_45=(x_45-x4_45)*(x_45-x4_45)+(y_45-y4_45)*(y_45-y4_45);
d2_45=(x_45-x1_45)*(x_45-x1_45)+(y_45-y1_45)*(y_45-y1_45);
d3_45=(x_45-x2_45)*(x_45-x2_45)+(y_45-y2_45)*(y_45-y2_45);
d4_45=(x_45-x3_45)*(x_45-x3_45)+(y_45-y3_45)*(y_45-y3_45);
if(d1_45>1&&d2_45>1&&d3_45>1&&d4_45>1)h_45=0;
printf("该点高度为%d\n",h_45);
return0;
}
(2)程序分析:
程序第4行定义变量h,同时给h赋值为10。
程序第5行定义变量x,y,x1,y1,x2,y2,x3,y3,x4,y4,d1,d2,d3,d4,并给定初始值x1,x4,y1,y2为2、x2,x3,y3,y4为-2。
程序第8,9,10,11行定义以(2,2)(-2,2)(-2,-2)(2,-2)为圆心,1为半径的圆内高度为10。
程序第12行进行判断,如果坐标不在圆内,则其高度为0;否则高度为10。
程序第13行输出高度h。
光标换行,程序结束。
(二)实验工具
VisualC++6.0
(三)调试过程
1按逆序输出位数及每位数字问题
1>显示程序没有语句和逻辑上的错误,如图1.4
图1.4
2>运行程序,输入一个数6314,输出了它是4位数,并且还输出它的逆序数1436,如图1.5
图1.5
2公司奖金计算问题
(1)用if语句编写的程序:
1>程序显示没有语言和逻辑错误,如图1.6
图1.6
2>第一次运行结果,输入的利润为5000元,输出的奖金为500元,如图1.7
图1.7
2>第二次运行结果,输入的利润值为150000元,输出的奖金为13750元,如图1.8
图1.8
4>第三次运行结果,输入的利润值为300000元时,输出的奖金则为22500元,如图1.9
图1.9
5>第四次运行结果,输入的利润值为2000000元,输出的奖金为49500元,如图2.0
图2.0
(2)用switch语句编写的程序
1>显示程序没有语句或逻辑上的错误,如图2.1
图2.1
2>第一次运行结果,输入利润值5000,输出的奖金为500元,如图2.2
图2.2
3>第二次运行结果,输入200000的利润值,输出的奖金是17500元,如图2.3
图2.3
4>第三次运行结果,输入500000元的利润值,输出的奖金为30500元,如图2.4
图2.4
3利用坐标求高度问题
1>显示程序没有语句或逻辑上的错误,如图2.5
图2.5
2>输入坐标(2,3),输出的高度为10,如图2.6
图2.6
3>输入坐标(0,0),输出的高度为0,如图2.7
图2.7
5>输入坐标(-1,-4),输出的高度为0,如图2.8
图2.8
四结果与讨论
(一)程序代码
1按逆序输出位数及每位数字问题
#include
#include
intmain()
{
charnum[1000];
scanf("%s",num);
printf("你输入的是%d位数,逆序数是%s",strlen(num),strrev(num));
return0;
}
2公司奖金计算问题
(1)if语句程序
#include"stdio.h"
voidmain()
{
longi;
floatbonus,bon1,bon2,bon4,bon6,bon10;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
printf("请输入利润i:
");
scanf("%ld",&i);
if(i<=100000)
bonus=i*0.1;
elseif(i<=200000)
bonus=bon1+(i-100000)*0.075;
elseif(i<=400000)
bonus=bon2+(i-200000)*0.05;
elseif(i<=600000)
bonus=bon4+(i-400000)*0.03;
elseif(i<=1000000)
bonus=bon6+(i-600000)*0.015;
else
bonus=bon10+(i-1000000)*0.01;
printf("奖金是%10.2f\n",bonus);
}
(2)switch语句
#include
intmain()
{
inti;
doublebonus,bon1,bon2,bon4,bon6,bon10;
intbranch;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
printf("请输入利润i:
");
scanf("%d",&i);
branch=i/100000;
if(branch>10)branch=10;
switch(branch)
{case0:
bonus=i*0.1;break;
case1:
bonus=bon1+(i-100000)*0.075;break;
case2:
case3:
bonus=bon2+(i-200000)*0.05;break;
case4:
case5:
bonus=bon4+(i-400000)*0.03;break;
case6:
case7:
case8:
case9:
bonus=bon6+(i-600000)*0.015;break;
case10:
bonus=bon10+(i-100000)*0.01;
}
printf("奖金是%10.2f\n",bonus);
return0;
}
3利用坐标求高度问题
#include
intmain()
{
inth_45=10;
floatx1_45=2,y1_45=2,x2_45=-2,y2_45=2,x3_45=-2,y3_45=-2,x4_45=2,y4_45=-2,x_45,y_45,d1_45,d2_45,d3_45,d4_45;
printf("请输入一个点(x,y):
");
sacnf("%f,%f",&x_45,&y_45);
d1_45=(x_45-x4_45)*(x_45-x4_45)+(y_45-y4_45)*(y_45-y4_45);
d2_45=(x_45-x1_45)*(x_45-x1_45)+(y_45-y1_45)*(y_45-y1_45);
d3_45=(x_45-x2_45)*(x_45-x2_45)+(y_45-y2_45)*(y_45-y2_45);
d4_45=(x_45-x3_45)*(x_45-x3_45)+(y_45-y3_45)*(y_45-y3_45);
if(d1_45>1&&d2_45>1&&d3_45>1&&d4_45>1)h_45=0;
printf("该点高度为%d\n",h_45);
return0;
}
(二)分析与讨论
1if语句用来实现两个分支的选择结构,switch语句实现多分支的选择结构。
if语句的一般形式为:
if(表达式)语句1
[else语句2]
最常用的还有以下三种形式:
1>if(表达式)语句1(没有else子句部分)
2>if(表达式)(有else子句部分)
语句1
Else
语句2
3>if(表达式1)语句1(在else部分又嵌套了多层的if语句)
Elseif(表达式2)语句2
Elseif(表达式3)语句3
..
..
..
Elseif(表达式m)语句m
Else语句m+1
说明:
1>语句1、语句2、语句3…语句m等是if语句中的“内嵌语句”每个内嵌语句的末尾都应当有分号。
2>if语句无论写在几行上,都是一个整体,属于同一个语句。
2关系运算符及次序:
在C语言中,比较符(比较运算符)称为关系运算符。
(1)6种关系运算符:
1)<(小于)
2)<=(小于或等于)
3)>(大于)
4)>=(大于或等于)
5)==(等于等于)
6)!
=(不等于)
(2)关于优先次序:
1>前4种关系运算符(<,<=,>,>=)的优先级别相同,后2种也相同。
前4种高于后两种。
例如“>”优先于“==”。
而“>”与“<”优先级相同。
2>关系运算符的优先级低于算数运算符。
3>关系运算符的优先级高于赋值运算符。
3关系表达式.用关系运算符将两个数值或数值表达式连接起来的式子,称关系表达式.
关系表达式的值是一个逻辑值,即"真"或"假".例如,关系表达式”5==3”的值为”假”,”5>=3”的值为“真”。
在C的逻辑运算中,以“1”代表“真”,以“0”代表“假”。
关系表达式“a>b”的值为“真”,表达式的值为1.
关系表达式“(a>b)==c”的值为“真”,表达式的值为1.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 案例 操作 分析 课后 习题