作业7基本内容:
一、书面作业:
完成第六章教材练习与思考题6-5,6-6,6-7,6-8,6-9
6-1 请说明以下语句的区别:
(1) 声明int* ptr;
语句 *ptr = 2400; 与语句 ptr = 2400; 的区别。
(2) 声明int m = 10;
语句int* mptr = m; 与语句 int* mptr; *mptr = m; 的区别。
(3) 语句 char name computer"; 与。
语句 char name 的区别。
【解答】 (1) 声明int* ptr时,语句*ptr = 2400使指针ptr所指向的变量赋值为2400。而语句ptr = 2400使指针ptr本身赋值为2400,即使得该指针指向内存地址为2400的变量。
(2) 声明int m = 10时,语句int *mptr = m使指针ptr的赋值为变量m的地址,使得指针mptr指向m。而语句*mptr = m表示使指针mptr所指向的变量(这时不一定是m)赋值为m的值,使得mptr所指向的变量的值与m的值相同。
(3) 声明char name computer"声明一个字符数组,其内容初始化为"computer",该字符串有8个字符,再加上结束符'\0',数组name共有9个元素,且因为有结束符所以可看作字符串。声明char name 声明一个字符数组,每个元素被分别初始化为'c', o', m', p', u', t', e', r',该数组共有8个元素,因为没有结束符,该字符数组不可看作字符串。
6-2 请完成以下变量的声明∶
(1) 指向字符的指针变量char_ptr;
(2) 10个字符的数组char_array;
(3) 指向字符串的指针变量 string_ptr;
(4) 10个字符串的数组string_array;
(5) 指向字符串数组的指针变量string_array_ptr;
【分析】对于此题中复杂的变量声明可利用类型解析式进行解答。
【解答】 (1) 声明为:char* char_ptr;
(2) 声明为:char char_array[10];
(3) 首先该声明的类型解析式为 :string_ptr->*char,即string_ptr是指针,指向一个字符串,字符串通常声明为基类型是char类型的指针。从而本题相应的类型表达式是char**,其声明是:
char** string_ptr;
(4) 首先该声明的类型解析式为:string_array->[char,即string_ptr是有10个元素的数组,每个元素是字符串,字符串通常声明为基类型是char类型的指针。从而本题相应的类型表达式为char*其声明是:
char* string_ptr[10];
(5) 首先该声明的类型解析式为:string_array_ptr->*char,即string_array_ptr是指针,指向一个数组,该数组的每个元素是字符串。因此本题相应的类型表达式为:
char*(*其声明是:char* (string_array_ptr)
6-3 请详细说明以下使用数组或指针的程序片段有什么编译错误∶
(1) int* age_ptr, test_ptr;
int m = 3;
*age_ptr = m; test_ptr = m;
(2) int* salary_ptr;
float* work_hours_ptr = 300.0;
salary_ptr = work_hours_ptr;
(3) int int_array[10];
int* int_ptr = new int[10];
int_array++;int_ptr++
int_array = int_ptr;
(4) extern int test_func(int);
int (*func)(int);
func = test_func;
func)++
(5) char* depart;
char name[30];
int int_array[3];
depart = computer";
name = department";
int_array =
(6) char name[4]
int scores[
float salary[2] =
int max_number = 4;
double amount[max_number];
【解答】 (1) 语句*age_ptr = m产生语法错误,*age_ptr代表指针age_ptr指向的变量,其类型为int,而&m取m的地址,其结果类型是int*,不能将int*类型的值转换为int类型。语句test_ptr = m也产生语法错误,题中所声明的test_ptr实际上是int类型的变量,不是指针。
(2) 语句float* work_hours_ptr = 300.0产生语法错误,声明变量时的赋值运算符是分隔符,其右边的初始化表达式的结果要能赋值给左边的变量,这时'*'代表work_hours_ptr是指针,与类型名float结合,而不是与变量名结合,不能将double类型的常量转换为float*类型的数据。语句salary_ptr = work_hours_ptr也产生错误,两个基类型不同的指针不能赋值。
(3) 语句int_array++和语句int_array = int_ptr产生语法错误,因为数组名被看作指针常量,其值不能改变,不能指向其它变量。这两个语句都试图改变指针常量int_array,因此产生语法错误。
(4) 语句(*func)++产生语法错误,函数指针同样被看作指针常量。实际上,(*func)相当于函数名字,不能做++运算。
(5) 语句name = liu bing"产生语法错误,数组名被看作指针常量,该语句的含义是将name再指向字符串"liu bing",这需要改变name的值。语句int_array = 也产生错误,因为int_array被看作指针常量。注意语句depart = computer science"并不产生语法错误,它使得指针depart指向字符串常量"computer science",即使得depart的值为该字符串所在的存储空间的起始位置。
(6) c++语言规定声明数组时只能最左边一维的长度可缺省,其它维必须使用常量表达式指定长度。因此本小题的name, scores和amount三个数组的声明都产生语法错误。
6-4 以下程序片段都没有任何语法错误,甚至连警告错误也没有(假设这些程序片段都正确地包含了头文件和但它们在运行时都可能产生致命的错误,请指出这些错误,并说明为什么∶
(1) int* age_ptr;
int age = 30;
*age_ptr = age;
(2) const int student_number = 20;
int scores[student_number];
for (int i = 1; i <=student_number; i++)scores[i] =0;
(3) const int name_len = 8;
char name[name_len] =computer";
char depart[name_len] =
if (strcmp(name, depart) =0) cout < (4) const int row = 2, col = 2; float matrix[row, col]; for (int j = 0; j < row; j++) for (int k = 0; k < col; k++)matrix+row*j)+k) =0.0; (5) char *depart = computer science"; char *univ = zhongshan university"; strcpy(depart, univ); cout < delete depart; delete univ; (6) const int msg_len = 80; char *error_msg = new char[msg_len+1]; char *prompt_msg = new char[msg_len+1]; strcpy(error_msg, "use character pointer error!") prompt_msg = error_msg; cout < delete prompt_msg; delete error_msg; 【解答】(1) 语句*age_ptr = age;发生运行错误,声明指针age_ptr后,没有为之分配存储空间,则age_ptr的值是随机的,*age_ptr引用的存储区域也是随机的,将age的值赋给该存储区域,将破坏未知存储区域的值而产生运行错误。 (2) 程序片段的for语句使用数组scores越界,引用数组元素的有效下标范围是从0到student_number-1。 作业内容 二 函数。完成时间 月日自我评价学生签字 家长签字 一 填空题。1 若f x 是r上的减函数,且f x 的图象经过点a 0,3 和b 3,1 则不等式 f x 1 1 2的解集是 2 若函数f x 是定义在 0,上的增函数,且对一切x 0,y 0满足f xy f x f y 则不等式f x... 催化剂与催化作用基本知识。1 简述催化剂的三个基本特征。答 催化剂存在与否不影响 g 的数值,只能加速一个热力学上允许的化学反应达到化学平衡状态而不能改变化学平衡 催化剂加速化学反应是通过改变化学反应历程,降低反应活化能得以实现的 第一章催化剂与催化作用基本知识工业催化原理 作业汇总含答案第一章催化... 藏戏。一 滴水穿石。读读写写。吉祥柔顺席地而唱随心所欲惊叹纯洁能歌善舞朴实敦厚。二 珠联璧合。在括号里填上合适的词。的容貌的唱腔的激流 的舞姿的歌声的江水。三 按要求做题。1.世界上还有几个剧种在演出时是没有舞台的呢?改为陈述句 2.身无分文的唐东杰布在雅鲁藏布江上留下了58座铁索桥。缩句 3.数不...作业内容 函数 含答案
工业催化原理 作业汇总含答案
7 《藏戏》同步精练作业 含答案