实验5数组习题及答案.docx
《实验5数组习题及答案.docx》由会员分享,可在线阅读,更多相关《实验5数组习题及答案.docx(16页珍藏版)》请在冰豆网上搜索。
实验5数组习题及答案
实验5数组
班级:
学号:
:
日期:
一、实验目的
(1)掌握一维数组和二维数组的定义、赋值和输入输出方法;
(2)掌握字符数组和字符串函数的使用;
(3)掌握与数组有关的算法(特别是排序算法)。
二、实验内容
1.阅读下面程序,写出程序运行结果,并且上机进行验证。
(1)#include"stdio.h"
voidmain()
{
inti,n[4]={0,0,0,0};
for(i=1;i<4;i++)
if(i==3)break;
n[i]=n[i-1]+1;
}
printf("n[i-1]=%dn[i]=%d\n",n[i-1],n[i]);
(2)#include"stdio.h"
charch[]={'0','1','2','3','4','5','6','7','8','9'};
inti=0,m=2,r,x=42;charb[80];
while(x)
r=x%m;x/=m;
b[i++]=ch[r];
for(--i;i>=0;i--)
printf("%c",b[i]);
printf("\n");
(3)#include"stdio.h"
inta[][3]={9,7,5,3,1,2,4,6,8};
inti,j,s1=0,s2=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i==j)s1=s1+a[i][j];
if(i+j==2)s2=s2+a[i][j];
printf("s1=%ds2=%d",s1,s2);
(4)#include"stdio.h"
intr[5]={1,2,3,4,5};
inti,j,a[5][5];
for(i=0;i<=4;i++)
{for(j=i;j<=4;j++)
a[i][j]=r[j-i];
for(j=0;j
a[i][j]=r[i-j];
for(i=0;i<5;i++)
for(j=0;j<5;j++)
printf("%2d",a[i][j]);
2.程序填空(根据题意在空白处填入适当的内容,使程序变得完整。
并上机进行调试验证)
(1)程序说明:
下列程序完成的是插入排序功能:
数组a中存放一个递增数列,输入一个整数x,将它插入到数组中,使之仍为一个有序数列。
#include"stdio.h"
#defineN10
inta[11]={1,10,20,30,40,50,60,70,80,90},x,i,p;
scanf("%d",&x);
for(i=0,p=N;iif(x{p=i;_break_;}for(i=N-1;i>=p;_i--__)a[i+1]=a[i];_a[p]=x___;printf("%d",x);for(i=0;i<=N;i++)printf("%5d",a[i]);printf("\n");}(2)程序说明:下面程序完成的是折半查找。A数组中存放的是n个由大到小已经排好序的数列,从这n个数中查找x的值是否存在。其基本思想是:在查找范围里,将x与处于中间位置上的数比较,如果相等,则查找成功,如果小于该元素,则在较小的一半元素里再进行折半查找;如果x大于该元素,则在较大的一半元素里再进行折半查找。变量top,bottom,mid分别指向查找范围的顶部、底部和中间位置。#include"stdio.h"#definen10main(){inta[n],find;intx,i,top,bottom,mid;printf("inputthesortednumbers:\n");for(i=0;iscanf("%d",__&a[i]___);printf("inputthenumbertofind:\n");scanf("%d",&x);find=0;top=0;bottom=n-1;if(x<=a[0]&&top<=bottom)while(!find&&top<=bottom){mid=mid=(bottom+top)/2;if(x==a[mid]){find=1;printf("x=%dposition=%d\n",x,mid);}elseif(x>a[mid])bottom=mid-1;elsetop=mid+1;}if(find==0)printf("thenumber%disnotinthetable",x);}(3)程序说明:下面程序分别输出方阵中主对角线、副对角线上元素的和suml和sum2(主对角线为从矩阵的左上角至右下角的连线,副对角线为从矩阵的右上角至左下角的连线).#include"stdio.h"#defineSIZE5voidmain(){inta[SIZE][SIZE],m,n,sum1,sum2;for(m=0;mfor(n=0;nscanf("%d",&a[m][n]);sum1=sum2=__0__;for(m=0;m{sum1=sum1+a[m][m];sum2=sum2+a[m][SIZE-1-m];}printf("sum1=%dsum2=%d\n",sum1,sum2);}(4)程序说明:下面程序打印出如下所示的杨辉三角行(打印10行)。11112113311464115101051…….#include"stdio.h"voidmain(){inti,j,a[10][10]={{1},{1,1}};for(i=2;i<10;i++){a[i][0]=1;_a[i][i]=1;for(j=0;ja[i][j]=a[i-1][j]+a[i-1][j-1];}for(i=0;i<10;i++){for(j=0;j<=i;j++)printf("%4d",a[i][j]);printf("\n");}}3.程序设计(根据题意编写程序并上机进行调试)。(1)编写程序完成如下功能:输入10个数存入一维数组,然后再按逆序重新存放后输出。#includevoidmain(){inta[10],i,temp;for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");for(i=0;i<5;i++){temp=a[i];a[i]=a[9-i];a[9-i]=temp;}for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");}(2)编写程序完成如下功能:从键盘输入两个字符串ch2、ch1,然后将字符串ch2连接到字符串ch1的后面,并输出连接后的字符串。#include#includevoidmain(){charch1[20],ch2[10];inti,j;scanf("%s",ch1);scanf("%s",ch2);j=strlen(ch1);for(i=0;ich1[j]=ch2[i];ch1[j]='\0';printf("%s\n",ch1);}(3)编写程序完成如下功能:现有两个已按升序排好的数组,将它们合并为一个升序排序的数组(归并排序)。算法:两个数组合并时,可为每个数组各安排一个指针,从第一个元素开始依次比较两数组对应元素,小的取下来顺序放入新的数组,取下所指元素的指针后移,再比较,依此类推,直到其中一个数组的元素已全部放入新数组,再把另一数组余下的元素全部顺序放入新数组,归并完成。编程并上机调试运行。(1)用选择法对10个整数排序。10个整数用scanf函数输入。#includevoidmain(){inti,j,min,temp,a[11];printf("enterdata:\n");for(i=1;i<=10;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}printf("Theorginalnumbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");for(i=1;i<=9;i++){min=i;for(j=i+1;j<=10;j++)if(a[min]>a[j])min=j;temp=a[i];a[i]=a[min];a[min]=temp;}printf("\nThesortednumbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");}(2)有15个数存放在一个数组中,输入一个数,要求用对半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输入“无此数”。以15个数用赋初值的方法在程序中给出。要找的数用scanf函数输入。#includevoidmain(){inti,number,top,bott,mid,loca,a[15],flag=1,sign;charc;printf("enterdata:\n");scanf("%d",&a[0]);i=1;while(i<15){scanf("%d",&a[i]);if(a[i]>=a[i-1])i++;elseprintf("enterthisdataagain:\n");}printf("\n");for(i=0;i<15;i++)printf("%5d",a[i]);printf("\n");while(flag){printf("inputnumbertolookfor:");scanf("%d",&number);sign=0;top=0;bott=14;if((numbera[14]))loca=-1;while((!sign)&&(top<=bott)){mid=(bott+top)/2;if(number==a[mid]){loca=mid;printf("Hasfound%d,itspostionis%d\n",number,loca+1);sign=1;}elseif(numberbott=mid-1;elsetop=mid+1;}if(!sign||loca==-1)printf("cannotfound%d.\n",number);printf("continueornot(Y/N)?");scanf("%c",&c);if(c!='N'||c!='n'||c!='Y'||c!='y')scanf("%c",&c);if(c=='N'||c=='n')flag=0;}}(3)将两个字符串连接起来,不要用strcat函数。#includevoidmain(){chars1[80],s2[40];inti=0,j=0;printf("\ninputstring1:");gets(s1);printf("inputstring2:");gets(s2);while(s1[i]!='\0')i++;while(s2[j]!='\0')s1[i++]=s2[j++];s1[i]='\0';printf("Thenewstringis:%s",s1);}(4)找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。应至少准备两组测试数据:二维数组有鞍点,例如:二维数组没有鞍点,例如:用scanf函数从键盘输入数组各元素的值,检查结果是否正确。题目并未指定二维数组的行数和列数,程序应该能处理任意行数和列数的数组,因此,从理论上说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需要准备典型数据即可。#includevoidmain(){inta[4][5],i,j,k,max,maxj,flag;printf("pleaseinputmatria:\n");for(i=0;i<4;i++)for(j=0;j<5;j++)scanf("%d",&a[i][j]);for(i=0;i<4;i++){max=a[i][0];maxj=0;for(j=1;j<5;j++){if(a[i][j]>max){max=a[i][j];maxj=j;}}flag=1;for(k=0;k<4;k++)if(max>a[k][maxj]){flag=0;continue;}if(flag){printf("a[%d][%d]=%d\n",i,maxj,max);break;}}if(!flag)printf("itisnotexist!\n");}如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。请修改程序以实现之。三、预习内容预习教材第6章。
if(x{p=i;_break_;}for(i=N-1;i>=p;_i--__)a[i+1]=a[i];_a[p]=x___;printf("%d",x);for(i=0;i<=N;i++)printf("%5d",a[i]);printf("\n");}(2)程序说明:下面程序完成的是折半查找。A数组中存放的是n个由大到小已经排好序的数列,从这n个数中查找x的值是否存在。其基本思想是:在查找范围里,将x与处于中间位置上的数比较,如果相等,则查找成功,如果小于该元素,则在较小的一半元素里再进行折半查找;如果x大于该元素,则在较大的一半元素里再进行折半查找。变量top,bottom,mid分别指向查找范围的顶部、底部和中间位置。#include"stdio.h"#definen10main(){inta[n],find;intx,i,top,bottom,mid;printf("inputthesortednumbers:\n");for(i=0;iscanf("%d",__&a[i]___);printf("inputthenumbertofind:\n");scanf("%d",&x);find=0;top=0;bottom=n-1;if(x<=a[0]&&top<=bottom)while(!find&&top<=bottom){mid=mid=(bottom+top)/2;if(x==a[mid]){find=1;printf("x=%dposition=%d\n",x,mid);}elseif(x>a[mid])bottom=mid-1;elsetop=mid+1;}if(find==0)printf("thenumber%disnotinthetable",x);}(3)程序说明:下面程序分别输出方阵中主对角线、副对角线上元素的和suml和sum2(主对角线为从矩阵的左上角至右下角的连线,副对角线为从矩阵的右上角至左下角的连线).#include"stdio.h"#defineSIZE5voidmain(){inta[SIZE][SIZE],m,n,sum1,sum2;for(m=0;mfor(n=0;nscanf("%d",&a[m][n]);sum1=sum2=__0__;for(m=0;m{sum1=sum1+a[m][m];sum2=sum2+a[m][SIZE-1-m];}printf("sum1=%dsum2=%d\n",sum1,sum2);}(4)程序说明:下面程序打印出如下所示的杨辉三角行(打印10行)。11112113311464115101051…….#include"stdio.h"voidmain(){inti,j,a[10][10]={{1},{1,1}};for(i=2;i<10;i++){a[i][0]=1;_a[i][i]=1;for(j=0;ja[i][j]=a[i-1][j]+a[i-1][j-1];}for(i=0;i<10;i++){for(j=0;j<=i;j++)printf("%4d",a[i][j]);printf("\n");}}3.程序设计(根据题意编写程序并上机进行调试)。(1)编写程序完成如下功能:输入10个数存入一维数组,然后再按逆序重新存放后输出。#includevoidmain(){inta[10],i,temp;for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");for(i=0;i<5;i++){temp=a[i];a[i]=a[9-i];a[9-i]=temp;}for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");}(2)编写程序完成如下功能:从键盘输入两个字符串ch2、ch1,然后将字符串ch2连接到字符串ch1的后面,并输出连接后的字符串。#include#includevoidmain(){charch1[20],ch2[10];inti,j;scanf("%s",ch1);scanf("%s",ch2);j=strlen(ch1);for(i=0;ich1[j]=ch2[i];ch1[j]='\0';printf("%s\n",ch1);}(3)编写程序完成如下功能:现有两个已按升序排好的数组,将它们合并为一个升序排序的数组(归并排序)。算法:两个数组合并时,可为每个数组各安排一个指针,从第一个元素开始依次比较两数组对应元素,小的取下来顺序放入新的数组,取下所指元素的指针后移,再比较,依此类推,直到其中一个数组的元素已全部放入新数组,再把另一数组余下的元素全部顺序放入新数组,归并完成。编程并上机调试运行。(1)用选择法对10个整数排序。10个整数用scanf函数输入。#includevoidmain(){inti,j,min,temp,a[11];printf("enterdata:\n");for(i=1;i<=10;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}printf("Theorginalnumbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");for(i=1;i<=9;i++){min=i;for(j=i+1;j<=10;j++)if(a[min]>a[j])min=j;temp=a[i];a[i]=a[min];a[min]=temp;}printf("\nThesortednumbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");}(2)有15个数存放在一个数组中,输入一个数,要求用对半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输入“无此数”。以15个数用赋初值的方法在程序中给出。要找的数用scanf函数输入。#includevoidmain(){inti,number,top,bott,mid,loca,a[15],flag=1,sign;charc;printf("enterdata:\n");scanf("%d",&a[0]);i=1;while(i<15){scanf("%d",&a[i]);if(a[i]>=a[i-1])i++;elseprintf("enterthisdataagain:\n");}printf("\n");for(i=0;i<15;i++)printf("%5d",a[i]);printf("\n");while(flag){printf("inputnumbertolookfor:");scanf("%d",&number);sign=0;top=0;bott=14;if((numbera[14]))loca=-1;while((!sign)&&(top<=bott)){mid=(bott+top)/2;if(number==a[mid]){loca=mid;printf("Hasfound%d,itspostionis%d\n",number,loca+1);sign=1;}elseif(numberbott=mid-1;elsetop=mid+1;}if(!sign||loca==-1)printf("cannotfound%d.\n",number);printf("continueornot(Y/N)?");scanf("%c",&c);if(c!='N'||c!='n'||c!='Y'||c!='y')scanf("%c",&c);if(c=='N'||c=='n')flag=0;}}(3)将两个字符串连接起来,不要用strcat函数。#includevoidmain(){chars1[80],s2[40];inti=0,j=0;printf("\ninputstring1:");gets(s1);printf("inputstring2:");gets(s2);while(s1[i]!='\0')i++;while(s2[j]!='\0')s1[i++]=s2[j++];s1[i]='\0';printf("Thenewstringis:%s",s1);}(4)找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。应至少准备两组测试数据:二维数组有鞍点,例如:二维数组没有鞍点,例如:用scanf函数从键盘输入数组各元素的值,检查结果是否正确。题目并未指定二维数组的行数和列数,程序应该能处理任意行数和列数的数组,因此,从理论上说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需要准备典型数据即可。#includevoidmain(){inta[4][5],i,j,k,max,maxj,flag;printf("pleaseinputmatria:\n");for(i=0;i<4;i++)for(j=0;j<5;j++)scanf("%d",&a[i][j]);for(i=0;i<4;i++){max=a[i][0];maxj=0;for(j=1;j<5;j++){if(a[i][j]>max){max=a[i][j];maxj=j;}}flag=1;for(k=0;k<4;k++)if(max>a[k][maxj]){flag=0;continue;}if(flag){printf("a[%d][%d]=%d\n",i,maxj,max);break;}}if(!flag)printf("itisnotexist!\n");}如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。请修改程序以实现之。三、预习内容预习教材第6章。
p=i;
_break_;
for(i=N-1;i>=p;_i--__)
a[i+1]=a[i];
_a[p]=x___;
printf("%d",x);
for(i=0;i<=N;i++)
printf("%5d",a[i]);
(2)程序说明:
下面程序完成的是折半查找。
A数组中存放的是n个由大到小已经排好序的数列,从这n个数中查找x的值是否存在。
其基本思想是:
在查找范围里,将x与处于中间位置上的数比较,如果相等,则查找成功,如果小于该元素,则在较小的一半元素里再进行折半查找;如果x大于该元素,则在较大的一半元素里再进行折半查找。
变量top,bottom,mid分别指向查找范围的顶部、底部和中间位置。
#definen10
main()
inta[n],find;
intx,i,top,bottom,mid;
printf("inputthesortednumbers:
\n");
for(i=0;iscanf("%d",__&a[i]___);printf("inputthenumbertofind:\n");scanf("%d",&x);find=0;top=0;bottom=n-1;if(x<=a[0]&&top<=bottom)while(!find&&top<=bottom){mid=mid=(bottom+top)/2;if(x==a[mid]){find=1;printf("x=%dposition=%d\n",x,mid);}elseif(x>a[mid])bottom=mid-1;elsetop=mid+1;}if(find==0)printf("thenumber%disnotinthetable",x);}(3)程序说明:下面程序分别输出方阵中主对角线、副对角线上元素的和suml和sum2(主对角线为从矩阵的左上角至右下角的连线,副对角线为从矩阵的右上角至左下角的连线).#include"stdio.h"#defineSIZE5voidmain(){inta[SIZE][SIZE],m,n,sum1,sum2;for(m=0;mfor(n=0;nscanf("%d",&a[m][n]);sum1=sum2=__0__;for(m=0;m{sum1=sum1+a[m][m];sum2=sum2+a[m][SIZE-1-m];}printf("sum1=%dsum2=%d\n",sum1,sum2);}(4)程序说明:下面程序打印出如下所示的杨辉三角行(打印10行)。11112113311464115101051…….#include"stdio.h"voidmain(){inti,j,a[10][10]={{1},{1,1}};for(i=2;i<10;i++){a[i][0]=1;_a[i][i]=1;for(j=0;ja[i][j]=a[i-1][j]+a[i-1][j-1];}for(i=0;i<10;i++){for(j=0;j<=i;j++)printf("%4d",a[i][j]);printf("\n");}}3.程序设计(根据题意编写程序并上机进行调试)。(1)编写程序完成如下功能:输入10个数存入一维数组,然后再按逆序重新存放后输出。#includevoidmain(){inta[10],i,temp;for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");for(i=0;i<5;i++){temp=a[i];a[i]=a[9-i];a[9-i]=temp;}for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");}(2)编写程序完成如下功能:从键盘输入两个字符串ch2、ch1,然后将字符串ch2连接到字符串ch1的后面,并输出连接后的字符串。#include#includevoidmain(){charch1[20],ch2[10];inti,j;scanf("%s",ch1);scanf("%s",ch2);j=strlen(ch1);for(i=0;ich1[j]=ch2[i];ch1[j]='\0';printf("%s\n",ch1);}(3)编写程序完成如下功能:现有两个已按升序排好的数组,将它们合并为一个升序排序的数组(归并排序)。算法:两个数组合并时,可为每个数组各安排一个指针,从第一个元素开始依次比较两数组对应元素,小的取下来顺序放入新的数组,取下所指元素的指针后移,再比较,依此类推,直到其中一个数组的元素已全部放入新数组,再把另一数组余下的元素全部顺序放入新数组,归并完成。编程并上机调试运行。(1)用选择法对10个整数排序。10个整数用scanf函数输入。#includevoidmain(){inti,j,min,temp,a[11];printf("enterdata:\n");for(i=1;i<=10;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}printf("Theorginalnumbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");for(i=1;i<=9;i++){min=i;for(j=i+1;j<=10;j++)if(a[min]>a[j])min=j;temp=a[i];a[i]=a[min];a[min]=temp;}printf("\nThesortednumbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");}(2)有15个数存放在一个数组中,输入一个数,要求用对半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输入“无此数”。以15个数用赋初值的方法在程序中给出。要找的数用scanf函数输入。#includevoidmain(){inti,number,top,bott,mid,loca,a[15],flag=1,sign;charc;printf("enterdata:\n");scanf("%d",&a[0]);i=1;while(i<15){scanf("%d",&a[i]);if(a[i]>=a[i-1])i++;elseprintf("enterthisdataagain:\n");}printf("\n");for(i=0;i<15;i++)printf("%5d",a[i]);printf("\n");while(flag){printf("inputnumbertolookfor:");scanf("%d",&number);sign=0;top=0;bott=14;if((numbera[14]))loca=-1;while((!sign)&&(top<=bott)){mid=(bott+top)/2;if(number==a[mid]){loca=mid;printf("Hasfound%d,itspostionis%d\n",number,loca+1);sign=1;}elseif(numberbott=mid-1;elsetop=mid+1;}if(!sign||loca==-1)printf("cannotfound%d.\n",number);printf("continueornot(Y/N)?");scanf("%c",&c);if(c!='N'||c!='n'||c!='Y'||c!='y')scanf("%c",&c);if(c=='N'||c=='n')flag=0;}}(3)将两个字符串连接起来,不要用strcat函数。#includevoidmain(){chars1[80],s2[40];inti=0,j=0;printf("\ninputstring1:");gets(s1);printf("inputstring2:");gets(s2);while(s1[i]!='\0')i++;while(s2[j]!='\0')s1[i++]=s2[j++];s1[i]='\0';printf("Thenewstringis:%s",s1);}(4)找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。应至少准备两组测试数据:二维数组有鞍点,例如:二维数组没有鞍点,例如:用scanf函数从键盘输入数组各元素的值,检查结果是否正确。题目并未指定二维数组的行数和列数,程序应该能处理任意行数和列数的数组,因此,从理论上说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需要准备典型数据即可。#includevoidmain(){inta[4][5],i,j,k,max,maxj,flag;printf("pleaseinputmatria:\n");for(i=0;i<4;i++)for(j=0;j<5;j++)scanf("%d",&a[i][j]);for(i=0;i<4;i++){max=a[i][0];maxj=0;for(j=1;j<5;j++){if(a[i][j]>max){max=a[i][j];maxj=j;}}flag=1;for(k=0;k<4;k++)if(max>a[k][maxj]){flag=0;continue;}if(flag){printf("a[%d][%d]=%d\n",i,maxj,max);break;}}if(!flag)printf("itisnotexist!\n");}如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。请修改程序以实现之。三、预习内容预习教材第6章。
scanf("%d",__&a[i]___);
printf("inputthenumbertofind:
find=0;top=0;bottom=n-1;
if(x<=a[0]&&top<=bottom)
while(!
find&&top<=bottom)
mid=mid=(bottom+top)/2;
if(x==a[mid])
find=1;
printf("x=%dposition=%d\n",x,mid);
elseif(x>a[mid])
bottom=mid-1;
else
top=mid+1;
if(find==0)printf("thenumber%disnotinthetable",x);
(3)程序说明:
下面程序分别输出方阵中主对角线、副对角线上元素的和suml和sum2(主对角线为从矩阵的左上角至右下角的连线,副对角线为从矩阵的右上角至左下角的连线).
#defineSIZE5
inta[SIZE][SIZE],m,n,sum1,sum2;
for(m=0;mfor(n=0;nscanf("%d",&a[m][n]);sum1=sum2=__0__;for(m=0;m{sum1=sum1+a[m][m];sum2=sum2+a[m][SIZE-1-m];}printf("sum1=%dsum2=%d\n",sum1,sum2);}(4)程序说明:下面程序打印出如下所示的杨辉三角行(打印10行)。11112113311464115101051…….#include"stdio.h"voidmain(){inti,j,a[10][10]={{1},{1,1}};for(i=2;i<10;i++){a[i][0]=1;_a[i][i]=1;for(j=0;ja[i][j]=a[i-1][j]+a[i-1][j-1];}for(i=0;i<10;i++){for(j=0;j<=i;j++)printf("%4d",a[i][j]);printf("\n");}}3.程序设计(根据题意编写程序并上机进行调试)。(1)编写程序完成如下功能:输入10个数存入一维数组,然后再按逆序重新存放后输出。#includevoidmain(){inta[10],i,temp;for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");for(i=0;i<5;i++){temp=a[i];a[i]=a[9-i];a[9-i]=temp;}for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");}(2)编写程序完成如下功能:从键盘输入两个字符串ch2、ch1,然后将字符串ch2连接到字符串ch1的后面,并输出连接后的字符串。#include#includevoidmain(){charch1[20],ch2[10];inti,j;scanf("%s",ch1);scanf("%s",ch2);j=strlen(ch1);for(i=0;ich1[j]=ch2[i];ch1[j]='\0';printf("%s\n",ch1);}(3)编写程序完成如下功能:现有两个已按升序排好的数组,将它们合并为一个升序排序的数组(归并排序)。算法:两个数组合并时,可为每个数组各安排一个指针,从第一个元素开始依次比较两数组对应元素,小的取下来顺序放入新的数组,取下所指元素的指针后移,再比较,依此类推,直到其中一个数组的元素已全部放入新数组,再把另一数组余下的元素全部顺序放入新数组,归并完成。编程并上机调试运行。(1)用选择法对10个整数排序。10个整数用scanf函数输入。#includevoidmain(){inti,j,min,temp,a[11];printf("enterdata:\n");for(i=1;i<=10;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}printf("Theorginalnumbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");for(i=1;i<=9;i++){min=i;for(j=i+1;j<=10;j++)if(a[min]>a[j])min=j;temp=a[i];a[i]=a[min];a[min]=temp;}printf("\nThesortednumbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");}(2)有15个数存放在一个数组中,输入一个数,要求用对半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输入“无此数”。以15个数用赋初值的方法在程序中给出。要找的数用scanf函数输入。#includevoidmain(){inti,number,top,bott,mid,loca,a[15],flag=1,sign;charc;printf("enterdata:\n");scanf("%d",&a[0]);i=1;while(i<15){scanf("%d",&a[i]);if(a[i]>=a[i-1])i++;elseprintf("enterthisdataagain:\n");}printf("\n");for(i=0;i<15;i++)printf("%5d",a[i]);printf("\n");while(flag){printf("inputnumbertolookfor:");scanf("%d",&number);sign=0;top=0;bott=14;if((numbera[14]))loca=-1;while((!sign)&&(top<=bott)){mid=(bott+top)/2;if(number==a[mid]){loca=mid;printf("Hasfound%d,itspostionis%d\n",number,loca+1);sign=1;}elseif(numberbott=mid-1;elsetop=mid+1;}if(!sign||loca==-1)printf("cannotfound%d.\n",number);printf("continueornot(Y/N)?");scanf("%c",&c);if(c!='N'||c!='n'||c!='Y'||c!='y')scanf("%c",&c);if(c=='N'||c=='n')flag=0;}}(3)将两个字符串连接起来,不要用strcat函数。#includevoidmain(){chars1[80],s2[40];inti=0,j=0;printf("\ninputstring1:");gets(s1);printf("inputstring2:");gets(s2);while(s1[i]!='\0')i++;while(s2[j]!='\0')s1[i++]=s2[j++];s1[i]='\0';printf("Thenewstringis:%s",s1);}(4)找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。应至少准备两组测试数据:二维数组有鞍点,例如:二维数组没有鞍点,例如:用scanf函数从键盘输入数组各元素的值,检查结果是否正确。题目并未指定二维数组的行数和列数,程序应该能处理任意行数和列数的数组,因此,从理论上说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需要准备典型数据即可。#includevoidmain(){inta[4][5],i,j,k,max,maxj,flag;printf("pleaseinputmatria:\n");for(i=0;i<4;i++)for(j=0;j<5;j++)scanf("%d",&a[i][j]);for(i=0;i<4;i++){max=a[i][0];maxj=0;for(j=1;j<5;j++){if(a[i][j]>max){max=a[i][j];maxj=j;}}flag=1;for(k=0;k<4;k++)if(max>a[k][maxj]){flag=0;continue;}if(flag){printf("a[%d][%d]=%d\n",i,maxj,max);break;}}if(!flag)printf("itisnotexist!\n");}如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。请修改程序以实现之。三、预习内容预习教材第6章。
for(n=0;nscanf("%d",&a[m][n]);sum1=sum2=__0__;for(m=0;m{sum1=sum1+a[m][m];sum2=sum2+a[m][SIZE-1-m];}printf("sum1=%dsum2=%d\n",sum1,sum2);}(4)程序说明:下面程序打印出如下所示的杨辉三角行(打印10行)。11112113311464115101051…….#include"stdio.h"voidmain(){inti,j,a[10][10]={{1},{1,1}};for(i=2;i<10;i++){a[i][0]=1;_a[i][i]=1;for(j=0;ja[i][j]=a[i-1][j]+a[i-1][j-1];}for(i=0;i<10;i++){for(j=0;j<=i;j++)printf("%4d",a[i][j]);printf("\n");}}3.程序设计(根据题意编写程序并上机进行调试)。(1)编写程序完成如下功能:输入10个数存入一维数组,然后再按逆序重新存放后输出。#includevoidmain(){inta[10],i,temp;for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");for(i=0;i<5;i++){temp=a[i];a[i]=a[9-i];a[9-i]=temp;}for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");}(2)编写程序完成如下功能:从键盘输入两个字符串ch2、ch1,然后将字符串ch2连接到字符串ch1的后面,并输出连接后的字符串。#include#includevoidmain(){charch1[20],ch2[10];inti,j;scanf("%s",ch1);scanf("%s",ch2);j=strlen(ch1);for(i=0;ich1[j]=ch2[i];ch1[j]='\0';printf("%s\n",ch1);}(3)编写程序完成如下功能:现有两个已按升序排好的数组,将它们合并为一个升序排序的数组(归并排序)。算法:两个数组合并时,可为每个数组各安排一个指针,从第一个元素开始依次比较两数组对应元素,小的取下来顺序放入新的数组,取下所指元素的指针后移,再比较,依此类推,直到其中一个数组的元素已全部放入新数组,再把另一数组余下的元素全部顺序放入新数组,归并完成。编程并上机调试运行。(1)用选择法对10个整数排序。10个整数用scanf函数输入。#includevoidmain(){inti,j,min,temp,a[11];printf("enterdata:\n");for(i=1;i<=10;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}printf("Theorginalnumbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");for(i=1;i<=9;i++){min=i;for(j=i+1;j<=10;j++)if(a[min]>a[j])min=j;temp=a[i];a[i]=a[min];a[min]=temp;}printf("\nThesortednumbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");}(2)有15个数存放在一个数组中,输入一个数,要求用对半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输入“无此数”。以15个数用赋初值的方法在程序中给出。要找的数用scanf函数输入。#includevoidmain(){inti,number,top,bott,mid,loca,a[15],flag=1,sign;charc;printf("enterdata:\n");scanf("%d",&a[0]);i=1;while(i<15){scanf("%d",&a[i]);if(a[i]>=a[i-1])i++;elseprintf("enterthisdataagain:\n");}printf("\n");for(i=0;i<15;i++)printf("%5d",a[i]);printf("\n");while(flag){printf("inputnumbertolookfor:");scanf("%d",&number);sign=0;top=0;bott=14;if((numbera[14]))loca=-1;while((!sign)&&(top<=bott)){mid=(bott+top)/2;if(number==a[mid]){loca=mid;printf("Hasfound%d,itspostionis%d\n",number,loca+1);sign=1;}elseif(numberbott=mid-1;elsetop=mid+1;}if(!sign||loca==-1)printf("cannotfound%d.\n",number);printf("continueornot(Y/N)?");scanf("%c",&c);if(c!='N'||c!='n'||c!='Y'||c!='y')scanf("%c",&c);if(c=='N'||c=='n')flag=0;}}(3)将两个字符串连接起来,不要用strcat函数。#includevoidmain(){chars1[80],s2[40];inti=0,j=0;printf("\ninputstring1:");gets(s1);printf("inputstring2:");gets(s2);while(s1[i]!='\0')i++;while(s2[j]!='\0')s1[i++]=s2[j++];s1[i]='\0';printf("Thenewstringis:%s",s1);}(4)找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。应至少准备两组测试数据:二维数组有鞍点,例如:二维数组没有鞍点,例如:用scanf函数从键盘输入数组各元素的值,检查结果是否正确。题目并未指定二维数组的行数和列数,程序应该能处理任意行数和列数的数组,因此,从理论上说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需要准备典型数据即可。#includevoidmain(){inta[4][5],i,j,k,max,maxj,flag;printf("pleaseinputmatria:\n");for(i=0;i<4;i++)for(j=0;j<5;j++)scanf("%d",&a[i][j]);for(i=0;i<4;i++){max=a[i][0];maxj=0;for(j=1;j<5;j++){if(a[i][j]>max){max=a[i][j];maxj=j;}}flag=1;for(k=0;k<4;k++)if(max>a[k][maxj]){flag=0;continue;}if(flag){printf("a[%d][%d]=%d\n",i,maxj,max);break;}}if(!flag)printf("itisnotexist!\n");}如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。请修改程序以实现之。三、预习内容预习教材第6章。
scanf("%d",&a[m][n]);
sum1=sum2=__0__;
for(m=0;m{sum1=sum1+a[m][m];sum2=sum2+a[m][SIZE-1-m];}printf("sum1=%dsum2=%d\n",sum1,sum2);}(4)程序说明:下面程序打印出如下所示的杨辉三角行(打印10行)。11112113311464115101051…….#include"stdio.h"voidmain(){inti,j,a[10][10]={{1},{1,1}};for(i=2;i<10;i++){a[i][0]=1;_a[i][i]=1;for(j=0;ja[i][j]=a[i-1][j]+a[i-1][j-1];}for(i=0;i<10;i++){for(j=0;j<=i;j++)printf("%4d",a[i][j]);printf("\n");}}3.程序设计(根据题意编写程序并上机进行调试)。(1)编写程序完成如下功能:输入10个数存入一维数组,然后再按逆序重新存放后输出。#includevoidmain(){inta[10],i,temp;for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");for(i=0;i<5;i++){temp=a[i];a[i]=a[9-i];a[9-i]=temp;}for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");}(2)编写程序完成如下功能:从键盘输入两个字符串ch2、ch1,然后将字符串ch2连接到字符串ch1的后面,并输出连接后的字符串。#include#includevoidmain(){charch1[20],ch2[10];inti,j;scanf("%s",ch1);scanf("%s",ch2);j=strlen(ch1);for(i=0;ich1[j]=ch2[i];ch1[j]='\0';printf("%s\n",ch1);}(3)编写程序完成如下功能:现有两个已按升序排好的数组,将它们合并为一个升序排序的数组(归并排序)。算法:两个数组合并时,可为每个数组各安排一个指针,从第一个元素开始依次比较两数组对应元素,小的取下来顺序放入新的数组,取下所指元素的指针后移,再比较,依此类推,直到其中一个数组的元素已全部放入新数组,再把另一数组余下的元素全部顺序放入新数组,归并完成。编程并上机调试运行。(1)用选择法对10个整数排序。10个整数用scanf函数输入。#includevoidmain(){inti,j,min,temp,a[11];printf("enterdata:\n");for(i=1;i<=10;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}printf("Theorginalnumbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");for(i=1;i<=9;i++){min=i;for(j=i+1;j<=10;j++)if(a[min]>a[j])min=j;temp=a[i];a[i]=a[min];a[min]=temp;}printf("\nThesortednumbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");}(2)有15个数存放在一个数组中,输入一个数,要求用对半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输入“无此数”。以15个数用赋初值的方法在程序中给出。要找的数用scanf函数输入。#includevoidmain(){inti,number,top,bott,mid,loca,a[15],flag=1,sign;charc;printf("enterdata:\n");scanf("%d",&a[0]);i=1;while(i<15){scanf("%d",&a[i]);if(a[i]>=a[i-1])i++;elseprintf("enterthisdataagain:\n");}printf("\n");for(i=0;i<15;i++)printf("%5d",a[i]);printf("\n");while(flag){printf("inputnumbertolookfor:");scanf("%d",&number);sign=0;top=0;bott=14;if((numbera[14]))loca=-1;while((!sign)&&(top<=bott)){mid=(bott+top)/2;if(number==a[mid]){loca=mid;printf("Hasfound%d,itspostionis%d\n",number,loca+1);sign=1;}elseif(numberbott=mid-1;elsetop=mid+1;}if(!sign||loca==-1)printf("cannotfound%d.\n",number);printf("continueornot(Y/N)?");scanf("%c",&c);if(c!='N'||c!='n'||c!='Y'||c!='y')scanf("%c",&c);if(c=='N'||c=='n')flag=0;}}(3)将两个字符串连接起来,不要用strcat函数。#includevoidmain(){chars1[80],s2[40];inti=0,j=0;printf("\ninputstring1:");gets(s1);printf("inputstring2:");gets(s2);while(s1[i]!='\0')i++;while(s2[j]!='\0')s1[i++]=s2[j++];s1[i]='\0';printf("Thenewstringis:%s",s1);}(4)找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。应至少准备两组测试数据:二维数组有鞍点,例如:二维数组没有鞍点,例如:用scanf函数从键盘输入数组各元素的值,检查结果是否正确。题目并未指定二维数组的行数和列数,程序应该能处理任意行数和列数的数组,因此,从理论上说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需要准备典型数据即可。#includevoidmain(){inta[4][5],i,j,k,max,maxj,flag;printf("pleaseinputmatria:\n");for(i=0;i<4;i++)for(j=0;j<5;j++)scanf("%d",&a[i][j]);for(i=0;i<4;i++){max=a[i][0];maxj=0;for(j=1;j<5;j++){if(a[i][j]>max){max=a[i][j];maxj=j;}}flag=1;for(k=0;k<4;k++)if(max>a[k][maxj]){flag=0;continue;}if(flag){printf("a[%d][%d]=%d\n",i,maxj,max);break;}}if(!flag)printf("itisnotexist!\n");}如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。请修改程序以实现之。三、预习内容预习教材第6章。
sum1=sum1+a[m][m];
sum2=sum2+a[m][SIZE-1-m];
printf("sum1=%dsum2=%d\n",sum1,sum2);
(4)程序说明:
下面程序打印出如下所示的杨辉三角行(打印10行)。
1
11
121
1331
14641
15101051
…….
inti,j,a[10][10]={{1},{1,1}};
for(i=2;i<10;i++)
a[i][0]=1;_a[i][i]=1;
a[i][j]=a[i-1][j]+a[i-1][j-1];
for(i=0;i<10;i++)
for(j=0;j<=i;j++)
printf("%4d",a[i][j]);
3.程序设计(根据题意编写程序并上机进行调试)。
(1)编写程序完成如下功能:
输入10个数存入一维数组,然后再按逆序重新存放后输出。
#include
inta[10],i,temp;
scanf("%d",&a[i]);
temp=a[i];
a[i]=a[9-i];
a[9-i]=temp;
(2)编写程序完成如下功能:
从键盘输入两个字符串ch2、ch1,然后将字符串ch2连接到字符串ch1的后面,并输出连接后的字符串。
charch1[20],ch2[10];
inti,j;
scanf("%s",ch1);
scanf("%s",ch2);
j=strlen(ch1);
for(i=0;ich1[j]=ch2[i];ch1[j]='\0';printf("%s\n",ch1);}(3)编写程序完成如下功能:现有两个已按升序排好的数组,将它们合并为一个升序排序的数组(归并排序)。算法:两个数组合并时,可为每个数组各安排一个指针,从第一个元素开始依次比较两数组对应元素,小的取下来顺序放入新的数组,取下所指元素的指针后移,再比较,依此类推,直到其中一个数组的元素已全部放入新数组,再把另一数组余下的元素全部顺序放入新数组,归并完成。编程并上机调试运行。(1)用选择法对10个整数排序。10个整数用scanf函数输入。#includevoidmain(){inti,j,min,temp,a[11];printf("enterdata:\n");for(i=1;i<=10;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}printf("Theorginalnumbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");for(i=1;i<=9;i++){min=i;for(j=i+1;j<=10;j++)if(a[min]>a[j])min=j;temp=a[i];a[i]=a[min];a[min]=temp;}printf("\nThesortednumbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");}(2)有15个数存放在一个数组中,输入一个数,要求用对半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输入“无此数”。以15个数用赋初值的方法在程序中给出。要找的数用scanf函数输入。#includevoidmain(){inti,number,top,bott,mid,loca,a[15],flag=1,sign;charc;printf("enterdata:\n");scanf("%d",&a[0]);i=1;while(i<15){scanf("%d",&a[i]);if(a[i]>=a[i-1])i++;elseprintf("enterthisdataagain:\n");}printf("\n");for(i=0;i<15;i++)printf("%5d",a[i]);printf("\n");while(flag){printf("inputnumbertolookfor:");scanf("%d",&number);sign=0;top=0;bott=14;if((numbera[14]))loca=-1;while((!sign)&&(top<=bott)){mid=(bott+top)/2;if(number==a[mid]){loca=mid;printf("Hasfound%d,itspostionis%d\n",number,loca+1);sign=1;}elseif(numberbott=mid-1;elsetop=mid+1;}if(!sign||loca==-1)printf("cannotfound%d.\n",number);printf("continueornot(Y/N)?");scanf("%c",&c);if(c!='N'||c!='n'||c!='Y'||c!='y')scanf("%c",&c);if(c=='N'||c=='n')flag=0;}}(3)将两个字符串连接起来,不要用strcat函数。#includevoidmain(){chars1[80],s2[40];inti=0,j=0;printf("\ninputstring1:");gets(s1);printf("inputstring2:");gets(s2);while(s1[i]!='\0')i++;while(s2[j]!='\0')s1[i++]=s2[j++];s1[i]='\0';printf("Thenewstringis:%s",s1);}(4)找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。应至少准备两组测试数据:二维数组有鞍点,例如:二维数组没有鞍点,例如:用scanf函数从键盘输入数组各元素的值,检查结果是否正确。题目并未指定二维数组的行数和列数,程序应该能处理任意行数和列数的数组,因此,从理论上说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需要准备典型数据即可。#includevoidmain(){inta[4][5],i,j,k,max,maxj,flag;printf("pleaseinputmatria:\n");for(i=0;i<4;i++)for(j=0;j<5;j++)scanf("%d",&a[i][j]);for(i=0;i<4;i++){max=a[i][0];maxj=0;for(j=1;j<5;j++){if(a[i][j]>max){max=a[i][j];maxj=j;}}flag=1;for(k=0;k<4;k++)if(max>a[k][maxj]){flag=0;continue;}if(flag){printf("a[%d][%d]=%d\n",i,maxj,max);break;}}if(!flag)printf("itisnotexist!\n");}如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。请修改程序以实现之。三、预习内容预习教材第6章。
ch1[j]=ch2[i];
ch1[j]='\0';
printf("%s\n",ch1);
(3)编写程序完成如下功能:
现有两个已按升序排好的数组,将它们合并为一个升序排序的数组(归并排序)。
算法:
两个数组合并时,可为每个数组各安排一个指针,从第一个元素开始依次比较两数组对应元素,小的取下来顺序放入新的数组,取下所指元素的指针后移,再比较,依此类推,直到其中一个数组的元素已全部放入新数组,再把另一数组余下的元素全部顺序放入新数组,归并完成。
编程并上机调试运行。
(1)用选择法对10个整数排序。
10个整数用scanf函数输入。
inti,j,min,temp,a[11];
printf("enterdata:
for(i=1;i<=10;i++)
printf("a[%d]=",i);
printf("Theorginalnumbers:
for(i=1;i<=9;i++)
min=i;
for(j=i+1;j<=10;j++)
if(a[min]>a[j])min=j;
a[i]=a[min];
a[min]=temp;
printf("\nThesortednumbers:
(2)有15个数存放在一个数组中,输入一个数,要求用对半查找法找出该数是数组中第几个元素的值。
如果该数不在数组中,则输入“无此数”。
以15个数用赋初值的方法在程序中给出。
要找的数用scanf函数输入。
inti,number,top,bott,mid,loca,a[15],flag=1,sign;
charc;
scanf("%d",&a[0]);
i=1;
while(i<15)
if(a[i]>=a[i-1])
i++;
printf("enterthisdataagain:
for(i=0;i<15;i++)
while(flag)
printf("inputnumbertolookfor:
");
scanf("%d",&number);
sign=0;
top=0;
bott=14;
if((numbera[14]))
loca=-1;
while((!
sign)&&(top<=bott))
mid=(bott+top)/2;
if(number==a[mid])
loca=mid;
printf("Hasfound%d,itspostionis%d\n",number,loca+1);
sign=1;
elseif(numberbott=mid-1;elsetop=mid+1;}if(!sign||loca==-1)printf("cannotfound%d.\n",number);printf("continueornot(Y/N)?");scanf("%c",&c);if(c!='N'||c!='n'||c!='Y'||c!='y')scanf("%c",&c);if(c=='N'||c=='n')flag=0;}}(3)将两个字符串连接起来,不要用strcat函数。#includevoidmain(){chars1[80],s2[40];inti=0,j=0;printf("\ninputstring1:");gets(s1);printf("inputstring2:");gets(s2);while(s1[i]!='\0')i++;while(s2[j]!='\0')s1[i++]=s2[j++];s1[i]='\0';printf("Thenewstringis:%s",s1);}(4)找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。应至少准备两组测试数据:二维数组有鞍点,例如:二维数组没有鞍点,例如:用scanf函数从键盘输入数组各元素的值,检查结果是否正确。题目并未指定二维数组的行数和列数,程序应该能处理任意行数和列数的数组,因此,从理论上说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需要准备典型数据即可。#includevoidmain(){inta[4][5],i,j,k,max,maxj,flag;printf("pleaseinputmatria:\n");for(i=0;i<4;i++)for(j=0;j<5;j++)scanf("%d",&a[i][j]);for(i=0;i<4;i++){max=a[i][0];maxj=0;for(j=1;j<5;j++){if(a[i][j]>max){max=a[i][j];maxj=j;}}flag=1;for(k=0;k<4;k++)if(max>a[k][maxj]){flag=0;continue;}if(flag){printf("a[%d][%d]=%d\n",i,maxj,max);break;}}if(!flag)printf("itisnotexist!\n");}如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。请修改程序以实现之。三、预习内容预习教材第6章。
bott=mid-1;
if(!
sign||loca==-1)
printf("cannotfound%d.\n",number);
printf("continueornot(Y/N)?
scanf("%c",&c);
if(c!
='N'||c!
='n'||c!
='Y'||c!
='y')
if(c=='N'||c=='n')
flag=0;
(3)将两个字符串连接起来,不要用strcat函数。
chars1[80],s2[40];
inti=0,j=0;
printf("\ninputstring1:
gets(s1);
printf("inputstring2:
gets(s2);
while(s1[i]!
='\0')
while(s2[j]!
s1[i++]=s2[j++];
s1[i]='\0';
printf("Thenewstringis:
%s",s1);
(4)找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。
应至少准备两组测试数据:
二维数组有鞍点,例如:
二维数组没有鞍点,例如:
用scanf函数从键盘输入数组各元素的值,检查结果是否正确。
题目并未指定二维数组的行数和列数,程序应该能处理任意行数和列数的数组,因此,从理论上说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需要准备典型数据即可。
inta[4][5],i,j,k,max,maxj,flag;
printf("pleaseinputmatria:
for(i=0;i<4;i++)
scanf("%d",&a[i][j]);
max=a[i][0];
maxj=0;
for(j=1;j<5;j++)
if(a[i][j]>max)
max=a[i][j];
maxj=j;
flag=1;
for(k=0;k<4;k++)
if(max>a[k][maxj])
continue;
if(flag)
printf("a[%d][%d]=%d\n",i,maxj,max);
break;
flag)
printf("itisnotexist!
如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。
请修改程序以实现之。
三、预习内容
预习教材第6章。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1