C++语言程序设计实验答案_数组、指针与字符串
- 格式:doc
- 大小:289.00 KB
- 文档页数:15
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个*的含义。
实验六数组程序设计【实验目的】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]);printf("\n");return 0;}2.编写程序:假设有13位评委参与评分工作。
实验五:数组、指针与字符串一、实验目的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; //错误:由于浅拷贝带来内存重复释放。
实验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阶矩阵转置函数,参数为整型指针。
贵州大学实验报告学院:计算机科学与信息专业:通信工程班级:实验内容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.#include <stdio.h> void main(){int a=10,n=5;a+=a;printf("%d\n",a);a=10,a-=2;printf("%d\n",a);a=10,a*=2+3;printf("%d\n",a);a=10,a/=a+a;printf("%d\n",a);a=10,a%=(n%=2);printf("%d\n",a);a=10,a+=a-=a*=a;printf("%d\n",a); }遇到的问题和解决方法心得体会实验三简单程序、分支程序和循环程序设计实验名称实验目的和要求1.理解C语言程序的基本结构和实现基本结构的语句;2.熟练应用赋值、输入和输出语句;3.理解并掌握关系运算符、逻辑运算符及其表达式的使用;4.熟练掌握if语句、switch语句、while语句、do—while语句和for语句的用法;实验内容1.输入并运行第3章例3-3、例3-6中的程序,通过输出结果理解对应的格式说明。
2.输入并运行第3章例3-8、例3-10中的程序,注意输入数据的格式。
3.已知圆柱半径r=1.5,圆柱高h=3,编程求圆周长,圆面积和圆柱体积。
4.输入一百分制成绩,输出成绩等级A、B、C、D、E。
90分以上为A,80~89为B,70~79分为C,60~69分为D,60分以下为E。
要求程序能处理错误的输入数据。
5.利用公式:π/4=1-1/3+1/5-1/7+……,求π的近似值,直到最后一项的绝对值小于10-6为止。
(fabs(t)表示t的绝对值,1e-6=1*10-6)。
6.求100-200间所有素数。
7.输出三角形的九九乘法口诀表。
8.打印水仙花数。
水仙花数是指一个3位数,其各位数字立方和等于该数本身。
C语⾔实验报告答案南京信息⼯程⼤学实验(实习)报告实验(实习)名称:指针及其应⽤⽇期:得分:指导⽼师:院系:应⽤⽓象学院专业:班次:姓名:学号:实验⽬的(1)掌握变量的指针及其基本⽤法。
(2)掌握⼀维数组的指针及其基本⽤法。
(3)掌握指针变量作为函数的参数时,参数的传递过程及其⽤法。
⼀.实验内容(1)运⾏以下程序,并从中了解变量的指针和指针变量的概念。
(2)运⾏以下程序,观察&a[0]、&a[i]和p的变化,然后回答以下问题:1.程序的功能是什么?2.在开始进⼊循环体之前,p指向谁?3.循环每增加⼀次,p的值(地址)增加多少?它指向谁?4.退出循环后,p指向谁?5.你是否初步掌握了通过指针变量引⽤数组元素的⽅法?(3)先分析以下程序的运⾏结果,然后上机验证,并通过此例掌握通过指针变量引⽤数组元素的各种⽅法。
(4)编写函数,将n个数按原来的顺序的逆序排列(要求⽤指针实现),然后编写主函数完成:①输⼊10个数;②调⽤此函数进⾏重排;③输出重排后的结果。
⼆.分析与讨论(1)指针的定义⽅法,指针和变量的关系。
定义⽅法:数据类型 *指针变量名;如定义⼀个指向int型变量的指针——int *p;则我们可以继续写如下代码——int a = 4;p = &aprintf("%d", *p);在这⾥,我们定义了⼀个变量a,我们把它理解为内存空间连续的4个字节(int型占⽤4字节),则这4个字节的空间保存着⼀个数4。
&是取地址符号,即把变量a的地址(即这4个字节的⾸地址)赋给指针p (记住指针p的类型和变量a的类型要保持⼀致,否则的话,要进⾏类型转换)。
这样⼦,指针p就保存着变量a的地址。
我们如果把指针p当做内存空间⾥⾯另外⼀个连续的4个字节,那么这4个字节保存的数就是变量a的地址。
printf("%d",*p)和printf("%d",a)的结果是⼀样的。
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语言环境搭建与基本语法1. 问题:如何在计算机上搭建C语言开发环境?答案:搭建C语言开发环境通常需要安装编译器和集成开发环境(IDE)。
常见的编译器有GCC,而IDE如Visual Studio Code、Code::Blocks等。
安装完成后,配置好编译器路径,即可开始编写和编译C语言程序。
2. 问题:C语言的基本数据类型有哪些?答案:C语言的基本数据类型包括整型(int)、字符型(char)、浮点型(float和double)以及更复杂的结构体(struct)和联合体(union)等。
3. 问题:如何定义一个变量?答案:定义变量的基本语法是:`类型名变量名;`。
例如,定义一个整型变量a:`int a;`。
4. 问题:如何实现变量的输入和输出?答案:使用`scanf`函数进行输入,使用`printf`函数进行输出。
例如,输入一个整数并输出:`scanf("%d", &a); printf("%d", a);`。
实验二:控制结构1. 问题:C语言中的条件语句有哪些?答案:C语言中的条件语句主要有`if`语句和`switch`语句。
2. 问题:如何使用`if`语句?答案:`if`语句的基本语法是:`if (条件) { 语句 }`。
例如,判断一个数是否为正数:`if (a > 0) { printf("正数"); }`。
3. 问题:如何使用`switch`语句?答案:`switch`语句用于多条件分支选择。
基本语法是:`switch (表达式) { case 常量1: 语句1; break; case 常量2: 语句2; break; ... default: 默认语句; }`。
4. 问题:C语言中的循环语句有哪些?答案:C语言中的循环语句主要有`for`循环、`while`循环和`do-while`循环。
c语言程序设计实验指导书答案C语言程序设计实验指导书是帮助学生理解和掌握C语言编程技能的重要工具。
本指导书旨在通过一系列实验,引导学生从基础语法到高级编程技巧,逐步提高编程能力。
以下是一些实验题目和相应的答案示例,以供参考。
实验一:C语言基础语法实验目的:- 熟悉C语言的基本语法结构。
- 掌握变量声明、数据类型和运算符的使用。
实验内容:1. 编写一个程序,输入两个整数,输出它们的和、差、积和商。
实验答案:```c#include <stdio.h>int main() {int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);printf("和是:%d\n", num1 + num2);printf("差是:%d\n", num1 - num2);printf("积是:%d\n", num1 * num2);if (num2 != 0) {printf("商是:%d\n", num1 / num2);} else {printf("除数不能为0。
\n");}return 0;}```实验二:控制结构实验目的:- 掌握条件语句和循环语句的使用。
实验内容:1. 使用循环语句计算1到100的和。
实验答案:```c#include <stdio.h>int main() {int sum = 0;for (int i = 1; i <= 100; i++) {sum += i;}printf("1到100的和是:%d\n", sum); return 0;}```实验三:数组和字符串- 掌握数组和字符串的声明、初始化和使用。
实验内容:1. 编写一个程序,输入一个字符串,然后反转该字符串并输出。
注:在Visual C++ 6.0编译环境中亲自调试通过,但不保证在Turbo C 中通过。
实验二 选择结构的程序设计(题目当初没抄下来,这是根据程序整理的)1.编程实现分段函数⎪⎩⎪⎨⎧<≤-+-<≤-+<≤--=2112381011030184242x x x x x x x x x y#include<stdio.h> main() { float x,y; printf("Please input x:"); scanf("%f",&x); if (x<-1||x>=2) printf("Data Error\n"); else { if (x>=-1&&x<0) y=4*x-8; if (x>=0&&x<1) y=3*x*x+10*x-1; if (x>=1&&x<2) y=8*x*x*x*x-3*x*x+2*x-1; printf("\ny=%f\n",y); } } 2. 苹果有三个等级,一级5.50元/斤,二级3.00元/斤,三级2.50元/斤。
编写程序,输入苹果的等级,购买的数量和所付的钱数,输出等级,购买的数量、应付钱数和找零。
#include<stdio.h> main() { int level; double weight,pay,money,charge; printf("Please input the level:"); scanf("%d",&level); printf("Please input the weight you want:"); scanf("%lf",&weight); printf("Please input the money you pay:"); scanf("%lf",&pay); if (level<1||level>4||weight<0) printf("Data Error\n"); else{ if (level==1) money=weight*5.50; else if (level==2) money=weight*4.20; else if (level==3) money=weight*3.00; else if (level==4) money=weight*2.50; charge=pay-money; printf("\nLevel:%d\nweight:%g\n",level,weight); printf("money:%g\ncharge:%g\n\n",money,charge); } }实验三循环结构1.编程计算1!+2!+3!+4!+5!●分别用单层循环和双层循环实现●考虑∑∑==201101iiii!和!#include<stdio.h>main(){int i,x;double j,k,sum;printf("Please input a number:");scanf("%d",&x);//用单层循环for(sum=0,j=1,i=1;i<=x;i++){j*=i;sum+=j;}printf("The result is %lf\n",sum);//用双层循环for(sum=0,i=1;i<=x;i++){for(k=1,j=1;j<=i;j++) k*=j;sum+=k;}printf("The result is %lf\n",sum);}2.共20个评委给选手评分,去掉1个最高分,去掉1个最低分,其余18名评委的平均分即选手最终得分#include <stdio.h>main(){double score,min,max,avg=0;int i;//下面是为了输入第一个数printf("Please input 20 scores...\n");printf("Score 1: ");scanf("%lf",&score);min=score;max=score;avg+=score;// 下面为了输入剩余19个数for(i=2;i<=20;i++){do{printf("Score %d: ",i);scanf("%lf",&score);}while(score<0);if(score>max) max=score;avg+=score;}avg=avg-min-max;avg/=18;printf("\nThe average score is %lf:\n",avg);}实验四数组和指针的应用1.定义一个有10元素的一位数组count,从键盘上输入8个整数,将其按从大到小的顺序排列,并将排序后的数组输出(1)数组方法#include<stdio.h>main(){int count[10],t,i,j;printf("Please input 8 numbers:\n");for(i=0;i<8;i++)scanf("%d",&count[i]);for(i=0;i<8;i++)for(j=i+1;j<8;j++)if (count[i]<count[j]){t=count[i];count[i]=count[j];count[j]=t;}printf("The sorted array is as follows:\n");for (i=0;i<8;i++)printf("%d ",count[i]);}(2)指针方法#include<stdio.h>main(){int count[10],t,i,j,*p=count;printf("Please input 8 numbers:\n");for(i=0;i<8;i++)scanf("%d",&p[i]);for(i=0;i<8;i++)for(j=i+1;j<8;j++)if (*(p+i)<*(p+j)){t=*(p+i);*(p+i)=*(p+j);*(p+j)=t;}printf("The sorted array is as follows:\n");for (i=0;i<8;i++)printf("%d ",count[i]);}2.输入2个字符串,将二者连接并输出,再将连接后的字符串反向排列并输出,并求连接后字符串的长度#include<stdio.h>#include<string.h>main(){int i,len;char a1[51],a2[26],t[51];printf("Please input 2 strings:\n");gets(a1);gets(a2);strcat(a1,a2);printf("The joint string is: %s",a1);len=strlen(a1);printf("\nThe length of the linked string is: %d\n",len);for(i=0;i<len;i++)t[i]=a1[len-i-1];t[len]=0;strcpy(a1,t);printf("The reversed string is: %s\n",a1);}实验五函数应用的程序设计1.要求是:编写一函数,统计字符串中字母、数字、空格和其他字符的个数在主函数中输入字符串并输出统计结果值传送:#include<stdio.h>void fun(char a,int *b){if(a>='A'&&a<='Z'||a>='a'&&a<='z')b[0]++;else if(a>='0'&&a<='9')b[1]++;else if(a==32)b[2]++;else b[3]++;}main(){char a[50];int b[4],i,j,k;for(i=0;i<3;i++){for(j=0;j<4;j++)b[j]=0;printf("\nPlease input a string:\n");gets(a);k=0;while(a[k]!=0){fun(a[k],b);k++;}printf("The string have %d letters, %d numbers, %d spaces, %d other chars\n",b[0],b[1],b[2],b[3]);}}地址传递:#include<stdio.h>void fun(char *a,int *b){int i=0;while(a[i] != 0){if(a[i]>='A'&&a[i]<='Z'||a[i]>='a'&&a[i]<='z')b[0]++;else if((a[i]>='0')&&(a[i]<='9'))b[1]++;elseif(a[i]==32)b[2]++;else b[3]++;i++;}}main(){char a[50];int b[4],i,j;for(i=0;i<3;i++){for(j=0;j<4;j++)b[j]=0;printf("\nPlease input a string:\n");gets(a);fun(a,b);printf("\nThe string have %d letters, %d numbers, %d spaces, %d other chars",b[0],b[1],b[2],b[3]);}}。
c语言程序设计(第3版)的习题答案c语言程序设计(第3版)的习题答案本文为《c语言程序设计(第3版)》中的习题答案汇总,旨在帮助读者更好地理解和掌握该教材。
以下是各章节习题的详细解答:第1章:计算机概述习题1:答案:计算机是一种能够接受输入数据、对其进行逻辑和算术运算,并产生输出结果的电子设备。
习题2:答案:计算机主要由中央处理器(CPU)、主存储器、输入设备和输出设备四个主要部分组成。
......第2章:c语言概述习题1:答案:C语言是一种通用的高级编程语言,由贝尔实验室的Dennis Ritchie于1972年开发。
习题2:答案:C语言的特点包括高效性、可移植性、灵活性和丰富的操作符与控制语句。
......第3章:数据类型、运算符和表达式习题1:答案:C语言中的基本数据类型包括int、float、double、char等。
习题2:答案:C语言中的运算符包括算术运算符、关系运算符、逻辑运算符等。
......第4章:程序控制结构习题1:答案:C语言中的程序控制结构主要包括顺序结构、选择结构和循环结构。
习题2:答案:顺序结构是指程序按照语句的顺序依次执行,没有分支和循环。
......第5章:函数习题1:答案:C语言中的函数由函数头和函数体组成。
习题2:答案:函数的定义包括函数名、返回类型、参数列表和函数体。
......第6章:数组和字符串习题1:答案:数组是一组相同类型的数据元素的集合。
习题2:答案:C语言中的字符串是以空字符'\0'结尾的字符数组。
......第7章:指针习题1:答案:指针是用来存储另一个变量的地址的变量。
习题2:答案:指针变量可以通过取地址运算符(&)获取普通变量的地址。
......第8章:结构和共用体习题1:答案:结构是由不同数据类型的成员组成的复合类型。
习题2:答案:共用体(union)是一种特殊的数据类型,它可以存储不同类型的数据,但在同一时间只能存储其中的一种。
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语言程序设计课后习题答案第四版第一章基本概念和语法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 函数是一段可重复调用的代码块,用于执行特定的任务。
《高级语言程序设计》实验报告班级: 学号: 姓名: 成绩:实验6 数组程序设计一、实验目的1. 掌握一维数组和二维数组的定义、赋值和输入输出的方法。
2. 掌握字符数组和字符串函数的使用。
3. 掌握与数组有关的算法。
二、实验内容1(1)中存在的错误,以实现其功能。
程序以文件名sy6_1.c 保存。
#include<stdio.h>void main() {int n=10,i,sum=0; int a[n]; int a[10];for(i=0;i<10;i++){scanf("%d",a[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"; char a[20]="wel",b[]="come";int i,n=0;while(!a[n]) n++; while(a[n] != '\0') 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(){ Array 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) if (! flag2)printf("\nThere is no saddle point in the Matrix\n");}2.程序填空题(1)以下程序的功能是:采用二分法在给定的有序数组中查找用户输入的值,并显示查找结果。
实验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阶矩阵转置函数,参数为整型指针。
使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。
通过调试功能观察指针的内容及其所指的对象中的内容。
程序名:lab6_2.cpp。
注:可使用一维动态数组,或二维动态数组。
★程序及运行结果:(1) 使用一维动态数组表示方阵。
//lab6_2.cpp#include<iostream>#include<iomanip>using namespace std;void move(int *matrix,int n){//矩阵为整型指针,对应一维数组int temp;for(int i=0;i<n;i++)for(int j=0;j<i;j++){temp=matrix[i*n+j];matrix[i*n+j]=matrix[j*n+i];matrix[j*n+i]=temp;}}void main(){int i,j,n,*mat;cout<<"输入方阵的阶数:";cin>>n;mat=new int[n*n];cout<<"输入"<<n<<"×"<<n<<"矩阵"<<endl;for(i=0;i<n;i++){cout<<"第"<<i+1<<"行:";for(j=0;j<n;j++) cin>>mat[i*n+j];//数组形式}cout<<"\n输入的矩阵为:"<<endl;for(i=0;i<n;i++){for(j=0;j<n;j++)cout<<setw(4)<<mat[i*n+j];cout<<endl;}move(mat,n);cout<<"转置后的矩阵为:"<<endl;for(i=0;i<n;i++){for(j=0;j<n;j++)cout<<setw(4)<<*(mat+i*n+j);//指针形式cout<<endl;}delete []mat;}(2) 使用二维动态数组表示方阵。
(参考实验提示)3.(编程)实现两字符串的连接。
声明字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。
程序名:lab6_3.cpp。
用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。
// 字符串的结束标志'\0'参考运行结果:★程序及运行结果://lab6_3.cpp#include<iostream>using namespace std;void strLL(char *a,char *b,char *c);void main(){int i;char a[10],b[10],c[20];cout<<"输入一个字符串a:"; cin>>a;cout<<"显示内存中的字符串a:";for(i=0;i<10;i++){if(a[i]) cout<<a[i]; //a[i]不为0else{cout<<"\'\\0\'";//转义break;}}cout<<endl;cout<<"\n输入另一个字符串b:"; cin>>b;cout<<"显示内存中的字符串b:";cout<<b<<"\'\\0\'"<<endl;strLL(a,b,c);cout<<"\n显示内存中的连接字符串c:";for(i=0;i<20;i++){if(c[i]) cout<<c[i];else{ cout<<"\'\\0\'"; break; }}cout<<endl;}void strLL(char *a,char *b,char *c){int i,j;for(i=0;a[i];i++) c[i]=a[i];//循环直到a[i]为0for(j=0;b[j];i++,j++) c[i]=b[j];c[i]=0;}4.(编程)使用string类声明字符串对象,实现两字符串的连接。
在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。
程序名:lab6_4.cpp。
★程序及运行结果://lab6_4.cpp#include<string>//使用C++中的string#include<iostream>using namespace std;void main(){string s1,s2;cout<<"输入字符串s1:";cin>>s1;cout<<"输入字符串s2:";cin>>s2;s1+=s2;cout<<"s1+s2 = "<<s1<<endl;}5.(编程,习题6-27)声明Employee类并应用。
在employee.h文件中声明Employee类。
Employee类具有姓名、街道地址、城市和邮编等私有数据成员,都可以用字符数组来表示。
成员函数:构造函数用来初始化所有成员数组,对字符数组的赋值可以使用字符串拷贝函数strcpy(char *, char *name);display() 使用cout显示姓名、街道地址、城市和邮编等属性;change_name() 改变类中表示姓名属性的字符数组类型的数据成员。
在主程序中声明这个类的对象并对其进行操作。
程序名:lab6_5.cpp。
参考运行结果:★程序及运行结果://lab6_5employee.h#include<cstring>//使用C中的string#include<iostream>using namespace std;class Employee{private:char name[10],street[20],city[10],mail[7];//姓名、街道、城市、邮编public:Employee(char *n,char *s,char *c,char *m);void display();void change_name(char *n);};Employee::Employee(char *n,char *s,char *c,char *m){strcpy(name,n); strcpy(street,s);strcpy(city,c); strcpy(mail,m);}void Employee::display(){cout<<"姓名:"<<name<<endl;cout<<"街道:"<<street<<endl;cout<<"城市:"<<city<<endl;cout<<"邮编:"<<mail<<endl;}void Employee::change_name(char *n){ strcpy(name,n); }//lab6_5.cpp#include"lab6_5employee.h"void main(){Employee emp("张山","海甸三西路13号","海口市","570228");emp.display();emp.change_name("李世");cout<<endl;emp.display();}6.(编程,习题6-27)使用上一小题中的Employee类声明对象数组emp[5]。