C语言集中实训指导书文档格式.docx

上传人:b****5 文档编号:8435385 上传时间:2023-05-11 格式:DOCX 页数:31 大小:40.30KB
下载 相关 举报
C语言集中实训指导书文档格式.docx_第1页
第1页 / 共31页
C语言集中实训指导书文档格式.docx_第2页
第2页 / 共31页
C语言集中实训指导书文档格式.docx_第3页
第3页 / 共31页
C语言集中实训指导书文档格式.docx_第4页
第4页 / 共31页
C语言集中实训指导书文档格式.docx_第5页
第5页 / 共31页
C语言集中实训指导书文档格式.docx_第6页
第6页 / 共31页
C语言集中实训指导书文档格式.docx_第7页
第7页 / 共31页
C语言集中实训指导书文档格式.docx_第8页
第8页 / 共31页
C语言集中实训指导书文档格式.docx_第9页
第9页 / 共31页
C语言集中实训指导书文档格式.docx_第10页
第10页 / 共31页
C语言集中实训指导书文档格式.docx_第11页
第11页 / 共31页
C语言集中实训指导书文档格式.docx_第12页
第12页 / 共31页
C语言集中实训指导书文档格式.docx_第13页
第13页 / 共31页
C语言集中实训指导书文档格式.docx_第14页
第14页 / 共31页
C语言集中实训指导书文档格式.docx_第15页
第15页 / 共31页
C语言集中实训指导书文档格式.docx_第16页
第16页 / 共31页
C语言集中实训指导书文档格式.docx_第17页
第17页 / 共31页
C语言集中实训指导书文档格式.docx_第18页
第18页 / 共31页
C语言集中实训指导书文档格式.docx_第19页
第19页 / 共31页
C语言集中实训指导书文档格式.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言集中实训指导书文档格式.docx

《C语言集中实训指导书文档格式.docx》由会员分享,可在线阅读,更多相关《C语言集中实训指导书文档格式.docx(31页珍藏版)》请在冰点文库上搜索。

C语言集中实训指导书文档格式.docx

scanf(“a=%d,b=%d”,&

a,&

b);

scanf(“%f,%e”,&

x,&

y);

scanf(“&

c&

c”,&

c1,&

c2);

printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\n”,a,b,x,y,c1,c2);

}

运行该程序,必须按如下方式在键盘上输入数据

a=3,b=7↙

8.5,71.82↙

aA↙

请同学们写出输出结果

【例2】输入三角形三边长,求三角形面积。

#include“math.h”

{

floata,b,c,s,area;

scanf(“%f,%f,%f”,&

b,&

c);

s=1.0/2*(a+b+c);

area=sqrt(s*(s-a)*(s-b)*(s-c));

printf(“area=%f”,area);

【例3】已知圆半径,圆柱高,求圆周长,圆柱体积。

floatr,h,l,v,pi;

pi=3.1415926;

scanf(“%f,%f”,&

r,&

h);

l=2*pi*r;

v=pi*r*r*h;

printf(“圆周长为:

%6.2f\n”,l);

printf(“%圆柱体积为:

6.2f”,v);

【例4】输入一个摄氏温度,要求输出华氏温度。

公式为f=5/9*c+32.

floatc,f;

scanf(“%f”,&

f=5.0/9*c+32;

printf(“%5.2f\n”,c);

【作业】

1.已知圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。

2.输入一个华氏温度,要求输出摄氏温度。

公式为c=5/9*(f-32).

3.3选择结构程序设计

1.了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”);

2.学会正确使用逻辑运算符和逻辑表达式;

3.熟练掌握if语句和switch语句。

【一般示例】

【例1】已知三个数a,b,c,找出最大值放于max中。

分析:

由已知可得在变量定义时定义四个变量a,b,c和max,a,b,c是任意输入的三个数,max是用来存放结果最大值的。

第一次比较a和b,把大数存入max中,因a,b都可能是大值,所以用if语句中if——else

形式。

第二次比较max和c,把最大数存入max中,用if语句的第一种形式if形式。

Max即为a,b,c中的最大值。

#include"

inta,b,c,max;

/*定义四个整型变量*/

scanf(“a=%d,b=%d,c=%d”,&

if(a>

=b)

max=a;

/*a>

=b*/

else

max=b;

/*a<

b*/

if(c>

max)

max=c;

/*c是最大值*/

printf("

max=%d"

max);

若输入下列数据,分析程序的执行顺序并写出运行结果

(1)a=1,b=2,c=3

(2)a=2,b=1,c=3

(3)a=3,b=2,c=1

(4)a=3,b=1,c=2

(5)a=3,b=3,c=2

(6)a=2,b=1,c=2

【例2】输入某学生的成绩,经处理后给出学生的等级,等级分类如下:

90分以上(包括90):

A

80至90分(包括80):

B

70至80分(包括70):

C

60至70分(包括60):

D

60分以下:

E

方法一:

(用if嵌套`)

由题意知如果某学生成绩在90分以上,等级为A;

否则,如果成绩大于80分,等级为B;

否则,如果成绩大于70分,等级为C;

否则,如果成绩大于60分为D;

否则,如果成绩小于60分,等级为E;

但当我们输入成绩时也可能输错,出现小于0或大于100,这时也要做处理,输出出错信息。

因此,再用if嵌套前,应先判断输入的成绩是否在0~100之间。

#include"

intscore;

chargrade;

printf("

\npleaseinputastudentscore:

"

);

scanf("

%f"

&

score);

if(score>

100||score<

0)

\ninputerror!

else

{if(score>

=90)

grade='

A'

;

=80)

B'

{if(score>

=70)

C'

=60)

D'

elsegrade='

E'

}

\nthestudentgrade:

%c"

grade);

}

输入测试数据,调试程序。

测试数据要覆盖所有路径,注意临界值,例如此题中得100分,60分,0分以及小于0和大于100的数据。

方法二:

用switch语句

switch

语句是用于处理多分支的语句。

注意,case后的表达式必须是一个常量表达式,所以在以用switch语句之前,必须把0~100之间的成绩分别化成相关的常量。

所有A(除100以外),B,C,D类的成绩的共同特点是十位数相同,此外都是E类。

则由此可得把score除十取整,化为相应的常数。

intg,s;

charch;

\ninputastudentgrade:

scanf("

%d"

g);

s=g/10;

if(s<

0||s>

10)

else

{switch(s)

{case10:

case9:

ch='

break;

case8:

case7:

case6:

default:

\nthestudentscort:

ch);

输入测试数据,同方法一一样调试程序并写出结果。

【例3】有一函数:

x(x<

1)

y=2x-1(1≤x<

3x-11(x≥10)

用scanf函数输入x的值(分别为x<

1,1~10,>

=10三种情况),求y值。

y是一个分段表达式。

要根据x的不同区间来计算y的值。

所以应使用If语句。

intx,y;

printf(“pleaseinputx:

”);

scanf(“%d”,&

x);

if(x<

y=x;

printf(“y=%d\n”,y);

elseif(x<

{

y=2*x-1;

y=3*x-11;

1.c语言如何表示“真”与“假”?

系统如何判断一个量的“真”与“假”?

2.写出下面各逻辑表达式的值。

设a=3,b=4,c=5

(1)a+b>

c&

&

b==c

(2)a||b+c&

b-c

(3)!

(a>

b)&

!

c||1

(4)!

(x=a)&

(y=b)&

(5)!

(a+b)+c-1&

b+c/2

3.有3个整数a、b、c,由键盘输入,输出其中最大的数。

4.有一函数:

y=2x-1(1<

x<

3x-11(x>

写一程序,输入x,输出y。

5.给出一百分制成绩,要求输出成绩等级A、B、C、D、E。

90分以上为A,80~89为B,70~79分为C,60~69分为D,60分以下为E。

6.给一个不多于5位的正整数,要求:

a.求出它是几位数;

b.分别打出每一位数字;

c.按逆序打出各位数字,例如原数为321,应输出123。

7.输入4个整数,要求按由小到大的顺序输出。

3.4循环结构程序设计

熟练掌握while、do—while和for三种循环语句的应用。

【例1】求5!

intn,t;

n=1;

t=1;

while(t<

=5)

{

n=n*t;

t=t+1;

printf(“%d”,n);

【例2】求和s=1!

+2!

+3!

intn,s=0,t=1;

for(n=1;

n<

=3;

n++)

t=t*n;

s=s+t;

printf(“%d”,s);

【例3】求和s=1!

+5!

ints=0,t,i,j;

for(i=1;

i<

i++)

t=1;

for(j=1;

j<

=2*i-1;

j++)

t=t*j;

【例4】求和s=3+33+333

main()

ints=0,t=3,i;

t=10*t+3;

【例5】有一数列:

2/1,3/2,5/3,8/5,…求出这个数列的前10项之和。

intn,t,;

floata=2,b=1,s=0;

for(n=1;

=10;

s=s+a/b;

t=a;

a=a+b;

b=t;

printf(“%f”,s);

【例6】打印500以内的“水仙花数”。

“水仙花数”是一个三位数,其各位数立方和等于该数本身。

inti,j,k,n;

for(n=100;

=500;

i=n/100;

j=n/10-i*10;

k=n%10;

if(n==i*i*i+j*j*j+k*k*k)

printf(“%d”,n);

【例7】一个数如果恰好等于它的因子之和,这个数就称为完数。

求100之内的所有完数。

intn,s,j;

=100;

s=0;

n;

if(n%j==0)

s=s+j;

if(s==n)

【典型示例】

【例1】计算两个数的最大公约数;

首先,随机输入两个数m,n(默认m>

n);

其次,算法:

使k为m除以n的余数,如果m能被n整除,则k值为0,n为这两个数的最大公约数,否则,使k代替n,n代替m,重复以上过程,直到k值为0。

intm,n,k,result;

Entertwonumbers:

%d,%d"

m,&

n);

if(m>

0&

n>

0)/*限定两个正整数*/

do

k=n%m;

if(k==0)

result=m;

n=m;

m=k;

}while(k>

0);

/*循环取余求出最大公因子*/

Thegreatestcommondivistoris:

%d\n"

result);

elseprintf("

Nonpositivevaluesnotallowed\n"

【例2】用牛顿迭代求方程2x3-4x2+3x-6=0在1.0附近的根。

floatx,x0,f,f1;

x=1.0;

do

{x0=x;

f=((2*x0-4)*x0+3)*x0-6;

f1=(6*x0-8)*x0+3;

x=x0-f/f1;

while(fabs(x-x0)>

=1e-5);

printf(“%6.2f”,x);

【例3】打印下列图案

*

***

*****

*******

{inti,j;

for(i=1;

i<

=4;

{for(j=1;

=4-i;

printf(“”);

printf(“*”);

printf(“\n”);

【例4】判断m是否是素数。

程序:

#include<

math.h>

intm,i,k;

m);

k=sqrt(m+1);

for(i=2;

=k;

if(m%i==0)

break;

if(i>

=k+1)

printf(“%disaprimenumber\n”,m);

printf(“%disnotaprimenumber\n”,m);

1.输入两个正整数m和n,求其最大公约数和最小公倍数。

2.求Sn=a+aa+aaa+…+aa…a之值,其中a是一个数字。

例如:

2+22+222+2222+22222(此时n=5),n由键盘输入。

3.求和1!

+2!

+3!

+4!

+…20!

4.打印100-999之间所有的“水仙花数”。

5.一个数如果恰好等于它的因子之和,这个数就称为完数。

求1000之内的所有完数。

6.有一数列:

2/1,3/2,5/3,8/5,…求出这个数列的前20项之和。

7.用迭代法求x=√a。

求平方根的迭公式为

xn+1=1/2(xn+a/xn)

要求前后两次求出的x的差的绝对值小于10-5

8.用牛顿迭代求方程2x3-4x2+3x-6=0在1.5附近的根。

9.打印下列图案

3.5一维数组

1.掌握一维数组的定义、赋值和输入输出的方法;

2.掌握字符数组的使用;

3.掌握与数组有关的算法(例如排序算法)。

【例1】在键盘上输入N个整数,试编制程序使该数组中的数按照从大到小的次序排列。

C中数组长度必须是确定大小,即指定N的值。

排序的方法有多种,我们取出其中两种作为参考。

方法一:

起泡排序

从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;

如次序不对则使这两个数交换位置。

第一遍的(N-1)次比较后,最大的数已放在最后,第二遍只需考虑(N-1)个数,以此类推直到第(N-1)遍比较后就可以完成排序。

源程序如下:

#defineN10

inta[N],i,j,temp;

pleaseinput%dnumbers\n"

N);

for(i=0;

N;

a[i]);

N-1;

for(j=0;

N-1-i;

if(a[j]>

a[j+1])

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

thearrayaftersort:

\n"

%5d"

a[i]);

选择排序

首先找出值最小的数,然后把这个数与第一个数交换,这样值最小的数就放到了第一个位置;

然后,在从剩下的数中找值最小的,把它和第二个数互换,使得第二小的数放在第二个位置上。

以此类推,直到所有的值从小到大的顺序排列为止。

inta[N],i,j,r,temp;

for(i=0;

{r=i;

for(j=i+1;

if(a[j]<

a[r])

r=j;

if(r!

=i)

temp=a[r];

a[r]=a[i];

a[i]=temp;

【例2】青年歌手参加歌曲大奖赛,有10个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。

这道题的核心是排序。

将评委所打的10个分数利用数组按增序(或降序)排列,计算数组中除第一个和最后一个分数以外的数的平均分,其中排序部分这里用选择法实现。

{inti,j,min;

floattemp,ave=0;

floata[11];

\n输入评委所打的分数:

=9;

{min=i;

if(a[min]>

a[j])

min=j;

temp=a[i];

a[i]=a[min];

a[min]=temp;

for(i=2;

i++)/*注意i值的变化范围*/

ave=ave+a[i];

选手所得最后分数:

%6.1f"

ave/8);

【例3】输入一串字符,计算其中空格的个数。

stdio.h>

main()

{charc[30];

inti,sum=0;

gets(c);

strlen(c);

if(c[i]=='

'

sum=sum+1;

空格数为:

%d\n"

sum);

1.已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。

2.将一个数组中的值按逆序重新存放。

例如,原来顺序为8,6,5,4,1。

要求改为1,4,5,6,8。

3.有15个数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。

如果该数不在数组中,则打印出“无此数”。

4.编一程序,将两个字符串连接起来,不要用strcat函数。

3.6二维数组

1.掌握二维数组的定义、赋值和输入输出的方法;

【例1】有一个3×

4的矩阵,要求输出其中值最大的元素的值,以及它的行号和列号。

#defineM3

#defineN4

{intmax,i,j,r,c;

s

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2