2026年汉江师范学院专升本c语言试卷及答案

四季读书网 2 0
2026年汉江师范学院专升本c语言试卷及答案
2026年汉江师范学院专升本c语言试卷及答案

一、选择题(每题2分,共20分)

1. 下列哪个选项不是C语言合法的标识符?
A. int32
B. 2int
C. _variable
D. float
2. C语言中,`char'[] 与 `char *` 的关系是?
A. 完全相同
B. `char'[] 是数组,`char *` 是指针,两者不同
C. `char'[] 是指针,`char *` 是数组,两者不同
D. 取决于定义方式
3. 有以下代码:
int a = 5, b = 3;
printf("%d", a / b);
输出结果是?
A. 1
B. 1.66667
C. 2
D. 0
4. 以下关于`switch`语句的描述,错误的是?
A. `switch`语句中的表达式必须为整数或字符类型。
B. `switch`语句中的`case`标签可以是任何表达式。
C. `switch`语句可以使用`break`语句跳出当前分支。
D. `switch`语句执行完一个`case`后,会继续执行后面的`case`,除非遇到`break`。
5. 若有定义:`int arr[5] = {1, 2, 3, 4, 5};`,则`arr[2]`的值是?
A. 1
B. 2
C. 3
D. 4
6. 以下关于指针的描述,正确的是?
A. 指针变量可以作为函数的参数传递,但数组不能。
B. 指针变量的值可以改变,但指向的地址不能改变。
C. `NULL`指针可以指向任何合法的内存地址。
D. `*`是取地址运算符,`&`是取值运算符。
7. 有以下代码:
#includeintfunc(int x) { return x * x; }intmain() {    int (*p)(int) = func;    printf("%d", p(3));    return 0;}
输出结果是?
A. 3
B. 6
C. 9
D. 编译错误
8. 以下关于结构体的描述,错误的是?
A. 结构体可以嵌套定义。
B. 结构体变量的大小是其所有成员大小的总和。
C. 结构体可以作为函数的参数传递。
D. 结构体变量可以在定义时直接初始化。
9. C语言中,用于动态分配内存的函数是?
A. `malloc`
B. `free`
C. `sizeof`
D. `strcpy`
10. 有以下代码:
#includeFILE *fp = fopen("test.txt""r");if (fp == NULL) {    perror("Open file error");    // 代码执行到这里会停止吗?}fclose(fp);
关于上述代码执行的描述,正确的是?
A. 代码执行到这里会停止,因为`fopen`失败。
B. 代码会正常执行到`fclose(fp)`。
C. 如果`test.txt`不存在,程序会崩溃。
D. `perror`函数会自动关闭文件指针`fp`。
二、填空题(每空2分,共20分)
1. C语言中,用于表示逻辑值`假`的关键字是 ________ 。
2. 若有定义:`int a = 10;`,则表达式 `!a` 的值是 ________ 。
3. 以下代码的输出结果是 ________ :
#includeintmain(){    int i = 0;    while (i < 5) {        printf("%d ", i);        i += 2;        }return 0;}
4. 以下代码的输出结果是 ________ :
#includeintmain(){    char str[] = "Hello";    char *p = str;    while (*p) {        printf("%c", *p - 32);        p++;    }return 0;}
5. 若有定义:`int *p = NULL;`,则以下语句的错误数量是 ________ :
*p = 5; // 错误1
p = (int *)malloc(sizeof(int)); // 错误2
*p = 10; // 正确
free(p); // 正确
6. 以下代码段实现了两个整数的交换,请将缺失的部分补充完整:
int a = 5, b = 10;
int temp;
temp = ________; // 补充1
a = ________; // 补充2
b = temp;
7. 定义一个结构体`Student`,包含`char name[20]`和`int age`两个成员。以下结构体变量的定义是 ________ 。
struct Student stu1 = {"Alice"20};struct Student stu2;stu2 = stu1;
8. 以下代码定义了一个函数,计算两个数的和,请将缺失的部分补充完整:

int add(int x, int y) {

    return ________; // 补充
}
9. 以下代码定义了一个指针数组,请将缺失的部分补充完整:
char *names[] = {"Monday", "Tuesday", ________ , "Thursday", "Friday"};
10. C语言中,用于打开文件的函数是 ________ ,它需要两个参数:文件名和模式。
三、读程序写结果题(每题5分,共10分)
1. 阅读以下代码,写出其输出结果:
#includeintmain(){    int i, j;    for (i = 1; i <= 3; i++) {        for (j = 1; j <= i; j++) {        printf("*");        }    printf("\n");    }return 0;}
2. 阅读以下代码,写出其输出结果:
#includeint func(int x) {    if (x <= 0return 0;    if (x == 1return 1;    return func(x - 1) + func(x - 2);    }int main() {    printf("%d %d\n"func(4)func(5));    return 0;    }
四、代码填空题(每题6分,共12分)
1. 以下函数`reverseStr`的功能是反转一个字符串(原地反转),请将缺失的部分补充完整:
void reverseStr(char *str) {
    if (str == NULL) return;
    int len = 0;
    while (str[len] != '\0') len++; // 计算字符串长度
    len--; // len指向最后一个字符
    for (int i = 0; i < len / 2; i++) {
        char temp = ________; // 补充1
        str[i] = ________; // 补充2
        str[len - i] = temp; // 补充3
    }
}
2. 以下函数`findMax`的功能是查找一个整数数组中的最大值,并返回其索引,请将缺失的部分补充完整:
int findMax(int arr[], int n) {
    if (n <= 0) return -1; // 数组为空或长度不合法
    int maxIndex = 0;
    for (int i = 1; i < n; i++) {
        if (arr[i] > arr[maxIndex]) {
            maxIndex = ________; // 补充1
        }
    }
return maxIndex;
}
五、程序编写题(每题10分,共20分)
1. 编写一个C语言函数`isPrime`,接收一个整数`n`作为参数,判断`n`是否为素数。如果是素数,返回1;如果不是素数,返回0。素数是指只能被1和它本身整除的大于1的自然数。
2. 编写一个C语言程序,实现以下功能:从标准输入读取一行文本(假设不超过100个字符),然后统计并输出该行文本中英文字母(大小写敏感)、数字、空格和其他字符的数量。


试卷答案

一、选择题

1. B
解析:标识符不能以数字开头。
2. B
解析:`char'[]`是字符数组,`char *`是指针,两者类型不同。
3. C
解析:整数除法,5除以3商为2。
4. B
解析:`switch`语句的`case`标签必须是常量表达式(如整常数、字符常量或枚举常量)。
5. C
解析:数组下标从0开始,arr[2]是第三个元素。
6. D
解析:`*`是取值运算符,`&`是取地址运算符。
7. C
解析:函数指针`p`指向`func`,调用`p(3)`等价于调用`func(3)`,输出9。
8. B
解析:结构体变量的大小可能大于其所有成员大小的总和,因为编译器可能会在成员之间添加填充字节以对齐。
9. A
解析:`malloc`用于动态分配内存,`free`用于释放内存,`sizeof`用于计算大小,`strcpy`用于字符串拷贝。
10. B
解析:`fopen`失败返回NULL,但`perror`会打印错误信息,然后代码继续执行到`fclose(fp)`。`fclose`会关闭有效的文件指针,对NULL指针调用是安全的(不执行任何操作)。

二、填空题

1. false
2. 0
解析:`!a`相当于`!(5)`,结果为逻辑假,C语言中逻辑假用`false`表示(虽然标准不要求,但通常用`false`)。
3. 0 2 4
解析:循环初始`i=0`,条件`i<5`,每次增量为2。输出0, 2, 4。
4. HILO
解析:循环遍历`str`,将每个字符`*p`(ASCII码)减32(对应大写字母A的ASCII码65减去小写a的ASCII码97加1),得到对应的大写字母。
5. 1
解析:`*p = 5;`错误,因为`p`是`NULL`指针,尝试解引用`NULL`指针。
6. b; a
解析:交换`a`和`b`的值,需要借助临时变量`temp`。补充1处存`b`的值,补充2处赋`temp`(原`b`),补充3处赋`a`(原`temp`)。
7. 正确
解析:`stu1`使用初始化列表创建并赋值,`stu2`通过赋值运算符`=`接收`stu1`的值,这是合法的。
8. x + y
解析:函数返回两个参数`x`和`y`的和。
9. "Wednesday"
解析:`names`数组包含5个字符串指针,第四个元素应为`"Wednesday"`。
10. fopen

三、读程序写结果题

1. *
解析:外层循环控制行数(i从1到3),内层循环控制每行打印`*`的数量(j从1到i)。
2. 3 5
解析:`func(4)`计算斐波那契数列第4项(从0开始计为第4项),值为3。`func(5)`计算第5项,值为5。

四、代码填空题

1. str[i]; str[len - i - 1]
解析:反转字符串需要交换对称位置的字符。补充1处取右侧字符`str[len - i]`的值,补充2处将左侧字符`str[i]`的值赋给右侧位置,补充3处将保存的右侧字符值赋给左侧位置。
2. i
解析:遍历数组,若发现当前元素`arr[i]`大于当前最大值`arr[maxIndex]`,则更新最大值索引为当前索引`i`。

五、程序编写题

1. 代码示例:
int isPrime(int n) {if (n <= 1return 0// 1和负数不是素数if (n == 2return 1// 2是素数if (n % 2 == 0return 0// 排除偶数for (int i = 3; i * i <= n; i += 2) { // 只检查奇数因子  if (n % i == 0return 0;  }return 1;}
解析思路:素数定义是大于1且只能被1和自身整除。判断方法:
a. 排除小于等于1的数和偶数(除了2)。
b. 对于大于2的奇数,检查从3开始的奇数是否能整除它,只需检查到sqrt(n)即可。
2. 代码示例:
#includeintmain(){char ch;int letterCount = 0, digitCount = 0, spaceCount = 0    otherCount = 0;printf("Enter a line of text (max 100 chars): ");// 使用fgets以处理空行和超过缓冲区的输入fgets(ch, 102, stdin); // ch应改为字符数组str[]// 假设输入不超过100个字符,且不包含换行符前的超长部分// 更健壮的写法应检查fgets的返回值和长度for (int i = 0; ch[i] != '\0' && i < 100; i++) {if ((ch[i] >= 'a' && ch[i] <= 'z') || (ch[i] >= 'A' &&   ch[i] <= 'Z')) {  letterCount++;  } else if (ch[i] >= '0' && ch[i] <= '9') {    digitCount++;    } else if (ch[i] == ' ') {      spaceCount++;      } else {        otherCount++;        }}printf("Letters: %d\n", letterCount);printf("Digits: %d\n", digitCount);printf("Spaces: %d\n", spaceCount);printf("Others: %d\n", otherCount);return 0;}
解析思路:逐个读取输入的字符,直到遇到换行符或达到最大长度。
a. 使用`if`语句判断字符是否为字母(a-z或A-Z)。
b. 使用`if`语句判断字符是否为数字(0-9)。
c. 使用`if`语句判断字符是否为空格。
d. 其他情况归为其他字符。
e. 统计各类字符的数量并输出。

抱歉,评论功能暂时关闭!