实验6数组——参考答案
c语言程序设计教程(第2版)课后题及模拟题参考答案

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语言程序设计习题答案习题六数组一、选择题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 一维数组和二维数组

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 语言程序设计实验答案_数组、指针与字符串解析

实验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阶矩阵转置函数,参数为整型指针。
上机实验六 一维数组 - 答案

上机实验六一维数组班级学号姓名本次题目一共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

实验目的:本实验的目的是进一步熟练数组的定义及基本用法。
将编程题的第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-数组资料

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 数组的应用一、实验目的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(字符串复制)的缩写。
- 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 行的杨辉三角。