C语言实验报告五.docx
《C语言实验报告五.docx》由会员分享,可在线阅读,更多相关《C语言实验报告五.docx(16页珍藏版)》请在冰豆网上搜索。
C语言实验报告五
C语言实验报告(五)
一、实验目的
1.掌握使用C语言中数组的方法
2.掌握如何定义数组,如何引用数组元素
3.掌握二维数组的元素在内存中的存放方式
4.掌握什么是字符串,字符串结束符的作用
5.实现字符串的存储和操作,包括字符串的输入和输出
6.理解C语言将字符串作为一个特殊的一维字符数组
二、实验内容
1.津津的学习情绪
描述:
津津上初中了。
妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。
另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。
但是津津如果一天上课超过八个小时就会不高兴,而且,上得越久就会越不高兴。
假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。
请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴。
如果会的话,哪天最不高兴。
输入:
输入数据有多组,第一行包含一个整数T,表示有T组数据。
每组输入包括七行数据,分别表示周一到周日的日程安排。
每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。
输出:
输出包括一行,这一行只包含一个数字。
如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1,2,3,4,5,6,7分别表示周一,周二,周三,周四,周五,周六,周日)。
如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的—天。
样例输入:
1
5 3
6 2
7 2
5 3
5 4
0 4
0 6
样例输出:
3
·程序代码:
#include"stdio.h"
inta[10000];
intmain(void)
{
intn,r;
inti,ii,tt;
charc;
intk,maxm;
a[0]=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;
a[i]=r;
if(r>8)
{
k++;
if(a[maxm]{
maxm=i;
}
}
}
if(k==0)
printf("0");
else
printf("%d",maxm);
printf("\n");
}
return0;
}
2.数据统计
描述:
某公司邀请40个顾客参加投票活动,选举他们最喜爱的产品,以决定公司今后的销售策略。
共有编号为1号~10号的10个产品,每人只能选择一个产品。
编写程序,在整数数组中设置这40个值(投票情况),然后统计投票结果(每一个产品的得票数目)。
输入:
40个数值在1~10(含1和10)之间的整数
输出:
如下所示:
样例输入:
1 1 1 1 1 2 3 3 3 3 3 4 4 5 5 5 5 6 6 6 6 6 6 6 6 7 7 7 7 7 8 8 8 8 8 9 9 9 10 10
样例输出:
如上图所示
·程序代码:
#include"stdio.h"
intmain()
{
inta[40],i,b[10]={0},j;
for(i=0;i<40;i++)
scanf("%d",&a[i]);
printf("产品得票直方图\n");
for(i=0;i<40;i++)
b[a[i]-1]++;
for(i=0;i<10;i++)
{
printf("%d%d",i+1,b[i]);
for(j=1;j<=b[i];j++)
printf("*");
printf("\n");
}
return0;
}
3.统计不及格人数
描述:
有n个(n<=40)学生,现要统计这n个学生一次考试中不及格的人数
输入:
有两行,第一行为整数n;第二行为n个整数成绩(100(含)以内)
输出:
一个整数,表示n个成绩中低于60分的个数
样例输入:
5
90 45 67 80 56
样例输出:
2
·程序代码:
#include"stdio.h"
#defineN40
intmain()
{
inta[N],K=0,i,n;
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
for(i=0;iif(a[i]<60)
K++;
printf("%d\n",K);
return0;
}
4.最值问题
描述:
有一个长度为n的整数序列。
请写一个程序,把序列中的最小值与第一个数交换,最大值与最后一个数交换。
输出转换好的序列。
输入:
输入包括两行。
第一行为正整数n(1≤n≤10)。
第二行为n个正整数组成的序列。
输出:
输出转换好的序列。
数据之间用一个空格隔开。
样例输入:
5
3 1 5 4 2
样例输出:
1 3 2 4 5
·程序代码:
#include"stdio.h"
#include"math.h"
inta[100];
ints;
voidswap(intq,intw)
{
s=a[w];
a[w]=a[q];
a[q]=s;
}
intmain(void)
{
a[50]=888888;
inti,k,n,maxm=0,minn=50;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]>a[maxm])
maxm=i;
if(a[i]minn=i;
}
swap(1,minn);
swap(n,maxm);
for(i=1;i<=n;i++)
printf("%d",a[i]);
printf("\n");
return0;
}
5.数组逆序
描述:
有n个整数,使其最后m个数变成最前面的m个数,其他各数顺序向后移m(m输入:
输入数据有2行,第一行的第一个数为n,后面是n个整数,第二行整数m。
输出:
按先后顺序输出n个整数。
样例输入:
5 1 2 3 4 5
2
样例输出:
4 5 1 2 3
·程序代码:
#include"stdio.h"
#include"math.h"
inta[100];
ints;
voidswap(intq,intw)
{
s=a[w];
a[w]=a[q];
a[q]=s;
}
intmain(void)
{
intn,i,m,k;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&m);
k=n-m+1;
for(i=k;i<=n;i++)
{
printf("%d",a[i]);
}
for(i=1;i{
printf("%d",a[i]);
}
printf("\n");
return0;
}
6.插入排序
描述:
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数m,请将该数插入到序列中,并使新的序列仍然有序。
输入:
输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。
n和m同时为0标示输入数据的结束,本行不做处理。
输出:
对于每个测试实例,输出插入新的元素后的数列。
样例输入:
3 3
1 2 4
0 0
样例输出:
1 2 3 4
·程序代码:
#include"stdio.h"
#include"math.h"
inta[100];
ints;
intpd;
voidswap(intq,intw)
{
s=a[w];
a[w]=a[q];
a[q]=s;
}
intmain(void)
{
intn,m,i;
scanf("%d%d",&n,&m);
while(n!
=0&&m!
=0)
{
pd=0;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<=n;i++)
{
if(a[i]>=m&&a[i-1]<=m&&pd==0)
{
printf("%d",m);pd=1;
}
printf("%d",a[i]);
}
if(pd==0)
printf("%d",m);
printf("\n");
scanf("%d%d",&n,&m);
}
return0;
}
7.两数组最短距离
描述:
已知元素从小到大排列的两个数组x[]和y[],请写出一个程序算出两个数组彼此之间差的绝对值中最小的一个,这叫做数组的距离。
输入:
第一行为两个整数m,n(1≤m,n≤1000),分别代表数组f[],g[]的长度。
第二行有m个元素,为数组f[]。
第三行有n个元素,为数组g[]。
输出:
数组的最短距离
样例输入:
5 5
1 2 3 4 5
6 7 8 9 10
样例输出:
1
·程序代码:
#include"stdio.h"
#include"math.h"
inta[10000];
intb[10000];
intmaxm1,maxm2,minn1,minn2;
voidswap(intq,intw)
{
intss;
ss=a[w];
a[w]=a[q];
a[q]=ss;
}
intabs(intqq,intww)
{
if(qq-ww>=0)
returnqq-ww;
else
return(qq-ww)*-1;
}
intmain(void)
{
intn,m,i,ii;
minn1=minn2=9999999;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<=m;i++)
{
scanf("%d",&b[i]);
}
for(i=1;i<=n;i++)
{
for(ii=1;ii<=m;ii++)
{
if(abs(a[i],b[ii])minn1=abs(a[i],b[ii]);
}
}
printf("%d",minn1);
return0;
}
8.字符串处理
描述