试完成运行,并将其运行过程及结果在实验报告中体现。【小结】3种循环的异同点?能否相互转换?for循环控制单元的表达式与while循环中表达式是如何对应的?22
22 试完成运行,并将其运行过程及结果在实验报告中体现。 【小结】 3 种循环的异同点?能否相互转换?for 循环控制单元的表达式与 while 循环中表达式是如何对应的?
实验六数组一、实验目的1、熟练掌握一维数组的基本概念,如何定义一维数组,如何初始化一维数组,输入输出、引用数组元素等方法:2、熟练掌握字符数组和字符串函数的使用:3、掌握二维数组的相关操作:引用数组元素、行(列)求和,行(列)最大最小值,整个数组的输入输出等。;4、掌握与数组有关的常用算法,如找最大最小值、排序、首尾颠倒等:5、掌握与二维数组有关的算法,如找最大最小值(或位置)、转置数组等。二、相关知识点数组的定义:数组元素的引用;数组的赋值;数组的首址:三、实验内容一(验证及程序分析)Eg6-1:用一维数组计算多个(小于等于20个数)单精度实数的平均值(一维数组的应用)(1)算法分析:先定义一个大小为20的浮点数组程序运行时先将数据加总变量初设为0,并输入数据。经过if选择语句来判断输入的数是否超过20,当输入小于20的时候,执行数据输入循环内的程序,否则执行输出“Pleaseinputanumberlessthan20"的消息。循环中的程序功能为读取用户输入的数据,并累加至Summary变量中。平均值的求法为数据总和除以数据个数。(2)源程序:#include<stdio.h>voidmainOint count=0;/int i,float number[20];float summary,float average;summary=0,printf("Please input the number of data:"),1/输入要计算的个数scanf("%d",&count);23
23 实验六 数组 一、实验目的 1、熟练掌握一维数组的基本概念,如何定义一维数组,如何初始化一维数组,输入 输出、引用数组元素等方法; 2、熟练掌握字符数组和字符串函数的使用; 3、掌握二维数组的相关操作:引用数组元素、行(列)求和,行(列)最大最小值, 整个数组的输入输出等。; 4、掌握与数组有关的常用算法,如找最大最小值、排序、首尾颠倒等; 5、掌握与二维数组有关的算法,如找最大最小值(或位置)、转置数组等。 二、相关知识点 数组的定义; 数组元素的引用; 数组的赋值; 数组的首址; 三、 实验内容一(验证及程序分析) Eg6-1: 用一维数组计算多个(小于等于 20 个数)单精度实数的平均值(一维数组的应 用) (1)算法分析:先定义一个大小为 20 的浮点数组,程序运行时先将数据加总变量初 设为 0,并输入数据。经过 if 选择语句来判断输入的数是否超过 20,当输入小于 20 的 时候,执行数据输入循环内的程序,否则执行输出“Please input a number less than 20"的 消息。循环中的程序功能为读取用户输入的数据,并累加至 Summary 变量中。平均值的 求法为数据总和除以数据个数。 (2)源程序: #include <stdio.h> void main() { int count=0; int i; float number[20]; float summary; float average; summary=0; printf("Please input the number of data:"); //输入要计算的个数 scanf("%d",&count );
/判断合法个数if(count<20)for(i=0;i<count,i++)1/输入count个实数printf("Please input a number:");scanf("%f",&number[i]);//累加求和summary+=number[i];-1/计算平均值average=summary/count,Ⅱ输出平均值printf("Theaverage is%5.2fln",average)elseprintf("Pleaseinputanumberlessthan20.")1(3)输入数据:(4)输出结果:(5)同学们可以试善输入大于20的数字,看看结果有什么变化?Eg6-2:分别求一个5x5矩阵的所有行之和、列之和、17241815和。(二维数组的应用)两条对角线上的元素之235714164613202210192131211182529【提示】Eg6-7:检验并打印魔方矩阵也建立在此题的基础上,有兴趣的同学可以试一试。(1)算法分析:在下面的5x5阶矩阵中,先将这个矩阵中的元素读到一个二维整型数组中,对每一行、每一列的元素之和分别定义一个一维整型数组,对每一对角线上的元素之和只须定义2个变量。(2)源程序#include<stdio.h>N5#definevoidmain()int i, j,intx[N)[N)= ((17,24,1,8,15),(23,5,7,14,16), (4,6,13,20,22),(10,12,19,21,3),(11,18,25,2,9));24
24 //判断合法个数 if(count<20) { for(i=0;i<count;i++) { //输入 count 个实数 printf("Please input a number:"); scanf("%f",&number[i]); //累加求和 summary+=number[i]; } //计算平均值 average=summary/count; // 输出平均值 printf("The average is %5.2f\n",average); } else printf("Please input a number less than 20."); } (3)输入数据: (4)输出结果: (5) 同学们可以试着输入大于 20 的数字,看看结果有什么变化? Eg6-2: 分别求一个 5×5 矩阵的所有行之和、列之和、 两条对角线上的元素之 和。(二维数组的应用) 【提示】Eg6-7:检验并打印魔方矩阵也建立在此题的基础上,有兴趣的同学 可以试一试。 (1)算法分析: 在下面的 5×5 阶矩阵中,先将这个矩阵中的元素读到一个二维整型数组中,对每一 行、每一列的元素之和分别定义一个一维整型数组,对每一对角线上的元素之和只须定 义 2 个变量。 (2)源程序 #include <stdio.h> #define N 5 void main( ) { int i, j; int x[N][N] = {{17,24,1,8,15},{23,5,7,14,16}, {4,6,13,20,22}, {10,12,19,21,3},{11,18,25,2,9}}; 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
introwSumN],colSumN],diagSuml,diagSum2int flag =1,I行求和for (i=0; i<N; i++)rowSum[i] =0;for (i=0; j<N; j++)rowSum[i] =rowSum[] +x[i][i];1/列求和for (i=0; j<N; j++)2colSum[il = 0:for (i=0; i<N; i++)colSum[i] = colSum[i] + x[i][i],//主对角线求和diagSuml = 0:for (i=0; j<N; j++)diagSuml = diagSum1 +x[ili];IⅡ次对角线求和diagSum2=0,for (i=0; j<N; j++)diagSum2=diagSum2 +x[i][N-1-j];1/输出行之和for (i=0.i<N;i++)tprintf("%4d",rowSum[i]);printf("In"),1/输出列之和for (i=0; i<N; i++):printf("%4d",colSum[i]);1printf("n")/输出主对角线和次对角线之和printf("%4d%4dn",diagSuml,diagSum2);(3)运行结果:Eg6-3:输入一长度不超过10的字符串,判断它是否回文(字符串的应用)25
25 int rowSum[N], colSum[N], diagSum1, diagSum2; int flag = 1; // 行求和 for (i=0; i<N; i++) { rowSum[i] = 0; for (j=0; j<N; j++) { rowSum[i] = rowSum[i] + x[i][j]; } } //列求和 for (j=0; j<N; j++) { colSum[j] = 0; for (i=0; i<N; i++) { colSum[j] = colSum[j] + x[i][j]; } } //主对角线求和 diagSum1 = 0; for (j=0; j<N; j++) { diagSum1 = diagSum1 + x[j][j]; } //次对角线求和 diagSum2 = 0; for (j=0; j<N; j++) { diagSum2 = diagSum2 + x[j][N-1-j]; } //输出行之和 for (i=0; i<N; i++) { printf("%4d", rowSum[i]); } printf("\n"); //输出列之和 for (i=0; i<N; i++) { printf("%4d", colSum[i]); } printf("\n"); //输出主对角线和次对角线之和 printf("%4d %4d\n", diagSum1, diagSum2); } (3)运行结果: Eg6-3:输入一长度不超过 10 的字符串,判断它是否回文(字符串的应用)
如:ab22ba,level均为回文。(1)算法分析:回文其实就是字符串中的字符对称相等,所以就要判断对称的字符是否都相等,需要用循环来控制。可设一字符数组a,长度为10,用来存放此字符串,再设循环变量i,j,兼做数组下标,进入循环时i的值为0,指向第零个元素,j的值为数组长度减1,指向最后一个元素,判断a[i和a[门是否相等,如出现不等就退出循环下次循环时i增1,j减1,继续判断a[订和a[的关系,若没出现过不等的情况就是回文。长度为偶数ab22ba,当i=3,j=2时停止长度为奇数1evel,当i=2,j=2时停止,故i<j为循环条件。(2)源程序:#include<string.h>/*程序中要用到字符串处理函数*/#include<stdio.h>void main()1char a[10];intij.f=1:/*f用做标志,若发现某一a[]与ai]不等,就置f为0,退出循环,若f为1就是回文,否则不是*/scanf("%s",a);/*用格式符s整体输入字符串,因a为数组名,已代表数组起始地址,所以输入时不必加取地址符*for(i=0,j=strlen(a)-1;i<j;i++j--)1if(a[i]=a[i]) f=0;if(!f)break;/*若f为0提前退出循环,不是回文*1if(f)printf("Yesln");elseprintf("Noln");1(3)在VC++编辑环境下编辑源程序。(4)编译直到没有错误。(5)运行,输入:wh33hw(6)查看输出结果:四、实验内容二(综合及设计类)Eg6-4:用选择法对10个整数排序。10个整数用scanf函数输入。(1)算法分析:选择法的排序思想是从所有元素中选择一个最小元素放在a[0】(即让最小元素a[]与a[0]交换,j变量是用来记录最小数的下标值的),作为第一轮:第二轮是从a[1]开始到最后的各元素中再选择一个最小元素,放在a[1]中..·以下类推。显然,n个数要进行n-1轮,在第一轮中要比较n-1次,第二轮中比较n-2次,…",第i轮中比较n-i次。(2)编写程序:26
26 如:ab22ba,level 均为回文。 (1)算法分析:回文其实就是字符串中的字符对称相等,所以就要判断对称的字 符是否都相等,需要用循环来控制。可设一字符数组 a,长度为 10,用来存放此字符串, 再设循环变量 i,j,兼做数组下标,进入循环时 i 的值为 0,指向第零个元素,j 的值为 数组长度减 1,指向最后一个元素,判断 a[i]和 a[j]是否相等,如出现不等就退出循环, 下次循环时 i 增 1,j 减 1,继续判断 a[i]和 a[j]的关系,若没出现过不等的情况就是 回文。 长度为偶数 ab22ba,当 i=3,j=2 时停止 长度为奇数 level, 当 i=2,j=2 时停止,故 i<j 为循环条件。 (2)源程序: #include <string.h> /* 程序中要用到字符串处理函数 */ #include <stdio.h> void main( ) { char a[10]; int i,j,f=1 ; /* f 用做标志,若发现某一 a[i]与 a[j]不等,就置 f 为 0,退出 循环,若 f 为 1 就是回文,否则不是*/ scanf("%s",a); /*用格式符 s 整体输入字符串,因 a 为数组名,已代表数 组起始地址,所以输入时不必加取地址符 */ for(i=0,j=strlen(a)-1;i<j;i++,j-) { if(a[i]!=a[j]) f=0; if(!f) break ; /* 若 f 为 0 提前退出循环,不是回文 */ } if (f) printf("Yes\n"); else printf("No\n"); } (3)在 VC++编辑环境下编辑源程序。 (4)编译直到没有错误。 (5)运行,输入: wh33hw↙ (6)查看输出结果: 四、 实验内容二(综合及设计类) Eg6-4: 用选择法对 10 个整数排序。10 个整数用 scanf 函数输入。 (1)算法分析:选择法的排序思想是从所有元素中选择一个最小元素放在 a[0](即让 最小元素 a[j]与 a[0]交换,j 变量是用来记录最小数的下标值的),作为第一轮;第二 轮是从 a[1]开始到最后的各元素中再选择一个最小元素,放在 a[1]中„以下类推。 显然,n 个数要进行 n-1 轮,在第一轮中要比较 n-1 次,第二轮中比较 n-2 次,„, 第 i 轮中比较 n-i 次。 (2)编写程序: