C语言程序设计实验指导书

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机软件基础实验指导书
计算中心
辽宁工业大学
2008年12月
目录
实验一熟悉C语言编程环境 (1)
实验二基本数据处理 (8)
实验三计算分段函数 (11)
实验四指定次数的循环 (15)
实验五分支结构程序设计 (18)
实验六循环结构程序设计(一) (24)
实验七循环结构程序设计(二) (29)
实验八循环结构程序设计(三) (34)
实验九循环结构程序设计(四) (39)
实验十函数程序设计(一) (43)
实验十一函数程序设计(二) (50)
实验十二一维数组程序设计 (57)
实验十三二维数组程序设计 (63)
实验十四字符数组程序设计 (70)
实验十五指针程序设计 (76)
实验十六结构程序设计 (87)
实验十七文件 (93)
实验一熟悉C语言编程环境
【实验目的】
1、熟悉C语言编程环境,掌握C程序在Visual C++ 6.0环境下的编辑、编译、连接和运行。

2、能够编写简单的C程序。

3、掌握程序的调试方法,能够找出并改正程序中的语法错误。

【实验内容】
一、在Visual C++ 6.0编程环境下的操作步骤
用一个示例详细介绍C语言源程序在Visual C++ 6.0编程环境下,操作的整个过程。

【示例】在屏幕上显示你的学号、姓名和专业
源程序:/*在屏幕上显示你的学号、姓名及专业*/
#include "stdio.h"
void main()
{
printf("\t08001020\t张楠\t车辆工程\n");
}
操作步骤:
(1)启动VC++。

执行“开始”“程序”“Microsoft Visual Svtudio 6.0”“Microsoft Visual C++ 6.0”命令,进入VC++编程环境(如图1-1所示)。

图1-1 VC++窗口
(2)新建文件。

执行“文件”“新建”命令,单击“文件”选项卡(如图1-2所示),选列表中的“C++ Source File”,在“文件”文本框中输入2-1.c,在“C目录”文本框确
定存放位置,然后单击确定。

图1-2 新建文件
(3)编辑和保存。

在编辑窗口(如图1-3所示)中输入源程序,然后执行“文件” “保存”命令,保存源文件。

(4)编译。

执行“编译” “编译2-1.c ”命令(或编译微型条),在弹出的消息框中单击“是”按钮,开始编译,并在消息窗口中显示编译信息(如图1-3所示)。

图1-3 编辑、编译源文件信息窗口中出现“2-1.obj – 0 error(s), 0 warning(s)”,表示编译正确,没有发现错误和警告,并生成了目标文件2-1.obj 。

如果显示错误信息,说明程序中存在严重的错误,必须改正;如果显示警告信息,
编译
信息窗口
编译
正确
说明这些错误并未影响目标文件的生成,但通常也应该改正。

如果显示错误信息,拖曳信息窗口的滚动条到错误信息处,双击第一个错误点,指针指到出错处。

如果指向位置没有错误,在此行的上一行或下一行找错误。

根据提示进行改正。

然后,再编译。

(如图1-4所示)。

注意:有时,信息窗口会显示多个错误,但有时,改正第一个错误后,其它错误也没有了。

因为其它错误是由第一个错误引起的。

滚动条
图1-4 出错信息
(5)连接。

执行“编译”“构件2-1.exe”(或编译微型条),开始连接,并在信息窗口中显示连接信息(如图1-5所示)。

图1-5 连接成功并产生运行文件
信息窗口中出现的“2-1.exe – 0 error(s), 0 warning(s)”表示连接成功,并生成了可执行文件“2-1.exe ”。

(6)运行。

执行“编译” “执行2-1.exe ”命令(如图1-6所示),自动弹出运行窗口(如图1-7所示),显示运行结果。

其中,“Press any key to continue ”提示用户按任意键退出运行窗口,返回到VC++编辑窗口。

图1-6运行程序
构件
信息窗口
执行
图1-7 显示运行结果
(7)关闭程序工作区。

执行“文件”“关闭工作区”命令(如图1-8所示),在弹出的对话框(如图1-9所示)中单击“是”按钮,关闭工作区。

图1-8 关闭工作区
图1-9 关闭所有文档窗口
(8)打开文件。

如果要再次打开C源文件,可以执行“文件”“打开”,在C:\中选择文件2-1.c或者直接双击文件2-1.c。

(9)查看C源文件、目标文件和可执行文件的存放位置。

经过编辑、编译、连接和运行后,在C:\和C:\Debug中存放着相关文件。

其中,源文件2-1.c在c:\中,目标文件2-1.obj 和可执行文件2-1.exe都在C:\Debug中。

二、试着编写下列程序
【例1-1】设计一个程序,程序运行后,在屏幕上显示如下图形**************
* *
* hello *
* *
**************
源程序:
#include <stdio.h> /*编译预处理*/
main() /*定义主函数main()*/ {
printf("**************\n"); /*调用printf函数输出*/
printf("* *\n");
printf("* hello *\n");
printf("* *\n");
printf("**************\n");
}
举一反三
【1-1】在屏幕上显示你的学号、姓名和专业,分别各占一行显示。

【1-2】如何在屏幕上显示下列图形?
*****
***
*
三、调试并改正错误
在屏幕上显示以下3行信息。

************
Welcome
************
源程序:
#include "stdio.h"
void main()
{
printf("************");
/********found********/
printf(" Welcome\n")
printf("************\n");
}
【思考题】
1、计算机能够直接执行C语言中扩展名为.c的源程序文件、扩展名为.obj的目标程序和扩展名为.exe的可执行文件,对吗?
2、在编译和连接程序时,系统显示5个错误信息,那么,程序中一定有5处语法错误吗?
3、程序编译和连接时没有错误信息,那么,程序一定是正确的吗?
实验二基本数据处理
实验二基本数据处理
【实验目的】
1、掌握算术表达式和赋值表达式的使用
2、掌握基本输出函数的使用
3、能够编写简单的数据处理程序
【实验内容】
一、试着编写下列程序
【例2-1】求正方形的面积和周长
源程序:
#include <stdio.h>
main()
{
int a=6,zhou,mian; /*用类型名int定义三个基本型整型变量*/
zhou=4*a; /*计算周长*/
mian=a*a; /*计算面积*/
printf("周长=%d,面积=%d\n",zhou,mian);/*用printf函数输出整型数格式控制为:%d*/ }
运行结果:
周长=24,面积=36
举一反三
【2-1】求半径为2.3的圆的周长和面积。

提示:定义实型变量,类型名用double 。

【例2-2】任意输入一个华氏温度求对应的摄氏温度。

计算公式如下:9
)32(5-⨯=
f c ,式中:C 表示摄氏温度,f 表示华氏温度。

源程序:
#include <stdio.h>
main()
{
double f,c; /*定义两个双精度的实型数*/ printf(“Enter f :”);/*输入提示*/
/*调用scanf 函数给双精度的实型变量赋值,格式控制为%lf ,变量名前要加地址操作符&*/
scanf("%lf",&f);
c=5*(f-32)/9; /*根据公式求摄氏度*/
printf("\nf=%f,c=%f\n",f,c);
}
运行结果:
Enter f :80
f=80.000000,c=26.666667
Enter f :100
f=100.000000,c=37.777778 举一反三
【2-2】任意输入两个基本型的整型数,其中一个为正数,另一个为负数,输出它们的余数。

提示:取余操作符:%
二、程序改错
不允许增加行也不允许删除行,也不得更改程序的结构。

1、已知a=3,b=5,输出a+b的和值
源程序:
#include “stdio.h”
main()
{ /********found********/
int a=3;b=5;sum;
sum=a+b;
printf(“sum=%d\n”,sum);}
2、任意输入两个实型数,输出它们的积。

源程序:
#include “stdio.h”
main()
{
double x,y;
printf(“在键盘上给x,y赋值:”);
/********found********/
scanf(“%lf%lf”,x,y);
printf(“%f,%lf\n”,x*y,x*y);
}
3、分别输出234的每一位数字。

源程序:
#include “stdio.h”
main()
{
int x=234,a,b,c;
a=x/100;
/********found********/
b=x%100;
/********found********/
c=x/10;
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
}
【思考题】
1、在定义变量时,变量名sum和Sum是同一个变量吗?
2、两个数取余数,余数的符号和被除数符合相同吗?取余符号两端的数可以是任意类型
的数据吗?
3、用scanf函数给变量赋值时,变量名的前面为什么必须加&(即地址操作符)?
4、给一个双精度实型变量以%f形式赋值,会得到正确的值吗?
实验三计算分段函数
【实验目的】
1、使用if语句编写简单分支结构程序。

2、正确书写关系表达式
【实验内容】
一、试着编写下列程序
【例3-1】输出a=3,b=9中大的数。

源程序:
#include "stdio.h"
main()
{
int a=3,b=9,max;
/*使用if-else分支结构*/
if(a>b)
max=a;
else
max=b;
printf("max=%d\n",max);
}
举一反三
【3-1】任意输入一个整数,如果能被3整除,输出此数;否则,输出“不是3的倍数”。

【例3-2】计算分段函数,
x(x≥0)
y=
3x3+1 (x<0)
源程序:
#include "stdio.h"
#include "math.h" /*程序中调用了数学库函数,需包含头文件math.h*/ main()
{
double x,y;
printf(“Enter x:”);
scanf("%lf",&x);
if(x>=0)
y=sqrt(x); /*调用开方函数sqrt()计算*/ else
y=3*pow(x,3)+1; /*调用幂函数pow()计算*/ printf("\nx=%.2lf,y=%f\n",x,y); /*%.2lf保留两位小数输出*/
}
运行结果:
Enter x:3
x=3.00,y=1.732051
Enter x:-4
x=-4.00,y=-191.000000
举一反三
【3-2】编写程序,输入x,利用分段函数,计算并输出y值。

|x| (x≤0)
y=
e x(x>0)
提示:需要调用求实型数绝对值函数fabs和指数函数exp。

二、程序改错
不允许增加行也不允许删除行,也不得更改程序的结构。

1、任意输入一个数,如果是奇数输出“奇数”,否则,输出“偶数”。

源程序:
#include “stdio.h ”
main()
{
int x;
printf(“Enter x :”);
scanf(“%d ”,&x);
/********found********/
if x%2!=0
printf(“奇数”);
else
printf(“偶数”);
}
输入输出示例(共运行2次)
第一次运行:
Enter x:10
偶数
第一次运行:
Enter x:11
奇数
2、输入x ,计算并输出下列分段函数y 的值(保留一位小数)。

x 1
(x ≠0) 0 (x=0)
源程序:
#include “stdio.h ”
main()
{
int x;
double y;
printf(“Enter x:”);
scanf(“%d ”,&x);
/********found********/
if(x!=0);
/********found********/
y=1/x;
else
y=
y=0;
printf(“y=%.1f\n”,y);
}
输入输出示例(共运行2次)
第一次运行:
Enter x:10
y=0.1
第二次运行:
Enter x:0
y=0.0
【思考题】
1、else可以省略吗?
2、if-else语句用于编写什么程序段?
实验四 指定次数的循环
【实验目的】
1、熟悉掌握for 语句的使用。

2、熟悉掌握指定次数的循环程序设计方法。

【实验内容】
一、试着编写下列程序
【例4-1】求∑=5
1
i i
源程序:
#include "stdio.h"
main()
{
/*变量sum 用来放累加和,和值从0开始;i 用来取1~5中的数,同时也控制循环次数*/ int i,sum=0;
for(i=1;i<=5;i++) /*循环体执行5次*/
sum=sum+i; /*反复累加5次i 的值*/
printf("sum=%d\n",sum);
}
运行结果:
sum=15
举一反三
【4-1】求∑=n
i i 1
【例4-2】求1-2+3-4+。

n 的值
源程序:
#include <stdio.h>
main()
{
int i,f=1,n,sum=0; /*变量f 用来存放正负号*/
printf("Enter n:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{ sum=sum+i*f;
f=-f; /*改变正负号*/
}
printf("\nsum=%d\n",sum);
}
运行结果:
Enter n:5
sum=3
举一反三
【4-2】求n 1......7151311+-+-
的值 【例4-3】求1×2×3×4×5的积。

(即求5!)
源程序:
#include <stdio.h>
main()
{
int i,t=1; /*t用来放阶乘值*/
for(i=1;i<=5;i++)
t=t*i;
printf("%d!=%d\n",5,t);
}
运行结果:
5!=120
举一反三
【4-3】任意输入两个正整数m和n,求m!+n!的值。

二、程序改错
不允许增加行也不允许删除行,也不得更改程序的结构。

1、改正下列程序中的错误,计算表达式1+2+3+。

+100的值。

源程序:
#include “stdio.h”
main()
{ /********found********/
int i,sum;
for(i=1,i<=100,i++)
sum=sum+i;
printf(“sum=%d\n”,sum);
}
运行结果(改正后程序的运行结果)
sum=5050
2、输出三位数中能够被300整除的数。

源程序:
#include <stdio.h>
main()
{
int i;
/********found********/
for(i=100;i<=999;i++);
if(i%300==0)
printf("%5d",i);
实验四指定次数的循环}
运行结果:
300 600 900
【思考题】
1、for语句用于编写什么样的程序段?
2、如何执行for循环?
实验五分支结构程序设计
【实验目的】
1.掌握基本输入输出函数、赋值语句的使用方法。

2.熟练掌握用嵌套的if语句和switch语句实现多分支结构程序设计。

3.熟练掌握switch语句中break语句的使用。

【实验内容】
一、试着编写下列程序
【例5-1】任意输入一个字符,如果是小写字母字母以大写字母输出,是大写字母以小写字母输出;否则,按原样输出。

源程序:
#include <stdio.h>
main()
{
char ch;
printf("Enter ch:");
ch=getchar(); /*调用字符输入函数getchar()从键盘输入一个字符*/
if(ch>='a'&&ch<='z') /*判断ch变量内容是否是小写字母*/
putchar(ch-32); /*输出存放在变量ch中的字符*/
else if(ch>='A'&&ch<='Z') /*判断ch变量内容是否是大写字母*/
putchar(ch+32);
else
putchar(ch);
}
举一反三
【5-1】任意输入一个字符,如果是数字字符,则输出相应的数字,是空格输出它的ASCII 码值;否则,原样输出。

提示:例:‘5’-‘0’=5
【例5-2】输入十个字符,统计其中的空格、回车和其它字符个数。

源程序:
#include <stdio.h>
main()
{
char ch;
int i,num1=0,num2=0,num3=0;
for(i=1;i<=10;i++)
{ ch=getchar(); /*循环一次给变量ch赋值一次*/ if(ch==' ')
num1=num1+1; /*统计空格个数*/
else if(ch=='\n')
num2=num2+1; /*统计回车个数*/
else
num3=num3+1; /*统计其它字符个数*/
}
printf("空格=%d,回车=%d,其它=%d\n",num1,num2,num3);
}
举一反三
【5-2】输入n个字符统计其中数字字符、*号和字母的个数。

【例5-3】输入x,计算并输出下列分段函数y的值。

x3(0<x<5)
y= lnx (5≤x<10)
|x| (x<0)
源程序:
#include <stdio.h>
#include <math.h>
main()
{
float x,y; /*定义两个单精度的实型变量*/
printf("Enter x:");
scanf("%f",&x); /*给单精度变量赋值,格式控制为:%f*/
if(x>0&&x<5) /*不能表示为:0<x<5*/
y=pow(x,3);
else if(x>=5&&x<10)
y=log(x);
else if(x<0)
y=fabs(x);
printf("\nx=%f,y=%f\n",x,y);
}
举一反三
【5-3】输入x ,计算并输出下列分段函数y 的值。

0 (x<0)
y= 2
9x (0≤x<10) 4.5x-8.5x (x ≥10)
【例5-4】任意输入year,判断是否是闰年,判断闰年的条件:能被4整除但不能被100整除,或者能被400整除。

源程序:
#include <stdio.h>
main()
{
int year;
printf("Enter year:");
scanf("%d",&year);
if(year%4==0&&year%100!=0||year%400==0)
printf("yes");
else
printf("no");
}
举一反三
【5-4】任意输入一个数,判断是否是偶数,是,输出“yes”;否则,输出“no”。

【例5-5】任意输入一个人的成绩,输出相应的成绩等级。

100-90:等级A、89-80:等级B、79-70:等级C、69-60:等级D,其它等级E
源程序:
#include <stdio.h>
main()
{
int x;
printf("Enter x:");
scanf("%d",&x);
switch(x/10) /*成绩除以10取整数*/
{
case 10:
case 9:printf("A");break;/*break语句:提前退出switch语句*/
case 8:printf("B");break;
case 7:printf("C");break;
case 6:printf("D");break;
default:printf("E");
}
}
举一反三
【5-5】输入10个字符,分别统计空格、回车和其它字符出现的次数。

【例5-6】任意输入三角形的三条边判断能否构成三角形
(1)能,再判断能否构成等边三角形,能输出面积;否则,不输出任何信息。

提示:三角形面积公式:
c
b a s ++=1 和))()((
c s b s a s s area ---= (2)不能构成三角形,输出“NO ”。

源程序:
#include <stdio.h>
#include <math.h>
main()
{
int x,y,z;
double s,area;
printf("Enter x,y,z:");
scanf("%d%d%d",&x,&y,&z);
if(x+y>z&&x+z>y&&y+z>x)
{if(x==y&&y==z&&x==z)
{s=1.0/(x+y+z);
area=sqrt(s*(s-x)*(s-y)*(s-z));
printf("面积=%f\n",area);
}
}
else
printf("NO");
}
举一反三
【5-6】任意输入一个数,判断是否是2~100之间的数
(1)是,判断是否是3的倍数,是,输出此数;否则,不输出。

(2)不是,输出“输入错误”。

二、程序改错
不允许增加行也不允许删除行,也不得更改程序的结构。

1、计算下面分段函数的值
x+5 (x<0)
f(x) = x2-x+3 (0≤x<10)
4x-7 (x≥10)
源程序:
main()
{
int x,y;
/********found********/
scanf(“%d”, x);
if(x<0) y=x+5;
/********found********/
else if(x<10) y=x^2-x+3;
/********found********/
else y=4x-7;
printf(“y=%d”,y)
}
2、给变量b和c赋值,然后输出它们的值。

源程序:
main()
{
int a=2,b,c;
if(a>1)
/********found********/
b=1;c=3;
else
b=2;
printf(“%d,%d\n”,b,c);
}
【思考题】
1、大写字母Z的后面紧挨着是小写字母a,对吗?
2、getchar函数和putchar函数都不带参数吗?
3、if后面的表达式可以任意类型吗?
4、if(E),与E等价的形式是什么?
5、switch语句中所有break语句都去掉,运行结果会改变吗?
6、switch后面表达式为实型变量表达式类型,运行时为什么会出错?分析之。

实验六循环结构程序设计(一)【实验目的】
1.熟悉使用while循环语句的结构、执行过程。

2.学会确定循环条件和循环体。

3.理解死循环的概念。

【实验内容】
一、试着编写下列程序
【例6-1】求1+2+3+4+5的和。

源程序:
#include "stdio.h"
main()
{
int i=1,sum=0; /*变量赋初值*/
while(i<=5) /*循环的终止条件,每次进入循环体先判断*/
{
sum+=i;
i++; /*循环变量增量*/
}
printf("i=%d,sum=%d\n",i,sum);
}
运行结果:
i=6,sum=15
举一反三
【6-1】求1-2+3-4+5的和。

【例6-2】输入一个正实数eps ,计算并输出下式的值,直到最后一项的绝对值小于eps 。

(10)
171411+-+-=s (例如程序运行后,eps 被输入0.0001)。

源程序:
#include "stdio.h"
#include "math.h"
main()
{
double eps,sum=0,f=1,t=1;
int n=1;
printf("Enter eps:");
scanf("%lf",&eps); /*输入一个特别小的数*/
while(fabs(t)>=eps)
{
sum=sum+t;
f=-f; /*正负号转变*/
n=n+3; /*控制分母*/
t=f/n;
}
printf("\nsum=%f\n",sum);
}
运行结果:
Enter eps:1e-4
sum=0.835599
举一反三
【6-2】输入一个正实数eps ,计算并输出下式的值,直到最后一项小于eps 。

(4)
35323211-⨯+⨯-⨯=s 【例6-3】从键盘输入一批学生的成绩(以负数为结束标志),计算平均分,并统计不及格成绩的个数。

源程序:
#include <stdio.h>
main()
{
float grade,ave=0; /*变量ave用来存放总成绩和平均分*/
int n=0,m=0;
printf("Enter grade:");
scanf("%f",&grade); /*输入第一个成绩*/
while(grade>=0) /*输入数据大于等于0时,执行循环*/
{
ave=ave+grade;
n++; /*统计学生人数*/
if(grade<60)
m++; /*统计不及格人数*/
scanf("%f",&grade); /*输入一个新数据为下一次循环做准备*/ }
ave=ave/n;
printf("平均分=%f,不及格人数=%d\n",ave,m);
}
举一反三
【6-3】读入一批正整数(以零或负数为结束标志),求其中的奇数和。

二、程序改错
不允许增加行也不允许删除行,也不得更改程序的结构。

1、下述程序按由大到小的顺序输出10以内的正整数。

源程序:
main()
{
int k=10;
while(k>0)
/********found********/
printf(“%d, ”,k);k=k-1;
}
2、修改下列程序,使之能够正确输出1~20之间的数的和(输出一次和值)。

源程序:
main()
{
int i=1,sum=0;
/******found******/
while(i<=20);
{ sum+=i;
i++;
}
printf(“%d\n, ”,sum);
}
三、程序填空
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1、从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。

源程序:
main()
{
float x,amax,amin;
scanf("%f",&x);
amax=x; amin=x;
while( 【1】)
{ if(x>amax) amax=x;
if( 【2】) amin=x;
scanf("%f",&x);
}
printf("\nmax=%f\nmin=%f\n",amax,amin);
}
2、从键盘输入多个字符,直到遇到回车换行符为止,分别统计其中字母、数字字符和其他字符的个数。

源程序:
#include <stdio.h>
main( )
{ char ch; int letter=0,digit=0,other=0;
while( 【1】)
if((ch>='a'&&ch<='z')||(ch>=‘A’&&ch<=‘Z’))
letter++;
else if(ch>='0'&&ch<='9')
digit++;
else
other++;
printf("letter=%d,digit=%d,other=%d",letter,digit,other);
}
3、输入一个实数x,计算并输出下式的值,直到最后一项的小于10-5(保留两位小数)。

源程序:
#include "stdio.h"
main()
{
float x,t,s=0;
int i=1;
scanf("%f",&x);
t=x;
while(t>=1e-5)
{
s=s+t;
i++;
t=t*x/i;
}
printf("s=%.2f",s);
}
【思考题】
1、循环体超过一条语句为什么必须用花括号括起来?
2、while循环的执行过程?
实验七循环结构程序设计(二)【实验目的】
1.熟练掌握do-while循环语句的使用。

2.学会确定循环条件和循环体。

3.掌握while循环语句和do-while循环语句的区别。

【实验内容】
一、试着编写下列程序
【例7-1】求1+3+5+7+。

+n的和。

源程序:
#include "stdio.h"
main()
{
int i=1,n,sum=0;
printf("Enter n:");
scanf("%d",&n);
do
{
sum+=i;
i++;
}while(i<=n); /*先执行一次循环体,在判断循环终止条件*/ printf("sum=%d,i=%d\n",sum,i);
}
运行结果:
sum=15,i=6
举一反三
【7-1】求n 1.......7151311+-+-
的值。

提示:n 为任意的一个正整数。

【例7-2】输入一个整数,求它的位数。

例如,123的位数是3。

源程序:
#include "stdio.h"
main()
{
int i=0,n;
printf("Enter n:");
scanf("%d",&n);
do
{
n=n/10;
i++; /*i 用来统计位数*/
}while(n); /* while(n)等价于while(n!=0)*/
printf("i=%d\n",i);
}
举一反三
【7-2】输入一个整数,求它的位数以及各位数字之和。

例如,345的位数是3,各位数字之和是12。

试着用do-while 循环编写实验六中的程序
二、程序改错
不允许增加行也不允许删除行,也不得更改程序的结构。

1、输入一个正整数n,再输入n个整数,输出最小值。

源程序:
#include "stdio.h"
main()
{
int i=1,n,min,x;
printf("Enter n:");
scanf("%d",&n);
scanf("%d",&x);
min=x;
do
{
/********found********/
if(min<x)min=x;
scanf("%d",&x);
i++;
/********found********/
}while(i>n);
printf("min=%d\n",min);
}
2、从输入的正整数中选5个数进行输出,要求这些数都是5的倍数。

源程序:
main()
{
int a,i=0;
scanf("%d",&a);
do
{/********found********/
if(i!=5&&a%5=0)
{printf("%d\n",a);
i++;}
scanf("%d",&a);
/********found********/
}while(i>0);
}
三、程序填空
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1、根据下述公式求π值
π/2=1+(1/3)+(1/3)*(2/5)+(1/3)*(2/5)*(3/7)+(1/3)*(2/5)*(3/7)*(4/9)+……直到最后一项的值小于任意一个小数为止。

源程序:
#include <math.h>
#include <stdio.h>
main()
{
double s=0.0,t=1.0,eps;
int n=1;
scanf("%lf",&eps);
do
{ s=s+t;
t= 【1】;
n++;
}while(t>=eps);
printf("\n%lf",s*2);
}
2、下面程序的功能是计算正整数2345的各位数字之和。

源程序:
main()
{
int n=2345,sum=0;
do
{ sum=sum+ 【1】;
n=n/10;
} while(n);
printf("sum=%d\n",sum);
}
3、从低位开始取出长整型变量s奇数位上的数,依次构成一个新数放在t中。

例如:当s 中的数为:7654321时,t中的数为:7531。

源程序:
main()
{
long s, a,i=1,t=0;
scanf("%ld",&s);
do
{ a=s%10;
s= 【1】;
t=a*i+t;
i= 【2】;
} while(s)
printf("%ld",t);
}
【思考题】
分析下列两个程序的输出结果,结果为何不同?程序一:
#include "stdio.h"
main()
{
int i=6,sum=0;
while(i<=5)
{
sum+=i;
i++;
}
printf("sum=%d,i=%d\n",sum,i);
}
程序二:
#include "stdio.h"
main()
{
int i=6,sum=0;
do
{
sum+=i;
i++;
} while(i<=5);
printf("sum=%d,i=%d\n",sum,i); }
实验八循环结构程序设计(三)
【实验目的】
1.熟练使用for、while和do-while语句,理解它们的相同和不同之处。

2.熟练掌握break和continue语句的使用。

【实验内容】
一、试着编写下列程序
【例8-1】输出三位数中的所有水仙花数。

水仙花数是指各位数字的立方和等于其自身的数。

例如,153的各位数字的立方和是13+53+33=153
源程序:
#include "stdio.h"
#include "math.h"
main()
{
int i,a,b,c;
for(i=100;i<=999;i++)
{
a=i/100;
b=i/10%10;
c=i%10;
if(pow(a,3)+pow(b,3)+pow(c,3)==i) /*或if(a*a*a+b*b*b+c*c*c==i) 第二行命令行去掉*/ printf("%5d",i);
}
}
举一反三
【8-1】输出三位数中能够被5整除的数。

【例8-2】求Sn=a+aa+aaa+aaaa+…其中a 是一个数字,n 由键盘输入。

例,a 为2,n 为5时Sn=2+22+222+2222+22222。

源程序:
#include "stdio.h"
main()
{
long i,a,n,sum=0,t;
scanf("%ld%ld",&a,&n);
t=a; /*用t 来取每一项*/
for(i=1;i<=n;i++)
{
sum+=t;
t=t*10+a;
}
printf("sum=%ld\n",sum);
}
举一反三
【8-2】求!1.....!31!211n ++++
的和。

提示:n 为任意的一个正整数。

【8-3】输入一个正整数,判断是否为素数。

源程序:
#include <stdio.h>
#include <math.h>
main()
{
int x,k;
scanf("%d",&x);
k=sqrt(x);
for(i=2;i<=k;i++)
if(x%i==0)
break;
if(i>k) printf("%d 是素数",x);
else printf("no");
}
提示:能够被1和它本身整除的数是素数。

例:2、3、5、7、11······等。

1不是素数。

判断一个数n 是否为素数,可以用2~(n-1)或2~2
n 或2~n 范围的数一个一个去除n ,n 一旦被这范围的某一个数除尽,则n 就是非素数。

举一反三
【8-3】求1+2+3+4+5+·······和值大于10为止。

用break 语句编写程序。

二、程序改错
不允许增加行也不允许删除行,也不得更改程序的结构。

1、求fibonacci 数列的前30个数之和,已知此数列的前2项分别为1。

源程序:
main()
{
long f1=1,f2=1,n,s=0;
/********found********/
for(n=1;n<=30;n++);
{ s=s+f1+f2;
f1=f1+f2;
f2=f2+f1;
}
printf("\n%ld",s);
}
2、输入n 个数,求这n 个数中偶数的平均值
源程序:
main()
{
int i,n,m,a=0;
float s=0;
scanf("%d",&n);
/********found********/
for(i=1;i<=n)
{ scanf("%d",&m);
if(m%2==0)
{ a=a+1;s=s+m ; }
i++;
}
printf("%f",s/a);}
3、找出2至99之间的全部同构数。

同构数是这样一组数:它出现在其平方数的右边,例如,5是25右边的数,25是625右边的数,5和25都是同构数。

源程序:
main( )
{ int i;
for(i=2;i<100;i++)
/********found********/
if(i= =(i*i)%10&&i= =(i*i)%100)
printf("%5d",i);
}
三、程序填空
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1、下面程序功能是:输出100~200之间不能被3整除的数。

源程序:
main()
{
int n;
for(n=100;n<=200;n++)
{ if( 【1】)
continue;
printf("%5d",n);
}
}
2、输入一个正整数n,输出2/1+3/2+5/3+······的前20项之和,保留2位小数(该序列从第二项起,每一项的分子是前一项的分子与分母之和,分母是前一项的分子。


源程序:
#include "stdio.h"
main()
{
float m=2,n=1,sum=0,t;
int i=1;
for(;i<=20;i++)
{
sum+=【1】;
t=m;
m=m+n;
n=t;
}
printf("%f",sum);}
【思考题】
1.三种循环的区别?
2、在哪些条件下能退出循环体?
3、分析程序的运行结果
main()
{ int a,sum;
for(a=1;a<=10;a++)
sum+=a;
printf(“%d,%d”,sum,a);
}
4、分析程序中break语句和continue语句的执行方式有何不同?main()
{ int a;
for(a=100;a<=999;a++)
{
if(a%3==0) break; /*将break改为continue*/
printf(“%d ”,a);
}
}
实验九循环结构程序设计(四)【实验目的】
1.进一步掌握用三种循环编写程序的方法。

2.熟练掌握嵌套循环程序设计。

【实验内容】
【实验内容】
一、试着编写下列程序
【例9-1】运行下列程序使之输出图形
*****
*****
*****
*****
源程序:
#include "stdio.h"
main()
{
int i,j,k;
for(i=1;i<=4;i++) /*控制行*/
{ for(j=1;j<=i-1;j++) /*控制空格*/
printf(" ");
for(k=1;k<=5;k++) /*控制*号*/
printf("*");
printf("\n"); /*一行输出完毕输出回车来控制换行*/ }
}
举一反三
【9-1】运行下列程序使之输出图形
*
***
*****
*******
【例9-2】输出100~200之间的所有素数的平方和。

源程序:
#include "stdio.h"
main()
{
int i,j,sum=0;
for(i=100;i<=200;i++)
{ for(j=2;j<i;j++)
if(i%j==0)break;
if(j==i)sum+=i*i;
}
printf("%d",sum);
}
举一反三
【9-2】输出100~200之间的所有非素数的开方和。

一、程序改错
不允许增加行也不允许删除行,也不得更改程序的结构。

1、按顺序读入8名学生5门课程的成绩,计算出每位学生的平均分并输出。

源程序:
main( )
{
int n,k;
float score,ave;
/********found********/
for(n=1;n<=8;n++;)
{ ave=0.0;
for(k=1;k<=5;k++)
/********found********/
scanf("%f",&score);
ave+=score;
printf("NO%d:%f\n",n,ave);
}
}
2、运行下列程序使之输出图形
*****
*****
*****
*****
源程序:
main()
{
int i,j;
for(i=1;i<=4;i++)
{ /********found********/
for(j=1;j<=10+i;j++)
printf(“”);
/********found********/
for(j=1;j<=2*i+1;j++)
printf(“*”);
printf(“\n”);
}
}
三、程序填空
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1、找出1000以内的所有”完数”。

所谓完数,就是它所有因子之和等于它本身。

如6=1+2+3,则6是完数。

源程序:
#include <stdio.h>
void main()
{
int n,i,s;
for(n=2;n<=1000;n++)
{ 【1】;
for(i=1;i<=n-1;i++)
if(n%i==0) s+=i;
if(s==n) printf("%-6d",n);
}
}
2、在下列程序中,找出一个大于给定整数m且紧随m的素数源程序:
main()
{
int m,i,k;
scanf("%d",&m);
for(i= 【1】; ;i++)
{ for(k=2;k<= 【2】;k++)
if(i%k==0) break;
if(k>=i) {printf("%d",i);break;}
}
}
【思考题】
三种循环可以任意嵌套吗?
实验十函数程序设计(一)【实验目的】
1.熟悉掌握函数的定义和调用。

2.掌握函数的实参、形参和返回值的概念及使用。

【实验内容】
一、试着编写下列程序
【例10-1】输出如下图形
**********
hello
**********
源程序:
#include "stdio.h"
main()
{
star();
fun();
star();
}
int star() /*定义函数*/
{
printf("**********\n");
}
int fun() /*定义函数*/
{
printf(" hello\n");
}
举一反三
【10-1】输出如下图形
**********
**********
hello
**********
**********
【例10-2】在函数fun中求1+2+3+4+5的和值,在main()函数中输出和值。

源程序:
#include "stdio.h"
main()
{
int i=5,sum;
sum=fun(i);
printf("sum=%d\n",sum);
}
int fun(int n) /*定义函数*/
{
int i=1,sum=0;
for(;i<=n;i++)
sum+=i;
return sum; /*通过return语句向main()返回值*/
}
举一反三
【10-2】从键盘输入一个正整数n,计算n!的值。

要求定义和调用函数fac(n),计算n!。

源程序:
#include “stdio.h”
int fac(int m)
{/***************begin****************/
/***************end******************/
}
int main()
{
int n;
double f;
printf(“input n:”);
scanf(“%d”,&n);
f=fac(n);
printf(“%d!=%f\n”,n,f);
}
【例10-3】输入x,输出相应的y值。

要求定义和调用函数fun,实现下面的分段函数。

0 (x=0)
y= sin(x) (x>0)
|x| (x<0)
源程序:
#include "stdio.h"
#include "math.h"
float fun(float x) /*在自定义函数体中可以有若干个return语句,但只有一个起作用*/ {
if(x==0)
return 0;
else if(x<0)
return fabs(x);
else
return sin(x);
}
main()
{
float x,y;
printf("Enter x:");
scanf("%f",&x);
printf("\n");
y=fun(x);
printf("y=%f\n",y);
}。

相关文档
最新文档