【高效复习】C语言历年期末试题及历年考研复试题C语言(UESTC)

2008年—2009年度

填空题

1、在c语言中,以_______开头的字符称为转义字符。
2、在C语言中,没有明确指明函数类型的,自动按______处理。
3、函数原型可以简单的由函数的_____,加上其后的一个“;”构成。

选择题

1、有如下程序:

#include<stdio.h>
int main(){
    char ch1='A',ch2='a';
    printf("%c",(ch1,ch2));
    return 0;
}

以下正确的是______
A、程序的输出结果为大写字母A
B、程序的输出结果为小写字母a
C、程序运行时产生错误
D、程序编译时产生错误
2、若有条件表达式(exp)?a++:b–,则以下正确的是_____
A、(exp== 0)
B、(exp!=0)
C、(exp==1)
D、(exp!=1)

程序题

#include<iostream>
#include<cstring>
#include<cstdio>
#include <stdlib.h>
using namespace std;
void fun(char *s1,char *s2)
{
    int i,j;
    char *s=s1;
    for(;*s2!='\0';s2++)
    {
        for(j=0,s1=s;*s1!='\0';s1++)
            if(*s1!=*s2)
            {
                s[j]=*s1;
                j++;
            }
        s[j]='\0';
    }
}
int main(){
    char a1[80],a2[80];
    gets(a1);
    gets(a2);
    fun(a1,a2);
    puts(a1);
    return 0;
}

当程序运行时,输入ASDFGHJ和AFG,运行结果为_____

答案:

填空题
1、\ 2、整型 3、首部
选择题
1、B

此题充分考察了“,”的使用:1)当顺序使用,结合顺序是从左至右,用来顺序求值,完毕之后整个表达式的值是最后一个表达式的值。
比如:
z=(x+2,y=x)——带括号,赋值为z=y=x;
y=x+2,y=x;——赋值先y=x+2,之后为y=x;最终是y=x;
y=x+2,x;——赋值为y=x+2,x单独不是一个赋值语句。
2)运算符优先级:
1、优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。
2、相同优先级中,按结合顺序计算。大多数运算是从左至右计算,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。
3、基本的优先级需要记住:指针最优,单目运算优于双目运算。如正负号。先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 && 7等价于 (1 << (3 + 2))&&7.逻辑运算最后计算。

2、B

注意这个一道细节题——条件结构的判断就是非0和0两种,逻辑运算数值上分为“1”和“0”两种。
其他细节:比如do…while();后面有“;.

程序题
输出:SDHJ

注意指向数组的指针可以用数组方式访问元素。
比如int *p,a[10]; p=a;p[1]就是第一号元素的取值。原理上和结构体变量相互赋值是一样,都是对内存地址的直接拷贝。09年-10年度也有一道类似题。

2009年—2010年度

程序题

1#

#include<iostream>
#include<cstring>
#include<cstdio>
#include <stdlib.h>
using namespace std;

int main(){
   int a[3][4],i,j,*p,(*pa)[4];
   for(i=0;i<3;i++)
   {
       for(j=0;j<4;j++)
            a[i][j]=i+j<<2;
   }
   p=a[1]+2;
   printf("%d\n",p[5]);
   pa=a+2;
   printf("%d\n",*pa-p);
    return 0;
}

该程序结果______
2#

#include<iostream>
#include<cstring>
#include<cstdio>
#include <stdlib.h>
using namespace std;

int main(){
    int a=12,b=7,c=3,d=4,e=9,result=0;
    float x=5.2,y=6.0;
    result=a/y==++a>b;
    printf("%3d\t",result);

    result=!(b<c)?e+97:x*y<d?x/y+100:'N';
    printf("%3c\t",result);

    result=(int)x/(int)y=='\0';
    printf("%3d\t",result);

    result=a*b%c&&b>++result || b++%e++;
    printf("%3d\t\n",result);

    return 0;
}

该程序输出结果________

答案:

1、20 2

p[5]就是从p开始之后的第五个元素,使用指针当数组直接访问。
pa=a+2是pa是第二行第一个元素的首地址,*pa是取第2行首地址,**pa就是数指,p就是取数值。因此pa-p是地址之差,找中间元素个数。

2、0 J 1 1
细节题,(1)\t是四个偏移,注意格式输出。(2)0与‘\0’在条件判断中都属于0.

2010年-2011年度 A卷

选择题

1、C语言程序由______组成
A子程序 B过程 C函数 D主程序和子程序

填空

1、char str[]=“1234”,*p=str,则 *(p+1)是___

答案:
选择:C
填空:‘2’ 注意单引号,字符类问题十分容易出错。

2013年-2014年度 A卷

选择题

1、在C语言中,相同结构体类型的不同变量之间,可以()
A、比较大小 B、地址相同 C、赋值 D、相加
2、下面关于类概念的描述中,()错误
A、类是抽象数据类型的实现
B、类是具有共同行为的若干对象的统一描述体
C、类是创建对象的样板
D、类就是C语言中的结构体类型

填空题

1、设char s[]={“E_mail”};则执行printf("%%d\n",sizeof(s));后输出的值是______
2、若从键盘输入58,则以下程序输出的结果是______

 main()
{
    int a;
    scanf("%d",&a);
    if(a>50) printf("%d",a);
    if(a>40) printf("%d",a);
    if(a>30) printf("%d",a);
    return ;
}

3、当计算机用两个字节存放一个整数时,能存放的最小十进制整数是_______

判断题

1、在c++语言中,不允许对运算符++进行重载()
2、如果一个类中未定义拷贝构造函数,则C++编译器将为该类自动生成一个拷贝构造函数()
3、int i,*p=&i;是正确的c说明()

改错题

下面的程序是关于CBook类的一个定义,试改正2处错误

#include<iostream>
#include<string>
class CBook
{
    char *p_book;
public:
    CBook(const char *p_val)
    {
        p_book=new char[strlen(p_val)];
        strcpy(p_book,p_val);
    }
    void print()const
    {
        cout<<p_book<<endl;
    }
    ~CBook()
    {
        delete []p_book;
    }
};

void main(){
    CBook cb("Good Book");
    printf("%s",cb.p_book);
}

答案:

选择题
1、C 解析:原理是内存地址直接拷贝,但注意结构体的指针问题。
比如下列

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h> 
struct test  
{  
    int a;  
    int b;  
    char ss[10];  
};  
  
struct test2
{
    int a;
    int b;
    char * ss;
};
int main()  
{  
    struct test t1 = {1, 2, "hello"};           
    struct test t2;  
    t2 = t1;  
    strcpy(t1.ss,"张汉青");
    printf("%d, %d, %s\n", t2.a, t2.b, t2.ss); 

    struct test2 t3;
    t3.ss = (char *)malloc(10);
    t3.a=1;
    t3.b=2;
    strcpy(t3.ss,"hello");
    struct test2 t4;
    t4=t3;
    strcpy(t3.ss,"张汉青");
    printf("%d,%d, %s\n",t4.a,t4.b,t4.ss);

    return 0;  
}

2、D 只能说是类似于结构体,但有本质差别,类和对象是含有操作的。
填空题
1、7 strlen才是输出6;
2、585858 此题是细节题,考场上千万要注意——一行一行读
3、-32768 细节题
判断题
1、错 详见C常识部分
2、错 应该是未显式定义时,会自动生成一个缺省的拷贝函数。
3、对 i未赋值但不影响地址传递
改错题:
(1)p_book=new char[strlen(p_val)];改为p_book=new char[strlen(p_val)+1];
(2)printf("%s",cb.p_book);改为cb.print();直接调用

此外,顺带提一下结构体中指针的使用,(*p).x或者p->x两种
浮点数比较大小:a>b && fabs(a-b)>1e-6 为条件

16年-17年度 B卷

选择题:

下面描述符合赋值兼容规则的是()
A、基类的对象可以初始化公有派生类的引用
B、公有派生类的对象的地址可以赋值给指向基类的指针
C、基类的对象的地址可以赋值给指向公有派生类的指针
D、基类的对象可以赋值给公有派生类的对象

判断题

1、采用公有继承后,可以通过派生类的对象访问基类的私有成员()
2、不可以对double数进行位运算&操作()

填空题

1、在c++中,通过对象只能调用_______属性的成员函数
2、如果一个类是抽象类,则它至少有1个以上的________函数,并且不可以实例化。
注意:delete对指针写法:delete[]pArray;以及指针赋初值。

答案:

选择题:
B

解析:
派生类的对象可以赋值给基类的对象
派生类的对象可以初始化基类的引用
派生类的对象的地址可以赋值给指向基类的指针

判断题:
错,只能间接通过公有或者保护成员访问
对。但表述不准确,表述上应该是浮点不可以直接用来进行位运算。但可以通过函数定义来取位
填空题:
公有;纯虚

15年-16年度 A、B卷

判断题

C语言中,格式说明“%10.4f”中10表示数据输出的最小宽度,4表示小数位数()

选择题

1、定义一个变量其类型为int型,其在内存中占的内存字节数为______
A 1个字节 B 2个字节 C 3个字节 D 4个字节
2、以下程序的输出结果为______
main()
{
int i=010,j=10,*pi,*pj;
pi=&i;pj=&j;
printf("%d.%d\n",*pi,*pj);
}
A10.10; B8.10; C010.10; D8.8;

答案:

判断题:

选择题:
1、B
2、B 010是八进制!

16年-17年度 A卷

选择题

1、下列关于构造函数的说法正确的是()
A构造函数名和类名一致
B构造函数的返回值为void类型
C构造函数的函数体不能为空
D一个类只能定义一个构造函数
2、下面派生类的描述中,错误的是()
A一个类可以多次成为另一个类的直接基类
B派生类可以有多个基类
C派生类的成员除了它自己的成员外,还包含了它的基类成员
D在创建派生类的对象时,派生类的构造函数的调用晚于基类的构造函数的调用
3、下面描述中,表达正确的是()
A公有继承时基类中的公有成员在派生类中仍是公有的
B公有继承时基类中的私有成员在派生类中仍是私有的
C公有继承时基类中的保护成员在派生类中仍是私有的
D私有继承时基类中的私有成员在派生类中仍是私有的
4、输出结果为()
int main()
{
char *point[]={“one”,“two”,“three”,“fourth”};
point[2]=point[3];
point[2]+=2;
printf("%s",point[2]++);
return 0;
}
Aee Brth Cree Durth

判断题

1、可以用if(3 2、继承关系是可以传递的()
3、只有基类中的非私有成员才能被派生类继承,成为派生类的一部分()

填空题

1、c++中,与new运算符配对使用的是______运算符
2、c++中,指针代表了成员函数所操作的那个对象。
3、c++中,三种派生方式说明符
______

改错题

int func()
{1)    char data[20]="Are there some mistakes in the program? can you find them?";2)    char *point;3)
(4)
(5)    char array[200];6)    int i,length=0;7)    point=array;8while(data[length]!='0')9)      length++;10for(;i<length;i++)11{12*point=*data;13)       point++;14)       data++;15}16delete(data);
}

1、
2、
3、
4、
5、

答案:

选择: A A A D
判断 错 对 错
填空 1、delete;
2、this;
3、private、public、protected
改错:
(1)中,字符串中个数多于20个
(8)字符串末尾是’\0’
(10)i为赋初值
(12)指针赋地址表达错误
(16)data不是动态变量,不需要删除。

其它c语言试题:

判断题

1、在Turbo C中,下面的定义和语句是合法的:file *fp;fp=fopen(“a.txt”,“r”) )
2、在Turbo C中,此定义和语句是合法的:enum aa{ a=5,b,c}bb;bb=(enum aa)5;( )
3、在tubo c中,整型数据在内存中占2个字节()
4、inti=20;switch(i/10){case 2:printf(“A”);case 1:printf(“B”);}的输出是A()
5、C语言把文件看作一个字符(字节)的序列()

选择题

1、已知函数fread的调用形式为fread(buffer,size,count,fp),其中buffer代表是()
A、存放读入数据项的存储区
B、存放读入数据的地址或指向此地址的指针
C、一个指向所读文件的文件指针
D、一个整型变量,代表要读入的数据项总数
2、设i和k都是int类型,则for循环语句()
for(i=0,k-=1;k=1;i++,k++) printf("*****\n");
A、循环结束的条件不合法
B、循环体一次也不执行
C、循环体只执行一次
D、是无限循环
3、设有说明int (*ptr)();其中标识符ptr是()
A、是一个指向整型变量的指针
B、是一个指针,它指向一个函数值是int的函数
C、是一个函数名
D、定义不合法

程序题

1、

#include<iostream>
#include<cstring>
#include<cstdio>
#include <stdlib.h>
using namespace std;
int main(){
    char str[]="The C program",c;
    int i;
    for(i=2;(c=str[i])!='\0';i++)
    {
        switch(c)
        {
            case 'g':i++;break;
            case 'o':continue;
            default:printf("%c",c);continue;
        }
        printf("*");
    }
    printf("\n");
    return 0;
}

该程序输出结果______

2、很隐蔽的细节题

#include<iostream>
#include<cstring>
#include<cstdio>
#include <stdlib.h>
using namespace std;
void maxn(int arr[],int *p,int n)
{
    int i;
    *p=arr[0];
    for(i=1;i<n;i++)
        if(arr[i]>*p) ______;
}

int main(){
    int array[5]={1,2,3,4,5},*p,a;
    p=&a;
    maxn(array,p,5);
    printf("%d",a);
    return 0;
}

要求:完成程序。

答案:

判断题
1、错 file应该大写FILE
2、对 就是枚举类型的定义与赋值。
3、错 整型数据包括短整型和长整型,短整型占2个字节,长整型占4字节。
4、错 细节题,应该AB
5、对 本质上C语言对文件就是ASCII码和二进制,因此看作字符序列是对的。
选择题
1、B buffer是读取的数据存放的内存的指针(可以是数组,也可以是新开辟的空间,buffer就是一个索引);size是每次读取的字节数;coun是读取次数;fp是要读取的文件的指针
2、D 细节题 k=1是赋值,导致没有可以跳出循环的判断。
3、B 函数和数组道理一样,int (*ptr)()与int (*p)[]都是指向某一类的指针,int ptr()中ptr是函数名,返回值为int,int *p[]中p是数组名,存放指针。
程序题
1、e C pr * am

(1)break只是结束本次switch,会执行printf(“ * ”);这和单独的for循环有区别。(2)continue是结束本次for循环,不再执行printf(“*”);

2、*p=arr[i]

不可以填p=&arr[i]。因为在内存中p、arr、a是三个单独内存,只有通过*p才能对a进行修改,而p只能改变自身指针的指向,不影响a的数值。

提供本人整理的电子科技大学计算机复试笔试题C:
https://download.csdn.net/download/lyly1995/11049781

你可能感兴趣的:(C,学习心得,计算机基础)