湖北理工学院C语言实验四.docx

上传人:b****5 文档编号:6501256 上传时间:2023-01-07 格式:DOCX 页数:17 大小:19.03KB
下载 相关 举报
湖北理工学院C语言实验四.docx_第1页
第1页 / 共17页
湖北理工学院C语言实验四.docx_第2页
第2页 / 共17页
湖北理工学院C语言实验四.docx_第3页
第3页 / 共17页
湖北理工学院C语言实验四.docx_第4页
第4页 / 共17页
湖北理工学院C语言实验四.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

湖北理工学院C语言实验四.docx

《湖北理工学院C语言实验四.docx》由会员分享,可在线阅读,更多相关《湖北理工学院C语言实验四.docx(17页珍藏版)》请在冰豆网上搜索。

湖北理工学院C语言实验四.docx

湖北理工学院C语言实验四

实验四数组

实验课程名:

C语言程序设计

专业班级:

学号:

姓名:

实验时间:

实验地点:

K4-102指导教师:

杨慧

一、实验目的和要求

1.掌握一维数组和二维数组的定义、赋值和输入输出的方法;

2.掌握字符数组和字符串函数的使用;

3.掌握与数组有关的算法(特别是排序算法)。

二、实验内容

1.调试下列程序,使之具有如下功能:

输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。

写出调试过程。

#include

#defineN10

voidmain()

{inti,a[N],av;

for(i=0;i

     scanf("%d",a[i]);

     for(i=0;i

        {printf("%d",a[i]);

          if(i%3==0)

            printf("\n");

         }

      for(i=0;i!

=N;i++)

         av+=a[i];

      printf("av=%f\n",av);

  }

解答:

(1)源代码:

#include

voidmain()

{

inti,n,a[10];

floatavg;

n=10;

for(i=0;i

scanf("%d",&a[i]);

for(i=0;i

{

printf("%d",a[i]);

if((i+1)%3==0)

printf("\n");

}

avg=0;

for(i=0;i

avg+=a[i];

avg/=10;

printf("avg=%f\n",avg);

}

(2)运行结果:

(3)运行结果分析:

2.下面程序是输入5个数据,然后求它们的和并输出结果。

#include

voidmain()

{inti,a[5],sum=0;

scanf("%d,%d,%d,%d,%d",a);

for(i=0;i<=4;i++)

sum+=a[i];

printf("sum=%d\n",sum);

}

该程序中有哪些错误?

如何修改?

写出正确运行后的结果。

解答:

(1)源代码:

#include

voidmain()

{inti,a[5],sum=0;

scanf("%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4]);

for(i=0;i<=4;i++)

sum+=a[i];

printf("sum=%d\n",sum);

}

(2)运行结果:

(3)运行结果分析:

3.有一个3行4列的距阵,现要求编程求出其中最大的那个元素的值,以及它所在的行号与列号。

下面程序的初始说明和输出语句如下所示,请补充完成该程序。

#include

voidmain()

{inti,j,row,colum,max;

staticinta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};

……

printf("Max=%d,Row=%d,Colum=%d\n",max,row,colum);

}

解答:

(1)源代码:

#include

voidmain()

{

inti,j,row=0,colum=0,max;

inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};

max=a[0][0];

for(i=0;i<=2;i++)

for(j=0;j<=3;j++)

if(a[i][j]>max)

{

max=a[i][j];

row=i;

colum=j;

}

printf("max=%d,row=%d,colum=%d\n",max,row,colum);

}

(2)运行结果:

(3)运行结果分析:

4.数组中已存互不相同的10个整数,从键盘输入一个整数,输出与该值相同的数组元素下标。

解答:

(1)源代码:

#include

voidmain()

{

inti,x,a[10]={1,2,3,4,5,6,7,8,9,10};

scanf("%d",&x);

for(i=0;i<10;i++)

if(x==a[i])

{

printf("%d",i);break;

}

if(i==10)

printf("notfound\n");

}

(2)运行结果:

(3)运行结果分析:

5.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。

解答:

(1)源代码:

#include

#defineSIZE20

voidmain()

{

printf("请输入10个整数:

\n");

inta[SIZE];

intn=10,i,j,k,b;

for(i=0;i

{

scanf("%d",&a[i]);

}

for(i=0;i

{

for(j=i+1;j

{

if(a[i]

{

b=a[i];

a[i]=a[j];

a[j]=b;

}

}

}

printf("排序后的数为:

\n");

for(i=0;i

{

printf("%d",a[i]);

}

printf("\n");

printf("请输入要插入的一个数:

\n");

intc;

scanf("%d",&c);

n=n+1;

for(i=0;i

{

if(c>=a[i])

{

for(j=n-1;j>i;j--)

{

a[j]=a[j-1];

}

a[i]=c;

printf("插入后的数组为:

\n");

for(k=0;k

{

printf("%d",a[k]);

}

printf("\n");

return;

}

}

}

(2)运行结果:

(3)运行结果分析:

6.输入十个互不相同的整数并存在数组中,找出最大元素,并删除。

解答:

#include

intmain()

{

inta[10];

inti,k;

for(i=0;i<10;i++)

scanf("%d",&a[i]);

k=0;

for(i=1;i<10;i++)

if(a[k]

k=i;

for(i=k;i<9;i++)

a[i]=a[i+1];

for(i=0;i<9;i++)

printf("%4d",a[i]);

}

(1)运行结果:

(2)运行结果分析:

7.以下程序的功能是:

从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。

请填空:

#include

voidmain()

{floatx[1000],sum=0.0,ave,a;

intn=0,i;

printf("Entermark:

\n");

scanf("%f",&a);

while(a>=0.0&&n<1000)

{sum+=;

x[n]=;

n++;

scanf("%f",&a);

}

ave=;

printf("Output:

\n");

printf("ave=%f\n",ave);

for(i=0;i

if()printf("%f\n",x[i]);

}

解答:

(1)源代码:

#include

voidmain()

{

floatx[1000],sum=0.0,ave,a;

intn=0,i;

printf("Entermark:

\n");

scanf("%f",&a);

while(a>=0.0&&n<1000)

{

sum+=a;

x[n]=a;

n++;

scanf("%f",&a);

}

ave=sum/n;

printf("Output:

\n");

printf("ave=%f\n",ave);

for(i=0;i

if(x[i]

printf("%f\n",x[i]);

}

(2)运行结果:

(3)运行结果分析:

8.综合编程题:

打印如下杨辉三角形

1

11

121

1331

14641

15101051

解答:

(1)源代码:

#include

voidmain()

{

inti,j,a[6][6];

for(i=0;i<6;i++)

{

a[i][0]=1;

a[i][i]=1;

}

for(i=2;i<6;i++)

{

for(j=1;j<=i-1;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j];

}

for(i=0;i<6;i++)

{

for(j=0;j<=i;j++)

printf("%3d",a[i][j]);

printf("\n");

}

}

(2)运行结果:

(3)运行结果分析:

9.调试下列程序,使之具有如下功能:

任意输入两个字符串(如:

“abc123”和“china”),并存放在a,b两个数组中。

然后把较短的字符串放在a数组,较长的字符串放在b数组。

并输出。

#include

#include

voidmain()

{chara[10],b[10];

intc,d,k,ch;

scanf("%s",&a);

scanf("%s",&b);

printf("a=%s,b=%s\n",a,b);

c=strlen(a);

d=strlen(b);

if(c>d)

for(k=0;k

{ch=a[k];a[k]=b[k];b[k]=ch;}

printf("a=%s\n",a);

printf("b=%s\n",b);

}

解答:

(1)源代码:

#include

#include

voidmain()

{

chara[100],b[100];

charstr1[100],str2[100];

scanf("%s%s",str1,str2);

strcpy(a,strlen(str1)

str1:

str2);

strcpy(b,strlen(str1)>strlen(str2)?

str1:

str2);

printf("a=%s\n",a);

printf("b=%s\n",b);

}

(2)运行结果:

(3)运行结果分析:

10.阅读下面的程序,然后回答后面的问题:

#include

#include

voidmain()

{chars1[80],s2[40];

inti=0,j=0;

printf("\nPleaseinputstring1:

");

scanf("%s",s1);

printf("\nPleaseinputstring2:

");

scanf("%s",s2);

while(s1[i]!

='\0')

i++;

while(s2[j]!

='\0')

s1[i++]=s2[j++];

s1[i]='\0';

printf("\nNewstring:

%s",s1);

}

编辑、运行该程序,然后分别输入 Country和side。

请问:

① 程序执行的结果是什么?

② 该程序的功能是什么?

解答:

(1)源代码:

(2)运行结果:

(3)运行结果分析:

11.填空完成下面程序,使其功能是对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。

例如:

输入的两个字符串分别为abcdefg和abceef,则输出为-1。

程序如下:

#include

voidmain()

{charstr1[100],str2[100];

inti,s;

printf("\nInputstring1:

\n");gets(str1);

printf(“\nInputstring2:

\n”);gets(str2);

i=

(1);

while((str1[i]==str2[i])&&(str1[i]!

=

(2)))

i++;

s=(3);

printf("%d\n",s);

}

解答:

(1)源代码:

#include

voidmain()

{charstr1[100],str2[100];

inti,s;

printf("\nInputstring1:

\n");gets(str1);

printf("\nInputstring2:

\n");gets(str2);

for(i=0;;i++){

if(str1[i]==str2[i])

continue;

else

break;

}

s=str1[i]-str2[i];

printf("%d\n",s);

}

(2)运行结果:

(3)运行结果分析:

12.填空完成下面程序,使其的功能是统计从终端输入字符中每个大写字母的个数。

用#号作为输入结束标志。

程序如下:

#include

#include

voidmain()

{intnum[26],i;charc;

for(i=0;i<26;i++)num[i]=0;

while(

(1)!

='#')/*统计从终端输入的大写字母个数*/

if(isupper(c))num[c-65]

(2);

for(i=0;i<26;i++)/*输出大写字母和该字母的个数*/

if(num[i])printf("%c:

%d\n",i(3),num[i]);

}

解答:

(1)源代码:

#include

#include

voidmain()

{

intnum[26],i;

charc;

for(i=0;i<26;i++)

num[i]=0;

while((c=getchar())!

='#')

if(isupper(c))

num[c-65]+=1;

for(i=0;i<26;i++)

if(num[i])

printf("%c:

%d\n",i+65,num[i]);

}

(2)运行结果:

(3)运行结果分析:

13.编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。

以“stop”作为输入的最后一个字符串。

解答:

(1)源代码:

#include

#include

voidmain()

{chara[50][100];

inti=0,max=0,k;

while(gets(a[i])&&strcmp(a[i],"stop"))

{i++;

if(strlen(a[i])>max)

{max=strlen(a[i]);k=i;}}

printf("Thelongeststringis:

\n%s\n",a[k]);

}

(2)运行结果:

(3)运行结果分析:

14.编写程序,输入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。

如:

输入"BEIJING"、"123"和位置3,则输出:

"BEI123JING123"。

解答:

(1)源代码:

#include

#include

#include

char*insert(char*s1,char*s2,intf)

{

char*s3,*p1=s1,*p2=s2;

inti,j,k;

j=strlen(s2);

k=strlen(s1);

s3=newchar[j+k+f+1];

for(i=0;i

s3[i]=*p1;

for(i=f;i

s3[i]=*p2;

for(i=f+j,p1=s1;i

s3[i]=*(p1+f);

s3[j+k+f]='\0';

returns3;

}

voidmain()

{

chars1[20],s2[20],*p;

intf;

printf("Input:

");

gets(s1);

printf("Add:

");

gets(s2);

printf("At:

");

scanf("%d",&f);

p=insert(s1,s2,f);

printf("Theresultis:

%s",p);

delete[]p;

getch();

}

(2)运行结果:

 

三、结论(写本次实验的收获)

通过本次试验,我掌握一维数组和二维数组的定义、赋值和输入输出的方法,字符数组和字符串函数的使用和掌握与数组有关的算法

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1