语言程序设计实验答案数组指针与字符串

合集下载

c++数组、指针与字符串xiti答案

c++数组、指针与字符串xiti答案

1.概念填空题1.1 数组定义时有3个要素:数组名、数组元素的类型和数组元素的个数。

按元素在数组中的位置进行访问,是通过下标进行的,称为直接或索引访问。

1.2 C++中的多维数组是嵌套定义的,即多维数组的基本定义是数组构成的数组,三维数组的元素是二维数组。

1.3 计算机内存是一维编址的,多维数组在内存中的存储必须转换为一维方式,C++多维数组在内存中的排列是行方式,即越低的下标变化快。

设数组a有m行n列,每个元素占内存u个字节,则a[i][j]的首地址为a[0][0]的地址+ (i*n+j)*u。

1.4数组名是整型常量,数组名赋给同类型的指针后,该指针是指向数组首元素的指针。

数组名在表达式中被转换为指向数组首元素的指针常量。

1.5每个对象都有一个指向自身的指针,称为this指针,通过使用它来确定其自身的地址。

该指针只能读,不能写。

1.6在C++中,对象访问成员所用的运算符是.,通过指针访问对象的成员所用的运算符是->。

1.7 当动态分配失败时,系统采用返回NULL来表示发生了异常。

如果new返回的指针丢失,则所分配的自由存储区空间将无法收回,称为内存泄漏。

这部分空间必须在计算机重启才能找回,这是因为无名对象的生命期为整个程序。

1.8默认复制构造函数只能完成对象成员的赋值,可能会造成重复释放,默认的析构函数可能会产生内存泄漏。

“=”运算也会产生对象重复释放。

因此我们需要自定义复制构造函数完成对象的深复制。

1.9 在用new运算符建立一个三维数组int 4*5*6,使用了3 个下标运算符,用delete运算符释放该数组时使用了 1 个下标运算符。

new返回的指针类型是int (*) [5]6]。

2 简答题2.1 用一维数组名作函数参数和用一维数组元素函数参数的含义是否相同?为什么2.2 指针变量与整型量的加减运算代表什么意义?2.3个指向普通变量的指针进行减运算是否有意义?为什么2.4什么是浅拷贝?什么是深拷贝?二者有何异同?何时必须自定义复制构造函数、析构函数,何时必须自定义=运算符中在函数, 自定义的复制构造函数、析构函数应该怎样设计?2.5从右往左解释int *(*(*pf)[5])(double *)中4个*的含义。

《C++语言程序设计》第6章 数组 指针与字符串

《C++语言程序设计》第6章 数组  指针与字符串
• 例如:static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
• 可以只对部分元素初始化
• 例如:static int a[3][4]={{1},{0,6},{0,0,11}};
• 列出全部初始值时,第1维下标个数可以省略
• 例如:static int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; • 或:static int a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
其中数组a的存储顺序为:
a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23
12
二维数组的初始化
• 将所有初值写在一个{}内,按顺序初始化
• 例如:static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
• 分行列出二维数组元素的初值
cout << "Moving the point to (" << newX << ", " << newY << ")" << endl; x = newX; y = newY; }
例6-3 对象数组应用举例
//6-3.cpp #include "Point.h" #include <iostream> using namespace std;
int main() {
cout << "Entering main..." << endl;

实验5 数组、指针与字符串

实验5 数组、指针与字符串

实验五:数组、指针与字符串一、实验目的1.学习使用数组数据对象2.掌握指针的使用方法3. 理解深拷贝与浅拷贝的机制二、实验设备计算机,Windows操作系统,VC++6.0三、实验内容1.阅读下列程序分析其结果,理解指针与类成员函数的关系(1)lab5_1_1.cpp为点类Point-指向类的非静态成员的指针,补充完整程序,并体会输出结果#include <iostream>using namespace std;class Point //类的声明{ int X,Y,Z;public: //外部接口Point(int x=0, int y=0,int z=0) {X=x;Y=y;Z=z;} //构造函数int GetX() {return X;} //内联函数,返回Xint GetY() {return Y;} //内联函数,返回Yint GetZ() {return Z;} //内联函数,返回Z};int main() //主函数{ Point Obj(4,5,6); //声明对象ObjPoint *pObj=&Obj; //声明对象指针并初始化int ______________________ ; //声明成员函数指针并初始化,P_getx指向Getx()函数int ______________________ ; //声明成员函数指针并初始化,P_gety指向Gety()函数int ______________________ ; //声明成员函数指针并初始化,P_getz指向Getz()函数cout<<"The coordinate of X is:"<<(Obj.*p_GetX)()<<endl;//语句1:使用成员函数指针cout<<"The coordinate of Y is:"<<(pObj->GetY)()<<endl; //语句2:使用对象指针cout<<"The coordinate of Z is:"<<Obj.GetZ()<<endl; //语句3:使用对象名return 0;}(2)lab5_1_2.cpp为点类Point-指向类的静态数据成员的指针,补充完整程序,体会输出结果#include <iostream>using namespace std;class Point //类的声明{ int X,Y,Z;public: //外部接口//其它成员函数同上案例,这里略…Point(int x=0, int y=0,int z=0) {X=x;Y=y;Z=z;countP++;} //构造函数static int countP; //静态数据成员引用性说明};int Point::countP=0; //静态数据成员定义性说明int main(){ Point Obj1(4,5,6), Obj2(14,15,16); //声明对象int *count=__________________; //语句1:声明指向类的静态数据成员的指针cout<<"The number of the Objects is:"<<_________<<endl; //语句2:直接通过指针访问静态数据成员return 0;}(3)lab5_1_3.cpp为点类Point-指向类的静态函数成员的指针,补充完整程序,体会输出结果#include <iostream>using namespace std;class Point //类的声明{public: //外部接口//其它成员函数同上案例,这里略…Point(int x=0, int y=0,int z=0) {X=x;Y=y;Z=z;countP++;} //构造函数static int GetC() {return countP;} //静态函数成员private: //私有数据int X,Y,Z;static int countP; //静态数据成员引用性说明};int Point::countP=0; //静态数据成员定义性说明int main() //主函数{ ___________________________; //语句1:声明一个指向类的静态成员函数指针gc指向GetCPoint Obj(4,5,6), Obj2(14,15,16); //声明对象cout<<"The number of the Objects is:"<<gc()<<endl;//语句2:通过函数指针调用静态成员函数return 0;}2.阅读下列程序分析其结果,理解深拷贝与浅拷贝的问题(1)lab5_2_1.cpp为动态分配内存过程的深拷贝与浅拷贝的问题#include <iostream>using namespace std;int main(){ int *pi=new int(88),*qi; //声明两个整型指针变量cout<<"The address is as follows:"<<endl <<"pi="<<pi<<", qi="<<qi<<endl;//qi=new int;*qi=*pi; //语句1:浅拷贝delete pi;//delete qi; //错误:由于浅拷贝带来内存重复释放。

第6章数组指针与字符串.doc

第6章数组指针与字符串.doc

第6章数组、指针与字符串6-1 数组A[10][5][15]一共有多少个元素?解:10×5×15 = 750 个元素6-2 在数组A[20]中第一个元素和最后一个元素是哪一个?解:第一个元素是A[0],最后一个元素是A[19]。

6-3 用一条语句声明一个有五个元素的整型数组,并依次赋予1~5的初值。

解:int a[5] = { 1, 2, 3, 4, 5 };或:int a[] = { 1, 2, 3, 4, 5 };6-4 已知有一个数组名叫oneArray,用一条语句求出其元素的个数。

解:nArrayLength = sizeof(oneArray) / sizeof(oneArray[0]);6-5 用一条语句声明一个有5×3个元素的二维整型数组,并依次赋予1~15的初值。

解:int a[5][3] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };或:int a[5][3] = {{1,2,3},{4,5,6}, {7,8,9},{10,11,12},{13,14,15}}; 6-6 运算符*和&的作用是什么?解:*称为指针运算符,是一个一元操作符,表示指针所指向的对象的值;&称为取地址运算符,也是一个一元操作符,是用来得到一个对象的地址。

6-7 什么叫做指针?指针中储存的地址和这个地址中的值有何区别?解:指针是一种数据类型,具有指针类型的变量称为指针变量。

指针变量存放的是另外一个对象的地址,这个地址中的值就是另一个对象的内容。

6-8 声明一个整型指针,用new语句为其分配包含10个整型元素的地址空间。

解:int *pInteger = new int[10];6-9 在字符串”Hello,world!”中结束符是什么?解:是NULL字符。

6-10 声明一个有5个元素的整型数组,在程序中提示用户输入元素值,最后再在屏幕上显示出来。

《C语言程序开发》实验报告和参考答案

《C语言程序开发》实验报告和参考答案

《C语言程序开发》实验报告和参考答案1实实验报告课程名称:C语言程序开发学生姓名:学生学号:专业班级:指导教师:实验日期:2目录实验一循环结构程序设计(一)求1+2+3+.......+100,1100nn(二)输出100~200之间的不能被3整除的数。

实验二数组及其应用(一)有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。

(二)输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。

实验三函数及其应用(一)有5个学生坐在一起,问第5个学生多少岁,他说比第4个学生大2岁。

问第4个学生岁数,他说比第3个学生大2岁。

问第3个学生,又说比第2个学生大2岁。

问第2个学生,说比第1个学生大2岁。

最后问第1个学生,他说是10岁。

请问第5个学生多大。

(二)用选择法对数组中10个整数按由小到大排序,一维数组名作函数参数。

实验四指针及其应用(一)将若干字符串按字母顺序(由小到大)输出。

(二)有a个学生,每个学生有b门课程的成绩。

要求在用户输入学生序号以后,能输出该学生的全部成绩。

用指针函数来实现。

3实验一循环结构程序设计实验题目:(一)求1+2+3+.......+100,1100nn(二)输出100~200之间的不能被3整除的数。

实验目的1.掌握循环语句的执行过程及用法2.初步掌握循环程序设计的基本技巧3.掌握用while语句,do-while语句和for语句实现循环的方法4.掌握多重循环的使用(一)实验步骤1.题目分析2.源程序代码3.运行结果(二)实验步骤:1.题目分析源程序代码3.运行结果4实验二数组及其应用实验题目:(一)有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。

(二)输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。

实验目的1.掌握一维数组的定义及其元素的引用方法2.掌握利用一维数组实现一些常用算法的基本技巧3.掌握二维数组的定义及其应用4.掌握字符数组和字符串函数的使用5.掌握有关二维数组的基本编程技巧(一)实验步骤:1.题目分析2.源程序代码:3.运行结果(二)实验步骤:1.题目分析2.源程序代码3.运行结果5实验三函数及其应用实验题目:(一)有5个学生坐在一起,问第5个学生多少岁,他说比第4个学生大2岁。

全国计算机二级C语言程序设计讲义 数组的指针和字符串的指针

全国计算机二级C语言程序设计讲义  数组的指针和字符串的指针

1.数组与地址
对数组的首地址加上偏移量x就可以得到其它 元素的地址。 例: &a[1] 表示数组元素a[1]的地址 等价于 a+1、 p+1 &a[x] 表示数组元素a[x]的地址 等价于 a+x、 p+x
2.数组元素的访问
下标法: 用 a[i] 的形式存取数组元素。 地址法: 用 *(a+i)的形式存取数组元素。 指针法: 用指针变量p指向数组的首地址,然后通 过移动指针存取数组元素。 如 p=a, p+i。
例:
/* 用字符数组实现字符串操作 */ main( ) { char str[]="Welcome to study C !"; int i; printf("%s\n",str); 程序运行结果为: for (i=0;i<=7;i++) Welcome to study C ! printf("%c",str[i]); Welcome printf("\n"); }
例 输入一串小写字符将其转换为大写字符
main() { int i; char a[100]; printf(“Input\n”); scanf(“%s”,a); utol( a ) ; printf( "%s\n", a ); } utol( char *x )
{ int i;
for ( i=0; *(x+i)!='\0'; i++ )
第16讲 数组的指针和字符串的指针
一、数组的指针
1.数组与地址 2.数组元素的访问
二、字符串指针
1.字符串指针的定义
2.字符指针与字符数组的区别

C++ 实验数组、指针与字符串实验报告

C++ 实验数组、指针与字符串实验报告

贵州大学实验报告学院:计算机科学与信息专业:通信工程班级:实验内容1. 编写一个函数,统计一个英文句子中字母的个数,在主程序中实现输入、输出。

2.编写函数reverse(char *s)的倒序递归程序,使字符串s倒序。

实验数据1、代码如下:#include<iostream>#include <string>using namespace std ;int main(){string Str;char ch ;int i=0,j=0;cout << "input str:" <<endl;getline(cin , Str );for ( i=0;i<Str.length();i++ ){if ( Str[i] >='a' && Str[i]<='z' || Str[i] >='A' && Str[i]<='Z' ) j++;}cout << "str="<<Str<<endl ;cout << "The number is:" << j <<endl ;system("pause");return 0;}运行结果:2、代码和运行结果:实验总结1、这次试验让我了解了在C++程序中的输入输出和字符串的统计。

2、掌握了一点点递归的方法。

3、通过这次试验觉得自己还是有很多不足,对基础知识掌握不牢。

指导教师意见签名:年月日注:各学院可根据教学需要对以上栏木进行增减。

表格内容可根据内容扩充。

《C语言程序设计》第5章数组、字符串、指针

《C语言程序设计》第5章数组、字符串、指针

相当于声明了5个整型变量
说明: ① 数组的所有元素的数据类型都是相同的。 ② 数组取名规则应符合标识符的规定,数组 名不能与同一函数中其它变量名相同: int a; float a[10]; 是错误的。
③ C语言中规定数组的下标从0开始,方括号 中常量表达式表示数组元素的个数。
④ 不能在方括号中用变量来表示元素的个数, 但是可以是符号常数或常量表达式。例如: int n=5,a[n]; 是错误的。
二维数组在内存的存放顺序是“先行后列”
a[0][0] a[0][1] a[0][2] a[0][3] a[1][0]

a[2][3]
5.3.2 二维数组元素的引用
二维数组的元素的引用形式为: 数组名[下标][下标] 使用二维数组的情况举例: 学生多门功课的成绩,如: a[100][3]可以用来记录100个学生3门功 课的成绩。 矩阵,如: a[3][3]可以用来记录3×3的矩阵。一个 数组元素正好存放一个矩阵的元素。
5.2.2 一维数组的初始化
1、数组声明时初始化 在编译阶段进行的。这样将减少运行时间, 提高效率。 数组初始化的一般形式为: 类型符 数组名[常量表达式]={值,值…值}; 例如: int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相当于a[0]=0; a[1]=1;... a[9]=9;

a[9]
#include <stdio.h> 声明有10个元素 void main() 的一维数组a {int n,i; float s=0, ave, a[10]; a[0] a[1] … a[9] for(i=0;i<10;i++) a[i] { scanf("%f",&a[i]); a[i] s=s+a[i]; } ave=s/10; for(i=0;i<10;i++) a[i] a[i] if (a[i]>ave) printf("%f ",a[i]); }

c程序设计实验参考答案

c程序设计实验参考答案

c程序设计实验参考答案在计算机科学领域中,C程序设计是一门重要的课程,通过实验来加深对C语言的理解和应用,提高编程技巧和问题解决能力。

本文将提供一些C程序设计实验的参考答案,帮助学生更好地完成实验任务。

1. 实验一:基础语法练习实验目的:熟悉C语言的基础语法,掌握变量定义、运算符使用和基本IO操作等。

```c#include <stdio.h>int main() {int a = 5, b = 3;int sum, product;sum = a + b;product = a * b;printf("The sum of a and b is %d\n", sum);printf("The product of a and b is %d\n", product);return 0;}```2. 实验二:条件语句和循环结构实验目的:学习和掌握if-else语句、switch-case语句以及while和for循环的基本用法。

```c#include <stdio.h>int main() {int score;printf("Please enter your score: ");scanf("%d", &score);if (score >= 90) {printf("Excellent!\n");} else if (score >= 80) {printf("Good job!\n");} else if (score >= 70) {printf("Keep it up!\n");} else {printf("You need to work harder!\n");}int i;for (i = 1; i <= 10; i++) { if (i % 2 == 0) {printf("%d ", i);}}printf("\n");int j = 1;while (j <= 10) {if (j % 2 != 0) {printf("%d ", j);}j++;}printf("\n");return 0;}```3. 实验三:数组和字符串实验目的:熟悉数组和字符串的定义、初始化和基本操作,学习使用数组和字符串解决问题。

最新《C++程序设计案例教程》习题答案第5章 数组、指针和引用

最新《C++程序设计案例教程》习题答案第5章  数组、指针和引用

第5章数组、指针和引用一、选择题1.D2.C3.D4.B5.D6.B7.D8.B9.A10.C二、填空题1.类型、数量、下标运算符、下标、索引、常变量2.必须要转化为一维方式、按行方式、右、越快、a数组的首地址、(i*n+j)*u3.地址、NULL、已经分配了内存的变量的地址、变量的地址、直接访问、间接访问三、写出下列程序运行结果1.101,1012.sum=3003.C++ ProgrammingData structureEnglishInternetMathematics四、简单题1.解释运算符“*”和“&”的作用,运算符“.”和“->”的作用。

答:在应用指针变量时,“*”是间接引用(dereference)运算符,作用于一个指针类型的变量,访问该指针所指向的内存数据。

因结果是内存中可寻址的数据。

“&”是取地址运算符,作用于内存中一个可寻址的数据(如:变量,对象和数组元素等等),操作的结果是获得该数据的地址。

运算符“.”和“->”是成员访问运算符(Member Access Oprator)。

在对象或结构外部去访问公有的数据成员或函数成员时,是在对象名后加“.”(点操作符),再加成员函数名或函数名就可以了。

但是这些成员必须是公有的成员,只有公有成员才能在对象的外面对它进行访问。

当用指向对象和结构变量的指针访问其公有成员时,则只要在指针变量名后加“->”(箭头操作符),再加公有成员名就可以了。

2.设a为数组名,那么a++是否合法?为什么?答:非法。

因为a是指针常量。

3.指针作为函数的参数时,它传递的是什么?实参要用什么?而使用引用时实参要用什么?何时只能用指针而不能用引用?答:指针作为函数的参数时,它传递的是地址,是指针所指向的变量或对象的内存首地址,在物理上讲我们传的是指针的值,与传其它变量是没有差异的,函数获得的是另一个变量的地址,在逻辑上讲我们是把另一个变量的地址传过去了,可以看作传地址。

C语言程序设计 实验11.1_指针数组、指针与函数

C语言程序设计 实验11.1_指针数组、指针与函数
char str[80];
scanf("%d",&repeat);
getchar();
for(ri=1;ri<=repeat;ri++){
scanf("%s",str);
count=0;
for(i=0;i<7;i++){
if(strcmp(str,date[i])==0){
color[index]=color[i];
color[i]=temp;
}
for(i = 0; i < n; i++)
printf("%s ", color[i]);
printf("\n");
}
2 编程题
/*---程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:编写程序,输入一个月份,输出对应的英文名称,要求用指针数组表示12个月的英文名称。若输入月份错误,输出提示信息。输入输出示例:括号内为说明
用字符指针实现函数str_cat(s,t),将字符串t复制到字符串s的末端,并且返回字符串s的首地址,并编写主程序。
例:(括号内为说明)
输入
abc
def
输出
abcdef
------*/
#include <stdio.h>
#include <string.h>
char *str_cat(char *s,char *t);
void main()
{
char s[80],t[80];

C_lab6-4_指针与字符数组_answer

C_lab6-4_指针与字符数组_answer

C_lab6-4_指针与字符数组_answer实验6-4指针与字符数组【实验⽬的】1.掌握字符指针和字符型变量之间的关系2.掌握字符指针与字符串的关系3.掌握字符指针与字符数组之间的关系【实验内容】Part1:基础练习(课堂练习)1.下⾯不正确的字符串赋值或初始化语句是。

A.char * str; str = ”string”;B.char str[7]={…s?, …t?, …r?, …i?, …n?, …g?};C.char str[10]; str=”string”;D.char str1[]=”string”, str2[20]; strcpy(str2, str1);2.已知char b[5], *p=b; 则正确的赋值语句是。

A.b=”abcd”; B.*b=”abcd”; C.p=”abcd”; D.*p=”abcd”;3.若已有声明char s[20]=”programming”, *ps=s; 则不能引⽤字母?o?的表达式的是。

A.ps+2 B. s[2] C. ps[2] D. ps+=2; *ps4.已知:char c[8]=”beijing”, *s=c; int i; 则下⾯的输出语句中错误的是。

A.printf(“%s\n”, s); B. printf(“%s\n”, *s);C. for(i=0; i<7; i++)D. for(i=0; i<7; i++)printf(“%c”, c[i]); printf(“%c”, s[i]);5.已知char s[10], *p=s; 则在下列语句中,错误的语句是。

A.p=s+5; B. s=p+s; C. s[2]=p[4]; D. *p=s[0]; 6.下⾯判断正确的是。

A.char * a=”china”; 等价于char *a; *a=”china”;B.char str[10]={“china”};等价于char str[10]; str[]={“china”};C.char *s =”china”; 等价于char *s; s=”china”;D.char c[4]=”abc”, d[4]=”abc”; 等价于char c[4]=d[4]=”abc”;7.下⾯能够正确进⾏字符串赋值操作的是:。

《C语言程序设计教程》习题参考答案

《C语言程序设计教程》习题参考答案

《C语言程序设计教程》习题参考答案C语言程序设计教程习题参考答案一、基本概念和语法要点1. 整型变量x的声明和初始化语句为:int x = 10;2. C语言的标识符命名规则:- 只能由字母、数字和下划线组成;- 必须以字母或下划线开头;- 大小写敏感。

3. 常量的分类:- 整型常量;- 实型常量;- 字符常量;- 字符串常量;- 枚举常量;- 特殊常量。

4. 基本输入输出函数的使用:- printf():输出格式化字符串;- scanf():从标准输入读取格式化数据。

5. C语言中的运算符:- 算术运算符:+、-、*、/、%;- 关系运算符:==、!=、>、<、>=、<=; - 逻辑运算符:&&、||、!;- 位运算符:&、|、^、~、<<、>>。

二、流程控制语句1. if语句的基本结构:```if (条件表达式){// 如果条件成立执行的代码}```2. switch语句的使用:```switch (表达式)case 值1:// 执行的代码块break;case 值2:// 执行的代码块break;default:// 执行的代码块break;}```3. while循环语句的基本结构: ```while (条件表达式){// 循环执行的代码}4. for循环语句的使用:```for (初始化表达式; 条件表达式; 更新表达式) {// 循环执行的代码}```三、数组与字符串1. 数组的声明和初始化语句:```int arr[5] = {1, 2, 3, 4, 5};```2. 字符串的声明和初始化语句:```char str[20] = "Hello, World!";```3. 字符串的输入输出函数:- gets():从标准输入读取字符串; - puts():将字符串输出到标准输出。

4. 字符串处理函数:- strlen():计算字符串长度;- strcat():拼接字符串;- strcpy():复制字符串;- strcmp():比较两个字符串。

c语言程序设计实验指导参考答案

c语言程序设计实验指导参考答案

c语言程序设计实验指导参考答案C语言程序设计实验指导参考答案在学习C语言程序设计的过程中,实验是不可或缺的一部分。

通过实验,我们可以巩固所学的知识,提高编程能力。

然而,有时候我们可能会遇到一些难题,不知道如何下手。

本文将为大家提供一些C语言程序设计实验的参考答案,希望能够帮助大家更好地完成实验任务。

1. 实验一:C语言基础实验一主要涉及C语言的基础知识,包括变量、运算符、控制语句等。

以下是一些常见的题目及参考答案:题目一:编写一个程序,实现两个整数的交换。

```c#include <stdio.h>void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}int main() {int a, b;printf("请输入两个整数:");scanf("%d %d", &a, &b);swap(&a, &b);printf("交换后的结果为:%d %d\n", a, b); return 0;}```题目二:编写一个程序,求1到n的和。

```c#include <stdio.h>int sum(int n) {if (n == 1) {return 1;} else {return n + sum(n - 1);}}int main() {int n;printf("请输入一个正整数:");scanf("%d", &n);printf("1到%d的和为:%d\n", n, sum(n)); return 0;}```2. 实验二:数组和字符串实验二主要涉及数组和字符串的应用。

以下是一些常见的题目及参考答案:题目一:编写一个程序,找出数组中的最大值。

```c#include <stdio.h>int findMax(int arr[], int n) {int max = arr[0];for (int i = 1; i < n; i++) {if (arr[i] > max) {max = arr[i];}}return max;}int main() {int arr[] = {1, 2, 3, 4, 5};int n = sizeof(arr) / sizeof(arr[0]);printf("数组中的最大值为:%d\n", findMax(arr, n));return 0;}```题目二:编写一个程序,判断一个字符串是否为回文字符串。

《C语言程序设计》课后习题答案第四版

《C语言程序设计》课后习题答案第四版

《C语言程序设计》课后习题答案第四版C语言程序设计课后习题答案第四版第一章基本概念和语法1.以下是一些基本概念和语法的习题答案:1.1 基本概念1.1.1 C语言是一种高级程序设计语言,最初由贝尔实验室的丹尼斯·里奇(Dennis Ritchie)于1972年开发。

1.1.2 C语言具有跨平台性,能够在多个操作系统上运行。

1.1.3 C语言程序是由函数构成的,每个程序都至少包含一个main函数。

1.2 数据类型和变量1.2.1 C语言中的基本数据类型包括整型(int)、浮点型(float)、字符型(char)和布尔型(bool)等。

1.2.2 变量是用来存储数据的内存位置,它们需要在使用前进行声明。

1.3 运算符和表达式1.3.1 运算符用来执行各种运算操作,例如加减乘除和逻辑运算等。

1.3.2 表达式由变量、常量和运算符组成,用来进行数据计算和逻辑判断。

1.4 控制语句1.4.1 if语句用于条件判断,根据条件的真假来选择执行不同的代码块。

1.4.2 for循环语句用于重复执行某段代码,可以设定循环次数或者循环条件。

1.4.3 switch语句用于多条件选择,根据不同的条件执行相应的代码块。

第二章数组和字符串2.以下是关于数组和字符串的习题答案:2.1 数组2.1.1 数组是一种用来存储多个相同类型数据的数据结构。

2.1.2 数组可以通过索引访问和修改其中的元素,索引从0开始。

2.1.3 数组的长度是固定的,声明时需指定数组的大小。

2.2 字符串2.2.1 字符串是由字符组成的数组,以空字符'\0'结尾。

2.2.2 字符串可以通过数组或者指针方式进行操作。

2.2.3 C语言提供了许多用于处理字符串的函数,例如strcpy、strcmp和strlen等。

第三章函数和指针3.以下是有关函数和指针的习题答案:3.1 函数3.1.1 函数是一段可重复调用的代码块,用于执行特定的任务。

C++语言程序设计实验6(数组、指针和字符串)

C++语言程序设计实验6(数组、指针和字符串)

{ 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; //第一种访问方式

C++语言程序设计实验答案_数组、指针与字符串

C++语言程序设计实验答案_数组、指针与字符串

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。

参考运行结果:★程序及运行结果:2.(编程,习题6-26)编写n×n阶矩阵转置函数,参数为整型指针。

使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。

实验三 数组、指针与字符串

实验三 数组、指针与字符串

实验三数组、指针与字符串(4学时)[实验目的]1、通过动态内存分配实现动态数组,并体会指针在其中的作用;2、理解C++中深、浅拷贝的区别和适用场合,掌握其应用方法;3、运用所学知识,实现简单的数据结构,培养分析和解决实际问题的能力。

[实验内容与步骤]1、实现一个大小可变的整型数据元素集合,集合可存储的集合元素个数在对象构造时给定,由构造函数为数据元素分配存储空间,在对象被释放时由析构函数释放存储空间。

此外,编程实现元素增添、删除、复制、查找、显示及求集合的交集、并集。

#include<iostream>using namespace std;const int maxNum = 20; //集合中允许容纳的元素的默认最大值//大小可变的集合类:class Set{int size; //集合中允许容纳的元素的最大个数int *elems; //存储元素的数组int num; //集合中元素的个数public:Set (int sz=maxNum);~Set();bool IsMember(int); //判断是否为集合的元素bool AddElement(int); //添加元素void RemoveElement(int); //删除元素void Copy(Set &); //集合复制void Show(); //显示集合中元素void Intersect(Set &,Set &); //求集合的交集bool Union(Set &,Set &); //求集合的并集};//类Set的实现inline Set::Set(int sz){num=0;size=sz;elems=new int[size];}inline Set::~Set(){delete []elems;}bool Set::IsMember(int e){for (int i=0; i<num; i++)if (elems[i]==e) return true;return false;}bool Set::AddElement(int elem){if (IsMember(elem)) return true;if (num<size){elems[num++] = elem;return true;}return false;}void Set::RemoveElement(int c){int index=-1;for (int i=0; i<num; i++)if (elems[i]==c){index =i;break;}if (index!=-1){for (int i=index; i<num-1; i++){elems[i] = elems[i+1];num --;}}}void Set::Copy(Set &s){if (size<s.size){delete []elems;elems = new int[s.size];size = s.size;}for (int i=0; i<s.num; i++) elems[i] = s.elems[i];num = s.num;}void Set::Show(){cout<<"{";for (int i=0; i<num-1; i++) cout<<elems[i]<<",";if (num>0) cout<<elems[num-1];cout<<"}"<<endl;}void Set::Intersect(Set &s1,Set &s2){if (size<s1.size){delete []elems;elems=new int[s1.size];size=s1.size;}num=0;for (int i=0; i<s1.num; i++)if (s2.IsMember(s1.elems[i])) elems[num++] = s1.elems[i];}bool Set::Union(Set &s1,Set &s2) //求集合的并集(填写代码实现其功能){}//测试int main(){Set s1,s2,s3;int i;for (i=0; i<5; i++) s1.AddElement(2*i);for(i=0;i<5;i++) s2.AddElement(3*i);cout<<"s1="; s1.Show();cout<<"s2="; s2.Show();s2.RemoveElement(9);cout<<"s2-{9}="; s2.Show();if(s1.IsMember(2)) cout<<"2 is in s1\n";else cout<<"2 is not in s1\n";s3.Intersect(s1,s2);cout<<"s1 intsec s2="; s3.Show();////s3.Union(s1,s2);//cout<<"s1 union s2="; s3.Show();return 0;}2、下面是一个声明了部分成员的类:c lass strclass{char *p;int length;public:char *getstring(){return (p);}int getlength(){return (length);}};要求编写两个构造函数。

实验6 字符数组和指针

实验6 字符数组和指针

实验6字符数组,指针与数组一、实验目的1、掌握字符串数组的存储和操作方法;2、理解指针、地址和数组间的关系;3、掌握数组名作为函数参数的编程方式;二、实验内容1改错题输入一个以回车结束的字符串(少于80个字符),将它的内容逆序输出。

如“ABCD”输出为“DCBA”。

源程序(有错误的程序)# include<stdio.h>main( ){ int i,k,temp;char str[];printf(“input a string:”);i=0;while((str[i]=getchar())!=’\n’)i++;str[i]=’\0’;k=i-1;for (i=0;i<k;i++){ temp=str[i];str[i]=str[k];str[k]=temp;k++;}for (i=0;str[i]!=’\0’;i++)putchar(str[i]);}运行结果(改正后程序的运行结果)Welcome to you!!uoy ot emocleW2 输入一个以回车结束的字符串(少于80个字符),统计并输出其中大写元音字母(A、E、I、O、U)的个数。

输入输出示例(运行2次,括号内为说明文字):第一次运行:Input a string:HELLOcount=2 (“HELLO”中有2个大写元音字母)第二次运行:Input a string:groupcount=0 (“group”中没有大写元音字母)3 在数组中查找指定元素。

输入一个正整数n(1<n<=10),然后输入n个整数存入数组a中,再输入一个整数x,在数组a 中查找x,如果找到则输出相应的下标,否则输出”Not found”。

要求定义并调用函数search(list,n,x),它的功能是在数组list中查找元素x,若找到则返回相应下标,否则返回-1。

输入输出示例(运行2次):第一次运行:Input n:3Input 3 integer:1 2 -6Input x:2index=1第二次运行:Input n:5Input 5 integer:1 2 2 5 4Input x:0Not found三、实验结果及分析将源程序、运行结果和分析以及实验中遇到的问题和解决问题的方法,写在实验报告上。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验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()函数实现输入输出。

程序名:。

参考运行结果:
★程序及运行结果:
编程,习题6-26)编写n×n阶矩阵转置函数,参数为整型指针。

使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。

通过调试功能观察指针的内容及其所指的对象中的内容。

程序名:。

注:可使用一维动态数组,或二维动态数组。

★程序及运行结果:
(1) 使用一维动态数组表示方阵。

编程)实现两字符串的连接。

声明字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。

程序名:。

用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。

编程)使用string类声明字符串对象,实现两字符串的连接。

在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。

程序名:。

★程序及运行结果:
编程,习题6-27)声明Employee类并应用。

在文件中声明Employee类。

Employee类具有姓名、街道地址、城市和邮编等私有数据成员,都可以用字符数组来表示。

成员函数:
构造函数用来初始化所有成员数组,对字符数组的赋值可以使用字符串拷贝函数strcpy(char *, char *name);
display() 使用cout显示姓名、街道地址、城市和邮编等属性;
change_name() 改变类中表示姓名属性的字符数组类型的数据成员。

在主程序中声明这个类的对象并对其进行操作。

程序名:。

参考运行结果:
★程序及运行结果:
编程,习题6-27)使用上一小题中的Employee类声明对象数组emp[5]。

使用循环语句把数据显示出来。

程序名:。

参考运行结果:
★程序及运行结果:isplay();
cout<<endl;
}
}
7.(编程)修改实验4中的people(人员)类。

程序名:。

参考运行结果:
★程序及运行结果:
(1) :People(人员)类的声明及成员函数的实现
//
#include<iostream>
#include<cstring>
using namespace std;
class Date{
private:
int yy,mm,dd;
public:
Date(){ }
Date(Date &d) : yy,mm,dd{}//增添
~Date(){ }
int Getyy()const{ return yy; }
int Getmm()const{ return mm; }
int Getdd()const{ return dd; }
void Setyy(int y){ yy=y; }
void Setmm(int m){ mm=m; }
void Setdd(int d){ dd=d; }
};
(2) :主函数(输入、输出和拷贝构造函数测试)
(3) 结果
四、实验提示
步骤2提示
二维数组动态分配空间
示例1 m×n矩阵
#include<iostream>
using namespace std;
void main(){
int i,j,m,n,**A;
cout<<"输入矩阵的行数m和列数n:";
cin>>m>>n;
A=new int*[m]; //m行
for(i=0;i<m;i++) A[i]=new int[n]; //n列
cout<<"输入"<<m<<"×"<<n<<"矩阵"<<endl;
for(i=0;i<m;i++){
cout<<"第"<<i+1<<"行:";
for(j=0;j<n;j++) cin>>A[i][j];//数组形式}
cout<<"\n输入的矩阵为:"<<endl;
for(i=0;i<m;i++){
for(j=0;j<n;j++)
cout<<" "<<A[i][j];
cout<<endl;
}
}
示例2 不规范的矩阵
#include<iostream>
using namespace std;
void main(){
int **a=new int*[2];
a[0]=new int[3];
a[1]=new int[2];
a[0][0]=11; a[0][1]=12; a[0][2]=13;
a[1][0]=21; a[1][1]=22;
cout<<a[0][0]<<" "<<a[0][1] <<" "<<a[0][2]<<endl;
cout<<a[1][0]<<" "<<a[1][1] <<endl;
}。

相关文档
最新文档