《程序设计基础》实验指导书
(第一版)
(14~26学时)
信息学院
《程序设计基础》教研组
2011年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 实验五 循环结构程序设计(二) ............................................................................................................. 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 六、思考题 ............................................................................................................................................. 46 实验十 指针(一) ..................................................................................................................................... 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 语言是现代最流行的通用程序设计语言之一,它既具有高级程序设计语言的优点,又具有低级程序设计语言的特点,既可以用来编写系统程序,又可以用来编写应用程序。因此,C 语言正在被迅速地推广和普及。上机实验是该课程教学的一个重要环节,因此要求学生做一定数量的上机实验。本指导书可增强同学上机实验的针对性。整个教学和实验中,采用VC++6.0 作为实验环境,强调学生切实培养动手实践能力,掌握调试程序的方法,通过调试理解 C语言程序运行的过程以及C 语言的语法规则,为后续的课程设计,计算机等级考试及其他应用做好充分的准备。
本实验指导书通过大量的实例,循序渐进地引导学生做好各章的实验。根据实验教学大纲,共选择编写了13个实验,其中必做11个,选做 2个 。每个实验内容结构如下:
(1)实验学时 (2)实验目的 (2)预习要求 (4)实验内容 (5)实验注意事项 (6)思考题
其中思考题属于扩展应用部分,学生可以根据自己的学习情况选择完成。
在实验之前,要求学生对实验作好预习工作。在实验中,学生根据实验指导中的内容进行验证与总结,然后再去完成实验内容中安排的任务。一般要求准备好相关代码,实验课中最好以调试和讨论为主。
实验结束后,应及时提交实验报告,报告具体内容可根据实验内容和实验要求进行增删。实验报告一般要求包含:
(1)实验题目
(2)设计思路或算法分析 (3)流程图 (4)程序源代码
(5)程序运行结果及分析 (6)存在的问题。
1
实验一 C程序的运行环境和简单C源程序的调试
一、实验学时
2学时
二、实验目的
(一)掌握在Visaul C++ 环境如何编辑、编译和运行C源程序; (二)掌握C语言的各种数据类型以及整型、字符型、实型变量的定义; (三)掌握C语言中有关算术运算符及表达式的使用。
三、预习要求
熟悉C程序的书写规则、上机调试步骤;熟悉C语言的数据类型;熟悉C语言表达式的构成、运算规则等内容。
(一)Visual C++6.0 集成开发环境简介
由于这些年C++语言程序的普及,Visual C++6.0集成开发环境作为一种功能强大的程序编译器也被相当多的程序员所使用,使用Visual C++也能够完成C语言的编译。
由于Visual C++集成开发环境运行于Windows下,对于习惯于图形界面的用户来说是比较易学的,因此,简要介绍一下如何用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所示,单击“开始”→“程序”→Microsoft Visual Studio 6.0→Microsoft Visual C++ 6.0,就可以启动Visual C++ 6.0集成开发环境。
启动后的Visual C++ 6.0集成开发环境如图1-2所示。
(三)开始一个新程序
1.创建文件
单击主菜单中的“文件”→“新建”菜单命令,弹出“新建”对话框,在“新建”对话框中选择“文件”选项卡。在左边列出的选项中,选择“C++ Source File”;在右边的相应对话框中,输入文件名称“c1-1.c”及保存的位置,如图1-3所示。单击“确定”按钮。
2
图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中所示。程序代码: /* c1-1.c C语言的第一个程序 */ #include \
3
void main( ) { printf(\ *\\n\ printf(\ printf(\ }
3.程序的编译、连接与运行
将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)不能被计算机直接执行,接下来将目标文件(.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可执行文件,一个文件为调试版本,存储在与c1-1.c同一文件夹下的Debug文件夹中;另一个是发行版本,保存在与c1-1.c同一文件夹下的Release文件夹中。
这一步只是为了生成发行版的程序文件,只有在程序准备发行时才需要执行这种编译。在通常
4
情况下,可以单击主菜单下的“组建”→“组建 [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步工作完成后,应该将工作保存下来,并关闭工作空间,以便做下一个新的程序。单击主菜单下的“文件”→“保存全部”,然后再单击“文件”→“关闭工作空间”菜单命令,询问确认要关闭所有文档窗口,选择“是(Y)”。
(四)按照(三)的操作,输入下面的程序,运行并查看输出结果。
/* c1-2.c C语言的第二个程序 */ #include \void main( ) { int c,a=3,b=5; c=a+b;
printf(\ }
(五)打开已有的文件
在打开已有的文件时一定要先确认关闭了工作空间,然后单击主菜单下的“文件”→“打开”命令,选择(三)创建的c1-1.c文件,然后打开。
(六)重新开始一个新的程序
关闭所有工作空间,点击Visual C++ 6.0窗口的关闭按钮即可退出Visual C++ 6.0集成环境,按照(二)、(三)再次进入Visual C++ 6.0集成环境,输入以下程序:
/* c1-3.c C语言的第三个程序 */ #include \void main( ) { int a=38;
printf(\printf(\ }
注意观察两个printf函数语句输出结果有何不同?
(七)在Visual C++ 6.0集成环境,输入以下程序:
/* c1-4.c C语言的第四个程序 */ #include \void main( )
{ long int a=32767;
printf(\printf(\printf(\ }
5
将程序中的a改为a=65535,并再次运行程序,观察结果。
(八)在Visual C++ 6.0集成环境,,输入以下程序:
/* c1-5.c C语言的第五个程序 */ #include \void main( )
{ char c1=97,c2=98;
int a=97,b=98;
printf(\printf(\printf(\ }
观察程序运行结果,掌握int与char类型数据的互通性。
(九)在Visual C++ 6.0集成环境,输入以下程序:
/* c1-6.c C语言的第六个程序 */ #include \void main( ) { int a,b;a=2; b=1%a;
printf(\ printf(\
printf(\ %f\\n\ }
观察程序运行结果,从中掌握类型转换运算符的使用。
(十)在Visual C++ 6.0集成环境,输入以下程序:
/* c1-7.c C语言的第七个程序 */ #include \void main( ) { int i,j; i=3; j=4;
printf(\ printf(\
printf(\ }
观察程序运行结果,从中掌握自加自减运算符的使用。
(十一)在Visual C++ 6.0集成环境,输入以下程序
/* c1-8.c C语言的第八个程序 */ #include \void main( ) { int a,b;a=5; a-=a*a;
printf(\ b=(a=3*5,a*4,a+5);
printf(\ }
观察程序运行结果,从中掌握复合赋值运算符、逗号运算符的使用。
(十二)下面程序,计算输出当x=2.5,a=7,y=4.7时,表达式
x + a % 3 * (int) (x + y) % 2 / 4的运算结果z的值。
/* c1-9.c C语言的第九个程序 */ #include \
6
void main( )
{ _________ a=7;
float x=2.5,y=4.7, z ;
z= x + a % 3 * (int) (x + y) % 2 / 4; printf(\}
程序不完整,请删除横线后填空并运行程序。
五、实验注意事项
(一)在Visual C++ 6.0集成环境中,如何对C程序进行创建、运行、查看结果和退出。
Visual C++ 6.0集成环境等操作可以通过菜单、按钮、热键实现。另外,在源程序文件编辑过程中,还可以进行复制、移动、删除等常用文件编辑操作。
注意C程序的编辑与显示结果界面是两个不同的界面。
(二)由于C程序运行必须从main函数开始,因此一个C程序要有一个main函数,且只能有一个main函数。当一个程序运行结束之后,一定要先“文件”→“关闭工作空间”,然后再开始创建一个新的C程序。
(三)在程序的输入过程中: 1.要注意区分大小写;
2.要注意程序中需要空格的地方一定要留空格(如int a=3,b=5;中的int和a之间必须留空格);
3.注意“\\”与“/”的区别。
4.所定义的变量的类型与输入的数据的类型要一致,输出时的格式一定要满足数据的大小。 5.注意实验内容(十二)中当运算对象均为整数时“/”运算符的使用,“%”运算符两边一定是整型数据。
6.注意自加和自减运算符的运算规则,仔细分析实验内容(十)中程序的输出结果。
六、思考题
(一)有如下程序: #include \void main( ) { int a=-1;
printf(\ }
printf语句的运行结果是_______________。
(二)有如下程序: #include \void main( )
{ char c1=97,c2=98; int a=97,b=98; printf(\ printf(\ printf(\ }
最后一个printf语句的运行结果是_______________。
(三)有如下程序: #include \void main( )
{ int i,j; i=3; j=4;
printf(\ %d\\n\ printf(\
printf(\}
7
最后一个printf语句的运行结果是_______________。
(四)程序填空: #include \void main( )
{ _________ a=7;
float x=2.5,y=4.7,z;
z= x + a % 3 * (int) (x + y) % 2 / 4;
printf(\
程序中空格处应填_______________。
8
实验二 数据类型、运算符和表达式
一、实验目的
(1)了解C 语言数据类型的意义,掌握基本数据类型变量的特点和定义方法。 (2)学会使用C 的算术运算符,以及包含这些运算符的算术表达式。 (3)掌握自加(++)和自减(--)运算符的使用。
(4)进一步熟悉C 程序的编辑、编译、连接和运行的过程。
二、实验要点
基本数据类型包括整型、字符型、实型。
三、实验要求
(1)上机前先阅读和编写以下要调试的程序。 (2)上机输入和调试程序并存在磁盘上。 (3)检查实验结果是否正确。
四、实验内容
(以下内容在实验报告中的实验预习报告内容中完成) 1. 调试程序,分析输出结果
(1)输入并运行以下程序。 main()
{ float a,b;
a=123456.789e5; b=a+20;
printf(\}
将第二行改为: double a,b;
重新运行该程序,分析运行结果。
说明:由于实型变量的值是用有限的存储单元存储的,因此其有效数字的位数是有限的。float型变量最多只能保证7 位有效数字,后面的数字是无意义的,不能准确表示该数。
(2)输入并运行以下程序。 main()
{ char c1,c2; c1=97;c2=98;
printf(\printf(\}
① 将第二行改为:int c1,c2;再运行。
9
② 再将第三行改为:c1=300;c2=400;再运行,分析运行结果。
说明:字符型数据可作为整型数据处理,整型数据也可以作为字符型数据处理,但应注意字符数据只占一个字节,它只能存放0-255 范围的整数。
2.完成以下填空,并把程序调通,写出运行结果。 下面的程序计算由键盘输入的任意两个整数的平均值: main()
{ int x,y ;
;
scanf(“%d,%d”,&x,&y); ;
printf(\}
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、c5 分别变为‘F’、‘k’、‘l’、‘q’、‘d’、,并输出。输入程序,并运行该程序。分析是否符合要求。
五、思考与总结
(1)总结各种整型变量的取值范围。
(2)总结各种实型变量的有效数字位数和取值范围。 (3)总结算术运算符和自加、自减运算符的优先级与结合性。
10
实验三 选择结构程序设计
一、实验学时
2学时
二、实验目的
(一)掌握C语言关系表达式和逻辑表达式的运算和使用;
(二)正确使用条件控制语句(if语句、switch语句)进行选择结构程序设计。
三、预习要求
(一)关系运算符和关系表达式、逻辑运算符和逻辑表达式;
(二)if语句的三种形式(单分支、双分支、多分支),以及if语句的嵌套; (三)switch语句的形式。
四、实验内容
(一)分析下面程序,掌握关系及逻辑表达式的运算规则。 /* c3-1.c 关系及逻辑表达式运算规则 */ #include \void main( )
{ int a=3,b=5,c=8;
if(a++<3 && c--!=0) b=b+1;
printf(\}
注意该程序中的条件判断表达式a++<3 && c--!=0是一个逻辑表达式,关系表达式a++<3的值为假,因此后一部分c--!=0就不再计算。试比较下列各部分运行结果。
#include \void main( )
{ int a=3,b=5,c=8;
if(a++<3 && c--!=0) b=b+1;
printf(\
int a=3,b=5,c=8;
if(c--!=0 && a++<3) b=b+1;
printf(\
int a=3,b=5,c=8;
if(a++<3 || c--!=0) b=b+1;
printf(\
int a=3,b=5,c=8;
if(c--!=0 || a++<3) b=b+1;
printf(\ }
11
(二)输入下面两段程序并运行,掌握case语句中break语句的作用。 1./* c3-2.c */ /* c3-3.c */
/* 不含break的switch */ /* 含break的switch */ #include \ #include \void main( ) void main( ) { int a,m=0,n=0,k=0; { int a,m=0,n=0,k=0; scanf(\ scanf(\ switch(a) switch(a) { case 1: m++; { case 1: m++; break; case 2: case 2: case 3: n++; case 3: n++; break; case 4: case 4: case 5: k++; case 5: k++; } }
printf(\ printf(\} } 分别从键盘上输入1、3、5,写出程序运行的结果。
(三)完善程序,从键盘上输入x的值,按下式计算y的值。
?x x<1?y??2x?1 1?x<10
?3x?11 x?10?编程提示:注意逻辑表达式的正确表达方法,数学中的1≤x<10应使用C语言的逻辑表
达式(x>=1 && x<10)来表示。
下面是用多分支选择结构实现本题的程序结构: /* c3-4.c if 语句实现的多分支结构 */ #include \ void main( ) { 定义变量; 输入x;
if ( _______________ ) //按y=x为变量y赋值;
else if( _______________ ) //按y=2x-1为变量y赋值; else
_______________ //按y=3x-11为变量y赋值; printf(\ }
注意:在赋值语句中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.按
case 10: case 9:
12
case 8: case 7: case 6: default:
这六种匹配情况分别选择不同的入口; 5.输出转换后的等级成绩。
(五)下面程序运行时从键盘上分别输入(20,15),(15,20),写出运行结果。 /* c3-5.c 分支结构中的复合语句*/ #include \ void main( ) { int a,b,t; t = 0;
scanf(\ if (a>b) { t = a ; a = b ; b = t ;
}
printf(\ }
(六)编写程序,给出一个不多于3位的正整数n,要求:(1)求出它是几位数;(2)分别打印出每一位数字(数字之间加一个空格);(3)按逆序打印出各位数字(数字之间加一个空格)。
编程提示: 1.定义变量(考虑需要几个变量)并输入一个3位以下的正整数n 2.将n拆分成三个一位数:
表达式:n 可将一个三位数n拆分出三位数中的个位数; 表达式:n/100 可将一个三位数n拆分出三位数中的百位数;
表达式:((n0))/10 或(n-(n/100)*100)/10 可将一个三位数n拆分出三位数中的十位数。
3.用一个嵌套的选择结构,按照百位数、十位数是否为0决定n为几位数。 4.按相反的顺序输出n。
思考:如果是对一个5位的正整数进行上述处理,程序应如何改动?
(七)写出与表达式z =( x>=y ? x : y )等价的if语句,并上机验证。
五、实验注意事项
(一)C程序中表示比较运算的等号用“==”表示,赋值运算符用“=”表示,不能将赋值号“=”用于比较运算。
(二)控制表达式是指任何合法的C语言表达式(不只限于关系或逻辑表达式),只要表达式的值为“非零”,则为“真”,“零”则为“假”
13
(三)在if语句的嵌套结构中,else与if的配对原则是:每个else总是与同一个程序中、在前面出现的、而且距它最近的一个尚未配对的if构成配对关系。
(四)case及后面的常量表达式,实际仅是起标号作用。控制表达式的值与某个情况常量一旦匹配,那么,在执行下面语句的过程中,只要不遇到break语句,就一直执行下去,而不再判别是否匹配。允许出现多个“case”与一组语句相对应的情况。
六、思考题
(一)下面程序的功能是实现表达式z=( x>=y ? x : y),请将程序填写完整。 /* 分支结构的程序 */ #include \ void main( ) { int x, y, z;
printf(\ scanf(\ if (________) z=x; else z=y;
printf(\ }
(二)下面程序的运行结果为_______________。 /* 分支结构的程序 */ #include \void main( )
{ int a=1,b=5,c=8;
if(a++<3 && c--!=0) b=b+1;
printf(\}
(三)程序填空,从键盘上输入x的值,按下式计算y的值。
?x x<1?y??2x?1 1?x<10
?3x?11 x?10?/* 多分支结构的程序 */ #include \void main( ) { float x,y; printf(\ scanf(\
if ( _________ ) y=x; else if( x>=1 && x<10 )
y=2*x-1; else
y=3*x-11; printf(\ }
(四)下面程序运行时从键盘上输入15,20,运行结果为_______________。
14
/* 分支结构的程序 */ #include \void main( ) { int a,b,t; t = 0;
scanf(\if (a>b) { t = a ; a = b ; b = t ; }
printf(\}
15
实验四 循环结构程序设计(一)
一、实验学时
2学时
二、实验目的
(一)掌握用while,do-while,for语句实现循环的方法;
(二)掌握在设计条件型循环结构的程序时,如何正确地设定循环条件,以及如何控制循环的次数。
(三)掌握与循环有关的算法。
三、预习要求
预习教材有关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 \ void main( )
{ 定义变量i作为循环控制变量;
定义变量p和sum分别存放各个整数的阶乘和阶乘之和; 变量p和sum赋初值; for( i=1; i<=20; i++ ) { 变量p连乘 ; 变量sum累加; } 输出sum的值 ; }
(四)编写一个程序,求出两个数m和n的最大公约数和最小公倍数。
16
编程提示:求最大公约数的方法有三种:
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 \ 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 \ void main( ) { }
3.用辗转相除法,即将求m和n的最大公约数问题转化为求其中的除数和两个数相除所得余数的公约数。每次循环中,先求两个数的余数,然后以除数作为被除数,以余数作为除数,当余数为0时结束循环,此时除数即为最大公约数。设m和n中n为较小的数,则可用如下程序段实现:
b=m%n; while(b!=0) { m=n; n=b; b=m%n;} printf(\
/* c4-4.c 求最大公约数算法3 */ #include \ void main( ) { }
类似地,求最小公倍数的方法也可以从m和n中较大的数开始向上找,或者从m*n向下找,请自己考虑程序的设计方法。
另外,两个数的最大公约数和最小公倍数的关系为:最小公倍数=m*n/最大公约数 可利用此关系进行程序设计。
(五)编程实现,从键盘上输入一行字符,统计其中英文字母、数字、空格和其它字符的个数。
17
编程提示:先定义一个字符型的变量(如c),再定义4个整型变量作为计数器,作为
计数器的变量要先赋初值0。在循环中每次从键盘上读入一个字符,在循环体中对读入的字符进行判断,相应的计数器加1,当读入的字符为’\\n’时结束。
编程中可使用如下的循环结构: while((c=getchar())!=’\\n’)) { if(??) ??; else if(??) ??; ??; else ??; }
/* c4-5.c 统计字符串中指定字符的个数 */ #include \ void main( ) { }
注意: 1.while( (c=getchar( ))!=’\\n’) )中括号的使用,第二层的小括号不能省略,想一想为什么?
2.字符常量’0’与数值常量0是不同的。
(六)下面程序的功能是:计算1到100之间的奇数之和及偶数之和,并输出。请在程序中的横线上填入适当的内容,将程序补充完整并运行。
/* c4-6.c 计算1到100之间的奇数之和及偶数之和 */ #include \ void main( ) { int a,b,c,i;
_____________; /*变量初始化*/ for(i=0; i<=100; i+=2)
{ a+=i; /*变量a存放偶数的和*/ ____________;
c+=b; /*变量c存放奇数的和*/ }
printf(\
printf(\ }
(七)编程打印出所有的“水仙花数”,所谓水仙花数是指一个3位数,其各位数字的立方和等于该数本身。如153=1+3+5。
3
3
3
编程提示:定义一个变量作为循环变量,再定义3个变量分别存放三位数的每位数字,
在循环体中将一个三位数拆分成个位、十位、百位后判断循环变量的值是否为水仙花数,如果是则输出,否则不输出。程序的基本结构为: /* c4-7.c 打印出所有的“水仙花数” */ #include \ void main( )
18
{ 定义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(\ }
(八)以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。请将程序补充完整。
/* c4-8.c 求最大值最小值程序 */ #include \ void main( )
{ float x,amax,amin; scanf(\ amax=x; amin=x;
while ( _______________ ) { if (x>amax) amax=x;
if ( _______________ ) amin=x; scanf(\ }
printf(\ }
(九)求两个正整数[m,n]之间所有既不能被3整除也不能被7整除的整数之和。
编程提示:定义两个变量m,n和t,再定义一个循环变量和结果变量s,从键盘输入m
和n的值,判断两个变量的值,如果m>n,则交换两个变量。然后用循环依次判断m和n之间的每一个数,在循环体中通过条件语句来判断这个数是否既不能被3整除也不能被7整除,如果满足条件,累加求和,如果不满足,则继续循环。
程序的基本结构如下:
/* c4-9.c 按条件求数列和 */ #include \ void main( ) { 定义变量; 变量赋初值; 输入m,n的值; if( m>n )
m和n交换;
for ( _______________ ) if ( i%3 != 0 && i%7 != 0 ) 变量 s 累加求和 ;
printf(\ }
(十)下面程序的功能是:计算正整数num的各位上的数字之和。例如,若输入:252,则输出应该是:9;若输入:202,则输出应该是:4。请将程序补充完整。
19
/* c4-10.c 求整数各位数字和 */ #include \ void main( ) { int num,k;
_______________; /* k赋初值 */ printf(\ scanf(\ do
{ k=_______________ ; /* 取最低位并累加 */
num/=10; /* 去掉最低位 */ } while(num) ;
printf(\ }
五、实验注意事项
(一)while,do-while,for语句中应有使循环趋向于结束的语句,否则就可能构成死循环。
(二)while,do-while语句什么情况下的运行结果是相同的,什么情况下不同。 (三)注意在循环结构程序设计中,正确使用{ }构成复合语句。
六、思考题
(一)求两个正整数x和y的最大公约数,请填空。 /* 求最大公约数程序 */ #include \ void main( ) { int x,y,t,i;
scanf(\ / if (x > y) {t = x; x = y; y = t;} for(i>=1;i<=x;i++ )
{ if( x%i==0 && y%i==0 ) break; }
printf(\ }
(二)计算1到100之间的奇数之和及偶数之和。请填空。 /* 计算1到100之间的奇数之和及偶数之和 */ #include \ void main( ) { int a,b,c,i;
a=0, c=0; /* 变量赋初值 */ for(i=0;i<=100;i+=2)
{ a+=i; /* 变量a存放偶数的和 */ _______________ ;
c+=b; /* 变量c存放奇数的和 */ }
printf(\
printf(\ }
20
(三)下面程序的功能是:计算正整数num的各位上的数字之和。例如,若输入:252,则输出应该是:9;若输入:202,则输出应该是:4。请将程序补充完整。
/* 计算整数各位数字和 */ #include \ void main( ) { int num,k=0;
printf(\请输入一个整数: \ scanf(\ do
{ k=____________ ; num/=10; } while(num) ;
printf(\ }
(四)求两个正整数[m,n]之间所有既不能被3整除也不能被7整除的整数之和。请填空。
/* 按条件求数列和 */ #include \ void main( ) { int m,n,i,t; long int s=0;
scanf(\ if( m>n )
{ t=m; m=n; n=t;}
for ( _______________ ) if ( i%3 != 0 && i%7 != 0 ) s += i;
printf(\ }
21
实验五 循环结构程序设计(二)
一、实验学时
2学时
二、实验目的
(一)掌握使用for,while,do-while语句实现循环嵌套的方法; (二)巩固break和continue语句的使用。
三、预习内容
预习教材中有关用for,while,do-while语句实现循环嵌套的方法以及循环嵌套的执行过程。
四、实验内容
(一)根据公式:sum=1?111????,计算sum的值。 2!3!n!注意:根据题目,考虑所定义的各个变量应该为何种类型。
编程提示:定义一个变量存放最后的求和结果(假设为sum),sum的数据类型应为实型,
定义变量t计算整数的阶乘。使用双重循环,程序的基本结构为:
for(i=1,sum=0; i<=20; i++) { t赋初值1 ;
for( j=1; j<=i; j++ ) 变量t连乘求积; 变量sum累加t的倒数; }
注意上述程序结构和内循环变量的终值。想一想是否可以将t=1放在外循环之前? /* c5-1.c 求数列和 */ #include \ void main( ) { }
(二)编程输出九九乘法表。
编程提示:我们日常看到的乘法表是:
1×1=1 1×2=2 2×2=4 1×3=3 2×3=6 3×3=9 ?
22
1×9=9 ? ? ? 9×9=81
每个算式可以归为:i×j=?的形式,而且每行中的算式数量随着行数变化。考虑外层循环变量和内层循环变量应当取何值呢?
程序的基本结构为: for( i=1; i<=9; i++ ) { for(j=1; __________; j++ ) 输出乘法算式; 输出回车换行符;
}
/* c5-2.c 输出九九乘法表 */ #include \ void main( ) { }
(三)编程求100~300之间的素数和。
编程提示:首先,弄清素数的概念是本题的关键,素数:只能被1和它本身整除的数为
素数。判断一个数是否为素数需要使用循环结构才能实现,求出100~300之间的全部素数要使用循环的嵌套结构。程序结构提示如下:
/* c5-3.c 求100~300之间的素数和 */ #include \
void main( ) { 定义变量;
外层循环变量i从100递增到300 { 标志变量赋0;
内层循环变量从2递增到i-1
如果不是素数(能整除),则标志变量赋1,跳出循环; 如果标志变量为0(是素数),进行求和; } 输出求和结果; }
(四)编程输出以下图形。 * *** *****
编程提示:输出图形的这一类问题,首先要看一看图形的特点,找到规律:一共有几行,
每行先输出什么字符,输出几个;后输出什么字符,输出几个。一般外循环变量控制行数,内循环变量控制各种字符的数量。
程序的基本结构为: for(i=0; i<=2; i++) { 连续输出若干空格; 连续输出若干个“*”;
23
输出一个换行;
}
/* c5-4.c 输出字符图形 */ #include \ void main( ) { }
想一想,输出下面的三种图形分别应当怎样实现: ****** ******** * ****** ***** ***** ****** *** ********* ****** * *************
(五)运行以下程序,分析程序的运行结果并上机验证。 /* c5-5.c 循环结构程序 */ #include \ void main( ) { int i=0, a=0; while( i<20 ) { for( ; ; )
{ if((i)==0) break; else i--;}
i+=11;a+=i; }
printf(\ }
五、实验注意事项
(一)对于双重循环来说,外层循环往往是控制变化较慢的参数(例如所求结果的数据项的个数、图形的行数等),而内层循环变化快,一般控制数据项的计算、图形中各种字符的数量等。
(二)注意在循环结构程序设计中,正确使用{ }构成复合语句。 (三)外层循环变量增值一次,内层循环变量从初值到终值执行一遍。 (四)程序书写时,最好使用缩进结构以使程序结构清晰。
六、思考题
(一)根据公式:sum=1?111????,计算sum的值,请把程序补充完整。 2!3!n!/* 求数列和 */
#include \ void main( ) { long int n,j; float sum=0,t;
for(n=1; n<=20; n++)
24
{ t=1.0;
for(j=1; j<=n; j++) t=t*j;
________________; }
printf(\ }
(二)下面函数的功能是输出九九乘法表,请把程序补充完整。 /* 输出九九乘法表 */ #include \ void main( ) { int i,j;
for( i=1; i<=9; i++ )
{ for( j=1; __________; j++ )
printf(\ printf(\}
(三)下面函数的功能是求出100~300间的素数和,请把程序补充完整。 /* 求100~300间的素数和 */ #include \void main( )
{ int i, j, flag, sum=0;
for( i=100; i<=300; i++ ) { flag=0;
for( j=2; j<=i-1; j++ )
if( i%j==0 ) { flag=1;break; } if( ________ ) sum+=i; }
printf(\ }
(四)下面程序的功能是:输出以下图形:
*
*** *****
请把程序补充完整。 /* 输出字符图形 */ #include \ void main( ) { int i,j,k;
for(i=0;i<=2;i++)
{ for( j=0; j<=10-i ;j++ ) printf(\
for( k=0; _______________ ;k++ ) printf(\ printf(“\\n”); } }
25
实验六 一维数组程序设计
一、实验学时
2学时
二、实验目的
(一)掌握一维数组的定义、初始化方法; (二)掌握一维数组中数据的输入和输出方法; (三)掌握与一维数组有关的程序和算法; (四)了解用数组处理大量数据时的优越性。
三、预习要求
(一)理解数组的概念、利用数组存放数据有何特点; (二)一维数组的定义、初始化方法; (三)一维数组中数据的输入和输出方法。
四、实验内容
(一)下面的几个程序都能为数组元素赋值,请输入程序并运行。比较一下这些赋值方法的异同。
1.在定义数组的同时对数组初始化。
/* c6-1.c 在定义数组的同时对数组初始化*/ #include \void main( )
{ int a[4]={0,1,2,3};
printf(\ %d %d %d\\n\}
2.不使用循环对单个数组元素赋值。
/* c6-2.c 不使用循环对单个数组元素赋值*/ #include \void main( )
{ int a[4]; a[0]=2;a[1]=4;a[2]=6;a[3]=8;
printf(\}
3.用循环结构,从键盘输入为每个数组元素赋值,输出各数组元素。 /* c6-3.c 利用循环通过键盘对数组元素赋值*/ #include \ void main( ) { int i,a[4];
for(i=0; i<4; i++)
scanf(\ printf(\
for(i=0; i<4; i++)
printf(\ \
26
}
printf(\
(二)编写一程序,为一维数组a中的元素赋值,并按照逆序输出。
编程提示:通过对一维数组的输入输出来实现。
1. 首先复习教材上知识点,充分理解例题。
2. 对一维数组的输入可以参照实验内容(一)中的三种方法,选择其一输出,用循环结构来实现。
3. 注意是逆序输出,可以通过输出时,在for语句中利用循环变量递减的方法来实现。 /* c6-4.c 利用循环实现一维数组的输入输出*/ #include \void main( )
{ int i,a[10]; /* 定义循环变量i和一维数组a */ for (i=0;i<=9;i++)
scanf(\
for ( ____ _) /* 请补充完整循环语句 */ printf(\ \ /* 按照逆序输出 */ printf(\} (三)编写程序,输出一维数组a中的元素最小值及其下标。
编程提示: 1.定义一个整型变量存放最小值下标,将其初始化为0 ,例如:int p=0;即从数组第零个元素开始判断。
2.通过循环,依次判断数组中的每一个元素a[i]是否小于a[p],如果是,则将p和a[p]的值作相应的改变。
/* c6-5.c 输出一维数组中元素的最小值及其下标*/ #include \void main( )
{ int i,m,p,a[10]={9,8,7,6,1,3,5,18,2,4}; /* m为最小值,p为其下标 */ m=a[0]; p=0;
for(i=1;i<10;i++) if (a[i] { ; p=i;} /* 请补充完整此语句 */ printf(\ /* 输出一维数组a中的最小值及其下标 */ } (四)编写一程序,求一维数组中下标为偶数的元素之和。 编程提示: 1.定义一个数组a并初始化。 2.定义一个整型变量sum,存放下标为偶数的元素和,并初始化为0。 3.从数组的第0个元素开始,每次循环变量递增2,一直到数组的最后一个元素,将其累加到sum变量。 4.输出sum变量即为下标为偶数的元素之和。 /* c6-6.c 求一维数组中下标为偶数的元素之和*/ #include \void main( ) { int i,sum=0; /* 初始化sum为0 */ 27 int a[]={2,3,4,5,6,7,8,9}; for(i=0; i<8; ) /* 请补充完整循环语句 */ sum+=a[i]; printf(\} (五)编写一程序,将100以内的素数存放到一个数组中。 编程提示:这是一个双层循环嵌套的程序。 1.首先复习教材上的内容,掌握判断素数的方法。 2.定义一个数组存放100以内的素数,想一想该数组的大小应该为多少? 3.定义一个整型变量作循环变量。 4.定义一个整型变量作为数组元素下标的计数器,想一想该变量应赋什么样的初值? 5.在外层循环中,对1~100之间的所有整数进行判断;内层循环则判断每个整数是否为素数。如果是素数,存放到数组中,并使数组下标变量加1;否则继续判断下一个整数。 6.用循环语句输出数组中的所有素数,注意循环变量的初值和终值如何确定。 (六)将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1,2,要求改为按2,1,4,5,6,8的顺序存放(注意是逆序存放而不是逆序输出)。 编程提示: 1.定义一个数组,为该数组赋值(可以在定义时初始化,也可以用循环语句)。 2.在循环中,使第0个元素与第5个元素交换,第1个元素与第4个元素交换,第2个元素与第个3元素交换(注意循环次数按n/2确定,n为数据个数)。 3.输出逆序存放后的各数组元素(使用循环语句)。 五、实验注意事项 (一)C规定,数组的下标下界为0,因此数组元素下标的上界是该数组元素的个数减1。 例如,有定义:int a[10]; 则数组元素的下标上界为9。 (二)由于数组的下标下界为0,所以数组中下标和元素位置的对应关系是:第一个元素下标为0,第二个元素下标为1,第三个元素下标为2,依次类推,第n个元素下标为n-1。 (三)数值型数组要对多个数组元素赋值时,使用循环语句,使数组元素的下标依次变化,从而为每个数组元素赋值。 例如:int a[10],i; for(i=0;i<10;i++) scanf(\不能通过如下的方法对数组中的全部元素赋值。 int a[10],i; scanf(\ 六、思考题 (一)定义一个数组名为ftop且有5个int类型元素的一维数组,同时给每个元素赋初值为0,请写出数组的定义语句 。 (二)下面程序的功能是:为一维数组a中的元素赋值,并按照逆序输出。请在程序中的横线上填入正确的内容。 #include \ 28 void main( ) { int i,a[10]; /* 定义循环变量i和一维数组a */ for(i=0;i<=9;i++) scanf(\ for( ;i>=0;i--) printf(\ /* 按照逆序输出 */ printf(\} (三)下面程序的功能是:输出一维数组a中的最小值及其下标。请在程序中的横线上填入正确的内容。 #include \void main( ) { int i,p=0,a[10]; /* 定义a为数组名,p为下标名 */ for(i=0; i<10; i++) scanf(\ for(i=1; i<10; i++) if (a[i] printf(\ /* 输出一维数组a中的最小值及其下标 */ } (四)下面程序的功能是:求一维数组中下标为偶数的元素之和并输出。请在程序中的横线上填入正确的内容。 #include \void main( ) { int i,sum=0; int a[ ]={2,3,4,5,6,7,8,9}; for(i=0; i<8; ) sum+=a[i]; printf(\ } 29 实验七 二维数组程序设计 一、实验学时 2学时 二、实验目的 (一)掌握二维数组的定义、赋值及输入输出的方法; (二)掌握与二维数组有关的算法如查找、矩阵转置等; (三)掌握在程序设计中使用数组的方法。数组是非常重要的数据类型,循环中使用数组能更好地发挥循环的作用,有些问题不使用数组难以实现。 (四)掌握在VC++环境下上机调试二维数组程序的方法,并对结果进行分析。 三、预习要求 熟悉二维数组的定义、引用和相关算法(求最大值、最小值)的程序设计,同时要掌握在程序设计中利用双重循环来实现二维数组的输入和输出。 四、实验内容 (一)二维数组的初始化,即给二维数组的各个元素赋初值。下面的几个程序都能为数组元素赋值,请输入程序并运行,比较这些赋值方法有何异同。 1.在定义数组的同时对数组元素分行初始化。 /* c7-1.c 二维数组的初始化(分行)*/ #include \void main( ) { int i,j,a[2][3]={{1,2,3},{4,5,6}}; for(i=0; i<2; i++) { for(j=0; j<3; j++) printf(\printf(\} } 2.不分行的初始化。把{ }中的数据依次赋值给数组的各个元素。 /* c7-2.c 二维数组的初始化(不分行)*/ #include \void main( ) { int i,j,a[2][3]={1,2,3,4,5,6}; for(i=0;i<2;i++) { for(j=0;j<3;j++) printf(\printf(\} } 3.为部分数组元素初始化。 30 如:数组定义语句为:int i,j,a[2][3]={{1,2},{4}}; 4.可以省略第一维的定义,但不能省略第二维的定义。 如:int a[ ][3]={1,2,3,4,5,6}; 依次运行以上程序,比较这四种定义方式的不同之处。 (二)求一个4×4矩阵的主对角线元素之和,填空并运行程序。 编程提示: 1.定义一个4行4列的二维数组a。 2.可利用双重循环的嵌套为该二维数组的各个数组元素赋值,一般格式为: for(i=0; i<4; i++) for(j=0; j<4; j++) scanf(\ 3.用循环求和,并注意矩阵对角上线元素的特征是:行下标和列下标相同。 4.输出对角线元素之和。 /* c7-3.c 求一个4×4矩阵的主对角线元素之和*/ #include \void main( ) { int a[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,sum=0; for(i=0; i<4; i++) _____; /*把对角线元素的和放在变量sum中 */ printf(\ /*输出对角线元素的和*/ } (三)打印出以下的杨辉三角(要求打印出10行) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 编程提示: 1.杨辉三角的特点是:第1列和对角线上的元素为1,其它各元素的值都是上一行上一列元素和上一行前一列元素之和。 2.定义一个10×10的二维数组a。 3.先用一个单层循环为第一列和对角线上的元素赋值。如: for(i=0; i<10; i++) { a[i][i]=1;a[i][0]=1; } 4.再用一个双重循环嵌套为其它元素赋值。 for( ; i<10; i++) 31 for( ; ; j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; 想一想,划横线的地方应当填入什么内容? 5.计算之后再用一个双重循环嵌套输出杨辉三角。注意各层循环变量的初值和终值怎样确定。 (四)统计3个学生,每个学生4门课程的考试成绩,要求输出每个学生的总成绩,每个学生的平均成绩,3个学生的总平均成绩。填空并运行程序。 /* c7-4.c 学生成绩处理 */ #include \void main( ) { int stu[3][4],i,j,t[3]; float sum=0,a[3]; for(i=0; i<3; i++) /* 输入三个学生的4门课程考试成绩 */ for(j=0; j<4; j++) scanf(\ for(i=0; i<3; i++) { t[i]=0; for(j=0; j<4; j++) { sum+=stu[i][j]; /* sum存放三个学生的4门课程总成绩 */ t[i]+=stu[i][j]; /* t[i]存放第i个学生的4门课程成绩 */ } printf(\输出第i个学生的总成绩 */ ; printf(\存放第i个学生的4门课程平均成绩*/ } printf(\} (五)已知二维数组a中的元素为: 4 4 34 37 3 12 5 6 5 求二维数组a中的最大值和最小值。程序的输出应为:The max is: 37 The min is: 3 填空并运行程序。 /* c7-5.c 求二维数组中元素的最大值与最小值 */ #include \void main( ) { int a[3][3]={4,4,34,37,3,12,5,6,5},i,j,max,min; max=a[0][0]; ; for( i=0; i<3; i++) for( j=0; j<3; j++) 32 { if ( max < a[i][j] ) max = a[i][j]; if ( min > a[i][j] ) min = a[i][j]; } printf(\ printf(\ } (六)以下程序是查找二维数组a的最大元素及其下标,填空并运行程序。 /* c7-6.c 求二维数组中元素的最大值及其下标 */ #include \void main() { int a[4][4]={{1,2,3,4},{3,4,5,6},{5,6,7,8},{7,8,9,10}}; int i,j,max,l,c; /* max存放最大值,l、c分别存放行和列的下标 */ max=a[0][0]; for(i=0; i<4; i++) for(j=0; j<4; j++) if(max (七)下面的程序是自动形成并输出如下矩阵,填空并运行程序。 1 2 3 4 5 1 1 6 7 8 1 1 1 9 10 1 1 1 1 11 1 1 1 1 1 /* c7-7.c 生成指定的矩阵*/ #include \void main( ) { int i,j,k,a[5][5]; k=2; for(i=0; i<5; i++) /* 行循环 */ for(j=0; j<5; j++) /* 列循环 */ if( ) a[i][j]=1; /* 产生矩阵的下三角元素 */ else a[i][j]=k++; /* 产生矩阵的上三角元素 */ for(i=0; i<5; i++) { for(j=0; j<5; j++) printf(“M”,a[i][j]); printf(“\\n”); /* 每输出一行后换行 */ } } 33 (八)下面程序的功能是实现方阵(如:3行3列)的转置(即行列互换) 如:如果原来的矩阵:100 200 300 400 500 600 700 800 900 程序输出应为: 100 400 700 200 500 800 300 600 900 填空并运行程序。 /* c7-7.c 矩阵转置*/ #include \void main( ) { int i,j,temp; int array[3][3]={{100,200,300},{400,500,600},{700,800,900}}; printf(\原来的矩阵为:\\n\ for(i=0; i<3; i++) { for(j=0; j< ; j++) printf(\ printf(\ for(i=0; i<3; i++) { for(j=0; ;j++) {temp=array[i][j];array[i][j]=array[j][i];array[j][i]=temp;} } printf(\转置后的矩阵为:\\n\ for(i=0; i<3; i++) { for(j=0; j<3; j++) printf(\ } /*输出一行后要换行*/ } 请将此矩阵转置程序与教材上的矩阵转置程序进行比较,各用于何种类型矩阵比较合适? 五、实验注意事项 (一)C规定,二维数组的行和列的下标都是从0开始的。 例如,有定义:int b[3][[5]; 则数组b的第一维下标的上界为2,第二维下标的上界为4。说明定义了一个整型二维数组b,它有3行5列共3*5=15个数组元素,行下标为0,1,2,列下标为0,1,2,3,4,则数组b的各个数组元素是: b[0][0],b[0][1],b[0][2],b[0][3],b[0][4] b[1][0],b[1][1],b[1][2],b[1][3],b[1][4] b[2][0],b[2][1],b[2][2],b[2][3],b[2][4] (二)要对二维数组的多个数组元素赋值,应当使用循环语句并在循环过程中,使数组元素的下标变化。可用下面的方法为所有数组元素赋值: int i,j,a[3][3]; for(i=0; i<3; i++) 34 for(j=0; j<3; j++) scanf(\ 六、思考题 (一)定义一个5行5列的二维数组a,使下三角的所有元素初始化为1,在划线处填空。 int i,j,a[5][5]; for(i=0; i<5; i++) for(j=0; j<5; j++) if( ) a[i][j]=1; (二)求一个4×4矩阵的主对角线元素之和,填空并运行程序。 #include \ void main( ) { int a[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,sum=0; for(i=0; i<4; i++) ; printf(“sum=%d\\n”,sum); } (三)求二维数组a中的最大元素及其下标,填空并运行程序。 #include \ void main( ) {int a[4][4]={{1,2,3,4},{3,4,5,6},{5,6,7,8},{7,8,9,10}}; int i,j,max,l,c; max=a[0][0]; for(i=0; i<4; i++) for(j=0; j<4; j++)