该题目涉及的知识点主要包括以下几个方面:
1. **C语言编程基础**:整个代码是用C语言编写的,包括数组操作、文件输入输出、循环结构、条件判断等基本语法。
2. **数组操作**:在`jsVal()`函数中,数组`a`用于存储从文件`IN30.DAT`中读取的4位数,数组`b`用于存储满足条件的新组合的10位数。`for`循环遍历数组`a`进行处理。
3. **文件操作**:
- `readDat()`函数负责从`IN30.DAT`文件中读取数据,使用`fopen()`打开文件,`fscanf()`读取整数,`fclose()`关闭文件。
- `writeDat()`函数用于将结果写入`OUT30.DAT`文件,同样使用`fopen()`、`fprintf()`和`fclose()`函数。
4. **数值运算**:在`jsVal()`函数中,通过取模和整除运算获取4位数的各位数字,如`a4 = a[i] / 1000`获取千位,`a1 = a[i] % 10`获取个位。然后,通过`ab = 10 * a1 + a4`和`cd = 10 * a3 + a2`重组数字。
5. **条件判断**:在`jsVal()`函数中,使用`if`语句检查新组合的10位数`ab`和`cd`是否满足题目要求的条件:一个能被17整除,一个是奇数,另一个是偶数,且两个新数都不为0。如果满足条件,将数存入数组`b`,并增加计数器`cnt`。
6. **排序算法**:在`jsVal()`函数末尾,使用冒泡排序算法对数组`b`进行降序排列。冒泡排序通过两层`for`循环实现,内层循环用于相邻元素之间的比较和交换。
7. **函数调用**:`main()`函数调用了`readDat()`、`jsVal()`、`writeDat()`这3个函数,分别完成读取数据、处理数据和写入结果的功能。
8. **变量定义与声明**:程序中定义了全局数组`a`和`b`,以及计数器变量`cnt`。在函数内部,使用局部变量如`i`、`j`、`a1`至`a4`、`ab`、`cd`和`temp`进行中间计算。
9. **循环控制**:使用`for`循环进行迭代,例如在`jsVal()`函数中遍历数组`a`,在冒泡排序中遍历数组`b`。
10. **错误检查**:虽然题目没有明确要求,但在实际编程中,通常还需要添加错误检查,例如文件打开失败、读写数据异常等情况。
这些知识点涵盖了C语言的基本要素,包括数据类型、运算符、控制结构、文件操作以及简单的算法应用。对于准备计算机三级数据库技术考试的考生来说,理解和编写这样的代码是必要的技能。