c语言综合作业程序填空题,C语言作业题(1)

C语言试题

//编程环境32位机器

Ps:会做的题目,简要写出分析过程;不会的度娘写出思路!

一、选择题(15题,共30分)

1. 假设目录中存在若干文件file_num.txt(num表示文件编号,1~10),使用以下( C )通配符可以挑选出其中的编号为1、3、5的文件。

[A] file_*.txt [B] flie_?.txt [C] file_[135].txt [D] file_[^135].txt

思路:A表示所有,B表示匹配一位,D表示取反

2.文件权限 r-x-wxr–对应的八进制表示形式为( D)

[A] 0536 [B] 0654 [C] 0656 [D] 0534

思路:r=4,w=2,x=1

3.在C语言中,要求运算数必须是整型的运算符是(D)。

[A] / [B] ++ [C] != [D] %

思路:取余要求必须是整数

4.C语言中,逻辑“真”等价于(C)。

[A] 大于零的数 [B] 大于零的整数 [C] 非零的数 [D] 非零的整数

思路:非零即真

5.下面函数的功能是(A)。

int fun (char*x)

{

char*y=x;//将字符串x赋给字符串y

while(*y++);//指向\0的下一位

return(y-x-1);//返回末减初减1,即字符串长度,不包括\0

}

[A] 求字符串的长度

[B] 比较两个字符串的大小

[C] 将字符串x复制到字符串y

[D] 将字符串x连接到字符串y后面

思路:见注释

6.C语言程序的三种基本程序是(A)。

[A] 顺序结构,选择结构,循环结构

[B] 递归结构,循环结构,转移结构

[C] 嵌套结构,递归结构,顺序结构

[D] 循环结构,转移结构,顺序结构

7.执行下面语句后的输出结果为(D)。

int i = -1;

if (i < =0)

printf(“**\n”);

i = 2;

else

printf(“%%%%\n”);

[A] ** [B] %% [C] %%%% [D] 有语法错误。不能正确执行

思路:if和else之间不能有其他语句

8.下面的程序运行结果为(B)。

\include stdio.h>

int main(void)

{

int x = 3, y = 1, z = 0;

if(x = y + z)

printf(“**”);

else

printf(“####”);

}

[A] 语法有错误,不能编译 [B] ** [C] #### [D] 能编译,不能连接

思路:if语句用法错误,x=y+z是赋值,但是可以运行

9.下述程序的输出结果是(C)。

int main(void)

{

int Y=100;

while(Y–);

printf(“Y=%d”,Y);

}

[A] Y=0 [B] Y=1 [C] Y=-1 [D] Y=随机数

思路:先判断Y是否为零,再减减,再根据判断结果决定是否执行循环体(本题为空)。y=0时,先判断要跳出,再减减为-1,再跳出,所以最后y=-1

10.结构体DATA定义如下,则sizeof(struct DATA)的值为(C)。

struct DATA

{

float f1;

int i;

char c2;

};

[A] 6 [B] 8 [C] 12 [D] 16

思路:32位中float,int为4字节,char为1个字节。根据内存补齐原则,共12个字节

11.下述程序第二次的输出结果为(B)。

int main(void)

{

extern int a;//使用已声明的a

int b=0;

static int c; //c初始化为0,并且不能再被初始化

a+=3;

other();

b+=3;

other();

}

int a=5;

other()

{

int b=3; //b是局部变量,每次进入other重新赋值

static int c=2; //c已经被初始化,此句不起作用

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

思路:见注释

12.以下程序的功能是将字符串s中所有的字符c删除,那么空白处缺少的语句为:(A)。

#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 ]

思路:如果当前符号为c,则j记录c的位置,i++,下一次循环时,把下一个字符s[i]赋值给当前的c字符j[i],j和i再加一。即将c字符后的所有字符前移。A和C选项都满足,由于if没有花括号,所以只能一句完成,即A。

13下面程序的功能是将已按升序排好序的两个字符串a和b中的字符,按升序归并到字符串c中,请为程序中的空白处选择适当的语句。 (ADA)

#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] ) { ( ) } //将a[i]给c[k],a[i]+1

else { ( ) }

k++;

}

c[k] = ‘\0’;

if ( ) p = b + j; //如果a长度小于b,则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’

思路:见注释

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

[A] extern [B] register [C] auto [D] static

思路:

A可调用在别处声明的变量

B请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率

C仅在语句块内部使用,初始化可为任何表达式

D在内部调用可保存改变的值,在外部调用则对其他函数不可见

15.以下程序的运行结果为(B)。

void sub(int x, int y, int *z)

{ *z = y – x ; }

int main(void)

{

int a,b,c ;

sub(10, 5, &a) ;//更改a的值为-5

sub(7, a, &b) ;//更改b的值为-12

sub(a, b, &c) ;//更改c的值为-7

printf( “%4d,%4d, %4d\n”,a,b,c);

}

[A] 5, 2, 3 [B] -5, -12, -7 [C] -5, -12, -17 [D] 5, -2, -7

思路:见注释

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

1. 条件“2 < x < 3或x < -10”的C语言表达式为((x>2&&x<3)||x

思路:22&&x<3

2.若有以下定义和语句,则*p[0]引用的是a数组元素中的(a[0]的内容),*(p[1]+1)引用的是a数组元素中的(a[4]的内容)。

int *p[3], a[6], i;

for( i = 0; i < 3; i++) p[i] = &a[2*i];

思路:p[3]是一个整型的指针数组,存放整型数的地址

3.若有以下输入(CR>代表回车换行符),则下面程序的运行结果为(7)。

1,2CR>

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);

printf(“%d\n”, *(*(p+i)+j));

return 0;

}

思路:a是3行4列的数组,*p是四个元素的数组,p=a即p指向a的第一行,则*(p+1)为a的第二行,*(*(p+1)+2)为第二行的第三个元素

4.shell脚本的本质是(操作系统与外部最主要的接口)。

5.gcc的编译步骤按先后顺序分别为( 预处理、 编译、 汇编、 链接)。

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

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

1. 请写出定义一个求最小的宏(5分)

da5f43dd58e489434d60f7c87df74e45.png

2.写出1~20偶数的和,用do…while编程来实现(10分)

029b47a8a195082239cadcfa59c3ffb5.png

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

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

Int findMax(int * array, int len, int * pData);

//计算数组中的最大元素及其下标值

int findMax(int * array, int len, int * pData);

//array表示数组,len表示数组长度,pData表示元素的地址

{

int max=0;//最大元素的下标

int i=0;

for(i=0;i

{

if(array[i]>array[max])//如果当前元素大于现最大元素

{

max=i;

}

}

pData=array+max;

return *pData;

}

2.char * stringcat(char * dest, const char * str); (13分)

功能:把src所指空间的字符连接到dest所指字符串的后面。

//把str所指空间的字符连接到dest所指字符串的后面

char * stringcat(char * dest, const char * str)

{

char* save_head=dest;//储存dest头指针

while(*dest++);//指向\0的后一位

dest-=1;//指向\0

while(*dest++=*str++);//str赋值给dest,包含\0

return save_head;

}

3.写一个接口,把去年1月份的每天的平均温度进行排序。(13分)

Void sort(int * array, int len);

//写一个接口,把去年1月份的每天的平均温度进行排序

void sort(int * array, int len)

//array是存储每天平均温度的数组,len是数组长度

{

//升序

int i=0,j=0;

int buf=0;

for(i=0;i

{

for(j=i;j

{

if(array[i]>array[j])

{

buf=array[i];

array[i]=array[j];

array[j]=buf;

}

}

}

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值