c语言实验报告第五章.doc
实 验 报 告课程名称 _ C语言程序设计_实验项目 _数组(1)_实验仪器 _计算机_系 别_信息与通信工程学院_专 业_通信_班级/学号_学生姓名 _ _ 实验日期 _2013年06月19日_成 绩 _ 指导教师 _李文杰_一、 实验目的1、 掌握一维数组的定义及初始化。2、 掌握一维数组元素的引用及其应用。3、 掌握一维数组的常见算法:遍历,查找算法(顺序,折半),排序算法,插入算法,删除算法。二、 实验内容1. 描述津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。 但是津津如果一天上课超过八个小时就会不高兴,而且,上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴。如果会的话,哪天最不高兴。输入输入数据有多组,第一行包含一个整数T,表示有T组数据。每组输入包括七行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。输出输出包括一行,这一行只包含一个数字。如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1,2,3,4,5,6,7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的天。样例输入153627253540406样例输出3程序代码:# include "stdio.h" int main() int a10000; int n, r; int i, ii, tt; char c; int k, maxm; a0=0; scanf ("%d",&n); for (tt=1;tt<=n;tt+) k=0; maxm=0; for (i=1;i<=7;i+) scanf("%d%d",&r,&ii); r+=ii; ai=r; if (r>8) k+; if(amaxm<r) maxm=i; if (k=0) printf ("0"); else printf ("%d",maxm); printf ("n"); return 0; 2、描述某公司邀请40个顾客参加投票活动,选举他们最喜爱的产品,以决定公司今后的销售策略。共有编号为1号10号的10个产品,每人只能选择一个产品。编写程序,在整数数组中设置这40个值(投票情况),然后统计投票结果(每一个产品的得票数目)。输入40个数值在110(含1和10)之间的整数输出如下所示:样例输入111112333334455556666666677777888889991010样例输出如上图所示提示表头汉字之间用1个空格分隔。表体各列之间用5个空格分隔。程序代码:#include "stdio.h" int main() int a40,i,b10=0,j; for(i=0;i<40;i+) scanf("%d",&ai); printf(" n"); for(i=0;i<40;i+) bai-1+; for(i=0;i<10;i+) printf("%d %d ",i+1,bi); for(j=1;j<=bi;j+) printf("*"); printf("n"); return 0; 3、描述有n个(n<=40)学生,现要统计这n个学生一次考试中不及格的人数输入有两行,第一行为整数n;第二行为n个整数成绩(100(含)以内)输出一个整数,表示n个成绩中低于60分的个数样例输入59045678056样例输出2程序代码:#include "stdio.h" int main() int a40,i,n,k=0;scanf("%d",&n);for(i=0;i<n;i+)scanf("%d",&ai);for(i=0;i<n;i+)if(ai<60)k+;printf("%d",k);return 0; 4、描述有一个长度为n的整数序列。请写一个程序,把序列中的最小值与第一个数交换,最大值与最后一个数交换。输出转换好的序列。 输入输入包括两行。 第一行为正整数n(1n10)。 第二行为n个正整数组成的序列。输出输出转换好的序列。数据之间用一个空格隔开。样例输入531542 样例输出13245 提示注意输出时,每个数据后都有一个空格,包括最后一个数据。程序代码:# include "stdio.h" # include "math.h" int a100; int b; void hanshu(int c,int d) b=ad; ad=ac; ac=b; int main(void) a50=888888; int i,k,n,max=0,min=50; scanf("%d",&n); for(i=1;i<=n;i+) scanf("%d" ,&ai); if(ai>amax) max=i; if(ai<amin) min=i; hanshu(1,min); hanshu(n,max); for(i=1;i<=n;i+) printf("%d ",ai); printf("n "); return 0; 5、描述有n个整数,使其最后m个数变成最前面的m个数,其他各数顺序向后移m(m<n<100)个位置。 输入输入数据有2行,第一行的第一个数为n,后面是n个整数,第二行整数m。输出按先后顺序输出n个整数。样例输入5123452样例输出45123程序代码:# include "stdio.h" int main()int a100,i,n,m;scanf("%d",&n);for(i=0;i<n;i+)scanf("%d",&ai);scanf("%d",&m);for(i=n-m;i<n;i+)printf("%d ",ai);for(i=0;i<n-m;i+)printf("%d ",ai);return 0; 6、描述有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数m,请将该数插入到序列中,并使新的序列仍然有序。 输入输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。输出对于每个测试实例,输出插入新的元素后的数列。样例输入3312400样例输出1234 提示输出的数据每个后面有一个空格。程序代码:#include "stdio.h" #include "math.h" int main() int a100; int k; int n, m, i; scanf("%d%d",&n,&m); while(n!=0 && m!=0) k=0; for(i=1;i<=n;i+) scanf("%d",&ai); for (i=1; i<=n;i+) if (ai>=m && ai-1<=m && k=0) printf("%d ",m);k=1; printf("%d ",ai); if(k=0) printf("%d",m); printf("n"); scanf("%d%d",&n,&m); return 0; 7. 描述已知元素从小到大排列的两个数组x和y,请写出一个程序算出两个数组彼此之间差的绝对值中最小的一个,这叫做数组的距离。 输入第一行为两个整数m, n(1m, n1000),分别代表数组f, g的长度。 第二行有m个元素,为数组f。 第三行有n个元素,为数组g。输出数组的最短距离样例输入5512345678910样例输出1程序代码:#include "stdio.h" #include "math.h" int main() int f10000; int g10000; int minn1,minn2; int n, m, i, j; minn1=minn2=9999999; scanf("%d%d",&n,&m); for(i=1;i<=n;i+) scanf("%d",&fi); for (i=1;i<=m;i+) scanf("%d",&gi); for(i=1;i<=n;i+) for(j=1;j<=m;j+) if (abs(fi-gj)<minn1) minn1=abs(fi-gj); printf("%d",minn1); return 0; 8. 描述编一个程序,输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。输入一个字符串,长度不超过80个字符。输出删掉非英文字母后的字符串。样例输入qqwqw567bhnabc123+xyz.5样例输出qqwqwbhnabcxyz程序代码:# include "stdio.h"# include "string.h"int main()char a80;int i=0;gets(a);while(ai!=0)if(ai>=a&&ai<=z|ai>=A&&ai<=Z)printf("%c",ai);i+;printf("n");return 0;9. 描述从键盘输入一行字符,统计其中单词的个数,各单词以空格分隔,且空格数可以是多个。 输入输入只有一行句子。仅有空格和英文字母构成。输出单词的个数。样例输入stablemarriageproblemConsistsof Matchingmembers样例输出7程序代码:#include "stdio.h" int main() char c1000;int i=0; while(scanf("%s",&c)=1) i+; printf("%d",i); return 0; 10. 描述把一个字符串里所有的大写字母换成小写字母,小写字母换成大写字母。其他字符保持不变。输入输入为一行字符串,其中不含空格。长度不超过80个字符。输出输出转换好的字符串。样例输入ABCDefgh123样例输出abcdEFGH123程序代码:# include <stdio.h> int main() char c1000;int i=0; scanf("%s",&c); while(ci!=0) if(ci>=65&&ci<=90) printf("%c",ci+32); else if(ci>=97&&ci<=122) printf("%c",ci-32); else printf("%c",ci); i+; return 0; 11. 描述读入N名学生的成绩,将获得某一给定分数的学生人数输出。 输入测试输入包含若干测试用例,每个测试用例的格式为第1行:N第2行:N名学生的成绩,相邻两数字用一个空格间隔。第3行:给定分数当读到N=0时输入结束。其中N不超过1000,成绩分数为(包含)0到100之间的一个整数。输出对每个测试用例,将获得给定分数的学生人数输出(每行一个输出结果)。样例输入38060906028566056075905575750样例输出102程序代码:# include <stdio.h> int main() int c1000; int i, n, m, num; while(scanf("%d", &n)=1) if(n=0)break;num=0; for(i=1;i<=n;i+) scanf("%d",&ci); scanf("%d", &m); for(i=1;i<=n;i+) if(ci=m) num+; printf("%dn",num); return 0; 12. 描述编写一个进制转换函数,可以把一个十进制数N,转换成R进制数。使用该函数完成对输入的一个十进制数及一个要转换的进制,输出转换结果。输入输入数据包含多个测试实例,每个测试实例包含两个整数N(<=32bit整数)和R(2<=R<=16, R<>10)。输出为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。样例输入722312-43样例输出1111B-11程序代码:# include <stdio.h> int main() int a10000; int n, r; int i, j; char c; while(scanf("%d%d",&n,&r)=2) i=0; if(n<0) printf("-"); n*=-1; while(n!=0) i+; ai=n%r; n/=r; for(j=i;j>=1;j-) if(aj<10) printf("%d",aj); else c=aj+55; printf("%c",c); printf("n"); return 0; 三、 实验体会通过这次试验,我掌握了一维数组,二维数组的定义。并掌握了一维数组,二维数组,字符数组,数组作为函数的参数。不足之处是数组常见算法,例如排序算法,插入算法等的运用不是很熟练。最后,在学习到知识的同时,我对C程序的精密和美感有了更深的体会,第五章的学习使我更加爱上了独特的计算机语言。