2024年湖北专升本C语言模拟试卷

2024年湖北专升本C语言模拟试卷

一、单选(10道)
1、在 C 语言中,用于表示“与”逻辑运算的符号是?()
a) &&
b) ||
c) !
d) &
2、在 C 语言中,以下哪个选项正确定义了一个具有三个参数的函数指针?()
a) int (*funcPtr)();
b) int (*funcPtr)(int, float);
c) int funcPtr(int, float);
d) int funcPtr(int, int, int);
3、在 C 语言中,下列哪个关键字用于定义一个常量?()
a) var
b) const
c) let
d) final
4、在 C 语言中,以下哪个关键字用于在条件语句中执行一段代码块,只要条件为真就会一直执行?()
a) for
b) while
c) do
d) switch
5、在 C 语言中,以下哪个运算符用于获取变量的地址?()
a) *
b) &
c) ->
d) ~
6、下列哪个函数用于在 C 语言中从标准输入读取一个字符?()
a) scanf()
b) gets()
c) getchar()
d) read()
7、下列哪个函数用于在 C 语言中将一个整数转换为字符串?()
a) itoa()
b) atoi()
c) sprintf()
d) strcat()
8、在 C 语言中,以下哪个选项正确地声明了一个指向整型数组的指针?()
a) int *ptr[];
b) int (*ptr)[];
c) int *ptr();
d) int ptr[]();
9、在 C 语言中,以下哪个选项是有效的动态内存分配语句?()
a) malloc(sizeof(int));
b) calloc(sizeof(int));
c) realloc(sizeof(int));
d) free(sizeof(int));
10、下列哪个选项能够正确交换两个整型变量的值?()
a)void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
}
b)void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}
c)int swap(int a, int b) {
    return b, a;
}
d)int swap(int &a, int &b) {
    int temp = a;
    a = b;
    b = temp;
}
二、填空(10道,在____处填答案)
1、
以下程序运行后的输出结果是____。
void swap(int x,int y)
{ int t;
t=x;x=y;y=t;
printf("%d %d ",x,y);
}
main()
{ int a=3,b=4;
swap(a,b);
printf("%d %d\n",a,b);
}
2、
以下程序运行后的输出结果是____。
int fun(int n)
{ switch(n)
{ case 0: return 0;
case 1: return 1;
case 2: return 1;
default: return fun(n-1)+fun(n-2);
}
}
main()
{ int n=7,s;
s=fun(n);
printf("%d\n",s);
}
3、
输入一个字符串,将其倒序后输出
main()
{ int i,j;
char st[60],ch;
scanf("%s",st);
for(i=0,j=____;____;i++,j--)
{     ch=st[i];
    ________;
    st[j]=ch;
}
printf("%s\n",st);
}
4、
输入字符串,将其中的非数字字符删除后,输出整个字符串
main()
{ char st[80];
int i=0,j=0;
scanf("%s",st);
while(st[i])
{ if(________)
st[____]=st[i];
i++;
}
________;
printf("%s\n",st);
}
5、
有以下结构体说明,请填空,以完成对结构体数组 t 定义:
struct STR
{ char a;
int b;
float c;
double d;
};
________t[20];
6、
在 C 语言中,有如下语句:
struct cat
{ int a[10];
char ch;
float f;
double *p;
} cat1;
则结构体变量 cat1 占用内存的字节数为____。
7、
在 C 语言中,有如下语句:
struct std
{ char ch;
int a[2];
float t;
double f
} std1;
则结构体变量 std1 占用内存的字节数为____。
8、
以下程序运行后的输出结果是____。
main()
{ char str[][20]={"China","Beijing"},*p=str;
printf("%s\n",p+20);
}
9、
以下程序运行后的输出结果是____。
main()
{ char a[]={‘\1’,‘ \2’,‘ \3’,‘ \4’,‘ \0’};
printf("%d %d\n",sizeof(a),strlen(a)); }
10、
以下程序运行后的输出结果是____。
main()
{ char *s1="12345",*s2="1234";
printf("%d\n",strlen(strcat(s1,s2)));
}
三、程序改错(10道)
1、错误的程序:
#include <stdio.h>

int main()
{
    float radius;
    printf("输入圆的半径: ");
    scanf("%f", &radius);
    area = 3.14 * radius * radius;
    printf("Area of the circle is: %f\n", area);
    return 0;
}
2、错误的程序:
#include <stdio.h>

int main() {
    int n;
    printf("输入一个数字:");
    scanf("%d", n);
    if (n % 2 == 0) {
        printf("%d 是偶数\n", n);
    } else {
        printf("%d 是奇数\n", n);
    }
    return 0;
}
3、错误的程序:
#include <stdio.h>

int main() {
    int num;
    printf("Enter a number: ");
    scanf("%d", &num);
    if (num % 2) {
        printf("%d is odd\n", num);
    } else {
        printf("%d is even\n", num);
    }
    return 0;
}
4、错误的程序:
#include <stdio.h>

int main() {
    int a = 5, b = 10;
    printf("Sum of a and b is: %d\n", sum(a, b));
    return 0;
}

int sum(int x, int y) {
    return x + y;
}
5、错误的程序:
#include <stdio.h>

void increment(int *x) {
    x++;
}

int main() {
    int num = 5;
    increment(num);
    printf("Incremented value: %d\n", num);
    return 0;
}
6、错误的程序:
#include <stdio.h>

void printArray(int arr[]) {
    int i;
    for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    printArray(arr);
    return 0;
}
7、错误的程序:
#include <stdio.h>

int main() {
    int n;
    printf("Enter a number: ");
    scanf("%d", &n);
    if (n > 0);
    printf("%d is positive\n", n);
    else if (n < 0);
    printf("%d is negative\n", n);
    else
    printf("%d is zero\n", n);
    return 0;
}
8、错误的程序:
#include <stdio.h>

int main() {
    int n;
    printf("Enter a number: ");
    scanf("%d", n);
    printf("Square of %d is: %d\n", n, square(n));
    return 0;
}

int square(int x) {
    return x * x;
}
9、错误的程序:
#include <stdio.h>

int main() {
    int x = 5;
    int y = 10;
    swap(&x, &y);
    printf("x: %d, y: %d\n", x, y);
    return 0;
}

void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
}
10、错误的程序:
#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    printf("Sum of array elements: %d\n", sum(arr));
    return 0;
}

int sum(int arr[]) {
    int sum = 0;
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
        sum += arr[i];
    }
    return sum;
}
四、程序阅读(4道)
1、
#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int *ptr = arr;

    printf("结果为: ");
    for (int i = 0; i < 5; ++i) {
        printf("%d ", *ptr);
        ptr++;
    }
    printf("\n");

    return 0;
}
结果为:
2、
#include <stdio.h>

int main() {
    int num=10;
    int sum = 0;

    for (int i = 1; i <= num; ++i) {
        sum += i;
    }

    printf("结果为%d\n",sum);

    return 0;
}
结果为:
3、
#include <stdio.h>

int main() {
    int n=10;
    int fib[50];

    fib[0] = 0;
    fib[1] = 1;

    for (int i = 2; i < n; ++i) {
        fib[i] = fib[i - 1] + fib[i - 2];
    }

    printf("结果为: ");
    for (int i = 0; i < n; ++i) {
        printf("%d ", fib[i]);
    }
    printf("\n");

    return 0;
}
结果为:
4、
#include <stdio.h>

int main() {
    int num=123456789, reversedNum = 0, remainder;

    while (num != 0) {
        remainder = num % 10;
        reversedNum = reversedNum * 10 + remainder;
        num /= 10;
    }

    printf("结果为: %d\n", reversedNum);

    return 0;
}
结果为:
五、大题(5道)
1、在歌星大奖赛中, 有 10 个评委为参赛的选手打分, 分数为 1~100 分。 选手最后得分为: 去掉一个最高分和一个最低分后其余 8 个分数的平均值。 请编写一个程序实现。
2、100!的尾数有多少个零?
3、问 555555 的约数中最大的三位数是多少?
4、求 13 的 13 次方的最后三位数
5、设有一个数列包含10个数,已经按升序排好。现要求编写一程序,它能够从指定位置开始的n个数按逆序,重新排列并输出新的完整数列。
进行逆序处理时要求使用指针方法(例如原数列为2,4,6,8,10,12,14,16,18,20,若要求从第4个数开始的5个数按逆序重新排列,则得到新数列为2,4,6,16,14,12,10,8,18,20)。

参考答案

一、单选(10道)
1-5:ABBBB
6-10:CABAB
二、填空(10道,在____处填答案)
1、4 3 
	3 4
2、13
3、j = strlen(st) - 1; 
	i < j;  
	st[i]=st[j]
4、isdigit(st[i]
	j
	st[j] = '\0';
5、struct STR
6、56
7、24
8、Beijing
9、5 4
10、9
三、程序改错(10道)
1、错误:变量 area 未声明。应添加 float area;。
2、错误:scanf 应使用 &n。
3、错误:条件判断中应使用 n % 2 == 1 而不是 num % 2。
4、错误:函数 sum 未声明。int sum(int x, int y);
5、错误:
	1.void increment(int *x) {
		(*x)++; // 解引用指针并递增值
	}
	2.increment(&num); // 传递 num 的地址给 increment() 函数
6、错误:
#include <stdio.h>

void printArray(int arr[], int length) {
    int i;
    for (i = 0; i < length; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int length = sizeof(arr) / sizeof(arr[0]); 
    printArray(arr, length);
    return 0;
}
7、错误:if 语句后不应有分号。
8、错误:1.函数 square 未声明。    2.scanf("%d", &n);
9、错误:
#include <stdio.h>

// 声明 swap 函数,参数为指针
void swap(int *a, int *b);

int main() {
    int x = 5;
    int y = 10;
    swap(&x, &y); // 传递变量地址
    printf("x: %d, y: %d\n", x, y);
    return 0;
}

// 定义 swap 函数,参数为指针
void swap(int *a, int *b) {
    int temp = *a; // 使用 * 解引用指针获取值
    *a = *b; // 使用 * 解引用指针修改值
    *b = temp; // 使用 * 解引用指针修改值
}
10、错误:
#include <stdio.h>

// 声明 sum 函数,并传入数组和数组长度
int sum(int arr[], int length);

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    // 传递数组和数组长度
    printf("Sum of array elements: %d\n", sum(arr, sizeof(arr) / sizeof(arr[0])));
    return 0;
}

// 定义 sum 函数,接收数组和数组长度
int sum(int arr[], int length) {
    int sum = 0;
    // 使用传入的数组长度来遍历数组
    for (int i = 0; i < length; i++) {
        sum += arr[i];
    }
    return sum;
}

四、程序阅读(4道)
1、结果为: 1 2 3 4 5
2、结果为55
3、结果为: 0 1 1 2 3 5 8 13 21 34
4、结果为: 987654321
五、大题(5道)
1、

#include <stdio.h>

/**
 * 计算给定分数数组的平均值。
 * @param scores 整型数组,包含需要计算平均值的分数。
 * @param size 整数,表示数组的大小。
 * @return 返回计算得到的平均值,类型为浮点数。
 */
float calculateAverage(int scores[], int size);

/**
 * 对给定的分数数组进行冒泡排序,使得数组元素按升序排列。
 * @param scores 整型数组,包含需要排序的分数。
 * @param size 整数,表示数组的大小。
 */
void sortScores(int scores[], int size);

int main() {
    int scores[10];

    // 读取10位评委的分数
    printf("请输入 10 个评委的分数(1~100):\n");
    for (int i = 0; i < 10; i++) {
        printf("评委 %d 的分数:", i + 1);
        scanf("%d", &scores[i]);
    }

    // 对分数数组进行排序
    sortScores(scores, 10);

    // 计算并输出去除一个最高分和一个最低分后的平均分
    float average = calculateAverage(scores + 1, 8); // 从第2个分数开始计算,共8个分数
    printf("选手的最终得分为:%.2f\n", average);

    return 0;
}

/**
 * 计算给定分数数组的和,并返回其平均值。
 * @param scores 整型数组,包含需要计算平均值的分数。
 * @param size 整数,表示数组的大小。
 * @return 返回计算得到的平均值,类型为浮点数。
 */
float calculateAverage(int scores[], int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += scores[i];
    }
    return (float)sum / size;
}

/**
 * 实现冒泡排序算法,对给定的分数数组进行排序。
 * @param scores 整型数组,包含需要排序的分数。
 * @param size 整数,表示数组的大小。
 */
void sortScores(int scores[], int size) {
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            if (scores[j] > scores[j + 1]) {
                // 交换相邻两个分数,以实现升序排序
                int temp = scores[j];
                scores[j] = scores[j + 1];
                scores[j + 1] = temp;
            }
        }
    }
}

2、

#include <stdio.h>

/**
 * 计算 n! 中包含的因子 x 的个数
 * @param n 待计算的阶乘数
 * @param x 要统计的因子
 * @return 返回 n! 中包含的因子 x 的个数
 */
int countFactors(int n, int x) {
    int count = 0; // 初始化统计个数为 0
    while (n > 0) { // 当 n 大于 0 时循环计算
        n /= x; // n 除以 x,将 n 中的 x 因子去除
        count += n; // 将去除 x 因子后的 n 加到 count 上,统计 x 的个数
    }
    return count; // 返回统计结果
}

int main() {
    // 计算 100! 中包含的因子 5 的个数
    int zeros = countFactors(100, 5); // 调用函数计算 100! 中包含的因子 5 的个数

    printf("100! 的尾数中有 %d 个零。\n", zeros); // 打印结果

    return 0; // 程序正常结束
}

3、

#include <stdio.h>

/**
 * 主函数,寻找555555的最大三位数约数。
 * 无参数。
 * 无返回值。
 */
int main() {
    int number = 555555; // 待查找约数的数值
    int max_three_digit_divisor = -1; // 初始值设为 -1,表示未找到满足条件的约数

    // 从较大的三位数开始逐步向下测试,寻找能整除555555的最大三位数
    for (int divisor = 999; divisor >= 100; --divisor) {
        if (number % divisor == 0) {
            max_three_digit_divisor = divisor; // 找到能整除的最大的三位数
            break; // 找到满足条件的约数后退出循环
        }
    }

    // 判断是否找到了满足条件的约数,并输出结果
    if (max_three_digit_divisor != -1) {
        printf("555555 的约数中最大的三位数是 %d\n", max_three_digit_divisor);
    } else {
        printf("555555 没有三位数约数。\n");
    }

    return 0; // 程序正常结束
}

4、

#include <stdio.h>

int main() {
    int base = 13; // 底数
    int exponent = 13; // 指数
    int result = 1; // 用于存储最终结果

    // 使用循环计算底数的指数次幂,并保留最后三位数
    for (int i = 0; i < exponent; ++i) {
        result *= base; // 依次将底数乘以自身,累乘得到指数次幂
        result %= 1000; // 取模运算,保留最后三位数
    }

    // 打印结果
    printf("13 的 13 次方的最后三位数为:%d\n", result);

    return 0; // 程序正常结束
}

5、

#include <stdio.h>

/**
 * 反转数组中的元素。
 * @param arr 指向要反转的数组的指针。
 * @param start 反转的起始位置。
 * @param n 要反转的元素个数。
 * 说明:此函数将数组 arr 中从位置 start 开始的 n 个元素进行反转。
 */
void reverseArray(int *arr, int start, int n) {
    int *left = arr + start;  // 定义左指针,指向反转的起始位置
    int *right = left + n - 1; // 定义右指针,指向反转的结束位置

    while (left < right) { // 当左指针小于右指针时循环,进行元素交换
        int temp = *left;
        *left = *right;
        *right = temp;
        left++; // 左指针向右移动
        right--; // 右指针向左移动
    }
}

int main() {
    int arr[10] = {}; // 定义一个长度为 10 的数组
    int start, n; // 定义起始位置和要反转的元素个数

    printf("输入数组元素:\n");
    for (int i = 0; i < 10; i++) { // 循环读取数组元素
        scanf("%d", &arr[i]);
    }
    printf("输入起始位置:");
    scanf("%d", &start);

    printf("输入要反转的元素数: ");
    scanf("%d", &n);

    // 检查输入的起始位置和元素个数是否合法
    if (start < 0 || start >= 10 || n < 0 || start + n > 10) {
        printf("Invalid input\n");
        return 1; // 输入不合法,退出程序
    }

    reverseArray(arr, start, n); // 调用函数反转数组

    printf("反向数组: ");
    for (int i = 0; i < 10; i++) { // 打印反转后的数组
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0; // 程序正常结束
}

【程序1】 题目:有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数都是多少 1.程序分析:可填在百位,十位,个位的数字都是1,2,3,4.组成所有的排列后再去 掉不满足条件的排列. 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i,j,k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成.利润(i)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求应发放奖金总数 1.程序分析:请利用数轴来分界,定位.注意定义时需把奖金定义成长整型. 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bonus1+(i-100000)*0.075; else if(i<=400000) bonus=bonus2+(i-200000)*0.05; else if(i<=600000) bonus=bonus4+(i-400000)*0.03; else if(i<=1000000) bonus=bonus6+(i-600000)*0.015; else bonus=bonus10+(i-1000000)*0.01; printf("bonus=%d",bonus); }
### 关于湖北工程学院专升本C语言考试资料与学习资源 对于准备参加湖北工程学院专升本C语言课程的学生而言,获取有效的复习材料至关重要。根据过往的经验,在备考过程中可以参考其他院校相同类型的试题来增加实战经验[^1]。 #### 利用历真题作为练习素材 通过分析不同学校发布的往届考题能够帮助考生熟悉命题风格以及掌握重点知识点。例如,2023湖北省内有两所高校——湖北警官学院和武汉东湖学院在其专升本测试中涉及到了特定的编程题目;而另一份来自2016试卷也提供了宝贵的历史数据供学生研究[^2]。 #### 寻找官方渠道发布的信息 建议定期访问目标院校官方网站或教务处页面,留意是否有最新的通知公告、教学大纲更新或是推荐书目列表等重要资讯公布。通常情况下,这些平台会是最权威的消息源之一。 #### 参加线上线下的培训课程 除了自学之外,还可以考虑报名参加由专业人士开设的相关培训班。这类辅导班往往拥有丰富的经验和系统的教材体系,有助于提高应试技巧并加深理解概念性难题。 ```python # 示例代码用于展示如何实现简单的输入输出功能 print("请输入您的姓名:") name = input() print(f"你好, {name}!") ``` 为了更好地适应实际应用场景中的需求变化,平时应该注重培养解决问题的能力而非仅仅记忆固定模式解答方法。这不仅限于理论知识的学习,还包括动手实践编写程序解决具体问题的过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无限循环者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值