1、 《程序设计基本》实验指引书 (第一版) (14~26学时) 信息学院 《程序设计基本》教研组 3月1日 目 录 前 言 1 实验一 C程序运营环境和简朴C源程序调试 2 一、实验学时 2 二、实验目 2 三、预习规定 2 四、实验内容 2 五、实验注意事项 7 六、思考题 7 实验二 数据类型、运算符和表达式 9 一、实验目 9 二、实验要点 9 三、实验规定 9 四、实验内容 9 五、思考与总结 10 实验三 选取构造程序设计 11 一
2、实验学时 11 二、实验目 11 三、预习规定 11 四、实验内容 11 五、实验注意事项 13 六、思考题 14 实验四 循环构造程序设计(一) 16 一、实验学时 16 二、实验目 16 三、预习规定 16 四、实验内容 16 五、实验注意事项 20 六、思考题 20 实验五 循环构造程序设计(二) 22 一、实验学时 22 二、实验目 22 三、预习内容 22 四、实验内容 22 五、实验注意事项 24 六、思考题 24 实验六 一维数组程序设计 26 一、实验学时 26 二、实验目 26 三、预习规定 26 四、实验内容 26
3、五、实验注意事项 28 六、思考题 28 实验七 二维数组程序设计 30 一、实验学时 30 二、实验目 30 三、预习规定 30 四、实验内容 30 五、实验注意事项 34 六、思考题 35 实验八 字符数组程序设计 37 一、实验学时 37 二、实验目 37 三、预习规定 37 四、实验内容 37 五、实验注意事项 39 六、思考题 39 实验九 函数 41 一、实验学时 41 二、实验目 41 三、预习规定 41 四、实验内容 41 五、实验注意事项 46 六、思考题 46 实验十 指针(一) 49 一、实验学时 49 二、实验目
4、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 附录
5、常用错误提示信息英汉对照 63 前 言 C 语言是当代最流行通用程序设计语言之一,它既具备高档程序设计语言长处,又具备低档程序设计语言特点,既可以用来编写系统程序,又可以用来编写应用程序。因而,C 语言正在被迅速地推广和普及。上机实验是该课程教学一种重要环节,因而规定学生做一定数量上机实验。本指引书可增强同窗上机实验针对性。整个教学和实验中,采用VC++6.0 作为实验环境,强调学生切实培养动手实践能力,掌握调试程序办法,通过调试理解 C语言程序运营过程以及C 语言语法规则,为后续课程设计,计算机级别考试及其她应用做好充分准备。 本实验指引书通过大量实例,循序渐进地引导学生做好
6、各章实验。依照实验教学大纲,共选取编写了13个实验,其中必做11个,选做 2个 。每个实验内容构造如下: (1)实验学时 (2)实验目 (2)预习规定 (4)实验内容 (5)实验注意事项 (6)思考题 其中思考题属于扩展应用某些,学生可以依照自己学习状况选取完毕。 在实验之前,规定学生对实验作好预习工作。在实验中,学生依照实验指引中内容进行验证与总结,然后再去完毕实验内容中安排任务。普通规定准备好有关代码,实验课中最佳以调试和讨论为主。 实验结束后,应及时提交实验报告,报告详细内容可依照实验内容和实验规定进行增删。实验报告普通规定包括: (1)实验题目 (2)设
7、计思路或算法分析 (3)流程图 (4)程序源代码 (5)程序运营成果及分析 (6)存在问题。 实验一 C程序运营环境和简朴C源程序调试 一、实验学时 2学时 二、实验目 (一)掌握在Visaul C++ 环境如何编辑、编译和运营C源程序; (二)掌握C语言各种数据类型以及整型、字符型、实型变量定义; (三)掌握C语言中关于算术运算符及表达式使用。 三、预习规定 熟悉C程序书写规则、上机调试环节;熟悉C语言数据类型;熟悉C语言表达式构成、运算规则等内容。 (一)Visual C++6.0 集成开发环境简介 由于这些年C++语言程序普及,Visual C
8、6.0集成开发环境作为一种功能强大程序编译器也被相称多程序员所使用,使用Visual C++也可以完毕C语言编译。 由于Visual C++集成开发环境运营于Windows下,对于习惯于图形界面顾客来说是比较易学,因而,简要简介一下如何用Visual C++来完毕C语言程序设计。Visual C++也有各种版本,本书中使用比较普及Visual C++ 6.0集成开发环境。 (二)Visual C++6.0 集成开发环境安装 Visual C++中文版集成开发环境安装比较简朴,在输入SETUP执行后,可以按照提示信息完毕程序安装,在这里不再详述。 四、实验内容 (一) 创立一种
9、新文献夹 为了以便管理自己C语言程序,在启动Visual C++ 6.0集成开发环境前,一方面在E盘创立一种新文献夹,以便存储自己C语言程序。 (二) 启动Visual C++ 6.0集成开发环境 如图1-1所示,单击“开始”→“程序”→Microsoft Visual Studio 6.0→Microsoft Visual C++ 6.0,就可以启动Visual C++ 6.0集成开发环境。 启动后Visual C++ 6.0集成开发环境如图1-2所示。 (三)开始一种新程序 1.创立文献 单击主菜单中“文献”→“新建”菜单命令,弹出“新建”对话框,在“新建”对话框中选取“文
10、献”选项卡。在左边列出选项中,选取“C++ Source File”;在右边相应对话框中,输入文献名称“c1-1.c”及保存位置,如图1-3所示。单击“拟定”按钮。 图1-1 启动Visual C++ 6.0办法 图1-2 Visual C++ 6.0 中文版集成开发环境 E盘新建文献夹 图1-3 创立新C源文献 进入Visual C++ 6.0集成环境代码编辑窗口,如图1-4所示。 图1-4 Visual C++ 6.0集成环境代码编辑窗口 2.代码编辑 在Visual C++ 6.0代码编辑窗口中,输入如下所示源代码,完毕后如图1-4中所示。程序代码
11、 /* c1-1.c C语言第一种程序 */ #include "stdio.h" void main( ) { printf(" *\n"); printf(" ***\n"); printf("*****\n"); } 3.程序编译、连接与运营 将C语言源代码编译成计算机能执行目的代码。 单击主菜单下“组建”→“编译 [c1-1.c]”(或者是工具栏上按钮或按快捷键Ctrl+F7),此时将弹出一种对话框,询问与否创立一种项目工作区,选取“是(Y)”。Visual C++ 6.0集成开发环境会自动在c1-1.c文献所在文献夹
12、中建立相应项目文献。 编译时,在下方输出框中将显示出相应编译阐明,如图1-5所示。 如果代码编译无误,最后将显示: c1-1.obj - 0 error(s),0 warning(s) 这阐明编译没有错误(error)和警告(warning),生成目的文献c1-1.obj,程序编译顺利完毕。目的文献(.obj)不能被计算机直接执行,接下来将目的文献(.obj)和有关库函数或目的程序连接成为可执行程序(.exe)。 工具栏编译按钮 编译信息窗口 图1-5 Visual C++ 6.0 集成环境下编译源程序 单击主菜单下“组建”→“批组建”命令,将弹出如图1-6所示对话框。
13、 图1-6 Visual C++ 6.0 集成环境下批组建对话框 保证选中“c1-1-Win32 Release”复选框,这样生成可执行文献才是发行版程序,否则生成是调试(Debug)版程序。 单击“创立”按钮,生成可执行文献c1-1.exe。如果在“批组建”对话框中选中了两个复选框,可以看到程序中生成了两个c1-1.exe可执行文献,一种文献为调试版本,存储在与c1-1.c同一文献夹下Debug文献夹中;另一种是发行版本,保存在与c1-1.c同一文献夹下Release文献夹中。 这一步只是为了生成发行版程序文献,只有在程序准备发行时才需要执行这种编译。在普通状况下,可以单击主菜
14、单下“组建”→“组建 [c1-1.exe]”(或工具栏按钮或按快捷键F7),直接生成调试版本程序就可以了。 编译、连接完毕后, c1-1.exe已经是一种独立可执行程序,可以在Windows 资源管理器中直接执行,也可以在Visual C++ 6.0集成开发环境中运营。 单击主菜单下“组建”→[执行c1-1.exe](或工具栏按钮或按快捷键Ctrl+F5),此时弹出一种控制台程序窗口,程序对的运营,如图1-7所示。按任意键后返回Visual C++ 6.0集成开发环境。 图1-7 Visual C++ 6.0 集成环境下程序运营成果 4.关闭工作空间 当第1~3步工作完毕后
15、应当将工作保存下来,并关闭工作空间,以便做下一种新程序。单击主菜单下“文献”→“保存所有”,然后再单击“文献”→“关闭工作空间”菜单命令,询问确认要关闭所有文档窗口,选取“是(Y)”。 (四)按照(三)操作,输入下面程序,运营并查看输出成果。 /* c1-2.c C语言第二个程序 */ #include "stdio.h" void main( ) { int c,a=3,b=5; c=a+b; printf("a=%d,b=%d,c=%d\n",a,b,c); } (五)打开已有文献 在打开已有文献时一定要先确认关
16、闭了工作空间,然后单击主菜单下“文献”→“打开”命令,选取(三)创立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; printf("%d,%5d,%-5d\n",a,a,a); printf("%d,%o,%x,%u\n",a,a,a,a
17、); } 注意观测两个printf函数语句输出成果有何不同? (七)在Visual C++ 6.0集成环境,输入如下程序: /* c1-4.c C语言第四个程序 */ #include "stdio.h" void main( ) { long int a=32767; printf("a=%ld\t",a); printf("a=%u\t",a); printf("a=%d\n",a); } 将程序中a改为a=65535,并再次运营程序,观测成果。 (八)在Visual C++ 6.0集成环境,,输入如下程序: /* c1-5.c
18、 C语言第五个程序 */ #include "stdio.h" void main( ) { char c1=97,c2=98; int a=97,b=98; printf("%3c,%3c\n",c1,c2); printf("%d,%d\n",c1,c2); printf("\n%c %c\n",a,b); } 观测程序运营成果,掌握int与char类型数据互通性。 (九)在Visual C++ 6.0集成环境,输入如下程序: /* c1-6.c C语言第六个程序 */ #include "stdio.h" void main( ) { i
19、nt a,b;a=2; b=1%a; printf("%d\n",1/a); printf("b=%d\n",b); printf("%f %f\n",(float)(1/a),(float)b); } 观测程序运营成果,从中掌握类型转换运算符使用。 (十)在Visual C++ 6.0集成环境,输入如下程序: /* c1-7.c C语言第七个程序 */ #include "stdio.h" void main( ) { int i,j; i=3;j=4; printf("%d,%d\n",i++,++j);
20、 printf("%d,%d\n",i,j); printf("%d,%d\n",-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=%d\n",a); b=(a=3*5,a*4,a+5); printf("a=%d,b=%d\n",a,b);
21、} 观测程序运营成果,从中掌握复合赋值运算符、逗号运算符使用。 (十二)下面程序,计算输出当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 / 4; printf("z=%f\n",z); } 程序不完整,请删除横线后填
22、空并运营程序。 五、实验注意事项 (一)在Visual C++ 6.0集成环境中,如何对C程序进行创立、运营、查当作果和退出。 Visual C++ 6.0集成环境等操作可以通过菜单、按钮、热键实现。此外,在源程序文献编辑过程中,还可以进行复制、移动、删除等惯用文献编辑操作。 注意C程序编辑与显示成果界面是两个不同界面。 (二)由于C程序运营必要从main函数开始,因而一种C程序要有一种main函数,且只能有一种main函数。当一种程序运营结束之后,一定要先“文献”→“关闭工作空间”,然后再开始创立一种新C程序。 (三)在程序输入过程中: 1.要注意区别大小写; 2.要注
23、意程序中需要空格地方一定要留空格(如int a=3,b=5;中int和a之间必要留空格); 3.注意“\”与“/”区别。 4.所定义变量类型与输入数据类型要一致,输出时格式一定要满足数据大小。 5.注意实验内容(十二)中当运算对象均为整数时“/”运算符使用,“%”运算符两边一定是整型数据。 6.注意自加和自减运算符运算规则,仔细分析实验内容(十)中程序输出成果。 六、思考题 (一)有如下程序: #include "stdio.h" void main( ) { int a=-1; printf("%d,%o,%x,%u\n",a,a,a,a); } pr
24、intf语句运营成果是_______________。 (二)有如下程序: #include "stdio.h" void main( ) { char c1=97,c2=98; int a=97,b=98; printf("%3c,%3c\n",c1,c2); printf("%d,%d\n",c1,c2); printf("%c %c\n",a,b); } 最后一种printf语句运营成果是_______________。 (三)有如下程序: #include "stdio.h" void main( ) { int i,j;
25、i=3;j=4; printf("%d %d\n",i++,++j); printf("%d,%d\n",i,j); printf("%d,%d\n",-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);}
26、程序中空格处应填_______________。 实验二 数据类型、运算符和表达式 一、实验目 (1)理解C 语言数据类型意义,掌握基本数据类型变量特点和定义办法。 (2)学会使用C 算术运算符,以及包括这些运算符算术表达式。 (3)掌握自加(++)和自减(--)运算符使用。 (4)进一步熟悉C 程序编辑、编译、连接和运营过程。 二、实验要点 基本数据类型涉及整型、字符型、实型。 三、实验规定 (1)上机前先阅读和编写如下要调试程序。 (2)上机输入和调试程序并存在磁盘上。 (3)检查实验成果与否对的。 四、实验内容 (如下内容在实验报告中实验预
27、习报告内容中完毕) 1. 调试程序,分析输出成果 (1)输入并运营如下程序。 main() { float a,b; a=123456.789e5; b=a+20; printf("a=%f,b=%f\n",a,b); } 将第二行改为: double a,b; 重新运营该程序,分析运营成果。 阐明:由于实型变量值是用有限存储单元存储,因而其有效数字位数是有限。float型变量最多只能保证7 位有效数字,背面数字是无意义,不能精确表达该数。 (2)输入并运营如下程序。 main() { char c1,c2; c1=97;c2=98; printf("%
28、c %c\n",c1,c2); printf("%d %d\n",c1,c2); } ① 将第二行改为:int c1,c2;再运营。 ② 再将第三行改为:c1=300;c2=400;再运营,分析运营成果。 阐明:字符型数据可作为整型数据解决,整型数据也可以作为字符型数据解决,但应注意字符数据只占一种字节,它只能存储0-255 范畴整数。 2.完毕如下填空,并把程序调通,写出运营成果。 下面程序计算由键盘输入任意两个整数平均值: main() { int x,y ; ; scanf(“%d,%d”,&x,&y);
29、 ; printf("The average is :%f ",a); } 3. 指出如下程序错误并改正,上机把程序调通 main(); { int a; a=5; printf(“a=%d,a) } 4. 编写程序并上机运营 要将“China”译成密码,译码规律是:用本来字母背面第3 个字母代替本来字母。例如,字母“A”背面第4 个字母是“E”,用“E”代替“A”。因而,“China”应译为“Fklqd”。请编一程序,用赋初值办法使c1、c2、c3、c4、c5 五个变量值分别为‘C’、‘h’、‘i’、‘n’、‘a’,通过运算,使c1、c2、c3、c4、
30、c5 分别变为‘F’、‘k’、‘l’、‘q’、‘d’、,并输出。输入程序,并运营该程序。分析与否符合规定。 五、思考与总结 (1)总结各种整型变量取值范畴。 (2)总结各种实型变量有效数字位数和取值范畴。 (3)总结算术运算符和自加、自减运算符优先级与结合性。 实验三 选取构造程序设计 一、实验学时 2学时 二、实验目 (一)掌握C语言关系表达式和逻辑表达式运算和使用; (二)对的使用条件控制语句(if语句、switch语句)进行选取构造程序设计。 三、预习规定 (一)关系运算符和关系表达式、逻辑运算符和逻辑表达式; (二)if语句三种形式(单分
31、支、双分支、多分支),以及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; printf("a=%d\tb=%d\tc=%d\n",a,b,c); } 注意该程序中条件判断表达式a++<3 && c--!=0是一种逻辑表达式,关系表达式a++<3值为假,因而后一某些c--!=0就
32、不再计算。试比较下列各某些运营成果。 #include "stdio.h" void main( ) { int a=3,b=5,c=8; if(a++<3 && c--!=0) b=b+1; printf("a=%d\tb=%d\tc=%d\n",a,b,c); int a=3,b=5,c=8; if(c--!=0 && a++<3) b=b+1; printf("a=%d\tb=%d\tc=%d\n",a,b,c); int a=3,b=5,c=8; if(a++<3 || c--!=0) b=b+1; pr
33、intf("a=%d\tb=%d\tc=%d\n",a,b,c); int a=3,b=5,c=8; if(c--!=0 || a++<3) b=b+1; printf("a=%d\tb=%d\tc=%d\n",a,b,c); } (二)输入下面两段程序并运营,掌握case语句中break语句作用。 1./* c3-2.c */ /* c3-3.c */ /* 不含breakswitch */ /* 含breakswitch */ #include "stdio.h"
34、 #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++;
35、 case 3:n++;break; case 4: case 4: case 5:k++; case 5:k++; } } printf("%d,%d,%d\n",m,n,k); printf("%d,%d,%d\n",m,n,k); } } 分别从键盘上输入1、3、5,写出程序运营成果。 (三)完善程序,从键盘上输入x值,按下式计算
36、y值。 编程提示:注意逻辑表达式对的表达办法,数学中1≤x<10应使用C语言逻辑表达式(x>=1 && x<10)来表达。 下面是用多分支选取构造实现本题程序构造: /* c3-4.c if 语句实现多分支构造 */ #include "stdio.h" void main( ) { 定义变量; 输入x; if ( _______________ ) //按y=x为变量y赋值; else if( _______________ ) //按y=2x-1为变量y赋值; els
37、e _______________ //按y=3x-11为变量y赋值; printf("y=%f\n",y); } 注意:在赋值语句中2x应当写成2*x。 (四)编写程序,给出一种百分制成绩,规定输出相应级别A、B、C、D、E。90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分如下为'E'。 编程提示: 1.先定义一种整型变量存储百分制成绩、定义一种字符型变量存储相应级别成绩; 2.输入百分制成绩; 3.将百分制成绩按10分,分档作为switch语句中括号内表达式; 4.按 c
38、ase 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 = 0; scanf("%d,%d",&a,&b); if (a>b) {
39、t = a ; a = b ; b = t ; } printf("a=%d,b=%d\n",a,b) ; } (六)编写程序,给出一种不多于3位正整数n,规定:(1)求出它是几位数;(2)分别打印出每一位数字(数字之间加一种空格);(3)按逆序打印出各位数字(数字之间加一种空格)。 编程提示: 1.定义变量(考虑需要几种变量)并输入一种3位如下正整数n 2.将n拆提成三个一位数: 表达式:n%10 可将一种三位数n拆分出三位数中个位数; 表达式:n/100 可将一种三位数n拆分出三位数中百位数; 表达式:(
40、n%100))/10 或(n-(n/100)*100)/10 可将一种三位数n拆分出三位数中十位数。 3.用一种嵌套选取构造,按照百位数、十位数与否为0决定n为几位数。 4.按相反顺序输出n。 思考:如果是对一种5位正整数进行上述解决,程序应如何改动? (七)写出与表达式z =( x>=y ?x :y )等价if语句,并上机验证。 五、实验注意事项 (一)C程序中表达比较运算等号用“==”表达,赋值运算符用“=”表达,不能将赋值号“=”用于比较运算。 (二)控制表达式是指任何合法C语言表达式(不只限于关系或逻辑表达式),只要表达式值为“非零”,则为“真”,“零”则为“假
41、 (三)在if语句嵌套构造中,else与if配对原则是:每个else总是与同一种程序中、在前面浮现、并且距它近来一种尚未配对if构成配对关系。 (四)case及背面常量表达式,实际仅是起标号作用。控制表达式值与某个状况常量一旦匹配,那么,在执行下面语句过程中,只要不遇到break语句,就始终执行下去,而不再鉴别与否匹配。容许浮现各种“case”与一组语句相相应状况。 六、思考题 (一)下面程序功能是实现表达式z=( x>=y ?x :y),请将程序填写完整。 /* 分支构造程序 */ #include "stdio.h" void main( ) {
42、 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; p
43、rintf("a=%d,b=%d,c=%d \n",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=%f
44、\n",y); } (四)下面程序运营时从键盘上输入15,20,运营成果为_______________。 /* 分支构造程序 */ #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=%d\n",b) ; } 实验四 循环构造程序设计(一) 一、实验学时 2学时 二、实验目 (一)掌握用while,do-while,for语句
45、实现循环办法; (二)掌握在设计条件型循环构造程序时,如何对的地设定循环条件,以及如何控制循环次数。 (三)掌握与循环关于算法。 三、预习规定 预习教材关于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(
46、 !x); (三)编程求 1!+2!+3!+……+20!值。 注意:依照题目,考虑所定义各个变量应当为什么种类型。程序构造如下: /* c4-1.c 求1!+2!+3!+……+20! */ #include "stdio.h" void main( ) { 定义变量i作为循环控制变量; 定义变量p和sum分别存储各个整数阶乘和阶乘之和; 变量p和sum赋初值; for( i=1;i<=20;i++ ) { 变量p连乘 ; 变量sum累加;} 输出sum值 ; } (四)编写一种程
47、序,求出两个数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 求最大公约数算法1 */ #include "stdio.h" void main( ) { } 2.从整数1开始向上找,直至m和n中较小数,每找到一种能同步被m和n整除整数,将其存入一种变量中,当循环结束时,
48、变量中存储即为最大公约数。设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最大公约数问题转化为求其中除数和两个数相除所得余数公约数。每次循环中,先求两个数余数,然后以除数作为被除数,以余数作为除数,当余数为0时结束循环,此时除数即为最大公约数。设m和n中n为较小数,则可用如下程序段实现: b=m%
49、n; while(b!=0) { m=n;n=b;b=m%n;} printf("%d\n",n); /* c4-4.c 求最大公约数算法3 */ #include "stdio.h" void main( ) { } 类似地,求最小公倍数办法也可以从m和n中较大数开始向上找,或者从m*n向下找,请自己考虑程序设计办法。 此外,两个数最大公约数和最小公倍数关系为:最小公倍数=m*n/最大公约数 可运用此关系进行程序设计。 (五)编程实现,从键盘上输入一行字符,记录其中英文字母、数字、空格和其他字符个数。 编程提示:先定义一种字符
50、型变量(如c),再定义4个整型变量作为计数器,作为计数器变量要先赋初值0。在循环中每次从键盘上读入一种字符,在循环体中对读入字符进行判断,相应计数器加1,当读入字符为’\n’时结束。 编程中可使用如下循环构造: while((c=getchar())!=’\n’)) { if(……) ……; else if(……) ……; ……; else ……; } /* c4-5.c 记录字符串中指定字符个数 */ #include "stdio.h" void main( ) { } 注意: 1.w
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818