实验6数组——参考答案
c语言程序设计教程(第2版)课后题及模拟题参考答案
![c语言程序设计教程(第2版)课后题及模拟题参考答案](https://img.taocdn.com/s3/m/28253ffcfab069dc50220154.png)
c语言程序设计教程(第2版)课后题及模拟题参考答案习题11-1 填空题1.函数2.主函数main(),主函数main()3.主函数main()4.函数首部,函数体5.{, }6./*, */7.顺序结构,选择结构,循环结构8..c, .obj, .exe1-2 思考题1.结构化程序设计是指:为使程序具有一个合理的结构以保证程序正确性而规定的一套如何进行程序设计的原则。
其基本结构包括顺序结构、选择结构和循环结构三种。
2.算法是对具体问题求解步骤的一种描述。
计算机算法的表达工具通常采用以下几种方法:(1)用自然语言表示算(2)用流程图表示算法(3)用伪代码表示算法(4)用程序设计语言表示算法3.语言简洁、紧凑,使用方便、灵活; 支持结构化程序设计;运算符丰富;数据类型丰富;较强的编译预处理功能;C语言的可移植性好;C语言本身既有一般高级语言的优点,又有低级(汇编)语言的特点;语法限制不太严格,程序设计自由度大。
1-3 编程题1. 试参照本章例题编写计算梯形面积的C语言程序,梯形的上底、下底和高分别用a,b,h表示,并用a=10,b=20,h=5测试所编写的程序。
#include "stdio.h"main(){ float a, b, h, s;a=10; b=20;h=5; s=(a+b)*h/2;printf("s=%f\n" , s );}2. 编写程序显示如图1.11所示信息。
图1.11 显示信息#include "stdio.h"main(){ printf("******************************\n");printf("* hello world *\n");printf("******************************\n"); }习题22-1 单选题1~5 DBDCA 6~10 DCABA 11~12 CA 2-2 思考题1.2.0000002.1,0.53.9,24.65.100,d6.(1)20 (2)0 (3)607. (1)10,6,4 (2)6,9,15 (3)3,60,838. 55习题33-1 选择题1-5BDABC 6-10ADCAC 11-12BB3-2 填空题1. 32.02613.0x104. 2, 1 互换a,b的值5. 6.66.–0038.77. 5.0,4,c=3<Enter>8.i=10,j=20<Enter>9.(1) 65(2) 65,A(3) 56.123400,123.456001(4) 3.141600(5) 8765.432(6) 5.864000e+002(7) 3.141600e+000(8) 3.1416(9) 8765(10) 3.1416,8765.4310.a=2 b=5x=8.8 y=76.34c1=65 c2=973-3 编程题1. 编写程序实现从键盘输入两个十进制整型数据10和8给变量x和y,并按下列格式 输出。
C语言程序设计习题答案(6-13)
![C语言程序设计习题答案(6-13)](https://img.taocdn.com/s3/m/85cf1f4e0b4e767f5acfcedf.png)
C语言程序设计习题答案习题六数组一、选择题1~10: BDBCD CDBAB11~20:BCDCC DABBC21~30:CCADC ABBCB31~41:BDDDD CDCCB A二、填空题1. 9 、 02.先行后列3.连续的存储空间中4. QuickC5. (c=getchar( )) 、‘A’+i或65+i6. ‘\0’、 str1[i]-str2[i]7. CDABC8. 10 149. 610. 1 0 0 0 00 1 0 0 00 0 1 0 00 0 0 1 00 0 0 0 111. 60012. AzyD13 4 some string *test三、编程题1. 定义一个有20个元素的整型数组,分别求出下标为奇数和偶数的元素的平均值。
答:程序参见文件Cprogram\#include ""#include ""main(){int i,s0=0,s1=0,a[20];for(i=0;i<20;i++)a[i]=rand()%100;for(i=0;i<20;i+=2){printf("%3d",a[i]);s0=s0+a[i];}printf(" sum is:%d ave=%f\n",s0,s0/;for(i=1;i<20;i+=2){printf("%3d",a[i]);s1=s1+a[i];}printf(" sum is:%d ave=%f\n",s1,s1/;}2. 设有一个整型数组,另输入一个整数,编程查找这个整数是否在数组中出现过,若出现,则输出第一次出现的位置,否则,输出no found。
答:程序参见文件Cprogram\#include ""#include ""main(){int i,s,a[20];for(i=0;i<20;i++)a[i]=rand()%100;scanf("%d",&s);for(i=0;i<20;i++)if(a[i]==s){printf("found:a[%d]=%d\n",i,a[i]);break;}if(i==20)printf("no found\n");for(i=0;i<20;i++)printf("%3d",a[i]);printf("\n");}3. 设有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入到数组中。
实验6 一维数组和二维数组
![实验6 一维数组和二维数组](https://img.taocdn.com/s3/m/55b03204ba1aa8114431d968.png)
if (a[i][j]<5)
printf("%3d",a[i][j]);}
printf("\n");
printf("żÊý¸öÊýΪ:%d\n",m);
}
4.已知一个二维数组:{{14,26,18,17},{24,37,21,8},{19,31,22,16},{7,19,14,26}},编程,输出该二维数组最小元素的行下标与列下标;计算并输出主对角线元素之和。
#include<stdio.h>
main()
{
int a[4][4]={{14,26,18,17},{24,37,21,8},{19,31,22,16},{7,19,14,26}},i,j,x,y,m,sum=0;
m=a[0][0];
for (i=0;i<4;i++)
for (j=0;j<4;j++)
i++;}
printf("\n");}
}
3.输入一个4行4列的二维数组,统计偶数的个数,并输出所有小于5的数。
#include<stdio.h>
main()
{
int a[4][4]={{2,6,7,9},{3,5,4,11},{12,8,1,13},{21,33,64,25}},i,j,m;
m=0;
}
if (m>a[i][j])
{m=a[i][j];
x=i;
y=j; }
printf("ÐÐϱêÓëÁÐϱê·Ö±ðΪ£º%d %d\n",x,y);
for (i=0;i<4;i++)
C 语言程序设计实验答案_数组、指针与字符串解析
![C 语言程序设计实验答案_数组、指针与字符串解析](https://img.taocdn.com/s3/m/75ee9ecdf8c75fbfc67db213.png)
实验06 数组、指针与字符串(4学时)(第6章数组、指针与字符串)一、实验目的二、实验任务6_1(习题6-25)编写并测试3×3矩阵转置函数,使用数组保存3×3矩阵。
6_2(习题6-26)使用动态内存分配生成动态数组来重新完成上题(n阶方阵),使用指针实现函数的功能。
6_3 编程实现两字符串的连接。
要求使用字符数组保存字符串,不要使用系统函数。
6_4 使用string类声明字符串对象,重新实现上一小题。
6_5(习题6-27)声明一个Employee类。
其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。
display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性,实现并测试这个类。
6_6(习题6-27)声明包含5个元素的对象数组,每个元素都是Employee 类型的对象。
6_7 修改实验4中的people(人员)类。
具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。
其中“出生日期”声明为一个“日期”类内嵌子对象。
用成员函数实现对人员信息的录入和显示。
要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。
在测试程序中声明people类的对象数组,录入数据并显示。
三、实验步骤1.(编程,习题6-25)编写矩阵转置函数,输入参数为3×3整型数组。
使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入输出。
程序名:lab6_1.cpp。
参考运行结果:★程序及运行结果://lab6_1.cpp#include<iostream>using namespace std;void move(int matrix[][3]){int temp;for(int i=0;i<3;i++)for(int j=0;j<i;j++){temp=matrix[i][j];matrix[i][j]=matrix[j][i];matrix[j][i]=temp;}}void main(){int i,j,mat[3][3];cout<<"输入3×3矩阵"<<endl;for(i=0;i<3;i++){cout<<"第"<<i+1<<"行:";for(j=0;j<3;j++) cin>>mat[i][j];}cout<<"\n输入的3×3矩阵为:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++)cout<<mat[i][j]<<" ";cout<<endl;}move(mat);cout<<"转置后的矩阵为:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++)cout<<*(*(mat+i)+j)<<" ";//指针形式cout<<endl;}}2.(编程,习题6-26)编写n×n阶矩阵转置函数,参数为整型指针。
上机实验六 一维数组 - 答案
![上机实验六 一维数组 - 答案](https://img.taocdn.com/s3/m/b0657d17580216fc710afd17.png)
上机实验六一维数组班级学号姓名本次题目一共5题,必做4个,选做1个。
选做题可能有点难度,请尝试着做一下,能做出来说明目前你已经很强了!一.目的要求1.掌握一维数组的基本概念,定义和初始化方法;2.掌握一维数组的基本操作,如输入、输出、引用数组元素;3.掌握与数组有关的基本算法,如寻找最大/最小值、排序等。
二.实验内容【实验题1】程序改错:源程序用数组求Fibonacci数列前20项,但在带标记的代码行存在错误。
源程序如下:#include<stdio.h>void main(){ int i, fib[20];fib[1]= fib[2]= 1; //错误1for(i=3; i<=20; i++) //错误2fib[i]= fib[i-1] +fib[i-2];for(i=1; i<=20; i++){ //错误3printf("%6d", fib[i]);if( (i+1)%5==0 ) printf("\n");}}数组的下标应该从几开始?标出的三个错误语句行,应分别改为?数组下标应该从0开始,错误1修改为:fib[0]= fib[1]= 1;错误2修改为:for(i=2; i<20; i++);错误3修改为:for(i=0; i<20; i++)未改正错误之前,程序运行结果是(只写最后一项)4181改正后,程序运行结果是(只写最后一项)6765【实验题2】程序填空:给定平面上10个点,求其中离原点最近的点。
源程序用一维数组x存放这10个点的x坐标,用一维数组y存放相应的y坐标,即第i个点的坐标为(x[i], y[i])。
用变量index记录最近点的下标。
程序中使用距离的平方做比较:x*x+y*y。
#include<stdio.h>void main(){int i, index; //index是离原点最近的点的下标double d, min; //min是到原点的最近距离的平方double x[]={1.1, 3.2, -2.5, 5.67, 3.42, -4.5, 2.54, 5.6, 0.97, 4.65};// 赋初值double y[]={-6, 4.3, 4.5, 3.67, 2.42, 2.54, 5.6, -0.97, 4.65, -3.33};// :赋初值index= 0 ; min= x[0]*x[0]+y[0]*y[0]; //设第0个点为最近点for(i=1; i<10; i++){d= x[i]*x[i]+y[i]*y[i];if( d < min ){ //Line 11min=d;index=i;}}printf("%d: x=%.2f, y=%.2f \n", index, x[index] , y[index] ); //输出最近点的下标和坐标}程序运行结果为:数组x和y的长度应该各是多少?10,10如果将程序功能改为求10个点中离原点最远的点,语句行Line 11又应如何填写?if( d>min ){ //Line 11【实验题3】程序填空:输入5个整数, 将这5个数按逆时针顺序转动一次后再输出,如输入1 2 3 4 5,逆时针转动一次后,输出2 3 4 5 1。
实验a6参考答案.doc
![实验a6参考答案.doc](https://img.taocdn.com/s3/m/0cc2cc69cc22bcd127ff0c0b.png)
实验目的:本实验的目的是进一步熟练数组的定义及基本用法。
将编程题的第1小题要求写实验报告,格式附后。
选择题1.已知int a[10];则对a数组元素引用不正确的是()。
(A) a[10-10] (B) a[10] (C) a[3+5] (D) a[5]2.以下程序段的运行结果是()ointa[]={l,2,3,4},ij;j=l;for(i=3;i>=0;i—)( a[i]=a[i]*j;j=j*3;)for(i=0;i<4;i++)printf("%d ",a[i]);(A) 3 6 9 12 (B) 18 12 9 4 (C) 27 18 9 4 (D) 54 18 9 43.在C语言中,若定义二维数组a[2][3],设a[0][0]在数组中位置为1,则a[l][l]在数组中位置是()。
(A) 3 (B)4 (C) 5 (D) 64.以下程序段运行后s的值是()oint a[3][3]={l,2,3,4,5,l,2,3,4};int i,j,s=l;for(i=0;i<3;i++)for(j=i+l;j<3;j++)s+=a[i][j];(A) 6 (B) 120 (C)7 (D) 2405.设已定义:int a[][4]={0,0,0};则下列描述正确的是()。
(A)数组a包含3个元素(B)数组a的第一维大小为3(C)数组a的行数为1 (D)元素a[0][3]的初值不为0/**/二.补充程序补充程序:使其实现找出一数组中的最小数mini 和次小数mini(注:在两对/**/之间补充必要的表达式,不得删除/**/)#include <stdio.h>main()( int i,a[10]=(9,26,35,8,6,19,69,3,5,95};int minl,min2;i=0;minl=a[0]<a[l]?a[0]:a[l]; min2=a[0]>a[l]?/**/ for(i=2;i<10;i++)( if(a[i]<minl)( min2=minl;/**/ /**/;}else if(a[i]<min2)/**/ /**/printf("minl=%d,min2=%d\n",minl,min2);getch();. 编程题1.由程序产生如下所示二维数组(矩阵)a 并实现输出。
lab6-数组资料
![lab6-数组资料](https://img.taocdn.com/s3/m/00c07fa9dd88d0d233d46a6d.png)
printf(“%d”,a); ()
必须 for(j=0;j<10;j++)
printf(“%d\t”,a[j]);
()
字符数组和字符串
字符数组 定义
例 char c[10], ch[3][4];
字符数组的初始化 逐个字符赋值 用字符串常量
字符数组的引用
逐逐逐用用个个个字字字字字符符符符符串串赋赋赋常常值值值量量
C程序设计实验
lab6-数组
实验目的
1. 熟练掌握C程序中的数组和字符数组的定义的引用 2.掌握数组和字符数组的输入输出 3. 熟练字符串处理函数
实验学时:
4学时 实验6报告提交时间:
实验项目性质
验证性
实验内容
编程调试典型程序
实验步骤—选择法对数组排序
用选择法对10个整数,按递增排序
实验步骤—字符串连接
编写一个程序,将两个字符串连接起来,不要 用strcat函数。
实验步骤
完成作业(p245, 8.2)
(a)输出"Who is the inventor of C?" (b)输入答案 (c)正确打印"Good!", (d)不正确打印"Try again" (e)不正确的允许有三次回答机会,还不正确才打印正确
有问题!
例例例例cchchcahahraracrcrhchc[h[5h5[][5]=6=]{]={=‘‘{“{‘“HHBB’H’o’ye,,’”l’,l’oe;”e’o’’};,,’’,’ll’’y’,,’’};ll’’,,’’oo’’,}’; #’}; char ch[6]=“Hello”;
HHB ceheaor ch[l]l=y“Hellllo\0”; oo\0 cchch[h[00[]0H] ] cchch[h[11[]1e] ] cchch[h[22[]2l] ] cchch[h[33[]3l] ] cchch[h[44[]4o] ] \0
实验6 数组2答案
![实验6 数组2答案](https://img.taocdn.com/s3/m/a0c7ecb5f121dd36a32d82e8.png)
实验6 数组的应用一、实验目的1、掌握一维数组、二维数组的概念和定义2、掌握数组元素的引用、赋值和输入/输出方法3、掌握使用循环结构控制数组元素的下标按规律变化来处理一维数组元素和二维数组元素的程序设计方法二、实验内容1. 写出下列程序运行后的输出结果并上机验证。
①#include <iostream>using namespace std;int main(){int a[10]={12,39,26,41,55,63,72,40,83,95};int k=0,j=0;for (int i=0;i<10;i++)if (a[i]%2==1) k++; else j++;cout<<k<<' '<<j<<endl;}6 4②#include <iostream>using namespace std;int main(){char a[]="abcdabcabfgacd";int i1=0,i2=0,i=0;while(a[i]){if(a[i]=='a') i1++;if(a[i]=='b') i2++;i++;}cout<<i1<<' '<<i2<<' '<<i<<endl;4, 3,14③#include <iostream>using namespace std;int main(){int a[10]={76,83,54,62,40,75,90,92,77,84};int b[4]={60,70,90,101};int c[4]={0};int i;for(i=0;i<10;i++){int j=0;while(a[i]>=b[j]) j++;c[j]++;}for(i=0;i<4;i++) cout<<c[i]<<' ';cout<<endl;}2 1 5 2④#include <iostream>#include <string>using namespace std;int main(){char a[5][10]={"student","worker","soldier","cadre","peasant"};char s1[10],s2[10];strcpy(s1,a[0]);strcpy(s2,a[0]);//strcpy(s1,s2)为字符串复制函数,将字符串变量s2的值复制给s1for(int i=1;i<5;i++){if(strcmp(a[i],s1)>0) strcpy(s1,a[i]);//strcmp(s1,s2)为字符串比较函数if(strcmp(a[i],s2)<0) strcpy(s2,a[i]);}cout<<s1<<' '<<s2<<endl;worker cadre说明:(s1、s2为字符串变量或者字符数组)strcpy(s1,s2);strcpy是string copy(字符串复制)的缩写。
C语言实验报告第6章答案
![C语言实验报告第6章答案](https://img.taocdn.com/s3/m/2912ebe74793daef5ef7ba0d4a7302768e996f9d.png)
C语⾔实验报告第6章答案6.2基础实验⼀、程序分析分析以下程序段完成的功能,填写在序号后的空⽩处,并运⾏验证结果。
1. ⊙以下程序的运⾏结果是:_______s=12345↙____________________。
#includeint main( ){ inta[]={1,2,3,4,5},i,j=1,s=0;for(i=4;i>=0;i--){ s=s+a[i]*j;j=j*10;}printf(“ s= %d \n” , s );return 0;}2. 以下程序的运⾏结果是:_____7 5 3______________________。
#includeint main( ){ int k ;int a[3][3]={9,8,7,6,5,4,3,2,1};for(k=0;k<3;k++)printf(“%d ”,a[k][2-k]);return 0;}3. 以下程序的功能是:____查找最⼤值元素及下标_________________。
#includeint main( ){ int i, j ,x =0 ,y = 0 , m ;int a[3][3] = { 1, -2 , 0 , 4 , -5 , 6 , 2 , 4 };m = a [0][0] ;for (i=0 ;i < 3 ;i++)for (j = 0 ; j<3 ; j++ )if ( a[ i] [ j ] >m ){ m = a[ i ][ j ] ;x = i ;printf(“ ( % d , % d ) = % d \n”, x , y,m );return 0;} 运⾏结果:___(1 , 2 ) = 6↙_________________4. 以下程序的的运⾏结果是:__8,I am student!___________________。
#include int main( ){ char s1[50]= “I am ”;char s2[ ]=“student!” ;printf(“%d,”, strlen(s2) );strcat(s1,s2);printf(“%s\n”,s1);return 0;}5.以下程序的运⾏结果是:_______6_____________________。
实验6 数组程序设计答案
![实验6 数组程序设计答案](https://img.taocdn.com/s3/m/194cdcb6b0717fd5360cdccf.png)
实验6 数组程序设计一、实验目的1. 掌握一维数组和二维数组的定义、赋值和输入输出的方法。
2. 掌握字符数组和字符串函数的使用。
3. 掌握与数组有关的算法。
二、实验内容1.改错题(1)下列程序的功能为:为指定的数组输入10个数据,并求这些数据之和。
纠正程序中存在的错误,以实现其功能。
程序以文件名sy6_1.c 保存。
#include<stdio.h>void main() {int n=10,i,sum=0; int a[n];for(i=0;i<10;i++) { scanf("%d",a[i]); sum=sum+a[i];} printf("sum=%d\n",sum); }(2)下列程序的功能为:将字符串b 连接到字符串a 。
纠正程序中存在的错误,以实现其功能。
程序以文件名sy6_2.c 保存。
#include<stdio.h> void main( ){ char a[]="wel",b[]="come"; int i,n=0; while(!a[n]) n++; for(i=0;b[i]!='\0';i++) a[n+i]=b[i];a[n+i]=’\0’; printf("%s\n",a); }(3)下列程序的功能为:找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。
也可能没有鞍点。
纠正程序中存在的错误,以实现其功能。
程序以文件名sy6_3.c 保存。
#include<stdio.h>#define N 4#define M 4main(){int i,j,k,flag1,flag2,a[N][M],max,maxj;for (i=0;i<N;i++)for (j=0;j<M;j++)scanf("%d",&a[i][j]);flag2=0;for (i=0;i<N;i++){max=a[j][0]; max=a[i][0];for (j=0;j<M;j++)if (a[i][j]>max) if (a[i][j]>=max){max=a[i][j];maxj=j;}for (k=0,flag1=1;k<N&&flag1;k++)if (max>a[k][maxj])flag1=0;if (flag1){printf("\nThe saddle point is:a[%d][%d]=%d\n",i,maxj,max);flag2=1;}}if (!flag2)printf("\nThere is no saddle point in the Matrix\n");}2.程序填空题(1)以下程序的功能是:采用二分法在给定的有序数组中查找用户输入的值,并显示查找结果。
C语言习题六(数组部分)习题及答案
![C语言习题六(数组部分)习题及答案](https://img.taocdn.com/s3/m/ead74d54a36925c52cc58bd63186bceb19e8edc3.png)
C语言习题六(数组部分)习题及答案习题六一.选择题1.在C语言中,引用数组元素时,其数组下标的数据类型允许是c 。
A)整型常量B)整型表达式C)整型常量或整型表达式C)任何类型的表达式2.以下对一维整型数组a的正确说明是DA)int a(10) ; B)int n=10,a[n];C)int n; D)#define SIZE 10scanf(“%d”,&n);int a[SIZE];int a[n];3.若有定义:int a[10],则对数组a元素的正确引用是 D 。
A)a[10] B)a[3.5] C)a(5) D)a[10-10]4.以下不能对一维数组a进行正确初始化的语句是B 。
A)int a[10]={0,0,0,0,0}; B)int a[10]={} ;C)int a[ ] = {0} ; D)int a[10]={10*1} ;5.若有定义:int a[3][4],则对数组a元素的正确引用是。
AA)a[2][3] B)a[1,3] C)a(5) D)a[10-10]6.以下能对二维数组a进行正确初始化的语句是B。
A)int a[2][]={{1,0,1},{5,2,3}} ;B)int a[][3]={{1,2,3},{4,5,6}} ;C)int a[2][4]={{1,2,3},{4,5},{6}} ;D)int a[][3]={{1,0,1},{},{1,1}} ;7.以下不能对二维数组a进行正确初始化的语句是。
CA)int a[2][3]={0} ;B)int a[][3]={{1,2},{0}} ;C)int a[2][3]={{1,2},{3,4},{5,6}} ;D)int a[][3]={1,2,3,4,5,6} ;8.若有说明:int a[3][4]={0};则下面正确的叙述是D。
A)只有元素a[0][0]可得到初值0B)此说明语句不正确C)数组a中各元素都可得到初值,但其值不一定为0D)数组a中每个元素均可得到初值09.若有说明:int a[][4]={0,0};则下面不正确的叙述是D。
实验6 数组——参考答案
![实验6 数组——参考答案](https://img.taocdn.com/s3/m/e11ee3eb998fcc22bcd10d38.png)
实验6 数组一、一维数组实验2. 编程:输入长度为10的整型数组并输出;然后将其逆序存放后再输出。
例如:0 1 2 3 4 5 6 7 8 9#include<stdio.h>void main(){int i, j, a[10], t;printf("Input 10 number: ");for(i=0; i<10; i++) /*读入数据*/scanf("%d", &a[i]);printf("origin data: ");for(i=0; i<10; i++) /*输出原始数据*/printf("%d ", a[i]);printf("\n");for(i=0,j=9; i<j ; i++,j--) /*逆序存放*/{t=a[i];a[i]=a[j];a[j]= t;}printf("After reversed: "); /*输出逆序存放后的数据*/for(i=0; i<10; i++)printf("%d ", a[i]);printf("\n");}3. 编程:输入n个(1<n<=10)正整数并保存到数组中,求出最大值、最小值、平均值,以及最大值、最小值在数组中的下标分别是多少。
例如:5#include <stdio.h>void main(){int i, n , max, min, a[10], sum;float average;printf("Input n (1<n<=10): ");scanf("%d", &n);if(1<n && n<=10){printf("Input %d integer:", n); /*输入数据并求累加和*/for(i=0, sum=0; i<n; i++){scanf("%d", &a[i]);sum+=a[i];}average=(float)sum/n; /*求出平均值*/for(i=0, max=0, min=0; i<n; i++) /*求最大、最小值的下标*/{if(a[i] > a[max])max= i;if(a[i] < a[min])min= i;}printf("max=%-5d index=%d\n", a[max], max);printf("min=%-5d index=%d\n", a[min], min);printf("average=%.2f\n", average);}elseprintf("数据超出范围");}4. 编程:青年歌手参加歌曲大奖赛,有10个评委对她(他)进行打分,试编程求这位选手的平均得分并输出(去掉一个最高分和一个最低分)。
C语言实验报告 实验六 参考答案
![C语言实验报告 实验六 参考答案](https://img.taocdn.com/s3/m/a187303cb9f3f90f77c61b75.png)
实验六二维数值数组(参考答案)(1) 设计程序sy6-1.c,从键盘上输入一个3行3列矩阵各个元素的值,输出其主对角线元素和反向对角线元素之和。
算法分析:方阵主对角线上的元素,行下标和列下标相同;辅对角线元素,如果行下标为i,列下标就为2-i;参考答案:# include <stdio.h># include <stdlib.h># include <math.h># include <time.h>void main(){int a[3][3];int i,j,sum=0;srand( time( NULL ) );printf("矩阵:\n");for(i=0;i<3;i++) //用随机函数生成3行3列的二维数组并按矩阵格式输出{for(j=0;j<3;j++){a[i][j]=rand()%20;printf("%4d",a[i][j]);}printf("\n");}for(i=0;i<3;i++)sum=sum+a[i][i]+a[i][2-i];printf("该矩阵的正、反对角线元素之和为:%d\n",sum);}运行结果:(2) 设计程序sy6-2.c,找出N×N矩阵中每列元素中的最大值,并按顺序依次存放于b数组中。
算法分析:按列序遍历二维数组,每列用打擂台的方法求最大数,N列则有N个最大值,分别存于b数组的对应元素中。
# include <stdio.h># include <stdlib.h># include <math.h># include <time.h># define N 4void main(){int a[N][N],b[N];int i,j;srand( time( NULL ) );printf("矩阵:\n");for(i=0;i<N;i++) //用随机函数生成N行N列的二维数组并按矩阵格式输出{for(j=0;j<N;j++){a[i][j]=rand()%20;printf("%4d",a[i][j]);}printf("\n");}for(j=0;j<N;j++) //外循环控制列下标{b[j]=a[0][j]; //假设每列的0行元素是最大数for(i=1;i<N;i++)if(b[j]<a[i][j])b[j]=a[i][j];}printf("该矩阵每列元素的最大值是:\n");for(i=0;i<N;i++)printf("%4d",b[i]);printf("\n");}运行结果:(3) 设计程序sy6-3.c,定义一个3×3的二维数组,通过随机函数自动赋值。
C++语言程序设计实验6(数组、指针和字符串)
![C++语言程序设计实验6(数组、指针和字符串)](https://img.taocdn.com/s3/m/ecfd2f89e53a580216fcfeec.png)
{ for(i = 0; i < 4; ++ i) //二维数组赋值与输出
{
Array[t][i] = ( t * 4 ) + i + 1;
cout << Array[t][i] << ' ';
}
cout <<endl;
}
return 0;
} z 数组作为函数参数
数组元素作实参,与单个变量一样。
for(int i = 0; i < 4; i ++)
cout << "obs[" << i << "].getx(): " << obs[i].getx() << "\n";
return 0;
}
2. 指针
z 指针:内存地址,用于间接访问内存单元 z 指针变量:用于存放地址的变量
例如: int i; int *i_pointer = &i; //指向整型变量的指针,其中&表示取地址运算符
pint = (int *)pv; //void 指针赋值给 int 指针需要类型强制转换:
z 指向常量的指针
不 能 通 过 指 针 来 改 变 所 指 对 象 的 值 ,但 指 针 本 身 可 以 改 变 ,可 以 指 向 另 外 的 对 象 。例 如 :
int a, b;
int *name1 = &a;
using namespace std;
int main( )
{
int Array[10], *va = Array; //第一种访问方式
实验六参考答案
![实验六参考答案](https://img.taocdn.com/s3/m/f58d2a0702020740be1e9bb3.png)
第一套1、程序填空题1)【参考答案】第一处:* 第二处:'Z' 第三处:tt2)【参考答案】第一处:char 第二处:ch<='9' 第三处:'0'2、程序改错题【参考答案】第一处:c=c-32;改为c=c+32; 第二处:c=c-5;改为c=c+5;2、程序设计题【参考答案】void fun(char *s){ int i=0;/*假如s[i]不为字符串结束符,则继续循环,否则退出循环*/while (s[i]!='\0')/*假如s[i]为大写字母Z 且在字符串中下标为奇数的位置上,则转换成小写字母z*/{ if ((s[i]=='Z') && (i%2==1))s[i]='z';/*假如s[i]为除大写字母Z 以外的字母,则直接转换成该字母的小写字母状态的下一个字母*/else if ((s[i]>='A' && s[i]<'Z') && (i%2==1))s[i]=s[i]+33;i++;}}【解题思路】将s 所指字符串中下标为奇数位置上的大写字母转换为字母序列中的下一个小写字母,若该位置上是小写字母,则不转换;若该位置上是大写字母Z,则仅转换成小写字母z。
判断字符为大写字母的方法是:判断字符的ASCII 值是否大于A小于Z。
判断下标为奇数,用i%2 等于1 来判断。
1、程序填空题1)【参考答案】第一处:n >0 第二处:n%10+'0' 第三处:str[i]= ′\0′2)【参考答案】第一处:s[i] >= ′0′ &&s[i]< = ′9′第二处:s[i]- ′0′第三处:n2、程序改错题【参考答案】第一处:if(('a'<=tt[i]) || (tt[i]<='z'))改为if(('a'< =tt[i]) && (tt[i]< ='z'))第二处:tt[i]+=32;改为tt[i]-=32;3、程序设计题【参考答案】long fun(char *p){ long n=0;攀枝花学院计算机基础教研室第1页共3页int flag=0;/*通过循环语句移动指针,取出指针所在位置上的字符*/while(*p!='\0'){ if(*p=='-') /*判断其是否为负号*/flag=1;else if (*p=='+') /*判断其是否为正号*/flag=0;else /*判断其是否为数字字符*/n=n*10+(*p-'0'); /*将数字字符转化为相应的数值*/p++;}if (flag==1) n=-n;return n;}【解题思路】通过循环语句移动指针,取出指针所在位置上的字符,先判断其为正负号还是为数字字符,如果为数字字符则将其转化为相应的数值,否则作正负标记。
实验(6)-数组-参考答案
![实验(6)-数组-参考答案](https://img.taocdn.com/s3/m/9ad64d73dcccda38376baf1ffc4ffe473268fd58.png)
实验(6)-数组-参考答案C语⾔程序设计实验教学(6)【实验⽬的】数组的应⽤是很重要的⼀章。
通过实验掌握⼀维数组的主要应⽤,并理解数组的存储。
对⼆维数组的处理要⽐较熟悉。
【实验要求】⼀维数组的题⽬要求全⾯掌握,应⽤循环结构完成⼀维数组的输⼊、处理和输出。
⼆维数组能够完成简单的数据处理和应⽤。
【实验课时】8.0【实验内容】⼀维数组:1、定义⼀个10个元素的int数组a,输⼊10个数,并输出。
main(){int i,a[10];for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");}2、⽤数组来保存Fibonacci数列前20项数值,以每5个数据为⼀⾏进⾏输出。
main(){int i; long f[20];f[0]=1;f[1]=1;for(i=2;i<20;i++)f[i]=f[i-1]+f[i-2];for(i=0;i<20;i++){if(i%5==0) printf("\n");printf("%10ld",f[i]);}printf("\n");}3、计算整数数组num中的最⼤值及其所在的下标。
main(){int i,max,p,a[10];printf("please enter 10 data:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);max=a[0];p=0;for(i=1;i<10;i++)if(a[i]>max) {max=a[i];p=i;}printf("max is:%d\n",max);printf("point is:%d\n",p+1);}4、在包含10个整数的数组中找出最⼤者,并与第⼀个元素交换。
C语言-数组-实验题目及答案
![C语言-数组-实验题目及答案](https://img.taocdn.com/s3/m/8172696e84868762caaed5f7.png)
C语言-数组-实验题目及答案实验六数组程序设计【实验目的】1、掌握使用一维数组编程方法2、掌握使用二维数组进行程序设计【实验内容】一、上机验证程序,并分析结果要求:读懂程序,写出分析结果;上机运行程序,得到运行结果,比较之。
1、#include <stdio.h>int main(){ int a[ ]={1,2,3,4,5} , i, j, s=0 ;j = 1;for ( i = 4 ; i>=0 ; i--){s = s+ a[i] * j ;j = j * 10 ;}printf(" s= %d \n" , s );return 0;}分析结果运行结果二、程序改错题1.下面程序的功能,是从键盘输入一个数组(数组长度为10),查找数组中正数的个数。
源代码如下,程序中存在错误,请将其改正。
#include <stdio.h>int main(){int a(10);/*定义数组*/int count,i;/* i循环变量 count 正数个数*/for(i=0;i<=10;i++){/*循环输入*/scanf("%d",a[i]);}count=1;for(i=0;i<=10;i++){/*查找正数*/if(a(i)>0)count++;}printf("数组中正数有:%d个\n",count);return 0;}三编写程序1.编写程序要求输入30个学生的单科成绩,输出高于平均分的成绩。
#include <stdio.h>#define N 30int main(){float score[N],sum=0,aver;int i;for(i=0;i<30;i++){scanf("%f",&score[i]);sum=sum+score[i];}aver=sum/30;printf("平均分为:%.2f\n",aver);for(i=0;i<N;i++)if(score[i]>aver)printf("%.2f ",score[i]);{if(a[i]==s){ flag=1; break;}}if(flag)printf("查找成功!编号为%d的书籍的位置是%d\n",s,i+1);elseprintf("查找失败!请确认书籍编号是否正确!\n");return 0;}4. 编写程序验证冒泡法排序#include <stdio.h>int main(){ int a[11],i,j,t;printf("Input 10 numbers:\n");for(i=1;i<11;i++)scanf("%d",&a[i]);printf("\n");for(i=1;i<=9;i++)for(j=1;j<=10-i;j++)if(a[j]>a[j+1]){t=a[j]; a[j]=a[j+1]; a[j+1]=t;}printf("The sorted numbers:\n");for(i=1;i<11;i++)printf("%d ",a[i]);return 0;}5. 编写程序验证选择法排序方法一:#include <stdio.h>int main(){ int a[11],i,j,k,temp;printf("Input 10 numbers:\n");for(i=1;i<11;i++)scanf("%d",&a[i]);for(i=1;i<10;i++){ k=i;for(j=i+1;j<11;j++)if(a[j]<a[k]) k=j;if(i!=k){ temp=a[i]; a[i]=a[k]; a[k]=temp;}}printf("The sorted numbers:\n");for(i=1;i<11;i++)printf("%d ",a[i]);return 0;}方法二:#include <stdio.h>#define NUM 10 /* 参与排序的数据个数*/int main(){int data[NUM]; /* 存放参与排序的所有整数*/int i, j, minValue, temp;/* 通过键盘输入待排序的整型数列*/printf("\nEnter %d integers.", NUM);for (i=0; i<NUM; i++) {scanf("%d", &data[i]);}/* 选择排序*/for (i=0; i<NUM-1; i++) {minValue = i;for (j=i+1; j<NUM; j++) { /* 选择i~NUM-1之间的最小数值*/ if (data[j]<data[minValue])minValue = j;}if (minValue!=i) { /* 交换*/temp = data[i];data[i] = data[minValue];data[minValue] = temp;}}/* 输出排序后的结果*/printf("\nOrdering list is:\n");for (i=0; i<NUM; i++) {printf("%5d", data[i]);}return 0;}6. 编写程序验证二分查找#include <stdio.h>#define NUM 10int main( ){int value[NUM] = {12, 23, 30, 45, 48, 50, 67, 82, 91, 103}; /* 非递减整型数列*/int low, high, mid, key;printf("\nEnter a key:"); /* 输入查找的数值*/scanf("%d", &key);/* 利用二分查找在有序数列中查找key */low = 0; high = NUM-1;while (low<=high) {mid = (low+high)/2;if (value[mid]==key) break;if (value[mid]<key)low = mid+1;elsehigh = mid-1;}/* 输出查找结果*/if (low<=high)printf("\n%d is found at %d.", key, mid); /* 确认break出口*/ elseprintf("\n%d is not found.", key); /* 确认循环正常出口*/return 0;}7.将一个数组的值按逆序重新存放,例如,原来顺序为:8,10,4,23,1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验6 数组一、一维数组实验2. 编程:输入长度为10的整型数组并输出;然后将其逆序存放后再输出。
例如:0 1 2 3 4 5 6 7 8 9#include<>void main(){int i, j, a[10], t;printf("Input 10 number: ");for(i=0; i<10; i++) /*读入数据*/scanf("%d", &a[i]);printf("origin data: ");for(i=0; i<10; i++) /*输出原始数据*/printf("%d ", a[i]);printf("\n");for(i=0,j=9; i<j ; i++,j--) /*逆序存放*/{t=a[i];a[i]=a[j];a[j]= t;}printf("After reversed: "); /*输出逆序存放后的数据*/for(i=0; i<10; i++)printf("%d ", a[i]);printf("\n");}3. 编程:输入n个(1<n<=10)正整数并保存到数组中,求出最大值、最小值、平均值,以及最大值、最小值在数组中的下标分别是多少。
例如:5#include <>void main(){int i, n , max, min, a[10], sum;float average;printf("Input n (1<n<=10): ");scanf("%d", &n);if(1<n && n<=10){printf("Input %d integer:", n); /*输入数据并求累加和*/for(i=0, sum=0; i<n; i++){scanf("%d", &a[i]);sum+=a[i];}average=(float)sum/n; /*求出平均值*/for(i=0, max=0, min=0; i<n; i++) /*求最大、最小值的下标*/{if(a[i] > a[max])max= i;if(a[i] < a[min])min= i;}printf("max=%-5d index=%d\n", a[max], max);printf("min=%-5d index=%d\n", a[min], min);printf("average=%.2f\n", average);}elseprintf("数据超出范围");}4. 编程:青年歌手参加歌曲大奖赛,有10个评委对她(他)进行打分,试编程求这位选手的平均得分并输出(去掉一个最高分和一个最低分)。
#include <>void main(){int i, max, min;float a[10], ave;printf("请输入10个评委的打分:");for(i=0, ave=0; i<10; i++) /*输入分数并求累加和*/{ave+=a[i];}for(i=0, max=0 , min=0; i<10; i++) /*求最大、最小值的下标*/{if(a[i]>a[max])max=i;if(a[i]<a[min])min=i;}ave=ave-a[max]-a[min];ave=ave/8;printf("该选手的评委打分是:");for(i=0; i<10; i++)printf("%.2f ", a[i]);printf("\n");printf("去掉最高分%.2f,去掉最低分%.2f,该选手的平均得分是%.2f\n", a[max], a[min], ave); }5. 编程:用两种方法输出斐波那切数列的前40项(参考例6-4)。
要求:(1)方法1:不使用数组;#include <>void main(){int f1=1, f2=1, f3, i;printf("%12d%12d", f1, f2);for(i=3; i<=40; i++){f3=f1+f2;printf("%12d", f3);if(i%5==0)printf("\n");f1= f2;f2= f3;}}(2)方法2:使用一维数组。
#include <>{int i;int fib[40];fib[0]=fib[1]=1;for(i=2; i<40; i++) /*计算其余的38个数*/fib[i]= fib[i-1] + fib[i-2];for(i=0; i<40; i++){printf("%12d",fib[i]);if((i+1)%5==0)printf("\n");}}6. 编程:输入n个(1<n<=10)float型的数据并保存到数组中,用冒泡法或选择法将它们从大到小排序后输出。
例如:5#include <>void main(){int i, j, n;float a[10], t;printf("Input n: ");scanf("%d",&n);if(n>1 && n<=10){printf("Input %d number:", n);for(i=0;i<n;i++)scanf("%f",&a[i]);printf("Before sorted:"); /*输出排序前的数据*/for(i=0; i<n; i++)printf("%.2f ", a[i]);printf("\n");for(i=0; i<n-1; i++) /*冒泡排序*/for(j=0; j<n-i-1; j++)if( a[j] < a[j+1] )t=a[j];a[j]=a[j+1];a[j+1]=t;}printf("After sorted:"); /*输出排序结果*/for(i=0; i<n; i++)printf("%.2f ", a[i]);printf("\n");}elseprintf("数据超出范围");}7. 在上题基础上(输入n个float型的数据并保存到数组中,用冒泡法或选择法将它们从大到小排序后输出)完成:在已经排好序的数组(长度不足10)中插入一个数m(键盘输入)后输出,保持数组的降序排列。
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
#include <>void main(){int i, j, n, p;float a[10], t, m;printf("Input n: ");scanf("%d", &n);if(n>1 && n<=10){printf("Input %d number:", n);for(i=0; i<n; i++)scanf("%f", &a[i]);printf("Before sorted: "); /*输出排序前的数据*/for(i=0; i<n; i++)printf("%.2f ", a[i]);printf("\n");for(i=0; i<n-1; i++) /*冒泡排序*/for(j=0; j<n-i-1; j++)if( a[j] < a[j+1] ){t=a[j];a[j]=a[j+1];a[j+1]=t;printf("After sorted:"); /*输出排序结果*/for(i=0; i<n; i++)printf("%.2f ", a[i]);printf("\n");printf("请输入要插入的数据m: ");scanf("%f", &m);/*找到插入位置*/if(m < a[n-1]) /*如果m比最后一个元素小,则直接插入到最后的位置*/p = n;else{for(i=0; i<n; i++) /*否则,插入到中间的某个位置*/if( m > a[i]){p=i;break;}for(i=n; i>=p+1; i--) /*将插入位置之后的元素后移*/a[i]=a[i-1];}/*插入*/a[p]=m;printf("插入%.2f 后:", m); /*输出插入后结果*/for(i=0; i<n+1; i++)printf("%.2f ", a[i]);printf("\n");}elseprintf("数据超出范围");}二、二维数组实验1. 以下程序功能为:将下列矩阵中的元素向右移动一列,最后一列移至第一列。
找出并改正以下源程序中错误,通过调试得出正确的运行结果。
1 4 68 10 12源程序(有错误的程序)#include <>#define ROW 2#define COL 3int main(){int a[ROW][COL]={1,4,6,8,10,12};int i,j,temp;for(i=0;i<ROW;i++){temp=a[i][COL-1];for(j=COL-2;j>=0;j--){a[i][j]=a[i][j+1]; /*调试时设置断点*/ COL 编程:利用二维数组计算并打印一个n 行的杨辉三角。