C语言程序设计实验指导书(师院信计教学用)_第1页
C语言程序设计实验指导书(师院信计教学用)_第2页
C语言程序设计实验指导书(师院信计教学用)_第3页
C语言程序设计实验指导书(师院信计教学用)_第4页
C语言程序设计实验指导书(师院信计教学用)_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C程序设计实验指导书(第一版)(1426学时)数信学院2012年3月1日目 录前 言1实验一C程序的运行环境和简单C源程序的调试2一、实验学时2二、实验目的2三、预习要求2四、实验内容2五、实验注意事项7六、思考题7实验二数据类型、运算符和表达式9一、实验目的9二、实验要点9三、实验要求9四、实验内容9五、思考与总结10实验三 选择结构程序设计11一、实验学时11二、实验目的11三、预习要求11四、实验内容11五、实验注意事项13六、思考题14实验四 循环结构程序设计(一)16一、实验学时16二、实验目的16三、预习要求16四、实验内容16五、实验注意事项20六、思考题20实验五 循环结构程序

2、设计(二)22一、实验学时22二、实验目的22三、预习内容22四、实验内容22五、实验注意事项24六、思考题24实验六 一维数组程序设计26一、实验学时26二、实验目的26三、预习要求26四、实验内容26五、实验注意事项28六、思考题28实验七 二维数组程序设计30一、实验学时30二、实验目的30三、预习要求30四、实验内容30五、实验注意事项34六、思考题35实验八字符数组程序设计37一、实验学时37二、实验目的37三、预习要求37四、实验内容37五、实验注意事项39六、思考题39实验九 函数41一、实验学时41二、实验目的41三、预习要求41四、实验内容41五、实验注意事项46六、思考题4

3、6实验十 指针(一)49一、实验学时49二、实验目的49三、预习要求49四、实验内容49五、实验注意事项51六、思考题51实验十一 指针(二)52一、实验学时52二、实验目的52三、预习要求52四、实验内容52五、实验注意事项53六、思考题53实验十二 结构体、共用体和位运算55一、实验学时55二、实验目的55三、预习要求55四、实验内容56五、实验注意事项59六、思考题59实验十三 文件60一、实验学时60二、实验目的60三、预习要求60四、实验内容60五、实验注意事项62六、思考题62附录:常见错误提示信息的英汉对照63前 言C 语言是现代最流行的通用程序设计语言之一,它既具有高级程序设计

4、语言的优点,又具有低级程序设计语言的特点,既可以用来编写系统程序,又可以用来编写应用程序。因此,C 语言正在被迅速地推广和普及。上机实验是该课程教学的一个重要环节,因此要求学生做一定数量的上机实验。本指导书可增强同学上机实验的针对性。整个教学和实验中,采用VC+6.0 作为实验环境,强调学生切实培养动手实践能力,掌握调试程序的方法,通过调试理解 C语言程序运行的过程以及C 语言的语法规则,为后续的课程设计,计算机等级考试及其他应用做好充分的准备。 本实验指导书通过大量的实例,循序渐进地引导学生做好各章的实验。根据实验教学大纲,共选择编写了13个实验,其中必做11个,选做 2个 。每个实验内容结

5、构如下: (1)实验学时(2)实验目的(2)预习要求(4)实验内容 (5)实验注意事项(6)思考题其中思考题属于扩展应用部分,学生可以根据自己的学习情况选择完成。在实验之前,要求学生对实验作好预习工作。在实验中,学生根据实验指导中的内容进行验证与总结,然后再去完成实验内容中安排的任务。一般要求准备好相关代码,实验课中最好以调试和讨论为主。实验结束后,应及时提交实验报告,报告具体内容可根据实验内容和实验要求进行增删。实验报告一般要求包含: (1)实验题目 (2)设计思路或算法分析 (3)流程图 (4)程序源代码(5)程序运行结果及分析 (6)存在的问题。实验一C程序的运行环境和简单C源程序的调试

6、一、实验学时2学时二、实验目的(一)掌握在Visaul C+ 环境如何编辑、编译和运行C源程序;(二)掌握C语言的各种数据类型以及整型、字符型、实型变量的定义;(三)掌握C语言中有关算术运算符及表达式的使用。三、预习要求熟悉C程序的书写规则、上机调试步骤;熟悉C语言的数据类型;熟悉C语言表达式的构成、运算规则等内容。(一)Visual C+6.0 集成开发环境简介由于这些年C+语言程序的普及,Visual C+6.0集成开发环境作为一种功能强大的程序编译器也被相当多的程序员所使用,使用Visual C+也能够完成C语言的编译。由于Visual C+集成开发环境运行于Windows下,对于习惯于

7、图形界面的用户来说是比较易学的,因此,简要介绍一下如何用Visual C+来完成C语言程序的设计。Visual C+也有多种版本,本书中使用比较普及的Visual C+ 6.0集成开发环境。(二)Visual C+6.0 集成开发环境安装Visual C+中文版集成开发环境的安装比较简单,在输入SETUP执行后,可以按照提示信息完成程序安装,在这里不再详述。四、实验内容(一) 创建一个新的文件夹为了方便管理自己的C语言程序,在启动Visual C+ 6.0集成开发环境前,首先在E盘创建一个新的文件夹,以便存放自己的C语言程序。(二) 启动Visual C+ 6.0集成开发环境如图1-1所示,单

8、击“开始”“程序”Microsoft Visual Studio 6.0Microsoft Visual C+ 6.0,就可以启动Visual C+ 6.0集成开发环境。 启动后的Visual C+ 6.0集成开发环境如图1-2所示。(三)开始一个新程序1创建文件单击主菜单中的“文件”“新建”菜单命令,弹出“新建”对话框,在“新建”对话框中选择“文件”选项卡。在左边列出的选项中,选择“C+ Source File”;在右边的相应对话框中,输入文件名称“c1-1.c”及保存的位置,如图1-3所示。单击“确定”按钮。 图1-1 启动Visual C+ 6.0的方法图1-2 Visual C+ 6.

9、0 中文版集成开发环境E盘新建的文件夹图1-3 创建新的C源文件进入Visual C+ 6.0集成环境的代码编辑窗口,如图1-4所示。图1-4 Visual C+ 6.0集成环境的代码编辑窗口2代码编辑在Visual C+ 6.0代码编辑窗口中,输入如下所示的源代码,完成后如图1-4中所示。程序代码:/* c1-1.c C语言的第一个程序 */#include "stdio.h"void main( ) printf(" *n"); printf(" *n"); printf("*n"); 3程序的编译、连接与运行

10、将C语言源代码编译成计算机能执行的目标代码。单击主菜单下的“组建”“编译 c1-1.c”(或者是工具栏上的按钮或按快捷键Ctrl+F7),此时将弹出一个对话框,询问是否创建一个项目工作区,选择“是(Y)”。Visual C+ 6.0集成开发环境会自动在c1-1.c文件所在文件夹中建立相应的项目文件。编译时,在下方的输出框中将显示出相应的编译说明,如图1-5所示。如果代码编译无误,最后将显示:c1-1.obj - 0 error(s), 0 warning(s)这说明编译没有错误(error)和警告(warning),生成目标文件c1-1.obj,程序编译顺利完成。目标文件(.obj)不能被计算

11、机直接执行,接下来将目标文件(.obj)和相关的库函数或目标程序连接成为可执行程序(.exe)。工具栏编译按钮编译信息窗口图1-5 Visual C+ 6.0 集成环境下编译源程序单击主菜单下的“组建”“批组建”命令,将弹出如图1-6所示的对话框。图1-6 Visual C+ 6.0 集成环境下批组建对话框确保选中“c1-1-Win32 Release”复选框,这样生成的可执行文件才是发行版的程序,否则生成的是调试(Debug)版的程序。 单击“创建”按钮,生成可执行文件c1-1.exe。如果在“批组建”对话框中选中了两个复选框,可以看到程序中生成了两个c1-1.exe可执行文件,一个文件为调

12、试版本,存储在与c1-1.c同一文件夹下的Debug文件夹中;另一个是发行版本,保存在与c1-1.c同一文件夹下的Release文件夹中。这一步只是为了生成发行版的程序文件,只有在程序准备发行时才需要执行这种编译。在通常情况下,可以单击主菜单下的“组建”“组建 c1-1.exe”(或工具栏按钮或按快捷键F7),直接生成调试版本程序就可以了。编译、连接完成后, c1-1.exe已经是一个独立的可执行程序,可以在Windows 资源管理器中直接执行,也可以在Visual C+ 6.0集成开发环境中运行。单击主菜单下的“组建”执行c1-1.exe(或工具栏按钮或按快捷键Ctrl+F5),此时弹出一个

13、控制台程序窗口,程序正确运行,如图1-7所示。按任意键后返回Visual C+ 6.0集成开发环境。 图1-7 Visual C+ 6.0 集成环境下程序运行结果4关闭工作空间当第13步工作完成后,应该将工作保存下来,并关闭工作空间,以便做下一个新的程序。单击主菜单下的“文件”“保存全部”,然后再单击“文件”“关闭工作空间”菜单命令,询问确认要关闭所有文档窗口,选择“是(Y)”。(四)按照(三)的操作,输入下面的程序,运行并查看输出结果。/* c1-2.c C语言的第二个程序 */#include "stdio.h"void main( ) int c,a=3,b=5; c

14、=a+b; printf("a=%d,b=%d,c=%dn",a,b,c); (五)打开已有的文件在打开已有的文件时一定要先确认关闭了工作空间,然后单击主菜单下的“文件”“打开”命令,选择(三)创建的c1-1.c文件,然后打开。(六)重新开始一个新的程序关闭所有工作空间,点击Visual C+ 6.0窗口的关闭按钮即可退出Visual C+ 6.0集成环境,按照(二)、(三)再次进入Visual C+ 6.0集成环境,输入以下程序:/* c1-3.c C语言的第三个程序 */#include "stdio.h"void main( ) int a=38;

15、printf("%d,%5d,%-5dn",a,a,a);printf("%d,%o,%x,%un",a,a,a,a); 注意观察两个printf函数语句输出结果有何不同? (七)在Visual C+ 6.0集成环境,输入以下程序:/* c1-4.c C语言的第四个程序 */#include "stdio.h"void main( ) long int a=32767;printf("a=%ldt",a);printf("a=%ut",a);printf("a=%dn",a)

16、; 将程序中的a改为a=65535,并再次运行程序,观察结果。(八)在Visual C+ 6.0集成环境,输入以下程序:/* c1-5.c C语言的第五个程序 */#include "stdio.h"void main( ) char c1=97,c2=98; int a=97,b=98;printf("%3c,%3cn",c1,c2);printf("%d,%dn",c1,c2);printf("n%c %cn",a,b); 观察程序运行结果,掌握int与char类型数据的互通性。(九)在Visual C+ 6.

17、0集成环境,输入以下程序:/* c1-6.c C语言的第六个程序 */#include "stdio.h"void main( ) int a,b;a=2; b=1%a; printf("%dn",1/a); printf("b=%dn",b);printf("%f %fn",(float)(1/a),(float)b); 观察程序运行结果,从中掌握类型转换运算符的使用。(十)在Visual C+ 6.0集成环境,输入以下程序:/* c1-7.c C语言的第七个程序 */#include "stdio.h

18、"void main( ) int i,j; i=3; j=4; printf("%d,%dn",i+,+j); printf("%d,%dn",i,j); printf("%d,%dn",-i+,-+j); 观察程序运行结果,从中掌握自加自减运算符的使用。(十一)在Visual C+ 6.0集成环境,输入以下程序/* c1-8.c C语言的第八个程序 */#include "stdio.h"void main( ) int a,b;a=5; a-=a*a; printf("a=%dn"

19、;,a); b=(a=3*5,a*4,a+5); printf("a=%d, b=%dn",a,b); 观察程序运行结果,从中掌握复合赋值运算符、逗号运算符的使用。(十二)下面程序,计算输出当x=2.5,a=7,y=4.7时,表达式x + a % 3 * (int) (x + y) % 2 / 4的运算结果z的值。/* c1-9.c C语言的第九个程序 */#include "stdio.h"void main( ) _ a=7; float x=2.5,y=4.7, z  z= x + a % 3 * (int) (x + y) % 2 /

20、4; printf("z=%fn",z);程序不完整,请删除横线后填空并运行程序。 五、实验注意事项(一)在Visual C+ 6.0集成环境中,如何对C程序进行创建、运行、查看结果和退出。Visual C+ 6.0集成环境等操作可以通过菜单、按钮、热键实现。另外,在源程序文件编辑过程中,还可以进行复制、移动、删除等常用文件编辑操作。注意C程序的编辑与显示结果界面是两个不同的界面。(二)由于C程序运行必须从main函数开始,因此一个C程序要有一个main函数,且只能有一个main函数。当一个程序运行结束之后,一定要先“文件”“关闭工作空间”,然后再开始创建一个新的C程序。(

21、三)在程序的输入过程中:1要注意区分大小写;2要注意程序中需要空格的地方一定要留空格(如int a=3,b=5;中的int和a之间必须留空格);3注意“”与“/”的区别。4所定义的变量的类型与输入的数据的类型要一致,输出时的格式一定要满足数据的大小。5注意实验内容(十二)中当运算对象均为整数时“/”运算符的使用,“%”运算符两边一定是整型数据。6注意自加和自减运算符的运算规则,仔细分析实验内容(十)中程序的输出结果。六、思考题(一)有如下程序:#include "stdio.h"void main( ) int a=-1; printf("%d,%o,%x,%un

22、",a,a,a,a); printf语句的运行结果是_。(二)有如下程序:#include "stdio.h"void main( ) char c1=97,c2=98; int a=97,b=98; printf("%3c,%3cn",c1,c2); printf("%d,%dn",c1,c2); printf("%c %cn",a,b); 最后一个printf语句的运行结果是_。(三)有如下程序:#include "stdio.h"void main( ) int i,j; i=3

23、; j=4; printf("%d %dn",i+,+j); printf("%d,%dn",i,j); printf("%d,%dn",-i+,-+j);最后一个printf语句的运行结果是_。(四)程序填空:#include "stdio.h"void main( ) _ a=7; float x=2.5,y=4.7,z; z= x + a % 3 * (int) (x + y) % 2 / 4; printf("z=%f n",z); 程序中空格处应填_。48实验二数据类型、运算符和表达式

24、一、实验目的(1)了解C 语言数据类型的意义,掌握基本数据类型变量的特点和定义方法。(2)学会使用C 的算术运算符,以及包含这些运算符的算术表达式。(3)掌握自加(+)和自减(-)运算符的使用。(4)进一步熟悉C 程序的编辑、编译、连接和运行的过程。二、实验要点基本数据类型包括整型、字符型、实型。三、实验要求(1)上机前先阅读和编写以下要调试的程序。(2)上机输入和调试程序并存在磁盘上。(3)检查实验结果是否正确。四、实验内容(以下内容在实验报告中的实验预习报告内容中完成)1. 调试程序,分析输出结果(1)输入并运行以下程序。main() float a,b;a=123456.789e5;b=

25、a+20;printf("a=%f,b=%fn",a,b);将第二行改为:double a,b;重新运行该程序,分析运行结果。说明:由于实型变量的值是用有限的存储单元存储的,因此其有效数字的位数是有限的。float型变量最多只能保证7 位有效数字,后面的数字是无意义的,不能准确表示该数。(2)输入并运行以下程序。main() char c1,c2;c1=97;c2=98;printf("%c %cn",c1,c2);printf("%d %dn",c1,c2); 将第二行改为:int c1,c2;再运行。 再将第三行改为:c1=300

26、;c2=400;再运行,分析运行结果。说明:字符型数据可作为整型数据处理,整型数据也可以作为字符型数据处理,但应注意字符数据只占一个字节,它只能存放0-255 范围的整数。2完成以下填空,并把程序调通,写出运行结果。下面的程序计算由键盘输入的任意两个整数的平均值:main() int x,y ; ;scanf(“%d,%d”,&x,&y); ;printf("The average is :%f ",a);3. 指出以下程序的错误并改正,上机把程序调通main(); int a;a=5;printf(“a=%d, a)4. 编写程序并上机运行要将“China

27、”译成密码,译码规律是:用原来字母后面的第3 个字母代替原来的字母。例如,字母“A”后面第4 个字母是“E”,用“E”代替“A”。因此,“China”应译为“Fklqd”。请编一程序,用赋初值的方法使c1、c2、c3、c4、c5 五个变量的值分别为C、h、i、n、a,经过运算,使c1、c2、c3、c4、c5 分别变为F、k、l、q、d、,并输出。输入程序,并运行该程序。分析是否符合要求。五、思考与总结(1)总结各种整型变量的取值范围。(2)总结各种实型变量的有效数字位数和取值范围。(3)总结算术运算符和自加、自减运算符的优先级与结合性。实验三 选择结构程序设计一、实验学时2学时二、实验目的(一

28、)掌握C语言关系表达式和逻辑表达式的运算和使用;(二)正确使用条件控制语句(if语句、switch语句)进行选择结构程序设计。三、预习要求(一)关系运算符和关系表达式、逻辑运算符和逻辑表达式;(二)if语句的三种形式(单分支、双分支、多分支),以及if语句的嵌套;(三)switch语句的形式。四、实验内容(一)分析下面程序,掌握关系及逻辑表达式的运算规则。/* c3-1.c 关系及逻辑表达式运算规则 */#include "stdio.h"void main( ) int a=3,b=5,c=8; if(a+<3 && c-!=0) b=b+1; pr

29、intf("a=%dtb=%dtc=%dn",a,b,c);注意该程序中的条件判断表达式a+<3 && c-!=0是一个逻辑表达式,关系表达式a+<3的值为假,因此后一部分c-!=0就不再计算。试比较下列各部分运行结果。#include "stdio.h"void main( ) int a=3,b=5,c=8; if(a+<3 && c-!=0) b=b+1; printf("a=%dtb=%dtc=%dn",a,b,c); int a=3,b=5,c=8; if(c-!=0 &am

30、p;& a+<3) b=b+1; printf("a=%dtb=%dtc=%dn",a,b,c); int a=3,b=5,c=8; if(a+<3 | c-!=0) b=b+1; printf("a=%dtb=%dtc=%dn",a,b,c); int a=3,b=5,c=8; if(c-!=0 | a+<3) b=b+1; printf("a=%dtb=%dtc=%dn",a,b,c); (二)输入下面两段程序并运行,掌握case语句中break语句的作用。1/* c3-2.c */ /* c3-3.c

31、*/ /* 不含break的switch */ /* 含break的switch */#include "stdio.h" #include "stdio.h"void main( ) void main( ) int a,m=0,n=0,k=0; int a,m=0,n=0,k=0; scanf("%d",&a); scanf("%d",&a); switch(a) switch(a) case 1: m+; case 1: m+; break; case 2: case 2: case 3: n

32、+; case 3: n+; break; case 4: case 4: case 5: k+; case 5: k+; printf("%d,%d,%dn",m,n,k); printf("%d,%d,%dn",m,n,k); 分别从键盘上输入1、3、5,写出程序运行的结果。(三)完善程序,从键盘上输入x的值,按下式计算y的值。编程提示:注意逻辑表达式的正确表达方法,数学中的1x<10应使用C语言的逻辑表达式(x>=1 && x<10)来表示。下面是用多分支选择结构实现本题的程序结构: /* c3-4.c if 语句

33、实现的多分支结构 */ #include "stdio.h" void main( ) 定义变量; 输入x; if ( _ ) /按y=x为变量y赋值; else if( _ ) /按y=2x-1为变量y赋值; else _ /按y=3x-11为变量y赋值; printf("y=%fn",y); 注意:在赋值语句中2x应该写成2*x。(四)编写程序,给出一个百分制成绩,要求输出相应的等级A、B、C、D、E。90分以上为'A',8089分为'B',7079分为'C',6069分为'D',60分

34、以下为'E'。编程提示:1先定义一个整型变量存放百分制成绩、定义一个字符型变量存放相应的等级成绩;2输入百分制成绩;3将百分制成绩按10分,分档作为switch语句中括号内的表达式;4按case 10: case 9: case 8: case 7: case 6: default:这六种匹配情况分别选择不同的入口;5输出转换后的等级成绩。(五)下面程序运行时从键盘上分别输入(20,15),(15,20),写出运行结果。 /* c3-5.c 分支结构中的复合语句*/ #include "stdio.h" void main( ) int a,b,t; t =

35、 0; scanf("%d,%d",&a,&b); if (a>b) t = a ; a = b ; b = t ; printf("a=%d,b=%dn",a,b) ; (六)编写程序,给出一个不多于3位的正整数n,要求:(1)求出它是几位数;(2)分别打印出每一位数字(数字之间加一个空格);(3)按逆序打印出各位数字(数字之间加一个空格)。编程提示:1定义变量(考虑需要几个变量)并输入一个3位以下的正整数n2将n拆分成三个一位数:表达式:n%10 可将一个三位数n拆分出三位数中的个位数; 表达式:n/100 可将一个三位数n拆分

36、出三位数中的百位数; 表达式:(n%100)/10 或(n-(n/100)*100)/10 可将一个三位数n拆分出三位数中的十位数。3用一个嵌套的选择结构,按照百位数、十位数是否为0决定n为几位数。4按相反的顺序输出n。思考:如果是对一个5位的正整数进行上述处理,程序应如何改动?(七)写出与表达式z =( x>=y ? x : y )等价的if语句,并上机验证。五、实验注意事项(一)C程序中表示比较运算的等号用“=”表示,赋值运算符用“=”表示,不能将赋值号“=”用于比较运算。(二)控制表达式是指任何合法的C语言表达式(不只限于关系或逻辑表达式),只要表达式的值为“非零”,则为“真”,“

37、零”则为“假”(三)在if语句的嵌套结构中,else与if的配对原则是:每个else总是与同一个程序中、在前面出现的、而且距它最近的一个尚未配对的if构成配对关系。(四)case及后面的常量表达式,实际仅是起标号作用。控制表达式的值与某个情况常量一旦匹配,那么,在执行下面语句的过程中,只要不遇到break语句,就一直执行下去,而不再判别是否匹配。允许出现多个“case”与一组语句相对应的情况。六、思考题(一)下面程序的功能是实现表达式z=( x>=y ? x : y),请将程序填写完整。 /* 分支结构的程序 */ #include "stdio.h" void ma

38、in( ) int x, y, z; printf("Please input x,y:"); scanf("%d%d",&x,&y); if (_) z=x; else z=y; printf("z=%d ",z); (二)下面程序的运行结果为_。/* 分支结构的程序 */#include "stdio.h"void main( ) int a=1,b=5,c=8; if(a+<3 && c-!=0) b=b+1; printf("a=%d,b=%d,c=%d n&

39、quot;,a,b,c);(三)程序填空,从键盘上输入x的值,按下式计算y的值。/* 多分支结构的程序 */#include "stdio.h"void main( ) float x,y; printf("x="); scanf("%f",&x); if ( _ ) y=x; else if( x>=1 && x<10 ) y=2*x-1; else y=3*x-11; printf("y=%fn",y); (四)下面程序运行时从键盘上输入15,20,运行结果为_。/* 分支结

40、构的程序 */#include "stdio.h"void main( ) int a,b,t; t = 0;scanf("%d,%d",&a,&b);if (a>b) t = a ;a = b ;b = t ;printf("b=%dn",b) ;实验四 循环结构程序设计(一)一、实验学时 2学时二、实验目的(一)掌握用while,do-while,for语句实现循环的方法;(二)掌握在设计条件型循环结构的程序时,如何正确地设定循环条件,以及如何控制循环的次数。(三)掌握与循环有关的算法。三、预习要求预习教材有

41、关while,do-while,for语句的语法格式,并能通过这三种语句编写、调试单层循环结构的程序。四、实验内容(一)分析并运行下面程序段,循环体的执行次数是_。 int a=10,b=0; do b+=2;a-=2+b; while(a>=0);(二)当执行以下程序段时,循环体执行的次数是_。 x = -1; do x=x*x; while( !x); (三)编程求 1!+2!+3!+20! 的值。注意:根据题目,考虑所定义的各个变量应该为何种类型。程序结构如下:/* c4-1.c 求1!+2!+3!+20! */ #include "stdio.h" void

42、main( ) 定义变量i作为循环控制变量; 定义变量p和sum分别存放各个整数的阶乘和阶乘之和; 变量p和sum赋初值; for( i=1; i<=20; i+ ) 变量p连乘 ; 变量sum累加; 输出sum的值 ; (四)编写一个程序,求出两个数m和n的最大公约数和最小公倍数。编程提示:求最大公约数的方法有三种:1从两个数中较小数的开始向下判断,如果找到一个整数能同时被m和n整除,则终止循环。设n为m和n中较小的数,则如下程序段可实现:for(k=n; k>=1; k-) if(m%k=0 && n%k =0) break;k即为最大公约数。/* c4-2.c

43、 求最大公约数算法1 */ #include "stdio.h" void main( ) 2从整数1开始向上找,直至m和n中较小的数,每找到一个能同时被m和n整除的整数,将其存入一个变量中,当循环结束时,变量中存放的即为最大公约数。设n为m和n中较小的数,则如下程序段可实现:for(k=1; k<=n; k+) if(m%k=0 && n%k=0) x=k;变量x的值即为最大公约数。/* c4-3.c 求最大公约数算法2 */ #include "stdio.h" void main( ) 3用辗转相除法,即将求m和n的最大公约数

44、问题转化为求其中的除数和两个数相除所得余数的公约数。每次循环中,先求两个数的余数,然后以除数作为被除数,以余数作为除数,当余数为0时结束循环,此时除数即为最大公约数。设m和n中n为较小的数,则可用如下程序段实现:b=m%n;while(b!=0) m=n; n=b; b=m%n; printf("%dn",n);/* c4-4.c 求最大公约数算法3 */ #include "stdio.h" void main( ) 类似地,求最小公倍数的方法也可以从m和n中较大的数开始向上找,或者从m*n向下找,请自己考虑程序的设计方法。另外,两个数的最大公约数和最

45、小公倍数的关系为:最小公倍数=m*n/最大公约数可利用此关系进行程序设计。(五)编程实现,从键盘上输入一行字符,统计其中英文字母、数字、空格和其它字符的个数。编程提示:先定义一个字符型的变量(如c),再定义4个整型变量作为计数器,作为计数器的变量要先赋初值0。在循环中每次从键盘上读入一个字符,在循环体中对读入的字符进行判断,相应的计数器加1,当读入的字符为n时结束。编程中可使用如下的循环结构: while(c=getchar()!=n) if() ; else if() ; ; else ; /* c4-5.c 统计字符串中指定字符的个数 */ #include "stdio.h&q

46、uot; void main( ) 注意:1while( (c=getchar( )!=n) )中括号的使用,第二层的小括号不能省略,想一想为什么?2字符常量0与数值常量0是不同的。(六)下面程序的功能是:计算1到100之间的奇数之和及偶数之和,并输出。请在程序中的横线上填入适当的内容,将程序补充完整并运行。/* c4-6.c 计算1到100之间的奇数之和及偶数之和 */ #include "stdio.h" void main( ) int a,b,c,i; _; /*变量初始化*/ for(i=0; i<=100; i+=2) a+=i; /*变量a存放偶数的和*

47、/ _; c+=b; /*变量c存放奇数的和*/ printf("sum of evens is %dn",a); printf("sum of odds is %dn",_); (七)编程打印出所有的“水仙花数”,所谓水仙花数是指一个3位数,其各位数字的立方和等于该数本身。如153=13+33+53。编程提示:定义一个变量作为循环变量,再定义3个变量分别存放三位数的每位数字,在循环体中将一个三位数拆分成个位、十位、百位后判断循环变量的值是否为水仙花数,如果是则输出,否则不输出。程序的基本结构为:/* c4-7.c 打印出所有的“水仙花数” */ #in

48、clude "stdio.h" void main( ) 定义4个整型变量; for( j=100; j<=999; j+ ) a=j/100; /*分离出百位数*/ b=j/10-a*10; /*分离出十位数*/ c=_; /*分离出个位数*/ if(j=a*a*a+b*b*b+c*c*c) 输出j ; printf("n"); (八)以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。请将程序补充完整。/* c4-8.c 求最大值最小值程序 */ #include "stdio.h&qu

49、ot; void main( ) float x,amax,amin; scanf("%f",&x); amax=x; amin=x; while ( _ ) if (x>amax) amax=x; if ( _ ) amin=x; scanf("%f",&x); printf("namax=%fnamin=%fn",amax,amin); (九)求两个正整数m,n之间所有既不能被3整除也不能被7整除的整数之和。编程提示:定义两个变量m,n和t,再定义一个循环变量和结果变量s,从键盘输入m和n的值,判断两个变量的

50、值,如果m>n,则交换两个变量。然后用循环依次判断m和n之间的每一个数,在循环体中通过条件语句来判断这个数是否既不能被3整除也不能被整除,如果满足条件,累加求和,如果不满足,则继续循环。程序的基本结构如下:/* c4-9.c 按条件求数列和 */ #include "stdio.h" void main( ) 定义变量; 变量赋初值; 输入m,n的值; if( m>n ) m和n交换; for ( _ ) if ( i%3 != 0 && i%7 != 0 ) 变量 s 累加求和 ; printf("Sum is : %ld n&quo

51、t;,s ); (十)下面程序的功能是:计算正整数num的各位上的数字之和。例如,若输入:252,则输出应该是:9;若输入:202,则输出应该是:4。请将程序补充完整。/* c4-10.c 求整数各位数字和 */ #include "stdio.h" void main( ) int num,k; _; /* k赋初值 */ printf("Please enter a number:") ; scanf("%d",&num) ; do k=_ ; /* 取最低位并累加 */ num/=10; /* 去掉最低位 */ whil

52、e(num) ; printf("n%dn",k) ; 五、实验注意事项(一)while,do-while,for语句中应有使循环趋向于结束的语句,否则就可能构成死循环。(二)while,do-while语句什么情况下的运行结果是相同的,什么情况下不同。(三)注意在循环结构程序设计中,正确使用 构成复合语句。六、思考题(一)求两个正整数x和y的最大公约数,请填空。/* 求最大公约数程序 */ #include "stdio.h" void main( ) int x,y,t,i,k; scanf("%d,%d",&x,&y); if (x > y) t = x; x = y; y = t; for(i>=1;i<=x;i+ ) if( x%i=0 &

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论