C语言专升本样卷
(总分100分,考试时长90分钟)
一、单项选择题(每小题2 分,共 40分)
1、以下叙述中正确的是________。
    A、预处理命令行必须位于c源程序的起始位置
    B、在c语言中,预处理命令行都以“#”开头
    C、每个c程序必须在开头包含预处理命令行:#include
    D、C语言的预处理不能实现宏定义和条件编译的功能
2、在c语言程序中可用做用户标识符的是________。
    A、void
    B、aa
123 _abc
BBN cas
    C、as+b3
    D、6f
—123 Do
If SIG
3、设a=3,b=2,则表达式a^b>>2的值的二进制表示为________。
    A、00000011
    B、00000110
    C、00000100
    D、10
4、以下程序的输出结果是________。
#include<stdio.h>
main()
{
    int a=1,b=3;
    if((++a<0)&&!(b--<=0)) printf("%d,%d\n",a,b);
    else printf("%d,%d\n",b,a);
}
    A、2,2
    B、1,3
    C、3,2
    D、3,1
5、以下说法中不正确是________。
    A、使用while循环时,循环变量初始化的操作应在循环语句之前完成
    B、while循环是先判断表达式,后执行循环体语句
    C、do-while和for循环均是先执行循环体语句,后判断表达式
    D、for,while和for-while循环中的循环体均可以由空语句构成
6、putchar ( )函数可以向终端输出一个 ( ) 。
    A、整型变量表达式值
    B、实型变量值
    C、字符串
    D、字符或字符型变量值
7、以下不合法的数值常量是________。
    A、011
    B、1e1
    C、8.0E0.5
    D、0xabcd
8、以下关于数组的描述正确的是______。
    A、数组的大小是固定的,但可以有不同的类型的数组元素。
    B、数组的大小是可变的,但所有数组元素的类型必须相同。
    C、数组的大小是固定的,但所有数组元素的类型必须相同。
    D、数组的大小是可变的,但可以有不同的类型的数组元素。
9、以下关于c/c语言指针变量的叙述中,正确的是________。
    A、指针变量可以是全局变量也可以是局部变量
    B、必须为指针变量与指针所指向的变量分配相同大小的存储空间
    C、对指针变量进行算术运算是没有意义的
    D、指针变量必须由动态产生的数据对象来赋值
10、下列字符串中可以用作c标识符的是________。
    A、2009var
    B、goto
    C、test-2009
    D、-123
11、下面程序段的执行结果是________。
#include<stdio.h>
main()
{
    int a[5][5],i,j;
    for(i=1;i<5;i++) for(j=1;j<5;j++) a[i][j]=(i<j)*(j/i);
    for(i=1;i<5;i++) {
        for(j=1;j<5;j++) printf("%2d",a[i][j]);
        printf("\n");
    }
   
}
    A、1111 
1111
1111
1111
    B、0001
0010
0100
1000
    C、0234
0012
0001
0000
    D、0000
0000
0000
0000
12、在函数调用过程中,如果函数funa调用了函数funb,函数funb又调用了函数funa,则 ________。
    A、称为函数的直接递归调用
    B、称为函数的间接递归调用
    C、称为函数的循环调用
    D、C语言中不允许这样的递归调用
13、以下字符常量中不合法的一项是________。
    A、'b
'
    B、' '
    C、'    '
    D、'Y'
14、下列程序的输出结果是________。
#include<stdio.h>
int fun(int x)
{
    int p;
    if(x==0‖x==1) return 3;
    else p=x-fun(x-2);
    return p;
}
void main()
{
    print f("\n%d", fun(5));
}
    A、5
    B、3
    C、7
    D、1
15、若有如下定义并赋值: char ch='a', a; 则执行语句"printf("%d",a=ch+2.6); "后的输出结果是________。
    A、c
    B、d
    C、99
    D、100
16、有以下程序
#include <stdio.h>
main()
{
    int a[]={2,3,5,4},i;
    for(i=0;i<4;i++)
    switch(i%2)
    {
        case 0: switch(a[i]%2)
        {
            case 0:a[i]++;
            break;
            case 1:a[i]--;
        }
         break;
        case 1:a[i]=0;
    }
    for(i=0;i<4;i++) printf("%d ",a[i]);
    printf("\n");
}
程序运行后的输出结果是________。
    A、3 3 4 4
    B、2 0 5 0
    C、3 0 4 0
    D、0 3 0 4
17、有以下程序:
#include <stdio.h>
struct s
{
    int a, b;
}
data[2]= {10, 100, 20, 200 };
main()
{
    struct s p=data[1];
    printf("%d\n", ++(p.a));
}
程序运行后的输出结果是______。
    A、10
    B、11
    C、20
    D、21
18、下面程序的运行结果是________。
main( )
{
    int a,b;
    a=-1;
    b=0;
    do
    {
        ++a;
        ++a;
        b+=a;
    }
    while(a<9);
    printf("%d\n",b);
}
    A、34
    B、24
    C、26
    D、25
19、有以下程序
main()
{
    char s[]="\n123\\";
    printf("%d,%d\n",strlen(s),sizeof(s));
}
执行后输出结果是________。
    A、赋初值的字符串有错
    B、6,7
    C、5,6
    D、6,6
20、设有以下语句
typedef struct s
{
    int g;
    char h;
}
t;
则下面叙述中正确的是________。
    A、可用S定义结构体变量
    B、可以用T定义结构体变量
    C、S是struct类型的变量
    D、T是struct S类型的变量
二、判断题(每小题2 分,共 20分) 
( )1、在标准c中并不区分英文字符的大小写
( )2、在标准c语言中,宏替换是程序运行时完成的。
( )3、静态局部变量的值在函数调用结束后不消失而保留原值
( )4、do-while循环中,根据情况可以省略while.( )
( )5、字符串可以存储在字符数组中,也可以存储在字符型指针变量中
( )6、函数的实参和形参都可以是变量、常量和表达式。
( )7、数组名能与其它变量名相同。数组名后是用方括号括起来的常量表达式,不能用圆括号。
( )8、文件的读函数是从输入文件中读取信息,并存放在内存中。
( )9、在定义数组时,有时可以将该数组的维数省略。( )
( )10、全局静态变量的作用域限制在定义它的源文件内,只能为该源文件内的函数公用。 
三、编程题(每小题 分,共 40分) 
1、编写程序:利用指针方法, 输入3个数a,b,c,按大小顺序输出。 (本题10分) 
2、编程计算1!+2!+3!+…+10的值。 (本题14分) 
3、编写程序:创建一个长度为n的链表,然后反向输出该链表。 (本题16分)   
参考答案
一、单项选择题
1、B
2、B
3、A
4、C
【解析】解答本题的关键在于读懂if语句条件中的表达式。初始时a=1,b=3,所以++a=2>0,因此++a<0为假,因为是进行逻辑与(&&)运算,在&&的第一个运算对象为假的前提下不用判断第二个运算对象的真假,就可以直接得出整个表达式的值为逻辑0,所以直接执行else语句。
5、C
【解析】本题主要考查的知识点为for、while和do-while循环的特点。
[要点透析] for循环是先判断表达式,后执行循环体语句。
sizeof是什么6、D
7、C
8、C
9、A
【解析】存放地址的变量称为指针变量。指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。选项A显然是正确的。对于选项B,指针变量和指针所指向的变量存放的内容是不一样的,只要分配够用就行了,不需要分配一样大小的存储空间。对于选项C,指针变量加1便指向下一个存储单元,是有意义的。另外指针变量可以静态地定义。
10、D
【解析】在C中,变量标识符必须以大小写字母或下画线开始,是由数字或者字母下画线等组成的一个字符串,其中C++关键字不能作为标识符,不能包含-、+、*、/等运算符号。C++变量区分大小写。
11、C
【解析】本题使用一个双重循环对―个二维数组的一部分赋值(下标中含0的元素不赋值),赋值表达式是a[i][j]=(i/j)*(j/i)。因为i和j都是正整数,所以当i大于j时,j/i为0,当i小于j时,i/j为0,
而0乘以任何数都为0,故表达式(i/j)*(j/i)在i和j不相等时的值为0。当i和j相等时,i/j和j/i的值都为1,所以表达式(i/j)*(j/i)的值为1。故二维数组中的a[1][1]、a[2][2]、 a[3][3]、a[4][4]被赋为1,其余下标不含0的元素被赋为0。故应该选择C。
12、B
【解析】在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。本题描述的函数调用属于函数的间接递归调用。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。