31.串的数据元素的类型是( ) 32.串长的含义是( ),串相等指的是( ),串的真子串是() 33.模式匹配的含义是( ),模式匹配的算法有哪几种? 34.数组和广义表是否为线性结构?为什么? 35.一个整形的一维数组第一个元素的存储地址是44,每个元素的长度为4个字节,则第5个元素的地址是( ) 36.假设有5行6列的二维数组a[1…5, 1…6]以行序为主序顺序存储,其基地址即a[1][1]的地址为100,每个元素占8个存储单元,那么元素a[2][3]的存储地址为( );若以列序为主序进行存放a[2][3]的存储地址为( ) 37.稀疏矩阵可以用哪几种方式进行压缩存储,各自要存放哪些内容? 38.广义表的含义是什么,对于这样一个广义表(a,(1,2),3)其表头是( ) ,表尾是( ),表长是( )
时间: 2024-03-28 08:39:48 浏览: 104
31. 字符型。串是由零个或多个字符组成的有限序列。
串长指的是串中字符的个数。
两个串相等当且仅当它们的长度相等且对应位置上的字符都相等。
串的真子串是指一个串去掉首尾任意个字符后得到的子串。
32. 模式匹配是在一个文本串中查找一个模式串的过程。常见的模式匹配算法有暴力匹配算法、KMP算法和Boyer-Moore算法。
33. 数组是线性结构,广义表不是线性结构。数组的存储空间是连续的,而广义表的存储空间是分散的。
34. 第5个元素的地址是 60。
a[2][3]的存储地址为 164。
若以列序为主序进行存放,a[2][3]的存储地址为 148。
37. 稀疏矩阵可以使用三元组顺序表、十字链表和邻接表等方式进行压缩存储。三元组顺序表需要记录非零元素的行、列和值;十字链表需要记录非零元素的行、列和值,同时还需要记录每个元素在行、列上的前驱和后继;邻接表则需要记录每行的非零元素和对应的列号。
38. 广义表是由原子和子表组成的表结构。对于广义表(a,(1,2),3),表头为a,表尾为((1,2),3),表长为3。
相关问题
1.在C语言中,除了main函数外,任何函数都可以递归调用。 2.break 和return语句所起的作用是一样的,都是跳出循环。 3.结构体类型本身不占内存空间,结构体变量占用内存空间。 4.C语言函数的返回值只能是数值,不能是地址。 5.在C语言中,字符串常量存放在字符数组中要有一个结束符,该结束符是0。 6.在C语言中,逗号既可以作为运算符,也可以作为分隔符。 7.任何表达式语句都是表达式加分号组成的。 8.形参只有在被调用时才分配存储空间。 9.对于二维数组a来说 a+1与*(a+1)的值相等,因此二者的含义是一样的。 10.将一个字符串"abc"赋值给字符串变量 str的方法是 str="abc"。 11.C语言的重要特点是能够直接处理物理地址,其指针类型数据就是用来存放变量地址的。 12.凡在函数中未指定存储类别的局部变量,其默认的存储类别为static。 13.for 语句作为循环控制语句时,其括号内各个表达式与其后的分号都可省略。 14.unsigned和void 在C语言中都是保留字。 )15.设有定义: int(*ptr)();ptr指向函数的指针,该函数返回一个int 型数据
<think>嗯,我现在要解决用户给出的这15道C语言判断题,需要逐一分析每个陈述是否正确。虽然我之前学过C语言,但有些细节可能记不太清楚,所以需要仔细回忆和验证每个知识点。下面我会一个一个来看,尽量理清楚每个问题。
首先看第1题:“在C语言中,除了main函数外,任何函数都可以递归调用。”我记得递归调用是指函数自己调用自己,而main函数是否可以被递归呢?好像标准C中main函数也是可以被调用的,虽然实际编程中很少这样做,但技术上应该是允许的。所以这个说法是错误的,因为main函数其实也可以递归调用,所以题干的说法是错的。
接下来第2题:“break和return语句所起的作用是一样的,都是跳出循环。”这里需要区分两者的作用。break用于跳出当前循环或switch语句,而return是退出函数,并可能返回一个值。如果在循环中使用return,确实会结束循环,但同时也结束整个函数。所以它们的作用并不完全一样,题干错误。
第3题:“结构体类型本身不占内存空间,结构体变量占用内存空间。”结构体类型只是一个类型定义,不会分配内存,只有定义变量时才会分配空间。所以这个是对的。
第4题:“C语言函数的返回值只能是数值,不能是地址。”其实函数可以返回指针,也就是地址。例如返回int*类型的值,所以这个说法错误。
第5题:“字符串常量存放在字符数组中要有一个结束符,该结束符是0。”字符串的结束符确实是'\0',也就是ASCII码的0,所以正确。
第6题:“逗号既可以作为运算符,也可以作为分隔符。”在C语言中,逗号在变量声明如int a,b中是分隔符;在逗号表达式中如a=(b,c), 则作为运算符。正确。
第7题:“任何表达式语句都是表达式加分号组成的。”是的,表达式后面加分号构成语句,比如a=1;,所以正确。
第8题:“形参只有在被调用时才分配存储空间。”形参在函数被调用时才会分配内存,调用结束后释放,正确。
第9题:“对于二维数组a来说,a+1与*(a+1)的值相等,因此二者的含义是一样的。”虽然它们的地址值相同,但类型不同。a+1是指向第二行的指针,而*(a+1)是第二行首元素的地址,即指向元素的指针,类型不同。所以值相等但含义不同,题干错误。
第10题:“将一个字符串"abc"赋值给字符串变量str的方法是str="abc"。”在C语言中,数组不能直接赋值,str如果是字符数组,应该用strcpy或者初始化时赋值。所以这个方法是错误的,str="abc"只有在str是指针时才合法,但题目中的str可能是数组变量,所以错误。
第11题:“C语言的重要特点是能够直接处理物理地址,其指针类型数据就是用来存放变量地址的。”正确,指针用于存储地址,这也是C语言的重要特性。
第12题:“凡在函数中未指定存储类别的局部变量,其默认的存储类别为static。”局部变量默认是auto存储类别,而不是static,所以错误。
第13题:“for语句作为循环控制语句时,其括号内各个表达式与其后的分号都可省略。”for循环的三个表达式都可以省略,但分号必须保留。例如for(;;)是合法的,所以正确。分号不可省略,但题目说“分号都可省略”可能有歧义,需要看具体是否允许省略分号。其实分号是必须的,即使表达式省略,分号仍然存在,比如for(;i<10;)中的分号不能省。所以题目中的描述可能有错误,需要再确认。原题说“括号内各个表达式与其后的分号都可省略”,比如写成for( )是否合法?其实不行,必须有两个分号。因此题目错误,分号不可省略。
第14题:“unsigned和void在C语言中都是保留字。”正确,两者都是C语言的关键字。
第15题:“设有定义: int(*ptr)();ptr指向函数的指针,该函数返回一个int型数据。”这里的定义int (*ptr)();表示ptr是一个指向函数的指针,该函数参数未指定(在旧式C中表示任意参数),返回int。所以正确。</think>---
### **判断题解析**
#### **1. 错误**
- **分析**:`main` 函数也可以递归调用,只是实际开发中极少使用。递归调用不限制函数类型,包括 `main`。
#### **2. 错误**
- **分析**:
- `break`:仅跳出当前循环或 `switch` 语句。
- `return`:直接终止函数执行并返回值。
- **区别**:`return` 可能结束整个函数,而 `break` 仅影响循环。
#### **3. 正确**
- **分析**:结构体类型(如 `struct Person`)是模板,不占内存;只有定义变量(如 `struct Person p;`)时才分配内存。
#### **4. 错误**
- **分析**:C 语言函数可以返回地址(指针类型),例如:
```c
int* func() {
static int x = 10;
return &x;
}
```
#### **5. 正确**
- **分析**:字符串以 `\0`(ASCII 值为 0)结尾,例如 `char str[] = "abc";` 实际存储为 `{'a','b','c','\0'}`。
#### **6. 正确**
- **分析**:
- **分隔符**:`int a, b;`
- **运算符**:逗号表达式 `c = (a=1, b=2);`(结果为 `2`)。
#### **7. 正确**
- **分析**:表达式语句由表达式加分号构成,例如 `a = 1;` 或 `func();`。
#### **8. 正确**
- **分析**:形参在函数调用时分配内存,调用结束后释放(如栈内存)。
#### **9. 错误**
- **分析**:
- `a + 1`:指向二维数组第二行的指针(类型为 `int (*)[列数]`)。
- `*(a + 1)`:指向第二行首元素的指针(类型为 `int*`)。
- **值相同,类型不同**,含义不同。
#### **10. 错误**
- **分析**:字符数组不能直接赋值。正确方法为:
```c
char str[20];
strcpy(str, "abc");
```
- `str = "abc";` 仅适用于 `char*` 指针(非数组)。
#### **11. 正确**
- **分析**:指针直接操作内存地址是 C 语言的核心特性,例如:
```c
int* p = &x;
*p = 10; // 直接修改 x 的值
```
#### **12. 错误**
- **分析**:未指定存储类别的局部变量默认为 `auto`(自动分配/释放),而非 `static`。
#### **13. 错误**
- **分析**:`for` 语句的格式为 `for(表达式1; 表达式2; 表达式3)`,分号不可省略。例如:
```c
for(;;) {} // 合法(省略所有表达式,但分号保留)
for(;i<10;){} // 合法
```
- **分号必须存在**,否则语法错误。
#### **14. 正确**
- **分析**:`unsigned` 和 `void` 均为 C 语言关键字(保留字)。
#### **15. 正确**
- **分析**:`int (*ptr)();` 定义了一个函数指针 `ptr`,指向返回 `int` 类型的函数(参数未指定)。
---
### **总结**
| 题号 | 正确性 | 题号 | 正确性 |
|------|--------|------|--------|
| 1 | 错误 | 9 | 错误 |
| 2 | 错误 | 10 | 错误 |
| 3 | 正确 | 11 | 正确 |
| 4 | 错误 | 12 | 错误 |
| 5 | 正确 | 13 | 错误 |
| 6 | 正确 | 14 | 正确 |
| 7 | 正确 | 15 | 正确 |
| 8 | 正确 | | |
阅读全文
相关推荐
















