在计算机三级考试的上机试题中,通常会涵盖各种编程题目,旨在考察考生的编程能力和问题解决技巧。以下是对给定文件中三个编程题目的详细解析:
### 题目1
题目要求编写一个`jsValue`函数,该函数的目的是找到大于给定整数`m`并且紧邻`m`的`k`个素数,然后将这些素数存入数组`xx`中。此外,还需要调用`writeDat`函数将结果输出到文件`out.dat`。提供的辅助函数`isP`用于判断一个数是否为素数。
```c
int isP(int m) {
int i;
for(i=2; i<m; i++)
if(m % i == 0)
return 0; // 不是素数
return 1; // 是素数
}
void num(int m, int k, int xx[]) {
int s = 0;
for(m = m + 1; k > 0; m++) {
if(isP(m)) {
xx[s++] = m;
k--;
}
}
}
```
在这个题目中,`num`函数通过迭代找到大于`m`的素数并将其存储在数组`xx`中,直到找到`k`个为止。`isP`函数利用了简单的素数判断方法,即检查`m`是否能被小于`m`的任何数整除。
### 题目2
本题要求编写`jsVal`函数,统计四位数中所有数字为0、2、4、6或8的情况,并将满足条件的数按降序存入数组`b`中。同时,统计满足条件的四位数个数`cnt`,并将结果写入`OUT.DAT`文件。
```c
void jsVal() {
int i, j, qw, bw, sw, gw, cnt = 0;
for(i = 0; i < MAX; i++) {
qw = a[i] / 1000;
bw = a[i] / 100 % 10;
sw = a[i] % 100 / 10;
gw = a[i] % 10;
if(qw && qw % 2 == 0 && bw % 2 == 0 && sw % 2 == 0 && gw % 2 == 0) {
b[cnt++] = a[i];
}
}
for(i = 0; i < cnt - 1; i++) {
for(j = i + 1; j < cnt; j++) {
if(b[i] < b[j]) {
int temp = b[i];
b[i] = b[j];
b[j] = temp;
}
}
}
}
```
`jsVal`函数通过逐位检查数组`a`中的四位数,如果所有位数都是偶数(0、2、4、6、8),则将其添加到`b`数组中并递增计数器`cnt`。之后,使用冒泡排序将数组`b`中的数按降序排列。
### 题目3
这个题目要求编写`StrOR`函数,对英文文章中的每一行进行处理,将所有出现在小写字母'o'左侧的字符串内容移动到右侧,删除小写字母'o',并将剩余的字符串内容移回左侧。处理后的字符串应按行重新存入`xx`数组,并最终写入`OUT5.DAT`。
```c
void StrOR(void) {
int i, righto, j, s, k;
char tem[80];
for(i = 0; i < maxline; i++) {
for(j = strlen(xx[i]) - 1; j >= 0; j--) {
if(xx[i][j] == 'o') {
righto = j;
for(s = righto + 1; s < strlen(xx[i]); s++)
tem[k++] = xx[i][s];
for(s = 0; s < righto; s++)
if(xx[i][s] != 'o')
tem[k++] = xx[i][s];
strcpy(xx[i], tem);
}
}
}
}
```
`StrOR`函数遍历每行字符串,当找到小写字母'o'时,将'o'右侧的字符保存到临时数组`tem`,然后将'o'左侧不包含'o'的字符也存入`tem`,最后将`tem`的内容覆盖原字符串。
### 题目4
该题需要编写`StrOL`函数,对英文文章的每一行进行处理,反转每个单词的顺序,但保持单词之间的相对位置不变,处理后的字符串应按行重新存入`xx`数组,并写入`OUT6.DAT`。
```c
void StrOL(void) {
int i, j, k, s, m, strl;
char str[80];
for(i = 0; i < maxline; i++) {
strl = strlen(xx[i]);
memset(str, 0, 80);
s = k = 0;
for(j = strl - 1; j >= 0; j--) {
if(isalnum(xx[i][j])) {
str[k++] = xx[i][j];
} else if(k > 0) {
for(m = k - 1; m >= 0; m--)
xx[i][s++] = str[m];
k = 0;
}
}
if(k > 0) // 处理最后一词
for(m = k - 1; m >= 0; m--)
xx[i][s++] = str[m];
xx[i][s] = '\0'; // 添加字符串结束符
}
}
```
`StrOL`函数首先遍历每一行,遇到字母或数字时,将其添加到临时数组`str`中,直到遇到非字母数字字符。此时,将`str`中的内容反向存入原字符串,然后清空`str`,继续处理下一个单词。最后一词的处理略有不同,因为没有后续的非字母数字字符。
以上四个题目涵盖了基本的编程概念,包括素数检测、数组操作、字符串处理和排序算法,这些都是计算机科学中的基础技能。在准备计算机三级考试时,熟悉并掌握这类题目有助于提高解题效率和准确度。