实验11-数组(2)
- 格式:doc
- 大小:102.00 KB
- 文档页数:6
实验11 数组【实验目的】1: 掌握二维数组的定义、存储结构、输入/输出及初始化的方法。
2:掌握字符数组的定义、存储结构、输入/输出及初始化的方法。
3:掌握字符串函数的使用。
4:掌握数组作为函数参数的使用。
二、实验内容-上机调试理解例1:编写程序,求两个矩阵之和,设其行数为2,列数为3。
分析:两个矩阵相加,实际就是将两矩阵中对应的元素相加。
两矩阵可以相加的条件是具有相同的函数和列数,它们的和也具有相同的行数和列数。
源程序:#include<iostream.h>void main(){int a[2][3],b[2][3],c[2][3]; //定义二维数组,2行3列int i,j;cout<<"请输入数组a元素"<<endl;for(i=0;i<=1;i++)for(j=0;j<=2;j++)cin>>a[i][j];//输入a数组cout<<"请输入数组b元素"<<endl;for(i=0;i<=1;i++)for(j=0;j<=2;j++)cin>>b[i][j];//输入b数组for(i=0;i<=1;i++)for(j=0;j<=2;j++)c[i][j]=a[i][j]+b[i][j];//对应元素求和cout<<"输出数组c元素"<<endl;for(i=0;i<=1;i++){for(j=0;j<=2;j++)cout<<c[i][j]<<'\t';//输出c数组cout<<endl;// 输完一行后换行}}字符数组相关知识点:一、字符串的定义及初始化(1)采用单个字符常量char c[10]={‘I’, ‘ ’,‘a’,‘m’ , ‘ ’,‘h’,‘a’,‘p’,‘p’,‘y’};(2)采用字符串常量char c[]="I am happy";char c[3][10]={“Moncia”,”Rebecca”,”Rachei”} //多个字符串二、字符串的输入char s[10];(1)直接采用数组名cin>>s; //读取字符,直到遇到“空格”和“回车符”为止(2)cin.get(字符数组名,字符串长度,结束符)cin.get(s,10);//输入一串字符,直到输入流中出现了规定的结束符(默认是回车键)或所读取的字符个数达到字符串长度(包括结束标志’\0’)(3)cin.getline(字符数组名,字符串最大长度) //用于多个字符串的输入cin.getline(s1,10);cin.getline(s2,20);三、字符串的输出(1)直接输出常量或采用数组名char c[20]=“hello”;cout<<c; 或cout<<“hello”;(2)cout.put(字符或字符变量)char c[20]=“hello”;int i=0;while(c[i]!=‘\0’){cout.put(c[i]);i++;}//每次只输出一个字符要输出全部,需要采用循环。
(3)c out.write(字符串或字符数组名,个数n);char c[20]=“hello”;cout.write(s,4);//可输出字符串指定的前n个字符三、字符串函数字符串处理函数-引入#include <string.h>(1)测长度:strlen(字符数组名):字符个数//不包括字符串结束标志符‘\0’,返回字符个数。
(2)复制:strcpy(字符数组1,字符数组2):2拷贝1(3)比较:strcmp(字符串1,字符串2)(4)连接:strcat(字符串1,字符串2)例2:编写函数,实现两个字符串的比较。
要求在主函数中调用该函数,并输出结果,这两个字符串从键盘输入。
分析:为实现两个字符串的比较,需要定义两个形参,函数中形参可使用数组形式,函数返回值有三种情况,当返回正整数时,表示第一个字符串大于第二个字符串;当返回为0时,表示两个字符串相等,当返回负整数时,表示第一个字符串小于第二个字符串。
源程序:#include<iostream.h>int cmp(char[],char[]); //函数原型声明void main(){char s1[50],s2[50]; //字符数组的定义cout<<"输入:"<<endl;cin.getline(s1,50); //字符串的输入cin.getline(s2,50);cout<<"输出:"<<endl;cout<<s1<<endl; //字符串的输出cout<<s2<<endl;int n=cmp(s1,s2); //调用比较函数,这里实参为数组名if(n>0)cout<<s1<<"大于"<<s2<<endl;else if(n==0)cout<<s1<<"等于"<<s2<<endl;elsecout<<s1<<"小于"<<s2<<endl;}int cmp(char s1[],char s2[]) //定义函数,这里形参为数组,说明形参和实参共享地址 {for(int i=0;s1[i]!='\0'&&s2[i]!='\0';i++)if(s1[i]!=s2[i]) break;return s1[i]-s2[i];}三、思考与练习一、选择题(1)合法的数组初始化语句是【】。
A) char a[] = "string";B) int a[5] = {0,1,2,3,4,5};C) int a[] = "string"D) char a[] = {0,1,2,3,4,5};(2) 以下对二维数组a的正确声明是【】。
A) int a[3][] B) float a(3,4) C) double a[1][4] D)float a(3)(4)(3) 在下述对字符数组的描述中,有错误的是【】。
A) 字符数组可以存放字符串B) 字符数组中的字符串可以进行整体输入输出C) 可以在赋值语句中通过赋值运算符"="对字符数组整体赋值D) 字符数组的下标从0开始(4) 在int b[][3]={{1},{3,2},{4,5,6},{0}};中,b[2][2]的值为【】。
A) 0 B) 5 C) 6 D) 2(5) 已知:int i,x[3][3] = {1,2,3,4,5,6,7,8,9};则下面语句的输出结果【】。
for(i=0;i<3;i++)cout<<x[i][2-i]<<’\t’;A) 1 5 9 B) 1 4 7 C) 3 5 7 D) 3 6 9(6) 在C++语言中,二维数组元素在内存中的存放顺序是【】。
A) 按行存放 B) 按列存放 C) 由用户自己定义 D) 由编译器决定(7) 若函数的形参为一位数组,则下列叙述错误的是[ ]A) 形参数组可以不指定大小B) 函数中对形参数组的修改将会影响到实参C) 调用函数时对应的实参应为数组名D) 调用函数时系统会为形参数组分配内存空间二、编程题1编写程序:打印杨辉三角形。
提示:int yh[10][10];for(i=0;i<10;i++){ yh[i][0]=1; //每行第一列为1yh[i][i]=1;} //每行的最后一列为1for(i=2;i<10;i++)for(j=1;j<i;j++)yh[i][j]=yh[i-1][j]+yh[i-1][j];//每行的其它列元素等于上一行的同列元素+相邻列元素…….2编写程序:有一行文字,50个字符,要求分别统计出其中的英文大写字母,小写字母,数字,空格及其他字符的个数。
提示:char text[50];int upper=0,lower=0,digital=0,space=0,other=0;cin.getline(text,50) //输入字符串for(int j=0;text[i]!=’\0’;j++){ if(text[i]>’A’ && text[i]<’Z’) upper++; //判断是否为大写字母…….}Cout<<”大写字母为:”<<upper<<endl;四、实验报告作业-下周三交P120页第16题。