实验四 数组(详细模板)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if(c>d)
for(k=0;k<d;k++)
{ ch=a[k];a[k]=b[k];b[k]=ch;}
printf("a=%s\n",a);
printf("b=%s\n",b);
}
相关知识:程序中的strlen()是库函数,功能是求字符串的长度,它的原型保存在头文件"string.h"中。调试时注意库函数的调用方法,不同的字符串输入方法,通过错误提示发现程序中的错误。
#include <stdio.h>
voidmain ( )
{ char str1[100],str2[100];
int i,s;
printf("\n Input string 1:\n");gets(str1);
printf(“\n Input string 2:\n”);gets(str2);
i=(1);
六、注意事项
1.对应该有花括号的复合语句,忘记加花括号
2.在不该加分号的地方加了分号
3.引用数组元素时误用圆括号
4.引用数组元素超界
5.对二维或多维数组定义和引用的方式不对
6.误以为数组名代表整个数组
7.混淆字符数组与字符指针的区别
}
编辑、运行该程序,然后分别输入Country和side。请问:
程序执行的结果是什么?
该程序的功能是什么?
相关知识: 串结束符’\0’; 自编写库函数。
11.填空完成c50203.c程序,使其功能是对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdefg和abceef,则输出为-1。程序如下:
scanf("%s", s1);
printf(" \n Please input string2:");
scanf("%s", s2);
while (s1[i]!= '\0' )
i++;
while (s2[j]!= '\0' )
s1[i++]=s2[j ++];
s1[i]= '\0';
printf("\n New string: %s", s1);
部分源代码:
k=0;
if ( a[k]<a[1] )真
k=1;执行
if ( a[k]<a[2] )假
k=2;不执行
if ( a[k]<a[3] )真
k=3;执行
相关知识:①删除数组元素的概念;②移动数组元素的算法;③求最大值位置的算法。
7.以下c50107.c程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。请填空:
#include <stdio.h>
voidmain( )
{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 = %d, Row = %d, Colum = %d \n", max, row, colum);
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停止移动元素。
n++;
scanf("%f", &a);
}
ave=;
printf ("Output : \n");
printf ("ave = %f\n", ave);
for (i=0; i<n; i++)
if () printf("%f\n", x[i]);
}
8.综合编程题:打印如下杨辉三角形
1
1 1
1 2 1
1 3 3 1
1.一维数组
2.二维数组和多维数组
3.字符数组
五、操作要点
Run菜单中Go to cursor::调试程序时使用,选择该项可使程序运行到光标所在行。光标所在行必须为一条可执行语句,否则提示错误。其热键为F4。Trace into:在执行一条调用其它用户定义的子函数时,若用Trace into项,则执行长条将跟踪到该子函数内部去执行,其热键为F7。
for(i=9;i>=j;i-- ) a[i+1]=a[i];
c50105.c部分源代码:
#include<stdio.h>
#define N 11
voidmain()
{ int i,j,a[N];
printf(“Please input 10 numbers:”);
for (i=0; i<N-1; i++)
4.数组中已来自百度文库互不相同的10个整数,从键盘输入一个整数,输出与该值相同的数组元素下标。
编程点拨:输入要查找的变量x的值;使用循环将输入的数和数组元素逐个进行比较,若找到,则提前退出循环;根据循环是正常结束还是提前结束来判断是否找到x。
c50104.c部分源代码:
#include <stdio.h>
voidmain( )
#include <stdio.h>
voidmain( )
{ float x[1000], sum=0.0, ave, a;
int n=0, i;
printf ("Enter mark : \n") ;
scanf("%f", &a);
while (a>=0.0 && n<1000)
{ sum+=;
x[n]=;
voidmain ( )
{ int num[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++) /*输出大写字母和该字母的个数*/
#inclue <stdio.h>
#define N 10
voidmain( )
{ int i,a[N],av;
for(i=0;i<N;i++)
scanf("%d",a[i]);
for(i=0;i<N;i++)
{ printf("%d",a[i]);
if(i%3==0)
printf("\n");
}
for(i=0;i!=N;i++)
实验四
一、实验目的及要求
1.掌握一维数组和二维数组的定义、赋值和输入输出的方法;
2.掌握字符数组和字符串函数的使用;
3.掌握与数组有关的算法(特别是排序算法)。
二、实验学时
6学时
三、实验任务
1.调试下列c50101.c程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。
scanf(“%d”,&a[i]); /*乱序输入10个整数*/
……
}
相关知识:①比较排序法、选择排序法和冒泡排序法;②数据元素的插入。
6.输入十个互不相同的整数并存在数组中,找出最大元素,并删除。
编程点拨:
求最大值所在元素下标:不必用max记住最大值,只要用k记住最大值所在的元素下标;删除最大值:从最大值开始将其后面元素依次前移一个位置。
printf("sum = %d \n", sum);
}
该程序中有哪些错误?如何修改?写出正确运行后的结果。
相关知识:数组元素的输入和输出只能逐个元素操作,而不能以数组名作整体操作。
3.有一个3行4列的距阵,现要求编程求出其中最大的那个元素的值,以及它所在的行号与列号。程序c50103.c的初始说明和输出语句如下所示,请补充完成该程序。
}
编程点拨:
①初始化row、colum及max。
②使用for循环的双重循环逐行把元素值与max值进行比较,比较结果如果元素值比max值大,则改变max值,同时改变row和colum的值。
③最后输出max,row和colum的值。
相关知识:①二维数组的定义和初始化;②使用二重循环对二维数组元素的访问;③求最值时相关变量初值的设定。
2.下面c50102.c程序是输入5个数据,然后求它们的和并输出结果。
#include <stdio.h>
void main( )
{int i, a[5], sum = 0;
scanf("%d,%d,%d,%d,%d", a );
for (i = 0; i <= 4; i ++)
sum += a[i];
else printf("Not found%d\n",x);
}
5.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。
编程点拨:
①定义数组时多开辟一个存储单元;
②找合适的插入位置;
j=0 a[j] ≥k?即20 ≥15 ?是j++
#include <stdio.h>
#include <string.h>
void main()
{ char a[10],b[10];
int c,d,k,ch;
scanf("%s",&a);
scanf("%s",&b);
printf("a=%s,b=%s\n",a,b);
c=strlen(a);
d=strlen(b);
while((str1[i]==str2[i])&&(str1[i]!=(2)))
i++;
s=(3);
printf("%d\n",s);
}
12.填空完成c50204.c程序,使其的功能是统计从终端输入字符中每个大写字母的个数。用#号作为输入结束标志。程序如下:
#include <stdio.h>
#include <ctype.h>
③求每个字符串的长度函数strlen()的使用,字符串比较函数strcmp()的使用;
④二维数组处理多个字符串。
14.编写程序,输入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。如:输入"BEIJING"、"123"和位置3,则输出:"BEI123JING123"。
四、实验重点、难点
av+=a[i];
printf("av=%f\n",av);
}
上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意数组元素的输入问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。
相关知识:①数组元素值的输入;②求和求平均值的相关变量初始化问题;③输出格式符的正确使用。④数组元素的格式化输出。
10.阅读下面的c50202.c程序,然后回答后面的问题:
#include <stdio.h>
#include <string.h>
void main( )
{char s1[80], s2[40];
int i = 0, j = 0;
printf(" \n Please input string1:");
{ int i, x, a[10]={1,2,3,4,5,6,7,8,9,10};
/*输入x变量的值*/
for ( i=0; i<10; i++ ) printf("%4d",a[i]);
printf("\n");
/*循环查找与x相等的元素*/
if ( ) printf("%d\n",i); /*输出查找结论,输出下标值*/
if (num[i])printf("%c:%d\n",i(3),num[i]);
}
13.编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。以“stop”作为输入的最后一个字符串。
相关知识:
①字符数组的输入输出可以有两种方法:
逐个字符输入输出。用格式符“%c”输入或输出一个字符,此时输入输出函数中的输入输出项是数组元素名,而不是字符数组名;
将整个字符串一次输入或输出。用“%s”格式符,意思是输出字符串(string),此时输入输出函数中的输入输出项是字符数组名,而不是数组元素名。写成下面这样是不对的:printf("%s",c[0]);
② gets()函数和scanf()函数输入字符串的区别,puts()函数和printf()函数输出字符串的区别;
1 4 6 4 1
1 51010 5 1
编程点拨:
杨辉三角形有如下特点:
只有下半三角形有确定的值;
第一列和对角线上的元素值都是1;
其它元素值均是前一行同一列元素与前一行前一列元素之和。
9.调试下列c50201.c程序,使之具有如下功能:任意输入两个字符串(如:“abc 123”和“china”),并存放在a,b两个数组中。然后把较短的字符串放在a数组,较长的字符串放在b数组。并输出。
for(k=0;k<d;k++)
{ ch=a[k];a[k]=b[k];b[k]=ch;}
printf("a=%s\n",a);
printf("b=%s\n",b);
}
相关知识:程序中的strlen()是库函数,功能是求字符串的长度,它的原型保存在头文件"string.h"中。调试时注意库函数的调用方法,不同的字符串输入方法,通过错误提示发现程序中的错误。
#include <stdio.h>
voidmain ( )
{ char str1[100],str2[100];
int i,s;
printf("\n Input string 1:\n");gets(str1);
printf(“\n Input string 2:\n”);gets(str2);
i=(1);
六、注意事项
1.对应该有花括号的复合语句,忘记加花括号
2.在不该加分号的地方加了分号
3.引用数组元素时误用圆括号
4.引用数组元素超界
5.对二维或多维数组定义和引用的方式不对
6.误以为数组名代表整个数组
7.混淆字符数组与字符指针的区别
}
编辑、运行该程序,然后分别输入Country和side。请问:
程序执行的结果是什么?
该程序的功能是什么?
相关知识: 串结束符’\0’; 自编写库函数。
11.填空完成c50203.c程序,使其功能是对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdefg和abceef,则输出为-1。程序如下:
scanf("%s", s1);
printf(" \n Please input string2:");
scanf("%s", s2);
while (s1[i]!= '\0' )
i++;
while (s2[j]!= '\0' )
s1[i++]=s2[j ++];
s1[i]= '\0';
printf("\n New string: %s", s1);
部分源代码:
k=0;
if ( a[k]<a[1] )真
k=1;执行
if ( a[k]<a[2] )假
k=2;不执行
if ( a[k]<a[3] )真
k=3;执行
相关知识:①删除数组元素的概念;②移动数组元素的算法;③求最大值位置的算法。
7.以下c50107.c程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。请填空:
#include <stdio.h>
voidmain( )
{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 = %d, Row = %d, Colum = %d \n", max, row, colum);
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停止移动元素。
n++;
scanf("%f", &a);
}
ave=;
printf ("Output : \n");
printf ("ave = %f\n", ave);
for (i=0; i<n; i++)
if () printf("%f\n", x[i]);
}
8.综合编程题:打印如下杨辉三角形
1
1 1
1 2 1
1 3 3 1
1.一维数组
2.二维数组和多维数组
3.字符数组
五、操作要点
Run菜单中Go to cursor::调试程序时使用,选择该项可使程序运行到光标所在行。光标所在行必须为一条可执行语句,否则提示错误。其热键为F4。Trace into:在执行一条调用其它用户定义的子函数时,若用Trace into项,则执行长条将跟踪到该子函数内部去执行,其热键为F7。
for(i=9;i>=j;i-- ) a[i+1]=a[i];
c50105.c部分源代码:
#include<stdio.h>
#define N 11
voidmain()
{ int i,j,a[N];
printf(“Please input 10 numbers:”);
for (i=0; i<N-1; i++)
4.数组中已来自百度文库互不相同的10个整数,从键盘输入一个整数,输出与该值相同的数组元素下标。
编程点拨:输入要查找的变量x的值;使用循环将输入的数和数组元素逐个进行比较,若找到,则提前退出循环;根据循环是正常结束还是提前结束来判断是否找到x。
c50104.c部分源代码:
#include <stdio.h>
voidmain( )
#include <stdio.h>
voidmain( )
{ float x[1000], sum=0.0, ave, a;
int n=0, i;
printf ("Enter mark : \n") ;
scanf("%f", &a);
while (a>=0.0 && n<1000)
{ sum+=;
x[n]=;
voidmain ( )
{ int num[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++) /*输出大写字母和该字母的个数*/
#inclue <stdio.h>
#define N 10
voidmain( )
{ int i,a[N],av;
for(i=0;i<N;i++)
scanf("%d",a[i]);
for(i=0;i<N;i++)
{ printf("%d",a[i]);
if(i%3==0)
printf("\n");
}
for(i=0;i!=N;i++)
实验四
一、实验目的及要求
1.掌握一维数组和二维数组的定义、赋值和输入输出的方法;
2.掌握字符数组和字符串函数的使用;
3.掌握与数组有关的算法(特别是排序算法)。
二、实验学时
6学时
三、实验任务
1.调试下列c50101.c程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。
scanf(“%d”,&a[i]); /*乱序输入10个整数*/
……
}
相关知识:①比较排序法、选择排序法和冒泡排序法;②数据元素的插入。
6.输入十个互不相同的整数并存在数组中,找出最大元素,并删除。
编程点拨:
求最大值所在元素下标:不必用max记住最大值,只要用k记住最大值所在的元素下标;删除最大值:从最大值开始将其后面元素依次前移一个位置。
printf("sum = %d \n", sum);
}
该程序中有哪些错误?如何修改?写出正确运行后的结果。
相关知识:数组元素的输入和输出只能逐个元素操作,而不能以数组名作整体操作。
3.有一个3行4列的距阵,现要求编程求出其中最大的那个元素的值,以及它所在的行号与列号。程序c50103.c的初始说明和输出语句如下所示,请补充完成该程序。
}
编程点拨:
①初始化row、colum及max。
②使用for循环的双重循环逐行把元素值与max值进行比较,比较结果如果元素值比max值大,则改变max值,同时改变row和colum的值。
③最后输出max,row和colum的值。
相关知识:①二维数组的定义和初始化;②使用二重循环对二维数组元素的访问;③求最值时相关变量初值的设定。
2.下面c50102.c程序是输入5个数据,然后求它们的和并输出结果。
#include <stdio.h>
void main( )
{int i, a[5], sum = 0;
scanf("%d,%d,%d,%d,%d", a );
for (i = 0; i <= 4; i ++)
sum += a[i];
else printf("Not found%d\n",x);
}
5.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。
编程点拨:
①定义数组时多开辟一个存储单元;
②找合适的插入位置;
j=0 a[j] ≥k?即20 ≥15 ?是j++
#include <stdio.h>
#include <string.h>
void main()
{ char a[10],b[10];
int c,d,k,ch;
scanf("%s",&a);
scanf("%s",&b);
printf("a=%s,b=%s\n",a,b);
c=strlen(a);
d=strlen(b);
while((str1[i]==str2[i])&&(str1[i]!=(2)))
i++;
s=(3);
printf("%d\n",s);
}
12.填空完成c50204.c程序,使其的功能是统计从终端输入字符中每个大写字母的个数。用#号作为输入结束标志。程序如下:
#include <stdio.h>
#include <ctype.h>
③求每个字符串的长度函数strlen()的使用,字符串比较函数strcmp()的使用;
④二维数组处理多个字符串。
14.编写程序,输入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。如:输入"BEIJING"、"123"和位置3,则输出:"BEI123JING123"。
四、实验重点、难点
av+=a[i];
printf("av=%f\n",av);
}
上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意数组元素的输入问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。
相关知识:①数组元素值的输入;②求和求平均值的相关变量初始化问题;③输出格式符的正确使用。④数组元素的格式化输出。
10.阅读下面的c50202.c程序,然后回答后面的问题:
#include <stdio.h>
#include <string.h>
void main( )
{char s1[80], s2[40];
int i = 0, j = 0;
printf(" \n Please input string1:");
{ int i, x, a[10]={1,2,3,4,5,6,7,8,9,10};
/*输入x变量的值*/
for ( i=0; i<10; i++ ) printf("%4d",a[i]);
printf("\n");
/*循环查找与x相等的元素*/
if ( ) printf("%d\n",i); /*输出查找结论,输出下标值*/
if (num[i])printf("%c:%d\n",i(3),num[i]);
}
13.编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。以“stop”作为输入的最后一个字符串。
相关知识:
①字符数组的输入输出可以有两种方法:
逐个字符输入输出。用格式符“%c”输入或输出一个字符,此时输入输出函数中的输入输出项是数组元素名,而不是字符数组名;
将整个字符串一次输入或输出。用“%s”格式符,意思是输出字符串(string),此时输入输出函数中的输入输出项是字符数组名,而不是数组元素名。写成下面这样是不对的:printf("%s",c[0]);
② gets()函数和scanf()函数输入字符串的区别,puts()函数和printf()函数输出字符串的区别;
1 4 6 4 1
1 51010 5 1
编程点拨:
杨辉三角形有如下特点:
只有下半三角形有确定的值;
第一列和对角线上的元素值都是1;
其它元素值均是前一行同一列元素与前一行前一列元素之和。
9.调试下列c50201.c程序,使之具有如下功能:任意输入两个字符串(如:“abc 123”和“china”),并存放在a,b两个数组中。然后把较短的字符串放在a数组,较长的字符串放在b数组。并输出。