高级语言程序设计实验任务书
b) c)
用for循环2~x-1,用2~x-1的每一个数去除x,若有一个数整除x,则说明x不是素数;否则,x就是素数。 最后,将判断结果输出。
#include
printf(\ one natural integer: \scanf(\
for(i=2;i 思考:其实,只需要判断2~ 何修改程序? 9.编程:显示所有的水仙花数。谓水仙花数,是指一个3位数,其各位数字立方和等于该数字本身。例,153是水仙花数,因为153=13+53+33 。有两种解题思路,选择其中之一编程实现: (1) 利用三重循环,将这三个数通过一定的运算符连接成一个3位数,然后判断是否是水仙 花数。 for(i=1;i<=9;i++) for(j=0;j<=9;j++) for(k=0;k<=9;k++) 注意,因水仙花是一个三位数,百位i是从1开始,不能从0开始,十位j和个数位k可以从0开始。 (2) 利用一个循环,对100~999范围内的每个3位数逐位分离后进行判断。 for(i=100;i<999;i++) { a=i/100; b=(i-a*100)/10; c=i; ??? } 10.编程:输出下列图形。 * *** ***** ******* ********* 分析:这是由星号构成的5行5列的三角形图形。每一行的星号数量为:1、3、5、7、9。考虑两点,一是每一行上星号的生成规则,二是每一行第一个星号字符的输出位置。每一行的星号与行号有关,即2*i+1,其中i是行号;每一行的输出位置比上一行少一个空格,可以这样实现:for(j=1;j<=40-i;j++) printf(“%c”, ? ?),其中i是行号。 第11页 x之间的整数能否整除x就可以判断x是否为素数,此时,如 高级语言程序设计实验任务书 实验四 数组 一、实验目的及要求: (1) 掌握一维数组和二维数组的定义、赋值和输入输出的方法; (2) 掌握字符数组和字符串函数的使用; (3) 掌握与数组有关的算法(特别是排序算法)。 二、实验内容和步骤 1.调试下列程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。 #inclue for(i=0;i printf(\; } for(i=0;i!=N;i++) av+=a[i]; printf(\; } 上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意数组元素的输入问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。 相关知识:①数组元素值的输入;②求和求平均值的相关变量初始化问题;③输 出格式符的正确使用。④数组元素的格式化输出。 2.下面程序是输入5个数据,然后求它们的和并输出结果。 #include scanf(\ for (i = 0; i <= 4; i ++) sum += a[i]; 第12页 高级语言程序设计实验任务书 printf(\} 该程序中有哪些错误?如何修改?写出正确运行后的结果。 相关知识:数组元素的输入和输出只能逐个元素操作,而不能以数组名作整体操作。 3.有一个3行4列的距阵,现要求编程求出其中最大的那个元素的值,以及它所在的行号与列号。程序的初始说明和输出语句如下所示,请补充完成该程序。 #include 编程点拨: ① 初始化row、colum及max。 ② 使用for循环的双重循环逐行把元素值与max值进行比较,比较结果如果元素值比 max值大,则改变max值,同时改变row和colum的值。 ③最后输出max,row和colum的值。 相关知识:①二维数组的定义和初始化;②使用二重循环对二维数组元素的访问;③求最值时 相关变量初值的设定。 int i, j, row, colum, max; static int a[3][4] = {{1,2,3,4}, {9,8,7,6}, {-10,10,-5,2}}; printf(\ max, row, colum); …… 4.数组中已存互不相同的10个整数,从键盘输入一个整数,输出与该值相同的数组元素下标。 编程点拨: ① 输入要查找的变量x的值; ② 使用循环将输入的数和数组元素逐个进行比较,若找到,则提前退出循环; ③ 根据循环是正常结束还是提前结束来判断是否找到x。 部分源代码: #include { int i, x, a[10]={1,2,3,4,5,6,7,8,9,10}; /*输入x变量的值 */ for ( i=0; i<10; i++ ) printf(\ printf(\ /* 循环查找与x相等的元素 */ if ( ) printf(\ /* 输出查找结论 ,输出下标值 */ else printf(\} 5.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。 第13页 高级语言程序设计实验任务书 编程点拨: ① 定义数组时多开辟一个存储单元; ② 找合适的插入位置; j=3 下标= a 0 1 2 3 4 5 6 7 8 9 10 20 18 16 14 12 10 8 6 4 2 k 15 找合适的插入位置:j=3 j=0 a[j] ≥k? 即20 ≥15 ? 是 j++ j=1 a[j] ≥k? 即18 ≥15 ? 是 j++ j=2 a[j] ≥k? 即16 ≥15 ? 是 j++ j=3 a[j] ≥k? 即14 ≥15 ? 不是,结束循环 while( a[j]>=k && j<10 ) j++; 找不到比k小的元素时也要退出循环 ③ 向右移动插入点后的元素;先把a[9]移到a[10],a[8]移到a[9],…a[i]移到a[i+1], 直到把a[j]移到a[j+1],即:i=j停止移动元素。 for(i=9;i>=j;i-- ) a[i+1]=a[i]; 下标= a 0 1 2 3 4 5 6 7 8 9 10 20 18 16 14 12 10 8 6 4 2 ④ 插入。 k 15 部分源代码: #include 第14页 高级语言程序设计实验任务书 void main() { int i,j,a[N]; printf(“Please input 10 numbers:”); for (i=0; i scanf(“%d”,&a[i]); /*乱序输入10个整数*/ …… } 相关知识:①比较排序法、选择排序法和冒泡排序法;②数据元素的插入。 6.输入十个互不相同的整数并存在数组中,找出最大元素,并删除。 编程点拨: ① 求最大值所在元素下标:不必用max记住最大值,只要用k记住最大值所在的 元素下标; ② 删除最大值:从最大值开始将其后面元素依次前移一个位置。 下标= a 0 1 2 3 4 5 6 7 8 9 10 2 8 16 14 1 10 8 16 4 20 6 部分源代码: k=0; if ( a[k] k=1; 执行 if ( a[k] k=2; 不执行 if ( a[k] k=3; 执行 k=0; for ( i=1; i<10; i++ ) if ( a[k] 相关知识:①删除数组元素的概念;②移动数组元素的算法;③求最大值位置的算法。 7. 以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。请填空: #include { float x[1000], sum=0.0, ave, a; int n=0, i; printf (\ mark : \\n\ scanf(\ while (a>=0.0 && n<1000) { sum+= ; x[n]= ; n++; scanf(\ } 第15页