




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2836417280实验四 数组一、实验目的及要求1. 掌握一维数组和二维数组的定义、赋值和输入输出的方法;2. 掌握字符数组和字符串函数的使用;3. 掌握与数组有关的算法(特别是排序算法)。二、实验学时6学时三、实验任务1.调试下列c50101.c程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。#inclue <stdio.h>#define N 10void main( ) int i,aN,av;for(i=0;i<N;i+) scanf("
2、%d",ai); for(i=0;i<N;i+) printf("%d",ai); if(i%3=0) printf("n")
3、; for(i=0;i!=N;i+) av+=ai; printf("av=%fn",av); 上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意数组元素的输入问题、输出格式问题等。请
4、使用前面实验所掌握的调试工具,判断程序中的错误并改正。相关知识:数组元素值的输入;求和求平均值的相关变量初始化问题;输出格式符的正确使用。数组元素的格式化输出。2.下面c50102.c程序是输入5个数据,然后求它们的和并输出结果。#include <stdio.h>void main( )int i, a5, sum = 0; scanf("%d,%d,%d,%d,%d", a ); for (i = 0; i <= 4; i +) sum += ai; printf("sum = %d n", sum);该程序中有哪些错误?如何修改?
5、写出正确运行后的结果。相关知识:数组元素的输入和输出只能逐个元素操作,而不能以数组名作整体操作。3.有一个3行4列的距阵,现要求编程求出其中最大的那个元素的值,以及它所在的行号与列号。程序c50103.c的初始说明和输出语句如下所示,请补充完成该程序。#include <stdio.h>void main( )int i, j, row, colum, max;static int a34 = 1,2,3,4, 9,8,7,6, -10,10,-5,2; printf(" Max = %d, Row = %d, Colum = %d n", max, row,
6、colum);编程点拨: 初始化row、colum及max。 使用for循环的双重循环逐行把元素值与max值进行比较,比较结果如果元素值比max值大,则改变max值,同时改变row和colum的值。最后输出max,row和colum的值。相关知识:二维数组的定义和初始化;使用二重循环对二维数组元素的访问;求最值时相关变量初值的设定。4.数组中已存互不相同的10个整数,从键盘输入一个整数,输出与该值相同的数组元素下标。 编程点拨:输入要查找的变量x的值;使用循环将输入的数和数组元素逐个进行比较,若找到,则提前退出循环;根据循环是正常结束还是提前结束来判断是否找到x。c50104.c部分源代码:#
7、include <stdio.h>void main( ) int i, x, a10=1,2,3,4,5,6,7,8,9,10; /*输入x变量的值 */ for ( i=0; i<10; i+ ) printf("%4d",ai); printf("n"); /* 循环查找与x相等的元素 */if ( ) printf("%dn",i); /* 输出查找结论 ,输出下标值 */else printf("Not found %dn",x);5.编写程序,任意输入10个整数的数列,先将整数按照从大
8、到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。编程点拨:定义数组时多开辟一个存储单元;找合适的插入位置; 20 18 16 14 12 10 8 6 4 2a0123456789下标=10k15找合适的插入位置:j=3j=3j=0 aj k? 即20 15 ? 是 j+j=1 aj k? 即18 15 ? 是 j+j=2 aj k? 即16 15 ? 是 j+j=3 aj k? 即14 15 ? 不是,结束循环while( aj>=k && j<10 ) j+;找不到比k小的元素时也要退出循环 向右移动插入点后的元素;先把a9移到a10
9、,a8移到a9,ai移到ai+1,直到把aj移到aj+1,即:i=j停止移动元素。 for(i=9;i>=j;i- ) ai+1=ai; 20 18 16 14 12 10 8 6 4 2a0123456789下标=10k15插入。c50105.c部分源代码:#include <stdio.h>#define N 11void main() int i,j,aN; printf(“Please input 10 numbers:”); for (i=0; i<N-1; i+) scanf(“%d”,&ai); /*乱序输入10个整数*/ 相关知识:比较排序法、选
10、择排序法和冒泡排序法;数据元素的插入。6.输入十个互不相同的整数并存在数组中,找出最大元素,并删除。 编程点拨:求最大值所在元素下标:不必用max记住最大值,只要用k记住最大值所在的元素下标;删除最大值:从最大值开始将其后面元素依次前移一个位置。 2 8 16 14 1 10 8 16 4 20 6a0123456789下标=10部分源代码:k=0;if ( ak<a1 ) 真k=0; for ( i=1; i<10; i+ ) if ( ak<ai ) k=i;k=1; 执行if ( ak<a2 ) 假k=2; 不执行if ( ak<a3 ) 真k=3; 执行相
11、关知识:删除数组元素的概念;移动数组元素的算法;求最大值位置的算法。7. 以下c50107.c程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。请填空:#include <stdio.h>void main( ) float x1000, sum=0.0, ave, a; int n=0, i; printf ("Enter mark : n") ; scanf("%f", &a); while (a>=0.0 && n<1000) sum+=
12、; xn= ; n+; scanf("%f", &a); ave= ; printf ("Output : n"); printf ("ave = %fn", ave); for (i=0; i<n; i+) if ( ) printf("%fn", xi);8. 综合编程题:打印如下杨辉三角形1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 编程点拨:杨辉三角形有如下特点:只有下半三角形有确定的值;第一列和对角线上的元素值都是1;其它元素值均是前一行同一列元素与
13、前一行前一列元素之和。9.调试下列c50201.c程序,使之具有如下功能:任意输入两个字符串(如:“abc 123”和“china”),并存放在a,b两个数组中。然后把较短的字符串放在a数组,较长的字符串放在b数组。并输出。#include <stdio.h>#include <string.h> void main() char a10,b10; int c,d,k,ch; scanf("%s",&a); scanf("%s",&b); printf("a=%s,b=%sn",a,b); c=
14、strlen(a); d=strlen(b); if(c>d) for(k=0;k<d;k+) ch=ak;ak=bk;bk=ch; printf("a=%sn",a); printf("b=%sn",b); 相关知识:程序中的strlen()是库函数,功能是求字符串的长度,它的原型保存在头文件"string.h"中。调试时注意库函数的调用方法,不同的字符串输入方法,通过错误提示发现程序中的错误。10.阅读下面的c50202.c程序,然后回答后面的问题:#include <stdio.h>#include &l
15、t;string.h> void main( ) char s180, s240; int i = 0, j = 0; printf(" n Please input string1:"); scanf("%s", s1); printf(" n Please input string2:"); scanf("%s", s2); while (s1i!= '0' )i+; while (s2j!= '0' )s1i+=s2j +; s1i= '0' printf
16、("n New string: %s", s1);编辑、运行该程序,然后分别输入Country 和side。请问:程序执行的结果是什么?该程序的功能是什么?相关知识: 串结束符0; 自编写库函数。11.填空完成c50203.c程序,使其功能是对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdefg和abceef,则输出为-1。程序如下: #include <stdio.h> void main ( ) char str1100,str2100; int i,s; printf(&quo
17、t;n Input string 1:n");gets(str1); printf(“n Input string 2:n”);gets(str2); i= (1) ; while(str1i=str2i)&&(str1i!= (2) ) i+; s= (3) ; printf("%dn",s); 12.填空完成c50204.c程序,使其的功能是统计从终端输入字符中每个大写字母的个数。用#号作为输入结束标志。程序如下: #include <stdio.h> #include <ctype.h> void main ( ) i
18、nt num26,i; char c; for (i=0;i<26;i+) numi=0; while ( (1) != '#') /* 统计从终端输入的大写字母个数*/ if (isupper(c) numc-65 (2) ; for (i=0;i<26;i+) /* 输出大写字母和该字母的个数*/ if (numi)printf("%c:%dn",i (3) ,numi); 13.编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。以“stop”作为输入的最后一个字符串。 相关知识: 字符数组的输入输出可以有两种方法:² 逐个字符输入输出。用格式符“%c”输入或输出一个字符,此时输入输出函数中的输入输出项是数组元素名,而不是字符数组名;² 将整个字符串一次输入或输出。用“%s”格式符,意思是输出字符串(string),此时输入
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 代收玉米合同样本
- 兼职泳教合同范例
- 《内科常见疾病诊疗》课件
- 一般保证合同范例
- 共同富裕合作合同范例
- 中山美白加盟合同样本
- 高中历史开放试题及答案
- 人教版五年级数学试题《分数加减混合运算》
- 高校财务面试试题及答案
- 领导力相关商务英语试题及答案
- 丁丽娟《数值计算方法》五章课后实验题答案(源程序很详细-且运行无误)
- 情境学习理论在教育中的应用
- 血糖监测操作流程及考核标准(100分)
- 部编版语文二年级下册第6单元奇妙的大自然大单元整体作业设计
- 2023年住院医师考试-康复医学住院医师考试题库(含答案)
- 高中音乐鉴赏 《黄河大合唱》
- 2022年贵州贵阳市中考英语真题
- FZ/T 32001-2018亚麻纱
- 《大数据环境下的网络安全问题探讨(论文)8000字》
- 粤教科技版科学六年级下册第14课《生物生存的环境》教学课件
- 高考语文作文素材:《典籍里的中国》课件33张
评论
0/150
提交评论