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