分享

2023年计算机C语言专升本测试卷(共八卷)及答案

 吾爱考试 2023-01-30 发布于湖北

2023年计算机C语言专升本测试卷(一)

一、单项选择题(共20题,每小题2 分,共 40分)

1、若已有定义语句:inta,b, c; 且变量已正确赋初值,则以下选项中正确的赋值语句是________。

    A、a = (b = c) + 8;

    B、(a = b) = c = 9;

    C、a = (b == c) = 'A';

    D、a + b = c + 1;

2、下列四组选项中,均不是c语言关键字的选项是________。

    A、define  IF  type

    B、getc  char   printf

    C、include  scanf  case

    D、while  go  pow

3、下列叙述中正确的是________。

    A、程序执行的效率与数据的存储结构密切相关

    B、程序执行的效率只取决于程序的控制结构

    C、程序执行的效率只取决于所处理的数据量

    D、以上三种说法都不对

4、有以下程序
main()
{
    int i, j;
    for(i=1;i<4;i++)
    {
        for(j=i;j<4;j++) printf("%d*%d=%d ",i,j,i*j);
        printf("\n");
    }
}
程序运行后的输出结果是______。

    A、1*1=1  1*2=2  1*3=3
2*1=2  2*2=4  2*3=6
3*1=3  3*2=6  3*3=9

    B、1*1=1 1*2=2 1*3=3
2*2=4 2*3=6
3*3=9

    C、1*1=1

    D、1*1=1  1*2=2                 
2*1=2  2*2=4    
3*3=9

5、下面关于编译预处理命令,正确的是________。

    A、#define char CHAR

    B、#Define E 0.0000034

    C、##define FALSE 0

    D、#define DIM 26

6、整型变量x=1,y=3,经下列计算后,x的值不等于6的是________。

    A、x=(x=1+2,x*2)

    B、x=y>2?6:5

    C、x=9-(--y)-(y--)

    D、x=y*4/2

7、关于数组的定义与初始化,下列哪一项是错误的( )

    A、int arr[5] = {1,2,3,4,5};

    B、int arr[] = {1,2,3,4,5};

    C、int arr[5] = { 1,2,3};

    D、int arr[5] = {1,2,3,4,5,6};

8、下面正确的字符常量是 。

    A、“c”

    B、'\\’’

    C、'’

    D、'K’

9、字符串"xyz"在内存占用的字节数是______。

    A、3

    B、4

    C、6

    D、8

10、定义如下变量和数组: int i, x[3][3]={1,2,3,4,5,6,7,8,9
};则下面语句for(i=0;i<3;i++) printf("%d",x[i][2-i]);的输出结果是________。

    A、1 5 9

    B、1 4 7

    C、3 5 7

    D、3 6 9

11、当全局变量与局部变量重名时,那么在调用时( )

    A、局部变量会被屏蔽

    B、全局变量会被屏蔽

    C、都不会调用,系统会报错

    D、会调用两次,先调用局部变量,再调用全局变量

12、c 语言共用体类型变量在程序运行期间 。

    A、所有成员一直驻留在内存中

    B、只有一个成员驻留在内存中

    C、部分成员驻留在在内存中

    D、没有成员驻留在内存中

13、下列选项中,能够满足"若字符串s1等于字符串s2,则执行st"要求的是________。

    A、if(strcmp(s2,s1)==0)ST;

    B、if(sl==s2)ST;

    C、if(strcpy(s l ,s2)==1)ST;

    D、if(sl-s2==0)ST;

14、在16位pc机上使用c语言,若有如下定义 
struct data {
  int i;
  char ch;
  double f;
} b;
则结构变量b占用内存的字节数是________。

    A、1

    B、2

    C、7

    D、11

15、有以下程序:
main()
{
    int x=0,y=5,z=3;
    while(z-->0&&++x<5)y=y-l;
    printf("%d,%d,%d\n",x,y,z);
}
程序执行后的输出结果是________。

    A、3,2,0

    B、3。2. 1

    C、4,3,-1

    D、5,2.-5

16、已知:int a,b; 下列switch语句中,( )是正确的。

    A、switch (a)
  case a: a++;break;
  case b: b++;break;

    B、switch(a+b)
  case 1:a+b;break;
  case 1:a-b

    C、switch(a*a)
  case 1,2:++a;
  case 3, 4:++b:

    D、switch(a/10+b)
  case 5:a/5:break:
  default:a+b;

17、static struct
{
    int a1;
    float a2;
    char a3;
}
a[10]={1,3.5,'a'};
说明数组a是地址常量,它有10个结构体型的下标变量,采用静态存 储方式,其中被初始化的下标变量是________。

    A、a[1]

    B、a[-1]

    C、a[0]

    D、a[10]

18、有以下程序
#include <stdio.h>
void fun(int *s,int nl,int n2)
{
    int i,j,t;
    i=nl;
    j=n2;
    while(i<j)
    {
        t=s[i];
        s[i]=s[j];
        s[j]=t;
        i++;
        j--;
    }
}
main()
{
    int a[10]={1,2,3,4,5,6,7,8,9,0}, k;
    fun(a,0,3);
    fun(a,4,9);
    fun(a,0,9);
    for(k=0;k<10;k++)printf("%d",a[k]);
    printf("\n");
}
程序运行的结果是________。

    A、0987654321

    B、4321098765

    C、5678901234

    D、0987651234

19、在下面的字符数组定义中,哪一个有语法错误 。

    A、char a[20]=“abcdefg”;

    B、char a[]=“x+y=55.”;

    C、chara[15];

    D、char a[10]='5’;

20、下面赋值表达式不正确的是__________________.
struct student
{
    long num;
    char name[20];
} st1, st2={101, "tom"}, *p=&st1;

    A、st1 = st2

    B、p->name = st2.name

    C、p->num = st2.num

    D、*p=st2

二、填空题(共10题,每小题2 分,共 20分)

1、利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用a表示,60-89分之间的用b表示,60分以下的用c表示。  

2、已知a=5,则表达式"a+=a-=3"的值是_____________。  

3、若i为整型变量,且i%2==0的值为1,则变量i为________数。  

4、C语言中的标识符只能由三种字符组成,他们是 字母,数字,下划线___。  

5、下列程序段的运行结果是________。
main()
{
    int m=1,t=1;
    for( ; ; )
    {
        m=m+t ;
        t++;
        if(m>9) break ;
    }
    printf("%d\n",m);
}  

6、下面程序段的运行结果是________。for(a=1,i=-1;-1<=i<1;i++)
{
    a++;
    printf("%d,",a);
}
printf("%2d",i);  

7、c语言本身不提供输入输出语句,输入和输出操作是由________来实现的。  

8、C语言中函数返回值的类型是由______决定的。  

9、已知"float x=0.5; int y=8;",则算术表达式"(int)(x+y/5)"的值是________。  

10、以下程序的运行结果是_____________。
main( )
{
    int k, s ,a[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
    s=0;
    for( k=0;k<4;k ++)s=s+ a[k][k];
    printf("%d,",s);
}    

三、编程题(共3题,共 40分)

1、编写程序:查找n在数组a中最后一次出现的位置
例如:如果a数组中的元素为:1,5,2,5,6,8,7,4,3,0,当n=5时,程序的输出结果为:5 is no.3 当n=10时,程序的输出结果应为:10 not found (本题10分) 

2、输入n的值,计算并输出1*1+2*2+3*3+4*4+5*5+...+n*n的值。要求编写函数f求平方。 (本题14分) 

3、题⽬描述
有10个学⽣,每个学⽣的数据包括学号、姓名、3门课程的成绩。读⼊这10个学⽣的数据,要求输出3门课程的总平均成绩,以及个⼈平均分最⾼的学⽣的数据(包括学号、姓名、3门课程成绩、平均分数)。
输⼊
共有10⾏,每⾏包含了⼀个学⽣的学号(整数)、名字(长度不超过19的⽆空格字符串)和3门课程的成绩(0⾄100之间的整数),⽤空格隔开。
输出
第⼀⾏包含了3个实数,分别表⽰3门课程的总平均成绩,保留2位⼩数,每个数之后输出⼀个空格。
第⼆⾏输出个⼈平均分最⾼的学⽣的数据,与输⼊数据格式相同。如果有多位个⼈平均分最⾼的学⽣,输出按照输⼊顺序第⼀个最⾼分的学⽣数据。
请注意⾏尾输出换⾏。
样例输⼊

样例输出
 85.60 87.90 90.40
 105 EEE 92 93 94 (本题16分)   


参考答案

一、单项选择题

1、A

2、A

3、A

【解析】程序执行的实际计算工作量不仅与程序的控制结构有一定的关系,还与处理的数据量有关,与数据的存储结构密切相关。所以,选项A正确,选项B和C错误。所以,本题的正确答案为A。

4、B

【解析】本题考查的是循环嵌套。在一个循环体内又完整地包含了另一个循环,称为循环嵌套。外循环i的值分别为1、2、3,当i=1,内循环j=1时,输出1*1=1;当内循环j=2时,输出1*2=2;当内循环j=3时,输出1*3=3;当i=2,内循环j=2时,输出2*2=4;当内循环j=3时,输出2*3=6;当i=3,内循环j=3时,输出3*3=9。

5、D

【解析】无参宏定义的一般格式:# define 标识符语言符号字符串,其中:“define”为宏定义命令;“标识符为所定义的宏名,通常用大写字母表示,以便于与变量区别;“语言符号字符串”可以是常数、表达式、格式串(格式串是用双引号括起来的字符串)等,选项 A  B  C 错误,选项 D 正确;本题答案为 D。

6、C

7、D

【解析】选项4初始化值大于数组的大小。

8、D

9、B

【解析】字符串中的每个字符占1个字节,但C程序在存储字符串时,要在最后一个有效字符后面接上1个字符串结束的标记符'\0'。这样,存储字符串常量”XyZ”需要4个字节。所以解答是B。

10、C

11、B

【解析】当局部变量与全局变量重名时,全局变量会被屏蔽。

12、B

13、A

14、D

【解析】结构体变量所占用内存的字节数是其所有成员所占用内存字节数之和。本题中整型变量i所占用的内存是2字节,字符型变量ch所占用的内存是1字节,双精度型变量f所占用的内存是8字节,三者相加即可。

15、B

16、D

17、C

18、C

19、D

【解析】[考点分析] 考查声明数组的语法格式。
选项D的定义右语法错误。赋值号右边的字符应该是用双引号括起来。

20、B

二、填空题

1、x>=90?’a’:x>=60?:’b’:’c’;

2、4

3、偶

4

5、11

6、-1

7、['函数']

8、函数类型

9、1

10、34#34,#34,

三、编程题

1、#include <stdio.h>
main( )
{
    int a[10]={1,5,2,5,6,8,7,4,3,0};
    int i,k,n,f=0;
    scanf("%d",&n);
    for(i=0;i<10;i++)
    if(a[i]==n)
    {
        f=1;
        k=i;
    }
    if(f) printf("%d is no. %d\n", n,k);
    else printf(" %d not found !\n",n);
}

2、#include
void main()
{  
    int    f(int x);
    int n,sum;
    printf("
    请输n值:");
    scanf("%d",&n);
    sum=f(n);
    printf("%d\n",sum);
}
int f(int x)
{  
    int j,z=0;
    for(j=1;j<=x;j++)
    z=z+j*j;
    return z;
}

3、#include<stdio.h>
#include<string.h>
struct people {
    int num,a,b,c;
    char name[10];
};

int input(struct people stu[]){
    for(int i=0;i<10;i++)
        scanf("%d %s %d %d %d",&stu[i].num,stu[i].name,&stu[i].a,&stu[i].b,&stu[i].c);
}

int print(struct people stu[]) {
    double x=0,y=0,z=0;
    for(int i=0;i<10;i++){
    x=x+stu[i].a*1.0;
    y=y+stu[i].b*1.0;
    z=z+stu[i].c*1.0;
}

for(int i=0;i<10;i++){
    if((stu[i].a+stu[i].b+stu[i].c)>=(stu[i+1].a+stu[i+1].b+stu[i+1].c)){
        stu[i+1].num=stu[i].num;
        strcpy(stu[i+1].name,stu[i].name);
        stu[i+1].a=stu[i].a;
        stu[i+1].b=stu[i].b;
        stu[i+1].c=stu[i].c;
    }
}
printf("%.2f %.2f %.2f\n",x/10.0,y/10.0,z/10.0);
printf("%d %s %d %d %d\n",stu[9].num,stu[9].name,stu[9].a,stu[9].b,stu[9].c); }
int main(){
struct people stu[10];
input(stu);
print(stu);
return 0;
}


 2023年计算机C语言专升本测试卷(二)

一、单项选择题(共20题,每小题2 分,共 40分)

1、有以下程序
main( )
{
    int i,s=0;
    for(i=1;i<10;i+=2) s+=i+1;
    printf("%d\n",s);
}
程序执行后的输出结果是________。

    A、自然数1~9的累加和

    B、自然数1~10的累加和

    C、自然数1~9中的奇数之和

    D、自然数1~10中的偶数之和

2、若有说明语句:int a; float b; ,以下输入语句正确的是________。

    A、scanf("%f%f",&a,&b);

    B、scanf("%f%d",&a,&b);

    C、scanf("%d,%f",&a,&b);

    D、scanf("%6.2f%6.2f",&a,&b);

3、switch语句不能用于下列哪种数据类型 ( )

    A、double

    B、byte

    C、short

    D、char

4、下列叙述中,正确的是________。

    A、while语句构成的循环不能用其他语句构成的循环来代替

    B、do-while语句构成的循环只能用break语句退出

    C、用while语句构成的循环,只有在while后的表达式为非0时才执行循环

    D、do-while语句构成的循环,只有在while后的表达式为0时才结束循环

5、定义如下变量和数组: int k,a[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是________。for(k=0;k<3;k++) printf("%d ",a[k][2-k]);

    A、3 5 7

    B、3 6 9

    C、1 5 9

    D、1 4 7

6、表示关系1<=x<=100的c语言表达式为________。

    A、x>=1 & x<=100

    B、x>=1 and x<=100

    C、1<=x<=100

    D、x>=1 && x<=100

7、与实际参数为实型数组名相对应的形式参数不可以定义为________。

    A、float  a[];

    B、float *a;

    C、float a;

    D、float (*a)[3];

8、算法要有确定的含义,不能出现二义性指的是算法的哪个特性?

    A、有穷性

    B、确定性

    C、可行性

    D、输入

9、下面不正确的字符串常量是________。

    A、'abc'

    B、"12'12"

    C、"0"

    D、"  "

10、数组a[10]的下标从( )开始。

    A、1

    B、0

    C、10

    D、不确定

11、调用函数时,当实参和形参都是简单变量时,它们之间数据传递的过程是 __________.

    A、实参将其地址传递给形参,并释放原先占用的存储单元

    B、实参将其地址传递给形参,调用结束时形参再将其地址回传给实参

    C、实参将其值传递给形参,调用结束时形参再将其值回传给实参

    D、实参将其值传递给形参,调用结束时形参并不将其值回传给实参

12、以下条件表达式中能完全等价于条件表达式 x的是 _________.

    A、(x==0)

    B、(x!=0)

    C、(x==1)

    D、(x!=1)

13、设变量定义为 int a[2]={1,3}
, *p=&a[0]+1;
,则*p的值是________。

    A、2

    B、3

    C、4

    D、&a[0]+1

14、以下关于逻辑运算符两侧运算对象的叙述中正确的是________。

    A、只能是整数0或1

    B、只能是整数0或非0整数

    C、可以是结构体类型的数据

    D、可以是任意合法的表达式

15、若运行时给变量x输入12,则以下程序的运行结果是
main()
{
    int x,y;
    scanf("%d",&x);
    y=x>12 ? x+10 : x-12;
    printf("%d\n",y);
   
}

    A、0

    B、22

    C、12

    D、10

16、设有以下程序段: int k=0;
while(k=1) k--;
则以下叙述中正确的是________。

    A、while 循环执行一次

    B、该循环是无限循环

    C、循环体语句一次也不执行

    D、该循环有语法错误

17、下列选项中属于c语言构造类型的是________。

    A、指针类型

    B、空类型

    C、枚举类型

    D、数组类型

18、有以下程序:
main()
{
    int a=1,b=3,c=5,*p;
    int*p1=&a,*p2=&b,*p3=&c;
    *p=*p1*(*p2);
}
执行后的输出结果是________。

    A、1

    B、2

    C、3

    D、4

19、以下能正确定义数组并正确赋初值的选项是______。

    A、int N=5,a[N][N];

    B、int b[1][2]={{1},{2}};

    C、int c[2][]={{1,2},{3,4}};

    D、int d[3][2]={{1,2},{3,4}};

20、struct ex
{
    int x ;
    float y;
    char z ;
}
example;
则下面的叙述中不正确的是________。

    A、struct结构体类型的关键字

    B、example是结构体类型名

    C、x,y,z都是结构体成员名

    D、struct ex是结构体类型

二、填空题(共10题,每小题2 分,共 20分)

1、设int a=12,则表达式a/=a+a 运算后,a的值是______。  

2、在c语言中,用转义字符 \' 表示______________。答题提示:双引号/单引号/反斜线/横向跳格/回车换行  

3、在c语言中,正确的标识符是由________ 组成的,且由 ________ 开头的。  

4、在scanf函数中,用符号______表示变量的地址。  

5、程序的结果是:
#include<stdio.h>
void main()
{
    int i,j,x=0;
    for(i=0;i<2;i++)
    {
        x++;
        for(j=0;j<=3;j++)
        {
            if(j%2) continue;
            x++;
        }
        x++;
    }
    printf("x=%d",x);
}  

6、以下程序的功能是计算:s=1+12+123+1234+12345。请填空。
main()
{
    int t=0,s=0,i;
    for( i=1; i<=5; i++)
    {
        t=i+ ________ ;
        s=s+t;
    }
    printf("s=%d\n",s);
}  

7、在c语言中,将字符串中大写字母转换成小写字母的函数是_____________。  

8、c语言约定用____________作为字符串的结束标志。  

9、程序结果是________
#include<stdio.h>
void swap(int *,int);
void main( )
{
    int a=3,b=5;
    swap(&a,b);
    printf("a=%d,b=%d",a,b);
}
void swap(int *x,int y)
{
    int temp ;
    temp=*x ;
    *x=y ;
    y=temp ;
}  

10、下列给定程序中函数fun()的功能是:用递归算法计算斐波拉契数列中第n项的值。从第1项起,斐波拉契数列为:l,1,2,3,5,8,13,21,… 例如,若给n输入7,则该项的斐波拉契数值为13。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构! 试题程序:
long fun(int g) (
switch(g);
{
    case 0:
      return 0;
    case 1:case 2: return 1;
}
return(fun(g-1)+fun(g-2)); )
void main()
{
    long fib;
    int n;
    printf("input n:");
    scanf("%d",&n);
    printf("n=%d\n",n);
    fib=fun(n);
    printf("fib=%d\nkn",fib);
}    

三、编程题(共3题,共 40分)

1、一个皮球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求当它第10次落地时,共经过了多少米,第10次反弹多高? (本题10分) 

2、已知银行定期存款利率为r=2.25%,输入存款本金x、存款年数n,输出本利之和y=x(1+r)(1+r)...(1+r),共n个(1+r)。 (本题14分) 

3、题⽬描述
完成⼀个对候选⼈得票的统计程序。假设有3个候选⼈,名字分别为Li,Zhang和Fun。使⽤结构体存储每⼀个候选⼈的名字和得票数。记录每⼀张选票的得票⼈名,输出每个候选⼈最终的得票数。结构体可以定义成如下的格式:
struct person {
char name[20];
int count;
}leader[3] = {“Li”, 0, “Zhang”, 0, “Fun”, 0};
输⼊
第⼀⾏有⼀个整数n,表⽰以下有n张选票信息将会输⼊。保证n不⼤于100。
以后的n⾏中,每⼀⾏包含⼀个⼈名,为选票的得票⼈。保证每⼀个⼈名都是Li,Zhang和Fun中的某⼀个。
输出
有三⾏,分别为Li,Zhang和Fun每⼈的得票数。格式为⾸先输出⼈名,其后输出⼀个冒号,最后输出候选⼈的得票数。
请注意⾏尾输出换⾏。
样例输⼊
10
Li
Li
Fun
Zhang
Zhang
Fun
Li
Fun
Zhang
Li
样例输出
Li:4
Zhang:3
Fun:3 (本题16分)   


参考答案

一、单项选择题

1、D

2、C

3、A

【解析】swish语句中表达式expression只能返回这几种类型的值:int、byte、short和char。如果比较的数据类型是double型,则不能使用 switch结构。

4、C

【解析】本题考核对do-while语句、while语句基本语法的掌握。选项A中,while语句构成的循环体可由其他语句构成的循环体代替,所以选项A不正确。选项B中, do-while语句构成的循环,当while的条件表达式的值为0时,也可结束循环,所以选项B也不正确。选项C是正确的。选项D可参照选项B,当使用break语句时,也可退出循环。故选项D也不正确。

5、A

6、D

7、C

8、B

9、A

10、B

11、D

12、B

13、B

14、D

【解析】本题考查的是逻辑运算符。C语言中,逻辑运算符的两个运算分量可以是任意合法的表达式。故本题应该选择D)。

15、A

【解析】本题考查的是三目运算符的用法,三日运算符的形式为(表达式1)(表达式2):(表达式3)。当(表达式1)的值为真时,求(表达式2)的值为整个表达式的值;如果(表达式1)的值为假,则求 (表达式3)的值为整个表达式的值。题中,表达式x> 12的结果为假,所以执行的语句是x-12,最终y的值应该是0。

16、B

【解析】请仔细阅读交规难度:简单

17、D

【解析】构造类型数据是由基本类型数据按一定规则组成的。C语言中的构造类型数据只有3种,它们是数组类型、结构体类型和共用体类型。故应该选择D。

18、C

19、D

【解析】A.数组维数必须为常量;B.b[1][2]数组为一行两列,而两行一列;数组定义错误,数组定义时列数必须写明,而行数可以缺省;D.表示正确,相当于{{1,2},{3,4},{0,0}}

20、B

二、填空题

1、0

2、单引号

3、['字母、数字、下划线', '以字母、下划线']

4、&

5、x=8

6、['t*10']

7、strlwr#strlwr()#strlwr(字符串)

8、'\0'#\0

9、a=5,b=5

10、(1)错误:switch(g);
正确:switch(g)(2)错误:casel:case2:returnl;
正确:casel;
case2:returnl;

三、编程题

1、#include
void main()

    int i;
    float sum=100.0,h=50;
    for(i=2;i<=10;i++)
    { 
    sum=sum+2*h;
    h=h/2;
    }
    printf("%f,%f\n",sum,h);
}

2、#include
void main()
{
    float x,y,r=0.0225;
    int i,n;
    printf("请输入存款本金x和存款年数n:");
    scanf("%f%d",&x,&n);
    y=x;
    for(i=1;i<=n;i++)
    y=y*(1+r);
    printf("%f\n",y);
}

3、#include<stdio.h>
#include<string.h>
struct person {
char name[20];
int count;
}leader[3]={"Li",0,"Zhang",0,"Fun",0};
int main(){
    int i,j,n;
    char leader_name[20];
    scanf("%d",&n);
    for(i =1;i <= n;i++){
    scanf("%s",leader_name);
    for(j =0;j <3;j++)
        if(strcmp(leader_name,leader[j].name)==0) leader[j].count++;
    }
    for(i =0;i <3;i++)
        printf("%s:%d\n",leader[i].name,leader[i].count);
    return0;
}


 2023年计算机C语言专升本测试卷(三)

一、单项选择题(共20题,每小题2 分,共 40分)

1、下列关于指针说法的选项中,正确的是________。

    A、指针是用来存储变量值的类型

    B、指针一旦定义就不能再指向别的变量

    C、指针当中存储的是变量的内存地址

    D、指针一旦定义必须要指向某一个变量

2、以下程序段的输出结果是________。 int a=1234; float b=123.456; double c=12345.54321; printf("%2d,%2.1f,%2.1f",a,b,c);

    A、无输出

    B、12,123.5,12345.5

    C、1234,123.5,12345.5

    D、1234,123.4,1234.5

3、有如下程序:
main ()
{
  int x = 1, a = 0, b = 0;
  switch (x)
    {
    case 0:
      b++;
    case 1:
      a++;
    case 2:
      a++;
      b++;
    }

  printf ("a = %d, b = %d\n", a, b);
}
该程序的输出结果是________。

    A、a=2,b=1

    B、a=1,b=1

    C、a=1,b=0

    D、a=2 b=2

4、以下是死循环的程序段是________。

    A、for(i=1; ; )if(++i%2==0) continue;if(++i%3==0) break;}

    B、i=32767;do{if(i<0) break;}while(++i);

    C、for(i=1; ; ) if(++i<10) continue;

    D、i=1;while(i--);

5、以下选项中合法的c语言字符常量是________。

    A、'\t'

    B、"A"

    C、67

    D、A

6、与数学式子3乘以x的n次方/(2x-1)对应的c语言表达式是______。

    A、3*x^n/(2*x-1)

    B、3*x**n/(2*x-1)

    C、3*pow(x,n)*(1/(2*x-1))

    D、3*pow(n,x)/(2*x-1)

7、以下叙述中正确的是________。

    A、语句 int a[8]={0};是合法的

    B、语句 int a={ 0};是不合法的,遗漏了数组的大小

    C、语句 char a[2]={"A","B"};是合法的,定义了一个包含两个字符的数组

    D、语句char[3];a="AB";是合法的,因为数组有三个字符空间的容量,可以保存两个字符

8、根据c语言的语法规则,下列________个是不合法标识符。

    A、do

    B、Name

    C、R5

    D、_exam

9、以下关于字符串的叙述中正确的是________。

    A、c语言中有字符串类型的常量和变量

    B、两个字符串中的字符个数相同时才能进行字符串大小的比较

    C、可以用关系运算符对字符串的大小进行比较

    D、空串一定比空格打头的字符串小

10、若有定义:int c[4][5],(*cp)[5]; 和语句cp=c; ,则能正确引用c数组元素的是________。

    A、cp+1

    B、*(cp+3)

    C、*(cp+1)+3

    D、*(*cp+2)

11、关于c语言中print()函数与scanf()函数,下列描述中正确的是________。

    A、printf()函数可以向任何地方输出数据

    B、printf()只向控制台输出数据

    C、scanf()只能输入英文字母和数字

    D、scanf()函数可以识别输入的空格

12、在c语言中,能代表逻辑值"真"的是________。

    A、True

    B、大于0的数

    C、非0整数

    D、非0的数

13、设有字符串a="he has 钱!",则该字符串的长度为( )。

    A、9

    B、10

    C、11

    D、8

14、设有如下枚举类型定义: enum language
{
    basic=3 , assembly , ada=100 , cobol , fortran
};
枚举量 fortran 的值为 。

    A、4

    B、7

    C、102

    D、103

15、下列程序执行后输出的结果是________。
int d=1;
fun (int p)
{
    int d=5;
    d + =p ++;
    printf("%d,",d);
}
main()
{
    int a=3;
    fun(a);
    d += a++;
    printf("%d\n",d);
}

    A、8, 4

    B、9, 6

    C、9, 4

    D、8, 5

16、流程控制语句的基本控制结构有三种,其中不包括________。

    A、顺序结构

    B、选择结构

    C、循环结构

    D、计算结构

17、以下对 c 语言中共用体类型数据的叙述正确的是______。

    A、可以对共用体变量名直接赋值

    B、一个共用体变量中可以同时存放其所有成员

    C、一个共用体变量中不可以同时存放其所有成员

    D、共用体类型定义中不能出现结构体类型的成员

18、以下语句的输出结果是________。 int a=-1,b=4,k; k=(++a<0)&&!(b --<=0); printf("%d,%d,%d\n",k,a,b);

    A、1,0,4

    B、1,0,3

    C、0,0,3

    D、0,0,4

19、若有定义:int a[10],则对数组a元素的正确引用是________。

    A、a[10]

    B、a[3.5]

    C、a(5)

    D、a[0]

20、下列程序的输出结果是________。
#include <stdio.h>
struct abc
{
  int a, b, c, s;
} ;

main ()
{
  struct abc s[2] = { {1, 2, 3}, {4, 5, 6} };
  int t;
  t = s[0].a + s[1].b;
  printf ("%d\n", t);
}

    A、5

    B、6

    C、7

    D、8

二、填空题(共10题,每小题2 分,共 20分)

1、若a是int型变量,则计算下表达式a=25/3%3后,a的值为________。  

2、局部变量的作用域是从______的位置起,到函数结束止。  

3、表达式5%(-3)的值是________,表达式-5%(-3)的值是________。  

4、若有定义: int a[3][4]={{1,2},{0},{4,6,8,10}};
则初始化后,a[1][2] 得到的初值是【1】, a[2][1] 得到的初值是【2】。  

5、以下程序的输出结果是 ________ 。
#include <stdio.h>
main()
{
    int k=1,s=0;
    do
    {
        if((k%2)!=0) continue;
        s+=k;
        k++;
    }
    while(k>10);
    printf("s=%d\n",s);
}  

6、有以下程序
#include <stdio.h>
main()
{
    char a[20]="how are you?",b[20];
    scanf("%s",b);
     printf("%s %s\n",a,b);
}
程序运行时从键盘输入: how are you?<回车> 则输出结果为________。  

7、如果一个变量要在一个程序中的所有函数都能共享,则应该定义成为________。  

8、以下程序的功能是:借助指针变量找出数组元素中最大值所在的位置并输出该最大值。请在输出语句中填写代表最大值的输出项。
#include<stdio.h>
main() {
  int a〔10],*p,*s;
  for(p=a;p-a<10;p++)scanf("%d",p);
  for(p=a,s=a;p-a<10;p++)if(*p>*s)s=p;
  printf("max=%d\n",________);
}  

9、下面程序可求出矩阵两条对角线上的元素之和。请分析程序填空。
main()
{
    int a[3][3]={1,3,6,7,9,11,14,15,17},sum1=0,sum2=0,i,j;
    for(i=0;i<3;i++)for(j=0;j<3;j++)
    if(i==j) sum1+=a[i][j];
    for(i=0;i<3;i++)
    for( 【1】________;【2】________;j--)
    if(i+j==2) sum2+=a[i][j];
    printf("sum1=%d,sum2=%d\n",sum1,sum2);
}  

10、函数f 的形参a 为一个10×10 的二维数组, n 的值为5,以下程序段的运行结果为________。f(int a[][20], int n)
{
    int i,j,k;
    j=n/2+1;
    a[1][j]=1;
    i=1;
    for(k=2;k<=n*n;k++)
    {
        i=i-1;
        j=j+1;
        if(i<1&&j>n)
        {
            i=i+2;
            j=j-1;
        }
        else
        {
            if(i<1) i=n;
            if(j>n) j=1;
        }
        if(a[i][j]==0) a[i][j]=k;
        else
        {
            i=i+2;
            j=j-1;
            a[i][j]=k;
        }
    }
}
main()
{
    int a[20][20]={0},n,i,j;
    scanf("%d",&n);
    f(a,n);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)printf("%3d",a[i][j]);
        printf("\n");
    }
}    

三、编程题(共3题,共 40分)

1、编写程序: 古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可) (本题10分) 

2、编写程序:计算并输出100~300之间能被3和7整除的所有数,每8个换行 (本题14分) 

3、有以下类信息,使用结构体数组存储这些信息
struct class{
int id;//类编号
char info[20]; //类信息
}a[5]={{1,"aaa"},{2,"bbb"},{6,"ccc"},{7,"ddd"},{4,"eee"}};
从键盘输入一个类编号,如果有该类,删除该类信息,并输出删除
后剩余类信息;如果没有,全部输出。
【输出形式】分行输出数据,每行数据均使用一个空格分隔
【输入样例】1
【输出样例】每行数据均使用一个空格分隔,分行输出
2 bbb
6 ccc
7 ddd
4 eee (本题16分)   


参考答案

一、单项选择题

1、C

【解析】指针中存储的不是变量本身的值,而是变量的内存地址

2、C

【解析】以%mf或%mlf格式输出浮点数时,如果指定宽度大于实际数据宽度,则按指定宽度输出,且多余数补以空格;如果指定宽度小于实际数据宽度,浮点数的整数部分将以实际位数输出,小数部分按指定位数输出,且对数据做四舍五入处理。而输出整型数时,没有宽度限制的整数按原数输出;在宽度限制小于数的实际位数时,宽度说明无效,按数的实际位数输出。

3、A

4、C

5、A

【解析】在C语言中,一个字符常量代表 ASCII字符集中的一个小字符,在程序中用单引号把一个字符括起来作为字符常量,选项A)是一个转义字符常量,表示横向跳若干空格(代表“TAB”键);选项B)表示一个字符串;选项C)表示一个整型常量;选项D)表示一个标识符(代表一个变量),故本题答案为A)。

6、C

7、A

【解析】B 选项中,如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数;C 选项中, char2={
  ab 不合法,应为 char【2】={
  a,"}选项中,用字符串方式赋值比用字符逐个赋值要多占 1 个字节,在该选项中应为 3 个字节。因此 A 选项正确。

8、A

9、D

10、D

11、B

【解析】printf()是向控制台输出的函数

12、D

13、B

14、C

15、A

16、D

17、C

18、D

19、D

20、B

【解析】在本题中,s[0].a=1,s[1].b=5,所以输出结果为6。

二、填空题

1、2

2、定义

3、['2', '-2']

4、【1】0【2】6

5、[' s=0']

6、['howareyouhow']

7、全局变量

8、['*s']

9、【1】j=2 【2】j>=0

10、17 24 1 8 1523 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 9

三、编程题

1、#include<stdio.h>
 
int main()
{
    int f1=1,f2=1,i;
    for(i=1;i<=20;i++)
    {
        printf("%12d%12d",f1,f2);
        if(i%2==0) printf("\n");
        f1=f1+f2;
        f2=f1+f2;
    }
   
    return 0;
}

【解析】兔子的规律为数列1,1,2,3,5,8,13,21....,即下个月是上两个月之和(从第三个月开始)。

2、#include<stdio.h>
main()
{
    int i,n=0;
    for(i=100;i<=300;i++) if(i%3==0&&i%7==0)
    {
        printf("%d\t",i);
        n++;
        if(n%8==0) printf("\n");
    }
}

3、#include<stdio.h>
 
 
struct class
{
    int id;//类编号
    char info[20]; //类信息
}a[5]={{1,"aaa"},{2,"bbb"},{6,"ccc"},{7,"ddd"},{4,"eee"}};
 
 
int main(void)
{
   int i, j, x;
   scanf("%d", &x);
   for(i = 0; i < 5; i++)
   {
       if(a[i].id==x)
        break;
   }
   for(j = i; j < 4; j++)
   {
       a[j] = a[j + 1];
   }
   for(j = 0; j < 4; j++)
   {
       printf("%d %s\n", a[j].id, a[j].info);
   }
}


 2023年计算机C语言专升本测试卷(四)

一、单项选择题(共20题,每小题2 分,共 40分)

1、对于条件表达式(k)(i++):(i--)来说,其中的表达式k等价于( )

    A、k==0

    B、k==1

    C、k!=0

    D、k!=1

2、已知三个用不同数制表示的整数a=00111101b,b=3ch,c=64d,则能成立的比较关系式______。

    A、A<B<C

    B、B<C<A

    C、B<A<C

    D、C<B<A

3、下列程序的运行结果是________。
main()
{
    int a=-5,b=1,c=1;
    int x=0,y=2,z=0;
    if(c>0)x=x+ y;
    if(a<=0)
    {
        if(b>0) if(c<=0)y=x-y;
    }
    else if(c>0)y=x-y;
    else z=y;
    printf("%d,%d,%d\n",x,y,z);
}

    A、2,2,0

    B、2,2,2

    C、0,2,0

    D、2,0,2

4、执行下面程序片段的结果是______。int x=23;
do
{
    printf("%2d",x--);
}
while(!x);

    A、打印出321

    B、打印出23

    C、不打印任何内容

    D、陷入死循环

5、关于c语言中的全局变量,下列描述中正确的是________。

    A、全局变量的作用域一定比局部变量的作用域范围大

    B、静态类别变量的生存周期贯穿于整个程序的运行期间

    C、函数的形参都属于全局变量

    D、未在定义语句中赋初值的auto变量和static变量的初值都是随机值

6、以下四个程序中,完全正确的是______。

    A、#include<stdio.h>
main();
  /*programming*/
  printf("programming! \n");

    B、#include<stdio.h>
main()
  /*/programming/*/
  printf("programming! \n");

    C、#include<stdio.h>
main()
  /*/*programming*/*/
  printf("programming! \n");

    D、include<stdio.h>
main()
  /*programming*/
  printf("programming! \n");

7、若有以下定义和语句,且 0 ≤ i<10 则对数组元素的错误引用是______。 int a[10]= { 1,2,3,4,5,6,7,8,9,10 },*p,i; p=a;

    A、*(a+i)

    B、a[p-a]

    C、p+i

    D、*(&a[i])

8、下列运算符中,属于关系运算符的是________。

    A、<<

    B、>=

    C、=

    D、!

9、下面描述正确的是________。

    A、两个字符串包含的字符个数相同时,才能比较字符串

    B、字符个数多的字符串比字符个数少的字符串大

    C、字符串"STOP" 与"STOP■"相等

    D、字符串"That" 小于字符串"The"

10、以下关于数组的描述正确的是______。

    A、数组的大小是固定的,但可以有不同的类型的数组元素。

    B、数组的大小是可变的,但所有数组元素的类型必须相同。

    C、数组的大小是固定的,但所有数组元素的类型必须相同。

    D、数组的大小是可变的,但可以有不同的类型的数组元素。

11、以下程序运行后的输出结果是
#include <stdio.h>
void fun(int a,int b) {
  int t;
  t=a;
  a=b;
  b=t;
}
main( ) {
  int c[10]=1,2,3,4,5,6,7,8,9,0,i;
  for(i=0;i<10;i+=2) fun(c[i],c[i+1]);
  for(i=0;i<10;i++) prinff("%d,",c[i]);
  printf("\n");
}

    A、1,2,3,4,5,6,7,8,9,0

    B、2,1,4,3,6,5,8,7,0,9

    C、0,9,8,7,6,5,4,3,2,1

    D、0,1,2,3,4,5,6,7,8,9

12、下列关于自动类型转换的说法中,正确的是________。

    A、int类型数据可以被自动转换为char类型数据

    B、char类型数据可以被自动转换为int类型数据

    C、boolean类型数据不可做自动类型转换,但是可以做强制类型转换

    D、long类型数据可以被自动转换为short类型数据

13、设int*p[4]; 则标识符p是________。

    A、整型数组名

    B、指针数组名

    C、指针函数名

    D、指向整型变量的指针

14、设有如下定义:
struct sk
{
    int n;
    float x;
} data,*p;
若要使p指向data中的n域,正确的赋值语句是________。

    A、p=&datn;

    B、*p=datn;

    C、p=(struct sk*)&datn;

    D、p=(struct sk*)datn;

15、有以下程序:
main()
{
    int k=-3: if(k<=0)printf("****\n") else printf("&&&&\n");
}
程序的输出结果是________。

    A、输出####

    B、输出&&&&

    C、输出####&&&&

    D、有语法错不能通过编译

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、有以下程序
struct stu
{
    char num[10];
    float score[3];
}
;
main( )
{
    struct stu s[3]={{"20021",90,95,85},{"20022",95,80,75},{"20023",100,95,90}},*p;
    int i;
    float sum=0;
    p=s+1;
    for(i=0;i<3;i++)sum=sum+p->score[i];
    printf("%.3f\n",sum);
}
程序运行后的输出结果是___________。

    A、250.000

    B、250

    C、270.000

    D、270

18、下面程序的输出结果为________。
main()
{
    int a,b;
    b=(a=3*5,a*4,a*5);
    printf(""%d"",b);
}

    A、60

    B、75

    C、65

    D、无确定值

19、有以下程序:
#include <stdio.h>
#include <string.h>
main()
{
    char str[][20]={"one*world", "one*dream]"}, *p=str[1];
    printf("%d, ", strlen(p));
    printf("%s\n", p);
}
程序运行后的输出结果是______。

    A、10, One*Dream!

    B、9, One*Dream!

    C、9, One*World

    D、10, One*World

20、若有下面的说明和定义,则sizeof(struct aa)的值是______。
struct aa
{
    int r1;
    double r2;
    float r3;
}
maya;

    A、20

    B、18

    C、14

    D、16

二、填空题(共10题,每小题2 分,共 20分)

1、&& 0 || 2的值为________。  

2、在c语言中除了使用c提供的标准类型名(如int、char等)外,还可以用_________声明新的类型名来代替已有的类型名。  

3、执行下面程序段后, k 值是________。
k=1;
n=263;
do
{
    k*=n%10;
    n/=10;
}
while(n);  

4、在c语言中,用转义字符 \\ 表示______________。答题提示:双引号/单引号/反斜线/横向跳格/回车换行  

5、结构化程序设计的3种基本结构是:顺序结构、_______结构、循环结构,这三种基本结构构成了复杂的c语言程序。  

6、以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串:abc123edf456gh,执行程序后输出:123456。请填空。
#include <stdio.h>
#include <ctype.h>
main()
{
    char s[80], d[80];
    int i,j;
    gets(s);
    for(i=j=0;s[i]!='\0';i++) if( ________ )
    {
        d[j]=s[i];
        j++;
    }
    d[j]='\0';
    puts(d);
}  

7、使文件指针重新定位到文件读写的首地址的函数是________。  

8、函数strlen("1234\0xy")的值为:______。  

9、下面程序的运行结果是________。
#include<stdio.h>
main()
{
    int i,x,y;
    i=x=y=0;
    do
    {
        ++i;
        if(i%2!=0)
        {
            x=x+i;
            i++;
        }
        y=y+i++;
    }
    while(i<=7);
    printf("x=%d,y=%d\n",x,y);
}  

10、下面程序的输出结果是:
#include <stdio.h>
void add(int *p, int n)
{
    int *pend = p + n;
    for( ; p<pend; p++) *p += 10;
}
void main( )
{
    int a[5]={1,2,3,4,5}, *q = a;
    add(q, 5);
    for(q=a; q < a+5; q++) printf("%4d", *q);
}    

三、编程题(共3题,共 40分)

1、编写程序:求两个正整数[m,n]之间所有既能被3整除也能被7整除的整数之和例如:m=1,n=1000,则程序的输出结果应为:_________________。 (本题10分) 

2、从键盘输入10个数,统计非负数的个数,并计算非负数的和。 (本题14分) 

3、定义⼀个结构体student,存储学⽣的学号、名字、性别和年龄,读⼊每个学⽣的所有信息,保存在结构体中,并输出。结构体student的定义如下:
struct student {
    int num;
    char name[20];
    char sex;
    int age;
};
本题要求使⽤指向结构体数组进⾏输⼊和输出。
输⼊:
第⼀⾏有⼀个整数n,表⽰以下有n个学⽣的信息将会输⼊。保证n不⼤于20。
以后的n⾏中,每⼀⾏包含对应学⽣的学号、名字、性别和年龄,⽤空格隔开。保证每⼀个⼈名都不包含空格且长度不超过15,性别⽤M和F两个字符来表⽰。
输出:
有n⾏,每⾏输出⼀个学⽣的学号、名字、性别和年龄,⽤空格隔开。
请注意⾏尾输出换⾏。

样例输⼊:
3
10101 LiLin M 18
10102 ZhangFun M 19
10104 WangMin F 20

样例输出:
10101 LiLin M 18
10102 ZhangFun M 19
10104 WangMin F 20 (本题16分)   


参考答案

一、单项选择题

1、C

【解析】条件表达式e1 e2:e3的含义是e1为真时,取表达式e2的值,否则取表达式e3的值,“为真”的意思就是不等于0。

2、C

【解析】把数字都转换为一种格式。

3、A

【解析】本题考查if else语句的使用。 先判断第1个if语句,因为c=1>0,所以x=x+ y=0+2=2。第1个if语句,因为a=-5<0,所以进入下列的复合语句。经判断发现,复合语句中第2个if语句的条件均不满足,不执行任何语句退出,在这个过程中y和z的值没有发生变化。

4、B

5、B

【解析】选项1不对:如果程序中只有一个主函数,则在整个程序运行中,局部变量都在起作用;
选项3不对:除了C++的引用类型参数,所有函数的形参都是局部变量;
选项4不对:static变量定义时就存储地全局区,初始化为0;

6、B

【解析】选项A中的main()后而不能直接用分号。选项C中的注释符使且不正确,编译器会把从第一个“/*到第一个*/”之间的当作注释,最后一个“*/”会被作为程序代码去编译。选项D中的include前要加上#表示是预定义语句。

7、C

8、B

9、D

10、C

11、A

【解析】fun函数无值返回。
main函数调用时数组元素作实参,形参的改变不会影响实参。因此,循环调用结束后,C数组没有任何改变。

12、B

【解析】根据自动类型转换的优先级顺序,int类型的数据不可以自动转换为char类型数据,long类型也不可以自动转换为short类型,boolean的值只有true和false两个值,不能做类型转换,包括自动和强制。

13、B

【解析】指针数组的定义格式为:数据类型*指针数组名[长度],…其中,指针数组名是标识符,前面必须有“*”号,故本题选B。

14、C

【解析】本题主要考查了结构体变量引用成员数据的方法,主要有以下几种:结构体变量名,成员名或结构体指针->,成员名的方法来引用结构体成员。

15、D

16、C

17、A

18、B

19、A

【解析】p是指向二维字符数组第二行One*Dream!的数组指针,所以长度是10,打印输出的也是该字符串。

20、D

二、填空题

1、['1 (或真)']

2、typedef

3、36

4、反斜线

5、选择#分支

6、["s[i]>='0' && s[i]<='9' 或 isdigit(s[i]) 或 s[i]>=48 && s[i]<=57 或 s[i]<='9' && s[i]>='0' 或 '9'>=s[i] && '0'<=s[i] 或 '0'<=s[i] && '9'>=s[i] 或 s[i]<=57 && s[i]>=48 或 57>=s[i] && 48<=s[i] 或 48<=s[i] && 57>=s[i]"]

7、rewind

8、9

9、x=1,y=20

10、11 12 13 14 15

三、编程题

1、#include <math.h>
#include <conio.h>
#include <stdio.h>
long int fun(int x ,int y )
{
    int i,t;
    long int s=0;
    if( x>y )
    {
        t=x;
        x=y;
        y=t;
    }
    for (i=x;i<=y;i++)
    if ( i%3==0 && i%7==0 )
    s += i;
    ____(1)____;
}
main()
{
    int m=1,n=1000;
    printf("sum is : %ld", ____(2)____ );
}

【解析】return(s);
printf("sumis:%ld",fun(m,n));
sum is : 23688

2、#include
void main()
{   
    int i,n=0,sum=0;
    int a[10];
    printf(“请输入10个数:”);
    for(i=0;i<10;i++)
    scanf(“%d”,&a[i]);
    for(i=0;i<10;i++)
    if(a[i]>=0)
    {
        sum=sum+a[i];
        n++;
    }
    printf("非负个数是%d,sum=%d\n",n,sum);
}

3、#include<stdio.h>
struct student {
int num;
char name[20];
char sex;
int age;
} stu[20],*p;
int main(){
    int n;
    scanf("%d",&n);
    p = stu;
    for(int i =0; i < n; i++) {
        scanf("%d %s %c %d",&p->num, p->name,&p->sex,&p->age);
        printf("%d %s %c %d\n", p->num, p->name, p->sex, p->age);
    }
    return0;
}


 2023年计算机C语言专升本测试卷(五)

一、单项选择题(共20题,每小题2 分,共 40分)

1、若有说明和语句 int a=5; a++;此处表达式a++的值是________。

    A、7

    B、6

    C、5

    D、4

2、与十六进制数ab等值的二进数是________。

    A、10101010

    B、10101011

    C、10111010

    D、10111011

3、if语句的基本形式是:if(表达式)语句,以下关于"表达式"值的叙述中正确的是______。

    A、可以是任意合法的数值

    B、必须是整数值

    C、必须是正数

    D、必须是逻辑值

4、以下说法正确的是________。

    A、结构化程序有三种基本结构,分别是循环结构选择结构和顺序结构

    B、只有顺序结构的 C 语言源程序才能由计算机正常执行

    C、循环结构和分支结构均无法用 N-S 流程图描述

    D、循环结构中不能包含分支结构,分支结构中也不能包含循环结构

5、c 语言中,若未说明函数的类型,则系统默认该函数的类型是 __________ 。

    A、float 型

    B、long 型

    C、int 型

    D、double 型

6、该语句打印结果为(每个d后都有空格)printf("%d ", printf("%d ", printf("%d ", 43)));

    A、4321

    B、43 43 43

    C、43 3 2

    D、4 3 2 1

7、下面的C程序完成的功能是________。
#define SIZE 5
void func(int data[SIZE]);
main()
{
    int i,buf[SIZE];
    printf(""Please input %d numbers:"",SIZE);
    for(i=0;idata[j+1])
    {
        d=data[j];
        data[j]=data[j+1];
        data[j+1]=d;
    }
}

    A、对一维数组降序排序

    B、对一维数组升序排序

    C、对一维数组逆向排序

    D、对一维数组顺序排序

8、下列关于指针变量的描述,不正确的是________。

    A、在没有对指针变量赋值时,指针变量的值是不确定的

    B、同类指针类型可以进行相减操作

    C、在使用没有赋值的指针变量时,不会出现任何问题

    D、可以通过指针变量来取得它指向的变量值

9、设有定义:char s[81]; int i=0;  以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是________。

    A、gets(s);

    B、while((s[i++]=getchar())!='\n’);s[i]='\0’;

    C、scanf(“%s”,s);

    D、do{ scanf(“%c”,&s[i]); } while(s[i++]!='\n’); s[i]='\0;

10、有如下说明: int a[10]=1,2,3,4,5,6,7,8,9,10,*p=a; 则数值为9的表达式是________。

    A、*p+9

    B、*(p+8)

    C、*p+=9

    D、p+8

11、以下叙述中错误的是________。

    A、C程序必须由一个或一个以上的函数组成

    B、函数调用可以作为一个独立的语句存在

    C、若函数有返回值,必须通过咖语句返回

    D、函数形参的值也可以传回给对应的实参

12、下列关于c语言的叙述错误的是________。

    A、英文字母大小写不加以区分

    B、不同类型的变量可以出现在同一个表达式中

    C、在赋值表达式中赋值号两边的类型可以不同

    D、某些运算符在不同的场合可以有不同的含义

13、在函数声明中,下面哪项是不必要的________。

    A、函数参数的类型和参数名

    B、函数名

    C、函数的类型

    D、函数体

14、有以下程序
#include <studio.h>
#include <string.h>
struct a
{
    int a;
    char b[10];
    double c;
};
void f(struct a t);
main()
{
    struct a a={1001,"zhangda",1098.0};
    f(a);
    pringt("%d,%s,%6.1f\n",a.a,a.b,a.c);
}
void f(struct a t)
{
    t.a=1002;
    strcpy(t.b,"changrong");
    t.c=1202.0;
}
程序运行后的输出结果是________。

    A、1001,ZhangDa,1098.0

    B、1002,ChangRong,1202.0

    C、1001,ChangRong,1098.0

    D、1002,ZhangDa,1202.0

15、有以下程序段
#include<stdio.h>
int a,b,c;
a=10;
b=50;
c=30;
if(a>b)a=b,b=c;
c=a;
printf("a=%d b=%d c=%d\n",a,b,c);
程序的输出结果是______。

    A、a=10 b=50 c=10

    B、a=10 b=50 c=30

    C、a=10 b=30 c=10

    D、a=50 b=30 c=50

16、在下列选项中,没有构成死循环的程序段是________。

    A、int i=100;
while (1)
{
  i=i%100+1;
if (i>100) break;
}

    B、for( ; ; );

    C、int k=1000;
do {++k;} while (k>=1000);

    D、int s=36;
while (s) --s;

17、有以下程序
struct stu
{
    char name[10];
    int num;
    int score;
}
;
main( )
{
    struct stu s[5]={{"yangsan",20041,703} , {"lisiguo",20042,580 , {"wangyin",20043,680}, {"sundan",20044,550}, {"penghua",20045,537}},*p[5],*t;
    int i,j;
    for(i=0;i<5;i++) p[i]=&s[i];
    for(i=0;i<4;i++) for(j=i+1;j<5;j++) if(p[i]->score>p[j]->score)
    {
        t=p[i];
        p[i]=p[j];
        p[j]=t;
    }
    printf("5d %d\n",s[1].score,p[1]->score);
}
执行后输出结果是________。

    A、550  550

    B、680  680

    C、580  550

    D、580  680

18、下列程序执行后的输出结果是________。
#define MA(x) x*(x-1)
main()
{
    int a=1,b=2;
    printf(""%d \n"",MA(1+a+b));
}

    A、6

    B、8

    C、10

    D、12

19、设有以下语句,其中不是对a数组元素的正确引用的是:______(其中0≤i<6)int a[6]= {11,22,33,44,55,66 },*m=a;

    A、&(*(a+i) )

    B、*(&a[i])

    C、m[i]

    D、a[i]

20、设有下面的定义:
struct st
{
    int a;
    float b;
} d;
int*p;
要使p指向结构变量d中的a成员,正确的赋值语句是________。

    A、*p=d.a;

    B、p=&a;

    C、p=d.a;

    D、p=&d.a;

二、填空题(共10题,每小题2 分,共 20分)

1、若要定义一个单精度实型变量f,则应该使用的定义语句为________。  

2、int a = 0; a+=(a=8); 求a的最后结果  

3、在c语言中,标识符是由( )、数字、下划线组成的。  

4、c语言标识符的第一个字符必须为下划线或者________。  

5、c语言程序的三种基本结构是顺序结构、选择结构和________。  

6、以下程序运行结果是________。
#include <stdio.h>
void main()
{
    int x,y=1;
    if(y!=0) x=5;
    printf("\t%d\n" ,x);
    if(y==0) x=4;
    else x=5;
    printf("\t%d\n" ,x);
    x=1;
    if(y<0) if(y>0) x=4;
    else x=5;
    printf("\t%d\n" ,x);
}  

7、宏定义必须写在______之外  

8、指针是存放______的变量。  

9、以下程序运行的结果为____________。
#include <stdio.h>
int d = 1;
fun(int p)
{
    int d = 5;
    d += p++;
    printf( "%d,", d);
}
void main()
{
    int a = 3;
    fun(a);
    d += a++;
    printf( "%d\n", d);
}  

10、以下程序运行后的输出结果是 ________ 。
main()
{
    int i,m=0,n=0,k=0;
    for(i=9; i<=11;i++) switch(i/10)
    {
        case 0: m++;
        n++;
        break;
        case 10: n++;
        break;
        default: k++;
        n++;
    }
    printf("%d %d %d\n",m,n,k);
}    

三、编程题(共3题,共 40分)

1、编写程序: 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 (本题10分) 

2、编写程序:写一个函数,求一个字符串的长度,在 main 函数中输入字符串,并输出其长度。 (本题14分) 

3、有以下职工信息,使用结构体数组存储这些信息,从键盘输入5条记录,
之后在屏幕上依次输出职工信息。
struct stuff{
int stuffID;//职工编号
float bonus; //工资
};
【输入形式】5条职工信息,分行输入,数据间空格隔开
【输出形式】分行输出5条职工信息和最低工资,每行数据均使用1个空格分隔
【输入样例】
1001 8540.59
1002 6345.45
1003 3500.65
1004 4898.86
1005 5345.80
【输出样例】每行数据均使用一个空格分割,分五行输出
1001 8540.59
1002 6345.45
1003 3500.65
1004 4898.86
1005 5345.80
minBonus = 3500.65 (本题16分)   


参考答案

一、单项选择题

1、C

2、B

【解析】本题考查十六进制与二进制的转化,每位十六进制数正好对应4位二进制数,不足4位的高应补0。本题中数A对应1010,数B对应l0ll,故转换过程为AB→1010 1011。

3、A

【解析】表达式”的值类型可以是合法的数值,但是都分为两类,0是假,非0是真。

4、A

【解析】结构化程序有三种基本结构循环结构、选择结构和顺序结构,三种结构的 C 语言源程序都可以由计算机正常执行。N-S 流程图可以描述这三种结构这三种结构可以相互嵌套。本题答案为 A 选项

5、C

6、C

7、B

8、C

【解析】没有赋值的指针变量,可能指向任何地方,如果指向系统,那么使用该指针可能导致系统崩溃。

9、C

10、B

【解析】当指针指向数组的首地址时,数组内各元素地址为p+n(数组下标从0开始到n-1结束),n为数组下标,取数组元素值为*(p+n)。

11、D

【解析】本题主要考查函数的概念。C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。由此可知选项D不正确,故应该选择D。

12、A

13、D

【解析】本题考核函数的原型声明格式。解析此题时,要注意函数定义和函数声明的区别。
  ①C中每一个函数的定义都是由4个部分组成的,即函数类型、函数名、函数参数表和函数体。
  ②函数的声明是为了消除函数定义的位置影响。不管函数是在何处定义的,只要在调用前进行函数的声明,就可保证函数调用的合法性。
  ③函数原型的说明格式为:
  <类型><函数名>(<形参表>);

14、A

15、A

【解析】本题中a>b的条件不满足,因此不执行逗号表达式“a=b,b=c;”的操作,而是执行“c=a”的操作,即c的值为10。故本题答案为A。

16、D

17、C

18、B

19、A

20、D

【解析】本题主要考查按结构数组元素方式引用结构成员。结构体变量的成员引用方法有3种:①结构体变量名,成员名;②指针变量名->成员名;③(*指针变量名).成员名。因为p是指针变量,所以应该将地址值赋给p。

二、填空题

1、float f

2、16

3、英文字母#字母

4、字母

5、['循环结构']

6、5|5,1

【解析】上程序中第三个if语句有嵌套,前两个if语句没有嵌套。前两个if语句根据y=1便可得知输出结果均为5;最后一个if语句,根据条件y<0便知不成立,后续语句无法执行,只好输出前一赋值语句x=1的值。

7、函数

8、地址

9、8,4

10、['1 3 2']

三、编程题

1、#include<stdio.h>
int main()
{
    int score;
    char grade;
    printf("请输入分数: ");
    scanf("%d",&score);
    grade=(score>=90)?'A':((score>=60)?'B':'C');
    printf("%c\n",grade);
    return 0;
}

2、#include <stdio.h>
#include <stdlib.h>
int main()
{
    int len;
    char str[20];
    printf("请输入字符串:\n");
    scanf("%s",str);
    len=length(str);
    printf("字符串有 %d 个字符。",len);
}
//求字符串长度 
int length(char *s) 

    int i=0;
    while(*s!='\0')
    { 
        i++;  
        s++; 
    } 
    return i; 
}

3、#include <stdio.h>
 
struct stuff
{
    int stuffID;
    float bonus;
}a[5];
 
int main()
{
    int i;
    float min;
    for(i = 0; i < 5; i++)
    scanf("%d %f", &a[i].stuffID, &a[i].bonus);
    min = a[0].bonus;
    for(i = 1; i < 5; i++)
    {
 
        if(min >= a[i].bonus)
        min = a[i].bonus;
    }
    for(i = 0; i < 5; i++)
    printf("%d %.2f\n", a[i].stuffID, a[i].bonus);
 
    printf("minBonus = %.2f", min);
 
}


2023年计算机C语言专升本测试卷(六)

一、单项选择题(共20题,每小题2 分,共 40分)

1、如下陈述中正确的是________。

    A、串“ABC”和串“ABC”不相等

    B、串的长度必须大于零

    C、串中元素只能是字母

    D、空串就是空格串

2、设有定义:int x=2; ,以下表达式中,值不为6的是________。

    A、x*=x+1

    B、x++,2*x

    C、x*=(1+x)

    D、2*x,x+=2

3、下列说法中不正确的是________。

    A、switch语句功能可以由if-else语句实现

    B、若用于比较的数据类型为double,则不能用switch语句来实现

    C、if-else语句的执行效率总是比switch语句高

    D、case子句可以有多个语句,并且不需要用大括号””括起来

4、有如下程序
#define N 2
#define M N+1
#define NUM 2*M+1
main()
{
    int i;
    for(i=1;i<=NUM;i++) printf("%d\n"i)
}
该程序中的for循环执行的次数是______。

    A、5

    B、6

    C、7

    D、8

5、若有以下说明和语句: int c[4][5],(*p)[5]; p=c; 能够正确引用c数组元素的是________。

    A、p+l

    B、*(p+3)

    C、*(p+1)+3

    D、*(p[0]+2)

6、下述程序的输出结果是________。
#include<stdio.h>
void main() {
  char a=1,b=2;
  char c=a^b<<2;
  printf("\n%d",c);
}

    A、9

    B、10

    C、12

    D、2

7、下面程序段的运行结果是 char a[ ]="lanuage",*p; p=a; while(*p!='u') printf("%c",*p-32); p++;

    A、LANGUAGE

    B、language

    C、LAN

    D、langUAGE

8、以下叙述中错误的______。

    A、C 程序在运行过程中所有计算都以二进制方式进行

    B、C 程序在运行过程中所有计算都以十进制方式进行

    C、所有 C 程序都需要编译链接无误后才能运行

    D、C 程序中整型变量只能存放整数,实型变量只能存放浮点数

9、下面不能正确进行字符串赋值操作的语句是________。

    A、char s[5]={"ABCDE"};

    B、char s[5]={'A','B','C','D','E'};

    C、char *s;s="ABCDEF";

    D、char *s; scanf("%s",s);

10、已知3个字符为:a、z和8,按它们的ascii码值升序排序,结果是________。

    A、8,a,Z

    B、a,8,Z

    C、a,Z,8

    D、8,Z,a

11、以下叙述中不正确的是________。

    A、在不同的函数中可以使用相同名字的变量

    B、函数中的形式参数是局部变量

    C、在一个函数内定义的变量只在本函数范围内有效

    D、在一个函数内的复合语句中定义的变量在本函数范围内有效

12、c语言中,int型数据在内存中的存储形式是________。

    A、ASCⅡ码

    B、补码

    C、反码

    D、原码

13、下列程序的运行结果是________。
#include<stdio.h>
void sub(int*s,int*y) {
  static int m=4;
  *y=s[0];
  m++;
}

void main() {
  int a[]=1,2,3,4,5,k;
  int x;
  printf("\n");
  for(k=0;k<=4;k++)
  {
    sub(a,&x);
    printf("%d,",x);
  }
}

    A、1,1,1,1,1,

    B、1,2,3,4,5,

    C、0,0,0,0,0,

    D、4,4,4,4,4,

14、若有下列说明和语句,则对结构体变量st中成员i的引用方式不正确的是________。
struct stu
{
    int i;
    int name;
} st,*p;
p=&st;

    A、si

    B、*i

    C、(*.i

    D、p->i

15、以下程序结果为:______。
void add( )
{
    static int x=3;
    x++;
    printf("%d",x);
}
main( )
{
    int i;
    for(i=0;i<3;i++)add( );
}

    A、456

    B、444

    C、555

    D、345

16、有以下程序
main()
{
    int a=15,b=21,m=0;
    switch(a%3)
    {
        case 0:m++;
        break;
        case 1:m++;
        switch(b%2)
        {
            default:m++;
            case 0:m++;
            break;
        }
    }
    printf("%d\n",m);
}
程序运行后的输出结果是______。

    A、1

    B、2

    C、3

    D、4

17、有如下定义
struct person
{
    char name[9];
    int age;
}
;
struct person class[10] = {"john",17, "paul",19, "mary",18, "adam",16};
根据上述定义,能输出字母a的语句是______。

    A、printf("%c\n",class[3].name);

    B、printf("%c\n",class[3].name[0]);

    C、printf("%c\n",class[4].name[1]);

    D、printf("%c\n",class[4].name[0]);

18、请读程序 :
#include <stdio.h>
 f(int b[ ], int n)
{
    int i, r=1;
    for(i=0; i<=n; i++) r=r*b[i];
    return r;
}
void main()
{
    int x, a[]={2,3,4,5,6,7,8,9} ;
    x=f(a, 3);
    printf("%d\n",x);
}
上面程序的输出结果是 __________.

    A、720

    B、120

    C、24

    D、6

19、下列字符数组初始化语句中,不正确的是________。

    A、char c[]='goodmorning';

    B、char e[20]="goodmorning":

    C、char c[]=('a','b','c','d');

    D、char c[]={”ffgoodmorning”);

20、有以下定义和语句:
struct students {
  int num;
  char name[20];
  char c;
  struct {
    int grade1;
    int grade2;
  } s;
};
struct students w,*pw;
*pw=w;
下列赋值语句不正确的是________。

    A、num=1002;

    B、w.grade1=85;

    C、pw->num=1002;

    D、w.s.grade2=85;

二、填空题(共10题,每小题2 分,共 20分)

1、设m=0,n=2,则表达式"!(m+n)"的值是_____________。  

2、设int a=5,b=6;
则表达式(++a==b--)?++a:--b的值是________。  

3、共用体类型变量的定义关键字是________。  

4、c语句分为______大类。  

5、执行下列程序段后,输出的a的值是_____________。
main()
{
    int a = 1;
    switch(a)
    {
        case 0: a--;
        break;
        case 1: a++;
        break;
        case 2: a=a+5;
        break
    }
    printf("%d",a);
}  

6、float f=3.1415927;
printf("%f,%5.4f,%3.3f",f,f,f);
则程序的输出结果是________。  

7、有如下函数头: int max(int i,int j),则此函数有______个参数。  

8、有函数调用fun1(x+y, (y,z), 10, fun((x,y-1)));
函数fun1有【1】个参数。  

9、下列程序段的运行结果是_____。#define MAX(x , y) x>y? x : y
main( )
{
    int a , b , max;
    A=5, b=6;
    Max=MAX(a,b);
    printf("max=%d\n",max);
}  

10、以下程序用以删除字符串中的所有的空格,请填空。
#include<stdio.h>
main()
{
    char s[100]={"our .tercher teach c language!"};
    int i,j;
    for( i=j=0;s[i]!='\0’;i++) if(s[i]!=' ’)
    {
        s[j]=s[i];
        j++;
    }
    s[j]=________ ;
    printf("%s\n",s);
}    

三、编程题(共3题,共 40分)

1、编写程序:输出一维数组a中的最小值及其下标 (本题10分) 

2、将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 (本题14分) 

3、题⽬描述,定义⼀个包括年、⽉、⽇的结构体变量,读⼊年、⽉、⽇,计算该⽇在当年中是第⼏天。注意闰年问题。
输⼊
三个整数,分别表⽰年、⽉、⽇。保证输⼊是实际存在的⽇期,且年份在1000⾄3000之间(包含1000和3000)。输出
输出该⽇期是⼀年中的第⼏天。
请注意⾏尾输出换⾏。
样例输⼊
2012 12 21
样例输出
356 (本题16分)   


参考答案

一、单项选择题

1、A

【解析】两个串相等且仅当两个串长度相等,并且各对应位置的字符都相等,零个字符的串称为空串,空格串是由一个或多个空格组成的串,它的长度为串中空格的个数。

2、D

3、C

【解析】并不是所有的if-else语句的执行效率都高于switch语句,在一些特定的情况下, switch语句可以比较简炼,同时容易阅读,因此,选项C的描述是错误的。

4、B

5、D

【解析】本题中定义了一个二维数组c和一个指针数组p,并初始化让p指向c。显然此时p中的各元素为地址,选项A中p+1,此时其中的1代表的长度是整个二维数组c的长度,故p+l将让p指向c数组后面的元素,不能引用c数组中的成员,故选项A错误;同理选项B和选项C都不正确,选项D中p[0]指的是指针数组中的第一个元素的地址即c的首地址,此时的1的长度代表的是数组C中一行的长度,故p[0]+2代表的是第3行的首地址,而*(p[0]+2)将代表第3行的第一个元素的地址,所以,4个选项中选项D符合题意。

6、A

【解析】本题主要考查C语言最基本的算术运算“左移(<<)”和“异或(^)”。
  “左移”或“右移”运算表达式的一般形式为:x<<n或x>>n。“左移(<<)”运算的规则是将x的二进制位全部向左移动n位,将左边移动的高位舍弃,右边空出的位补0:“右移(>>)”运算的规则是将x的二进制位全部向右移动n位,将右边移动的高位舍弃,左边高位空出要根据原来符号位的情况进行补充,对无符号数则补0,对有符号数,若为正数则补0,若为负数则补1。
  “异或”运算是当两个运算量的相应位相同时结果为0,不相同时结果为1。b=2的二进制为(00000010)b<<2后为00001000,a=1的二进制为00000001,所以c=a^b<<2为00001001,转化为十进制后为9。

7、C

【解析】本段程序的作用是输出字符串“lanuage”中字母u之前的字符,并将其转化为大写字母。
  注意:如果一个字符数组用来作为字符串使用,那么在定义该字符数组时,数组的大小就应该比它将要实际存放的最长字符多一个元素,以存放,\0,。

8、B

9、A

10、D

【解析】在ASCII码袁中,根据码值由小到大的排列顺序是:控制符、数字符、大写英文字母、小写英文字母。

11、D

12、B

【解析】C语言中int型数据是以补码形式存放的,字符型数据是以ASCⅡ码形式存放的。

13、A

【解析】本题中sub(int*s,int*y)函数的参数是两个指针型变量,在函数体内将数组s的第一个元素赋给y。主程序内,首先定义了一维数组并赋初值,然后通过for循环,5次调用sub(a,&x)函数,每一次调用都是将数组a的第一个元素1赋给x,并输出。

14、B

【解析】本题主要考查结构指针:p=&st,访问结构体的成员,可以通过结构变量访问,即st.i,也可以用等价的指针形式即(*p).i和 p->i。

15、A

16、A

17、B

18、B

19、A

20、B

【解析】本题主要考查的是结构体变量的嵌套定义,也就是说一个结构体变量也可以是一个结构体。在本题中student这个结构体中包含了结构体s。所以对结构体变量w中grade1成员的引用是w.s.grade1或w->s->grade1。

二、填空题

1、0

2、7

3、union

4、5#五

5、2

6、3.141593,3.1416,3.142

7、2

8、4

9、max=6

10、["'\\0'或者填写0"]

三、编程题

1、#include <stdio.h>
main( )
{
    int i,p=0,a[10];
    for(i=0;i<10;i++)
    scanf("%d",&a[i]);
    for(i=1;i<10;i++) if(a[i]<a[p]) 
    p=i;
    printf("%d,%d\n",a[p],p);
}

2、程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
程序源代码:
main()
{
    int n,i;
    printf("\nplease input a number:\n");
    scanf("%d",&n);
    printf("%d=",n);
    for(i=2;i<=n;i++)
    {
        while(n!=i)
        {
            if(n%i==0)
            { printf("%d*",i);
                n=n/i;
            }
            else
            break;
        }
    }
    printf("%d",n);
}

3、#include<stdio.h>
int main(){
    struct dd{
        int y,m,d;
    }
    date;
    int i,j,k;
    scanf("%d%d%d",&date.y,&date.m,&date.d);
    k=date.d;
    if(date.m>1) k+=31;
    if(date.m>2) k+=28;
    if(date.m>3) k+=31;
    if(date.m>4) k+=30;
    if(date.m>5) k+=31;
    if(date.m>6) k+=30;
    if(date.m>7) k+=31;
    if(date.m>8) k+=31;
    if(date.m>9) k+=30;
    if(date.m>10) k+=31;
    if(date.m>11) k+=30;
    if(date.y%4==0&&date.y%100!=0||date.y%400==0) k++;
    printf("%d",k);
}


 2023年计算机C语言专升本测试卷(七)

一、单项选择题(共20题,每小题2 分,共 40分)

1、下列选项中不是字符常量的是________。

    A、'\v'

    B、'\x2a'

    C、'a'

    D、"\0"

2、已知整型变量a=13和b=6,则a&b和a^b的值分别是________。

    A、4 13

    B、4 11

    C、1 11

    D、1 13

3、下列if语句中,不正确的是________。

    A、if(x>y);

    B、if(x==y) x+=y;

    C、if(x!=y) scanf("%d",&x) else x=1;

    D、if(x

4、有以下程序
#include <stdio.h>
main()
{
    int x=8;
    for( ; x>0; x--)
    {
        if(x%3)
        {
            printf("%d,",x--);
            continue;
        }
        printf("%d,",--x);
    }
}
程序的运行结果是________。

    A、7,4,2

    B、8,7,5,2

    C、9,7,6,4

    D、8,5,4,2

5、有一函数, ,以下程序段中不能根据x值正确计算出y值的是________。

    A、if(x>0) y=1;
else if(x==0) y=0;
else y=-1;

    B、y=0;
if(x>0) y=1;
else if(x<0) y=-1;

    C、y=0;
if(x>=0);
if(x>0) y=1    ;
else y=-1;

    D、if(x>=0)
if(x>0) y=1;
else y=0;
else y=-1;

6、下列程序段的输出是____。int c[]={1, 3, 5};
int *k=c+1;
printf("%d", *++k);

    A、3

    B、4

    C、5

    D、6

7、有以下程序
main()
{
    int a[3][2]={0},(*ptr)[2],i,j;
    for(i=0;i<2;i++)
    {
        ptr=a+i;
        scanf("%d",ptr);
        ptr++;
    }
    for(i=0;i<3;i++)
    {
        for(j=0;j<2;j++) printf("%2d",a[i][j]);
        printf("\n");
    }
}
若运行时输入:1 2 3<回车>,则输出结果是______。

    A、产生错误信息

    B、10

    C、12

    D、1020       30        2000       00        30

8、若想通过a&b来使a的二进制码中的首尾两位为原来的值,而其余为0,则b应为:(设变量a,b均占一个字节)

    A、01111110

    B、10000001

    C、视a值而定

    D、无法办到

9、以下程序段的执行结果为
#define PLUS(X,Y)X+Y
main()
{
    int x=1,y=2,z=3,sum;
    sum=PLUS(x+y,z)*PLUS(y,z);
    printf("SUM=%d",sum);
   
}

    A、SUM=9

    B、SUM=12

    C、SUM=18

    D、SUM=28

10、已知:char s[100]; int i; 则引用数组元素的错误的形式是________。

    A、s[i+10]

    B、*(s+i)

    C、*(i+s)

    D、*((s++)+i)

11、以下叙述中正确的是______。

    A、函数既可以直接调用自己,也可以间接调用自己

    B、任何情况下都不能用函数名作为实参

    C、函数的递归调用不需要额外开销,所以效率很高

    D、简单递归不需要明确的结束递归的条件

12、设x为整型变量,和表达式"!(!x)"值完全相同的表达式是________。

    A、A==0

    B、x==1

    C、x!=0

    D、x!=1

13、下面程序的输出结果是______。
main()
{
    int a[]={1,2,3,4,5,6,7,8,9,0},*p;
    p=a;
    printf("%d\n",*(p+8));
}

    A、0

    B、8

    C、10

    D、9

14、enum a
{
    sum=9,mon=-1,tue
}
;
定义了________。

    A、枚举变量

    B、3个标识符

    C、枚举数据类型

    D、整数9和-1

15、以下程序的输出结果是______。
main()
{
    int a=5,b=4,c=6,d;
    printf("%d\n",d=a>c?(a>c?a:c):(b));
}

    A、5

    B、4

    C、6

    D、不确定

16、以下程序的输出结果是______。
main()
{
    int a,b;
    for(a=1,b=1;a<=100;a++)
    {
        if(b>=10) break;
        if(b%3==1)
        {
            b+=3;
            continue;
        }
    }
    printf("%d\n",a);
}

    A、101

    B、6

    C、5

    D、4

17、以下程序的输出结果是______。
struct har
{
    int x,y;
    struct har *p;
}
h[2];
main()
{
    h[0].x=1;
    h[0].y=2;
    h[1].x=3;
    h[1].y=4;
    h[0].p=&h[1];
    h[1].p=h;
    printf("%d%d\n",(h[0].p)->x,(h[1].p)->y);
}

    A、12

    B、23

    C、14

    D、32

18、有以下程序 #include <stdio.h>
main() {
 int a=1,b=2;
 while(a<6){
  b+=a;
  a+=2;
  b%=10;
 }
 printf("%d,%d\n",a,b);
} 程序运行后的输出结果是________。

    A、5,11

    B、7,1

    C、7,11

    D、6,1

19、以下语句或语句组中,能正确进行字符串赋值的是________。

    A、char *sp; *sp="right!";

    B、char s[10]; s="right!";

    C、char s[10]; *s="right!";

    D、char *sp="right!";

20、下面定义结构变量的语句中错误的是________。

    A、struct student{
  int num; char name[20];
} s;

    B、struct {
  int num; char name[20];
} s;

    C、struct student{
  int num; char name[20];
};
struct student s;

    D、struct student{
  int num; char name[20];
};
student s;

二、填空题(共10题,每小题2 分,共 20分)

1、设a=3,b=2,c=1,则a>b>c的值为________。  

2、c语言中的关键字共有32个,而且都是________写。提示:大/小  

3、设x和y均为int型变量,且x=1,y=2,则表达式1.0+x/y的值为 ()  

4、用&&写出判断一个字母是否为大、小写的语句  

5、在循环的过程中,有时要提前中止循环,通常采用 () 语句。  

6、请补充main()函数,亥函数的功能是求方程ax2+bx+ e=0的两个实数根。方程的系数a、b、c从键盘输入,如果判别式(disc=b*b-4*a*c)小于0,则要求重新输入a、b、c的值。 例如,当a=1,b=2,c=1时,方程的两个根分别是:x1 =-1.00,x2=-1.00。 注意:部分源程序给出如下。 请勿改动函数中的其他任何内容,仅在横线上填入所编写的若干表达式或语旬。 试题程序:
void main()
{
    double a,b,c,x1,x2,disc;
    do
    {
        printf("input a,b,c:");
        scanf("%1f,%1f,%1f",&a,&b,&c);
        disc=b*b一4*a*c;
        if(disc<0)
            printf("disc=%1f\n input again!\n",disc);
    }
    while( ________);
    printf("****The result****\n");
    x1=(-b+ ________ (disc))/(2*a);
    x2=(-b- ________(disc))/(2*a);
    printf("\nx1=%6.21f\nx2=%6.21f\n",x1,x2);
}  

7、语言的函数体一般由____和____构成  

8、int y=1, x, *p, a[ ]={2,4,6,8,10};
p=&a[1];
for(x=0;x<3;x++) y + = * (p + x);
printf("%d\n",y);
程序的输出结果y的值是________ 。  

9、改正下列程序中不正确的语句。
main()
{
    int n ;
    float s=1.0;
    for(n=10;n>1;n--) s=s+1/n;
    printf("%6.1f\n",s);
}  

10、以下程序运行后的输出结果是________。
main()
{
    char s[ ]="gfedcba";
    int p=6;
    while(s[p]!='d’)
    {
        printf("%c ", p);
        p=p-1;
    }
}    

三、编程题(共3题,共 40分)

1、编写程序,求s=1+(1+2)+….+(1+2+….+10) (本题10分)  

2、输入一行字符,将所有的小写字母转换成大写字母, (本题14分) 

3、编写程序:创建一个长度为n的链表,然后反向输出该链表。 (本题16分)   


参考答案

一、单项选择题

1、D

2、B

【解析】a的值转换成二进制数是1101,b的值转换成二进制数是110,a&b的值是100,转换成十进制数是4;a^b的值是1011,转换成十进制数是11。

3、C

4、D

5、C

6、C

7、B

【解析】本题定义了一个二维数组a,又定义了一个指针变量ptr,它用于指向包含2个元素的一维数组,在第一个for循环中,语句"ptr=a+i;"用于将指针变量ptr指向第i行的数组元素,通过两次循环,分别给二维数组a的第0行的第1个元素和第1行的第1个元素赋了值1和2。

8、B

9、B

【解析】本题考查带参数的宏定义及应用方法,这种宏不只是进行字符串的替换,还要进行参数的替换。
  格式为:#define宏名(参数表)字符串
  我们先看一个简单的带参数的宏定义:#define X (A,B)A*B*B并且在程序中有语句:y=X(4,3);经过替换后变为y=4*3*3;这就是带参数的宏定义的使用方法。注意:宏是按原形替换,本题替换后为 sun=1+2+3*2+3;。

10、D

11、A

【解析】函数直接或间接调用自己,称为递归调用,所以选择A。

12、C

13、D

14、C

15、B

16、D

17、D

18、B

19、D

【解析】本题考查了考生对字符串常量的理解。字符串常量是一段以双引号括起来的字符序列,它既可以出现在对字符数组的初始化中,也可以出现在表达式中。当它用于对字符数组的初始化时,应注意系统自动为其添加的结束标志'\0'。而当它出现在表达式中时,应该将其看作一个const char*类型的指针常量。在选项A中,首先定义了一个字符指针sp,然后将一个字符串赋给甲所指的地址,这是错误的。因为sp是一个未经初始化的野指针,不知其指向哪儿,往一个不确定的地址中写数据很容易让程序出错。选项B首先定义了一个字符数组,然后将一个字符串赋给数组名,这是错误的。因为数组名是一个指针常量,不可以被改变。选项C首先定义了一个字符数组,然后将一个字符串赋给数组的第一个元素,这也是错误的。因为字符串在表达式中相当于一个常字符指针,将一个指针值赋给一个字符型变量是行不通的。选项D是定义一个字符指针sp,同时使其指向一个字符串常量,即将一个常字符型指针赋给sp。这是可行的。所以,4个选项中选项D符合惠意。

20、D

二、填空题

1、1

2、小

3、1.0

4、c>='a'&&c<='z'

5、break

6、________disc<0或o>disc ________sqrt ________sqrt

7、定义语句|执行语句

8、19

9、s=s+1.0/n

10、a b c

三、编程题

1、#include<stdio.h>
main()
{
    int i,s=0,t=0;
    for(i=1;i<=n;i++)
    {
        t=t+i;
        s=s+t;
    }
    printf("%d",s);
}

2、大写字母转换成小写字母,其余字符不变。输出转变
后的这行字符。
#include "stdio.h"
void main()
{
    char a[n];
    int i;
    scanf("%s",a);
    printf("大写为:");
    for(i=0;i<=n;i++)
    {
        if(a<='z'&&a>='a')
        a=a-32;
        printf("%c",a);
    }
    printf("\n小写为:");
    for(i=0;i<=3;i++)
    {
        a=a+32;
        printf("%c",a);
    }
}

3、#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct LNode{
    int          data;
    struct LNode *next;
}LNode,*LinkList;
 
LinkList CreateList(int n);
void print(LinkList h);
int main()
{
    LinkList Head=NULL;
    int n;
   
    scanf("%d",&n);
    Head=CreateList(n);
   
    printf("刚刚建立的各个链表元素的值为:\n");
    print(Head);
   
    printf("\n\n");
    system("pause");
    return 0;
}
LinkList CreateList(int n)
{
    LinkList L,p,q;
    int i;
    L=(LNode*)malloc(sizeof(LNode));
    if(!L)return 0;
    L->next=NULL;
    q=L;
    for(i=1;i<=n;i++)
    {
        p=(LinkList)malloc(sizeof(LNode));
        printf("请输入第%d个元素的值:",i);
        scanf("%d",&(p->data));
        p->next=NULL;
        q->next=p;
        q=p;
    }
    return L;
}
void print(LinkList h)
{
    LinkList p=h->next;
    while(p!=NULL){
        printf("%d ",p->data);
        p=p->next;
    }
}


 2023年计算机C语言专升本测试卷(八)

一、单项选择题(共20题,每小题2 分,共 40分)

1、为了避免在嵌套的条件语句if else中产生二义性,c语言规定,else子句总是与( )配对。

    A、缩排位置相同if

    B、其前面最近的if

    C、其后面最近的if

    D、同一行上的if

2、在下列字符序列中,不可用做c语言标识符的是________。

    A、student___num

    B、class

    C、#88

    D、month___12

3、若x和y是程序中的两个整型变量,则下列if语句中正确的是________。

    A、if(x==0) y=1; else y=2;

    B、if(x==0) then y=1 else y=2;

    C、if(x==0) y=1 else y=2;

    D、if x==0 y=1; else y=2;

4、以下for语句构成的循环执行了______次。
#include <stdio.h>
#define N 2
#define M N+1
#define NUM (M+1)*M/2
main()
{
    int i,n=0;
    for(i=1;i<=NUM;i++)
    {
        N++;
        printf("%d",n);
    }
    printf("\n");
}

    A、5

    B、6

    C、8

    D、9

5、下面说明不正确的是________。

    A、char a[10]="china";

    B、char a[10],*p=a;p="china"

    C、char*a;a="china";

    D、chara[10],*P;P=a="china"

6、下列程序段的输出结果为________。 int x=3,y=2; printf("%d",(x-=y,x*=y+8/5));

    A、1

    B、7

    C、3

    D、5

7、以下能正确定义数组并正确赋初值的语句是______。

    A、int n=5,b[n][n];

    B、int a[1][2]={{1},{3}};

    C、int c[2][]={{1,2},{3,4}}

    D、int a[3][2]={{1,2},{3,4}}

8、若变量已正确定义,表达式 (j=3, j++) 的值是____。

    A、3

    B、4

    C、5

    D、6

9、下列数据中属于"字符串常量"的是________。

    A、“a”

    B、{
  ABC}

    C、'abc\0’

    D、'a’

10、数组a[0…5,0…6]每个元素占5个单元,将其按列优先次序存储在起始地址为1000的连续内存单元中,则元素a[5][5]的地址为________。

    A、1175

    B、1180

    C、1205

    D、1210

11、以下函数调用语句中实参的个数为 。exce((v1,v2),(v3,v4,v5),v6);

    A、3

    B、4

    C、5

    D、6

12、用高级程序设计语言编写的程序,________。

    A、计算机能直接执行

    B、具有良好的可读性和可移植性

    C、执行效率高,但可读性差

    D、依赖于具体机器,可移植性差

13、以下关于函数的叙述中正确的是________。

    A、每个函数都可以被其它函数调用(包括main函数)

    B、每个函数都可以被单独编译

    C、每个函数都可以单独运行

    D、在一个函数内部可以定义另一个函数

14、下面说法正确的是________。

    A、文件指针变量的值是文件当前正在处理的字节地址

    B、文件指针变量的值是文件中包含的字符个数

    C、文件指针的类型是一种指针类型

    D、文件指针的类型是结构体类型

15、以下程序的运行结果是________。
#include<stdio.h>
main()
{
    int a=3,b=4,c=8,d=4,m=1,n=3;
    printf("%d\n",(m=a>b)&&(n=c>d));
}

    A、0

    B、1

    C、2

    D、3

16、以下程序的运行结果是________。
main()
{
    int n;
    for(n=1;n<=10;n++)
    {
        if(n%3==0) continue;
        printf("%d",n);
    }
}

    A、12457810

    B、369

    C、12

    D、1234567890

17、有以下程序
struct stu
{
    char name[10];
    int num;
};

void f(char *name, int num)
{
    struct stu s[2]={{"sundan",20044},{"penghua",20045}};
    num = s[0].num;
    strcpy(name, s[0].name);
}

main()
{
    struct stu s[2]={{"yangsan",20041},{"lisiguo",20042}},*p;
    p=&s[1];
    f(p->name, p->num);
    printf("%s %d\n", p->name, p->num);
}
程序运行后的输出结果是________。

    A、SunDan 20042

    B、SunDan 20044

    C、LiSiGuo 20042

    D、YangSan 20041

18、以下程序运行后的输出结果是
main() {
  char c;
  int n=100;
  float f=10;
  double x;
  x=f*=n/=(c=50);
  printf("%d %f\n", n, x);
}

    A、2 20.000000

    B、100,20.000000

    C、2 40.000000

    D、100 40.000000

19、以下叙述中正确的是______。

    A、不能用字符串常量对字符数组名进行整体赋值操作

    B、字符串常量"Hello"会被隐含处理成一个无名字符型数组,它有5个元素

    C、char str[7]="string!";在语法上是合法的,运行也是安全的

    D、char *str;str="Hello";与char str[];str="Hello";效果是一样的

20、设有如下说明
typedef struct st
{
    long a;
    int b;
    char c[2];
}
new;
则下面叙述中正确的是______。

    A、以上的说明形式非法

    B、ST 是一个结构体类型

    C、NEW 是一个结构体类型

    D、NEW 是一个结构体变量

二、填空题(共10题,每小题2 分,共 20分)

1、有以下程序段,且变量已正确定义和赋值 for(s=1.0,k=1;k<=n;k++) s=s+1.0/(k*(k+));
printf("s=%f\n\n",s);
请填空,使下面程序段的功能与之完全相同 s=1.0;
k=1;
while([10] )
{
    s=s+1.0/(k*(k+1));
    [11] ;
}
printf("s=%f\n\n",s);  

2、c程序中的变量按其定义位置及作用域可分为________两种。  

3、在c语言中,'\n'表示________。  

4、数学表达式100<a或者a<-20改写为c语言表达式是________。注:表达式要在英文半角状态下按原表达式顺序书写,且表达式中不要留空格。  

5、下列程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。 int n=0, ch;
ch=getchar( );
while( ________ )
{
    if ( ________ ) n++;
    c=getchar( );
}  

6、下列给定程序中,函数proc()的功能是计算正整数m 各位上数字的平方和。 例如,输入498,则输出应该是161。 请修改程序中的错误,使它能得到正确结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序:
#include<stdlib.h>
#include<stdio.h>
#include<conio.h> long proc(10ng m)
{
    long sum=1;
    do
    {
        sum+=(m%10)*(m%10);
        m/= 10;
    }
    while(m)
    return(sum);
}
void main()
{
    long n;
    system("cls");
    printf("please enter a number:");
    scanf("%1d",&n);
    printf("\n%ld\n",proc(n));
}  

7、字符串函数___________用于把一个字符串写入指定的磁盘文件中。  

8、在c语言中,函数的返回值是由___________语句传递的。  

9、a=3;
a+=(a<1)?a:1;
printf("%d",a);
结果是________。  

10、以下程序中给指针p分配三个double型动态内存单元,请填空。
#include <stdlib.h>
main ( )
{
    double *p;
    p=(double *) malloc( ________);
    p[0]=1.5;
    p[1]=2.5;
    p[2]=3.5;
    printf("%f%f%f\n",p[0],p[1],p[2]);
}    

三、编程题(共3题,共 40分)

1、编写一个函数,从传人的m个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标志)。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填人所编写的若干语句。 试题程序:
char*proc(char(*a)[81],int num)
{
}
void main()
{
     char ss[l0][81],*max;
     int n,i=0;
     printf("输入若干个字符串:");
     gets(ss[i]);
     puts(ss[i]);
     while(!strcmp(ss[i],"****")==0) 
       {
          i++;   
              gets(ssei]);
            puts(ss[i]);
       }
     n=i; 
       max=proe(ss,n);
     printf("\nmax=%s\n",max);
} (本题10分) 

2、编写程序:字符串反转,如将字符串 "www.baidu.com" 反转为"moc.udiab.www"。 (本题14分) 

3、给定N个职员的信息,包括姓名、基本工资、浮动工资和支出,要求编写程序顺序输出每位职员的姓名和实发工资(实发工资=基本工资+浮动工资-支出)。
输入格式:
输入在一行中给出正整数N。随后N行,每行给出一位职员的信息,格式为“姓名 基本工资 浮动工资 支出”,中间以空格分隔。其中“姓名”为长度小于10的不包含空白字符的非空字符串,其他输入、输出保证在单精度范围内。

输出格式:
按照输入顺序,每行输出一位职员的姓名和实发工资,间隔一个空格,工资保留2位小数。

输入样例:
3
zhao 240 400 75
qian 360 120 50
zhou 560 150 80
输出样例:
zhao 565.00
qian 430.00
zhou 630.00 (本题16分)   


参考答案

一、单项选择题

1、B

2、C

3、A

4、C

5、D

【解析】C语言中操作一个字符串常量的方法有:①将字符串常量存放在一个字符数组之中;②用字符指针指向字符串,然后通过字符指针来防问字符串存储区域。当字符串常量在表达式中出现时,根据数组的类型转换规则,将其转换成字符指针。
  本题D)项中错误的关键是对数组初始化时,可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值。

6、C

7、D

8、A

9、A

10、A

【解析】本题主要考查的知识点是二维数组元素的地址计算。
[要点透析] a[5][5]的地址是1000+(5×6+5)×5=1175。

11、A

12、B

【解析】用高级程序设计语言编写的程序具有良好的可读性和可移植性。

13、B

14、C

【解析】文件指针变量的值是文件所在的地址,选项 A  B 错误;文件指针也是一种指针,属于指针类型不是结构体类型,选项 C 正确,D 错误;本题答案为 C

15、A

【解析】逻辑与(&&)运算符的功能是:当“&&”运算符两边的运算对象均为1时,整个表达式的值为1,否则为0。因为a=3<b=4,即m=0,所以整个表达式的值为0。

16、A

17、A

18、A

【解析】对于C语言中的赋值运算符,必须遵循以下规则:赋值运算符的优先级别只高于逗号运算符,比其他任何运算符的优先级都低,并且具有自右向左的结合性。因此先得到变量c的值为50,变量n经过计算结果为2,最后通过变量f的值10和n的值2相乘得到变量x的值,为20.000000。因此选项A)正确。

19、A

【解析】字符数组在定义时可以用字符串赋初值,其后就不可以再用字符串常量进行赋值。答案选择A。

20、C

【解析】typedef 关键字用于声明一个新的类型名代替已有的类型名。本题中如果没有用 typedef 进行定义的话,则 struct ST 为结构体类型,现在用 typedef 定义后,相当于用 NEW代表了 struct ST 这一结构体类型,故 NEW 为结构体类型。

二、填空题

1、['k<=n ', 'k++ ']

2、['全局变量和局部变量']

3、回车换行#换行

4、100<alla<-20#a<-20ll100<a#a>100lla<-20#a<-20lla>100#100<all-20>a#-20>all100<a#a>100ll-20>a#-20>alla>100

5、['ch!=’\\n’ ch>=0’0’', '&& ch<=’9’']

6、1.错误:long sum=1; 正确: long sum=0;
2.错误:while(m)  正确: while(m);

7、fputs#fputs()

8、return#return()

9、4

10、['3*sizeof(double) ']

三、编程题

1、char*proc(char(*a)[81],int m)
{
    char*max;
    int i=0: max=a[0]: for(i=0;i<m;i++) if(strlen(max)<strlen(a[i]))//找出最长的字符串 max=a[i];
    return max;
    //返回最长字符串的地址
}

2、#include <stdio.h>
 
 
void reverse(char* s)
{
    // 获取字符串长度
    int len = 0;
    char* p = s;
    while (*p != 0)
    {
        len++;
        p++;
    }
   
    // 交换 ...
    int i = 0;
    char c;
    while (i <= len / 2 - 1)
    {
        c = *(s + i);
        *(s + i) = *(s + len - 1 - i);
        *(s + len - 1 - i) = c;
        i++;
    }
}
 
int main()
{
    char s[] = "www.baidu.com";
    printf("'%s' =>\n", s);
    reverse(s);           // 反转字符串
    printf("'%s'\n", s);
    return 0;
}

【解析】质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。

3、#include <stdio.h>
struct message
{
    char a[9];
    double basic;
    double fu;
    double  output;
};
struct message d[100];
int main()
{
    int N;
    double  f[100];
    scanf("%d",&N);
    for(int i=0;i<N;i++)
    {
       scanf("%s %lf %lf %lf",d[i].a,&d[i].basic,&d[i].fu,&d[i].output);
       f[i]=d[i].basic+d[i].fu-d[i].output;
    }
    for(int i=0;i<N;i++)
    {
       printf("%s %.2f\n",d[i].a,f[i]);
    }
   
    return 0;
}

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多