第3次C练习

C语言试题
//编程环境32位机器
一、选择题(15题,共30分)

1.  假设目录中存在若干文件file_num.txtnum表示文件编号,1~10),使用以下(    )通配符可以挑选出其中的编号为1、3、5的文件。
[A] file_*.txt  [B] flie_?.txt  [C] file_[135].txt  [D] file_[^135].txt

C.*表示零个或多个任意字符;?表示一个任意字符;[^135]表示除了1,3,5字符以外

2.  文件权限 r-x-wxr--对应的八进制表示形式为(    ) 
  [A]  0536      [B]  0654      [C]  0656    [D]  0534    

D.

3.C语言中,要求运算数必须是整型的运算符是(    )。
[A]  /     [B]  ++     [C]  !=     [D]  %

D.

4.  C语言中,逻辑“真”等价于(   )。
[A] 大于零的数  [B] 大于零的整数  [C] 非零的数  [D] 非零的整数

C.

5.  下面函数的功能是(    )。
int fun (char*x)
{
char*y=x;
while(*y++);
return(y-x-1);
}
[A] 求字符串的长度
[B] 比较两个字符串的大小
[C] 将字符串x复制到字符串y
[D] 将字符串x连接到字符串y后面

A.y指向’/0’的后一字节,x指向字符串的第一个字节,y-x-1表示字符串长度

6.  C语言程序的三种基本程序是(    )。
[A] 顺序结构,选择结构,循环结构
[B] 递归结构,循环结构,转移结构
[C] 嵌套结构,递归结构,顺序结构
[D] 循环结构,转移结构,顺序结构

A.

7.  执行下面语句后的输出结果为(    )。
int i = -1;
    if (i < =0)
        printf(“****\n”);
            i = 2;
        else 
        printf(“%%%%\n”);
[A] ****    [B] %%     [C] %%%%     [D] 有语法错误。不能正确执行

D.if + else 语句被i=2;语句分隔

8.  下面的程序运行结果为(    )。
#include <stdio.h>
int main(void)
            {
int x = 3, y = 1, z = 0;
                if(x = y + z)
                    printf(“****”);
                else
                    printf(“####”);
        }
[A] 语法有错误,不能编译  [B] ****   [C] ####     [D] 能编译,不能连接

B.if中将y+z赋值给x,x为1,条件为真。

9.  下述程序的输出结果是(    )。
int main(void)
{ 
int Y=100;
while(Y--);
printf(“Y=%d”,Y);
}
[A] Y=0     [B] Y=1     [C] Y=-1     [D] Y=随机数

C.while 为空循环,直至y=0,跳出循环并执行y- -,

10. 结构体DATA定义如下,则sizeof(struct DATA)的值为(    )。
struct DATA 
{ 
float f1; 
int i;
char  c2; 
};
[A] 6     [B] 8     [C] 12     [D] 16

C.存储时字节对齐

11. 下述程序第二次的输出结果为(    )。
int main(void)   
{   
    extern   int   a;   
    int   b=0;   
    static int   c;   
    a+=3;   
    other();   
        b+=3;   
        other();   
    }       
    int   a=5;   
            other()   
            {   
                int   b=3;   
                static   int   c=2;
                a+=5; b+=5; c+=5;   
                printf("%d,%d,%d\n",a,b,c);   
                c=b;   
            }
[A] 13,0,13     [B] 18,8,13     [C] 13,8,13     [D] 18,8,0

B.
extern 声明a是外部全局变量,第一次other()后,a=13, b=8, b输出的是other()中的局部变量,c是静态存储变量,第一次初始化为0,只有第一次初始化有效,other()中再次初始化无效,输出时c=5,然后c=b=8;第二次other(),a=18,b=8,c=13.

12. 以下程序的功能是将字符串s中所有的字符c删除,那么空白处缺少的语句为:(   )。
#include <stdio.h>
int main(void)
{
    char s[80] ;
    int i, j ;
    gets(s) ;
    for ( i = j = 0 ; s [i] != ‘\0’ ; i++ )
        if ( s [i] != ‘c’ )
                         ;
    s [ j ] = ‘\0’ ;
    puts ( s ) ;
    return 0 ;
}
[A]  s [ j++] = s [ i ]     [B] s [ ++j ] = s [ i ]
[C]  s [ j ] = s [ i ]; j++     [D] s [ j ] = s [ i ]

A.用原数组空间存新数组,j指向新数组下标,i指向原数组下标,

13. 下面程序的功能是将已按升序排好序的两个字符串a和b中的字符,按升序归并到字符串c中,请为程序中的空白处选择适当的语句。  (    )         
        #include <stdio.h>
        int main(void)
        {
            char a[ ] = “acegikm”;
            char b[ ] = “bdfhjlnpq”;
            char c[80], *p;
            int i = 0, j= 0, k = 0;
            while( a[i] != ’\0’ && b[j] != ‘\0’ )
            {
                if ( a[i] < b[j] )  { ( ① ) }  
                else { ( ② ) }  
                k++;
            }
            c[k] = ‘\0;
            if ( ③ )  p = b + j;  
            else  p = a + i;
            strcat ( c , p );
            puts ( c );
        }
① [A] c[k] = a[i]; i++;         [B] c[k] = b[j]; i++;
   [C] c[k] = a[i]; j++;        [D] c[k] = a[j]; j++;

② [A] c[k] = a[i]; i++;         [B] c[k] = b[j]; i++;
   [C] c[k] = a[i]; j++;        [D] c[k] = b[j]; j++;

③ [A] a[i] = ‘\0’               [B] a[i] != ‘\0’
   [C] b[j] = ‘\0’              [D] b[j] != ‘\0

A.D.D
while()中将两个字符串按升序排列到c中,直至a或b某一个字符串排完,接下来将a或者b剩下的字符连接到c后边

14. 在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是(   )。
[A]  extern     [B]  register     [C]  auto     [D]  static

D.
register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度.
auto和register定义的变量为自动存储期。声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。在函数内部定义的变量成为局部变量。
extern与static定义的变量为静态存储期,即为全局变量。extern在其他源程序中也可以使用;static只能在本程序中使用。
全局变量作用域是从定义该变量的位置开始至源文件结束。
用extern可以在函数外对全局变量声明,使全局变量的作用域从声明处到文件的结束。

15. 以下程序的运行结果为(    )。
        void sub(int x, int y, int *z)
            { *z = yx ; }
            int main(void)
            {
                int a,b,c ;
                sub(10, 5, &a) ;
                sub(7, a, &b) ;
                sub(a, b, &c) ;
                printf( “%4d,%4d, %4d\n”,a,b,c);
            }       
[A]  5,   2,   3     [B]  -5, -12,  -7     
[C]  -5, -12, -17    [D] 5,  -2,  -7   

B.

二、填空题(6题,第5题4分,其余每空2分,共16分)

1. 条件“2 < x < 3x < -10”的C语言表达式为(   )。
x > 2 && x < 3 || x < -10;
&&优先级高于||
2. 若有以下定义和语句,则*p[0]引用的是a数组元素中的(       ),*(p[1]+1)引用的是a数组元素中的(      )。
int *p[3], a[6], i;
for( i = 0; i < 3; i++) p[i] = &a[2*i];
第一个元素;第4个元素
p是指针数组,存放3个int*
p[1]=&a[2];p[1]+1=&a[3]
3. 若有以下输入(<CR>代表回车换行符),则下面程序的运行结果为(    )。
12<CR>
int main(void)
{
    int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
    int (*p)[4], i, j;
    p = a;
    scanf(“%d,%d”,&i,&j); //i=1,j=2
    printf(“%d\n”, *(*(p+i)+j));
    return 0;
}
7
p是指向数组的指针,指向int[4]类型的数组,p+1表示指向下一组int[4],即向后跳4int。
二维数组实际是一维数组的方式存放的,*(p+1)指向((int *)a + 4),
*(p+1)+2指向(int *)a + 4 + 2;
4. shell脚本的本质是(     )。

一段用于用户与操作系统进行交流的程序。

5. gcc的编译步骤按先后顺序分别为(  )。

预处理,编译,汇编,链接
预处理,替换头文件和宏定义,gcc -E 查看。.i文件
编译,将.i文件翻译成汇编文件,gcc -S查看。.s文件
汇编,将.s文件翻译成机器语言,即二进制文件,保存在.o文件中(对象文件object file)
链接,通过拷贝,将外部函数库函数添加到二进制文件中,变成可执行文件。

6. make工程管理器根据(      )来自动发现更新过的文件从而减少编译的工作量。

检查每个依赖文件的时间戳
Make工程管理器在编译程序时会检查每个依赖文件的时间戳,一旦发现某个依赖文件的时间戳比目标文件要新,就会执行目标文件的规则命令来重新生成目标文件。

三、简答题(1题4分,第2题10分,共15分)

1.  请写出定义一个求最小的宏(5分)
2.  写出1~20偶数的和,用do...while编程来实现(10分)
1.
#define MIN(a, b)   (a) < (b) ? (a) : (b)
2.
int i = 0, add = 0;
do{
    add += i;
    i += 2;
}while(i <= 20);

四、编程题(3题,每题12分,共39分)(编程题写出思路并且正确可以得一半分)

1.  下面findmax函数将计算数组中的最大元素及其下标值,请编写该函数。(13分)
int findMax(int * array, int len, int * pData);

int findMax(int * array, int len, int * pData)
{
    int i = 0, maxIndix = 0;
    for(; i < len; i++)
        if(array[maxIndix] < array[i])
            maxIndix = i; 
    *pData = array[maxIndix];

    return maxIndix;
}
当这个数组中有两个相等的最大数时,取第一个最大数的下标。
2.  char * stringcat(char * dest, const char * str); (13分)
    功能:把str所指空间的字符连接到dest所指字符串的后面。
char * stringcat(char *dest, const char *str)
{
    char *p = dest;
    while(*dest)
        dest++;
    do{
        *dest++ = *str;
    }while(*str++);
    //用do while可以直接把结束标志也复制过去。
    return p;
}
  1. 写一个接口,把去年1月份的每天的平均温度进行排序。(13分)
Void sort(int * array, int len);

Void sort(int * array, int len)
{
    int i = 0, j = 0, tmp = 0;
    //简单选择排序,升序
    for(i = 0; i < len - 1; i++)
        for(j = i + 1; j < len; j++)
            if(array[i] > array[j])
            {
                tmp = array[i];
                array[i] = array[j];
                array[j] = array[i];
            }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值