C语言程序设计案例操作和分析以课后习题为例文档格式.docx

上传人:b****5 文档编号:19765953 上传时间:2023-01-09 格式:DOCX 页数:22 大小:290.33KB
下载 相关 举报
C语言程序设计案例操作和分析以课后习题为例文档格式.docx_第1页
第1页 / 共22页
C语言程序设计案例操作和分析以课后习题为例文档格式.docx_第2页
第2页 / 共22页
C语言程序设计案例操作和分析以课后习题为例文档格式.docx_第3页
第3页 / 共22页
C语言程序设计案例操作和分析以课后习题为例文档格式.docx_第4页
第4页 / 共22页
C语言程序设计案例操作和分析以课后习题为例文档格式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

C语言程序设计案例操作和分析以课后习题为例文档格式.docx

《C语言程序设计案例操作和分析以课后习题为例文档格式.docx》由会员分享,可在线阅读,更多相关《C语言程序设计案例操作和分析以课后习题为例文档格式.docx(22页珍藏版)》请在冰豆网上搜索。

C语言程序设计案例操作和分析以课后习题为例文档格式.docx

输入字符串

根据strlen和streev函数输出结果

程序结束

图1.1

(二)公司奖金计算问题

2企业发放的奖金根据利润提成。

利润I低于或等于100000元时,奖金可提10%;

利润高于100000元,低于200000元(100000<

I<

=200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成7.5%;

200000<

=400000时,低于200000的部分仍按照上述办法提成(下同)。

高于200000元的部分按5%提成;

400000<

=600000元时,高于400000元的部分按3%提成;

600000<

=1000000时,高于600000元的部分按1.5%提成;

I>

1000000时,超过1000000元的部分按1%提成。

从键盘输入当月利润I,求应发奖金总数。

要求:

(1)用if语句编程序;

(2)用switch语句编程序。

(1)算法分析:

根据利润的不同来计算相应的奖金,则需要用到条件语句if或switch,定义6个变量i、bonus、bon1、bon2、bon6、bon10,其中i为利润,bonus及bon1、bon2、bon6、bon10为奖金额。

定义6个变量i,bonus,bon1,bon2,bon6,bon10

根据相应的i的值,计算不同i值对应的奖金额bonus

输出奖金值,程序结束

图1.2

(三)利用坐标求高度问题

3有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1,。

这4个塔的高度为10m,塔以外无建筑物。

今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。

在以(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定义为高度。

定义变量h为高度

分别定义变量x,y,x1,y1,x2,y2,x3,y3,x4,y4,d1,d2,d3,d4为圆心坐标和圆内高度

根据不同的坐标值,分别输出h的值,即建筑物的高度

图1.3

三实验过程分析

(一)数据和函数说明

1按逆序输出位数及每位数字问题

(1)编写程序:

#include<

stdio.h>

string.h>

intmain()

{

charnum[1000];

scanf("

%s"

num);

printf("

你输入的是%d位数,逆序数是%s"

strlen(num),strrev(num));

return0;

运行结果;

(2)程序分析:

程序第2行用了头文件#include<

,是因为下面运用了strlen和strrev函数。

程序第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;

请输入利润i:

"

);

%ld"

&

i);

if(i<

=100000)

bonus=i*0.1;

elseif(i<

=200000)

bonus=bon1+(i-100000)*0.075;

=400000)

bonus=bon2+(i-200000)*0.05;

=600000)

bonus=bon4+(i-400000)*0.03;

=1000000)

bonus=bon6+(i-600000)*0.015;

else

bonus=bon10+(i-1000000)*0.01;

奖金是%10.2f\n"

bonus);

}

用switch语句编写的程序:

inti;

doublebonus,bon1,bon2,bon4,bon6,bon10;

intbranch;

%d"

branch=i/100000;

if(branch>

10)branch=10;

switch(branch)

{case0:

bonus=i*0.1;

break;

case1:

bonus=bon1+(i-100000)*0.075;

case2:

case3:

bonus=bon2+(i-200000)*0.05;

case4:

case5:

bonus=bon4+(i-400000)*0.03;

case6:

case7:

case8:

case9:

bonus=bon6+(i-600000)*0.015;

case10:

bonus=bon10+(i-100000)*0.01;

}

用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;

当100000<

i<

=200000时,bonus=bon1+(i-100000)*0.075;

当200000<

=400000时,bonus=bon2+(i-200000)*0.05;

当400000<

=600000时,bonus=bon4+(i-400000)*0.03;

当600000<

=1000000时,bonus=bon6+(i-600000)*0.015;

当i>

1000000时,bonus=bon10+(i-1000000)*0.01。

程序第25行输出奖金额,%10.2f表示输出奖金的数据最小宽度为10位,小数部分输出2位或截取的字符个数是2个。

光标换行,程序结束。

用switch编写的程序

程序第4行定义变量i,,程序第7,8,9,10,11行分别计算bon1=100000*0.1;

bon10=bon6+400000*0.015的值。

程序第12行输入变量i的。

在程序第16行以后的case后面的语句中,最后都有一个break语句,它的作用是使流程转到switch语句的末尾(即右花括号处)。

程序第29行输出奖金,%10.2f表示输出奖金的数据最小宽度为10位,小数部分输出2位或截取的字符个数是2个。

3利用坐标求高度问题

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;

请输入一个点(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>

d3_45>

d4_45>

1)h_45=0;

该点高度为%d\n"

h_45);

(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.4

图1.4

运行程序,输入一个数6314,输出了它是4位数,并且还输出它的逆序数1436,如图1.5

图1.5

(1)用if语句编写的程序:

程序显示没有语言和逻辑错误,如图1.6

图1.6

第一次运行结果,输入的利润为5000元,输出的奖金为500元,如图1.7

图1.7

第二次运行结果,输入的利润值为150000元,输出的奖金为13750元,如图1.8

图1.8

4>

第三次运行结果,输入的利润值为300000元时,输出的奖金则为22500元,如图1.9

图1.9

5>

第四次运行结果,输入的利润值为2000000元,输出的奖金为49500元,如图2.0

图2.0

(2)用switch语句编写的程序

显示程序没有语句或逻辑上的错误,如图2.1

图2.1

第一次运行结果,输入利润值5000,输出的奖金为500元,如图2.2

图2.2

第二次运行结果,输入200000的利润值,输出的奖金是17500元,如图2.3

图2.3

第三次运行结果,输入500000元的利润值,输出的奖金为30500元,如图2.4

图2.4

显示程序没有语句或逻辑上的错误,如图2.5

图2.5

输入坐标(2,3),输出的高度为10,如图2.6

图2.6

 

输入坐标(0,0),输出的高度为0,如图2.7

图2.7

输入坐标(-1,-4),输出的高度为0,如图2.8

图2.8

四结果与讨论

(一)程序代码

2公司奖金计算问题

(1)if语句程序

(2)switch语句

(二)分析与讨论

1if语句用来实现两个分支的选择结构,switch语句实现多分支的选择结构。

if语句的一般形式为:

if(表达式)语句1

[else语句2]

最常用的还有以下三种形式:

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、语句2、语句3…语句m等是if语句中的“内嵌语句”每个内嵌语句的末尾都应当有分号。

if语句无论写在几行上,都是一个整体,属于同一个语句。

2关系运算符及次序:

在C语言中,比较符(比较运算符)称为关系运算符。

(1)6种关系运算符:

1)<

(小于)

2)<

=(小于或等于)

3)>

(大于)

4)>

=(大于或等于)

5)==(等于等于)

6)!

=(不等于)

(2)关于优先次序:

前4种关系运算符(<

<

=,>

>

=)的优先级别相同,后2种也相同。

前4种高于后两种。

例如“>

”优先于“==”。

而“>

”与“<

”优先级相同。

关系运算符的优先级低于算数运算符。

关系运算符的优先级高于赋值运算符。

3关系表达式.用关系运算符将两个数值或数值表达式连接起来的式子,称关系表达式.

关系表达式的值是一个逻辑值,即"

真"

或"

假"

.例如,关系表达式”5==3”的值为”假”,”5>

=3”的值为“真”。

在C的逻辑运算中,以“1”代表“真”,以“0”代表“假”。

关系表达式“a>

b”的值为“真”,表达式的值为1.

关系表达式“(a>

b)==c”的值为“真”,表达式的值为1.

关系表达式“b+c<

a”的值为“假”,表达式的值为0.

3“&

”是逻辑运算符中的“逻辑与”,a&

b,如果a和b都为真,否则为假。

“!

”是逻辑运算符中的“逻辑非”,!

a为真,如果a为真,则!

a为假。

4条件运算符。

(1)条件运算符由两个符号(?

和:

)组成,必须一起使用。

要求有三个操作对象,称为三目(元)运算符,它是C语言中唯一的一个三目运算符。

(2)条件运算符的一般形式为:

表达式1?

表达式2:

表达式3.

(三)研究结论

1为了方便程序阅读,要把表达式用()括号括起来。

2f格式字符。

用来输出实数(包括单、双精度、长双精度),以小数形式输出,有几种用法:

(1)基本型,用%f。

实数中的整数部分全部输出,小数部分输出6位。

(2)指定数据宽度和小数位数,用%m.nf。

输出数据占m列,其中包括n位小数。

一个双精度数只能保证15位有效数字的精确度,即使指定小数位数为50,也不能保证输出的50位都是有效数字。

(3)输出的数据向左对齐,用%-m.nf。

在m.n的前面加一个负号,其作用与%m.nf形式作用基本相同,但当数据不超过m时,数据向左靠,右端补空格。

3sterev()是函数反转字符串,原型:

exturnchar*strrev(char*s),此函数的功能是把字符串s的所有字符顺序颠倒过来(不包括空字符(NULL))。

五改进建议

运用相应的函数可以使程序变得更为简单,如本篇文章中的按逆序输出位数及每位数字问题,如果不运用函数,运用算术的方法来编程的话,程序如下:

math.h>

intnum,indiv,ten,hundred,thousand,ten_thousand,place;

请输入一个整数(0-99999):

num);

if(num>

9999)

place=5;

elseif(num>

999)

place=4;

elseif

(num>

99)

place=3;

9)

place=2;

elseplace=1;

位数:

%d\n"

place);

prin

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1