C基础小测试

1、C语言中,运算对象必须是整型数的运算符是    A     

        A、%         B、/         C、%和/         D、*

模数和被模数都必须为整数

 

2、若有关系x≥y≥z,应使用    A    C语言表达式。

A、(x>=y)&&(y>=z) B、(x>=y)AND(y>=z)  C、(x>=y>=z) D、(x>=y)&(y>=z)

 

3、下面程序的输出是   C      main(  )                                                        { int x=10,y=3;                                                            printf(“%d\n”,y=x/y);

}

A、0         B、1         C、3         D、不确定的值

整型计算10/3=3

 

4、若float x ;x = 10/4 x的值是   B       

A2.5         B 2.0        C 3         D  2

整数计算10/4=2,float是浮点型

 

5、设有以下语句:int a=3,b=6,c; c=a^b<<2; 则c的二进制值是    A     

A、00011011   B、00010100    C、00011100    D、00011000

b<<2的优先级比 ^ 要高,所以先算左移

b<<2:110--> 0001 1000

                        0000 0011 --> 00011011

^相同为0,不同为1

6、在位运算中,某操作数 右移3位,其结果相当于    D     

A、操作数乘以6   B、操作数除以6  C、操作数乘以8   D、操作数除以8

 左移乘2,右移乘2

 

7、if(!x){语句块;},如果能运行语句块则!x条件等价于    A         。

Ax==0       Bx==1         Cx != 0       Dx != 1

if(1),所以 !x==1,x==0

8、有一下程序,请问其输出结果是___B___

#include <stdio.h>

main ( )

{  

char s[]="abc";    

int i = 0;

while(s[i])    

{  

printf("%d",s[i]%10);

++i;  

}

} 程序运行后的输出结果是

A)abc    B)789     C)7890    D)979899

a=97 b=98 c=99,用10取余数,得到789

9、执行下列程序段后,变量a,b,c的值分别是   D    

     int x=10,y=9;

     int a,b,c;

     a=(--x==y++)?--x:++y;

     b=x++;

     c=y;

A、a=9,b=9,c=9   B、a=9,b=10,c=9  C、a=1,b=11,c=10  D、a=8,b=8,c=10

--x=9,y++=9;x=9 y=10

--x=8,x++=8,y=10

10、整型变量x和y的值相等,且为非0值,则以下选项中,结果为0的表达式是    D      

A、x || y   B、x | y   C、x & y    D、x ^ y

异或:相同为0,不同为1

11、对两个数组a和b进行如下初始化

  char a[]=ABCDEF”;   char b[]={ ‘A’,’B’,’C’,’D’,’E’,’F’};

    则以下叙述正确的是    D     

A、a和b数组完全相同            B、a和b长度相同  

C、a和b中都存放字符串          D、a数组比b数组长度长

char a[]=ABCDEF”的末尾还藏了一个 '\0'

12、以下程序的执行结果为      C     

#inlcude <stdio.h> 

#define N 2     

#define M N+1

#define NUM (M+1)*M/2

 main()  

    {pirntf("%d",NUM);}         

  A、5     B、6      C、8       D、9

NUM (M+1)*M/2

(2+1+1)*2+1/2=4*2+0=8

13、以下程序中a b最后一次打印的结果正确的是____B____.

void func(int a){

static int b = 0;

printf(“b=%d\n”, b);

a=b+++++a;

return;

}

main(){

int a=10;

func(a);

func(a);

func(a);

printf(“a=%d\n”, a);

}

A、a=10 b=3   B.a=10 b=2   C.a=16 b=2 D.a=16 b=3

func(a);调用了3次

a不变 a=10,b++执行了三次 b=0,b=1,b=2

14、以下对二维数组a的正确说明是    A       

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

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

B 列不能缺省

C 超出了一个组里只有3个

D 不能越过前面的空元素直接初始化后面的元素

15、下面函数fun的功能是     D      

int fun(char s[],char t[])

{ 

int i=0;

while(s[i]==t[i])

if(s[i]==’\0’)

return 0;

else

i++;

return s[i]-t[i];

}

s:hello  t:welloe

A、测字符串s和t的长度   B、将字符串s拷贝到t

C、将字符串t拷贝到s    D、比较字符串s和t的大

s[i]-t[i]相减比大小

16、请分别写出int类型和float类型及char类型与0比较的式子

int a=10;   if(0 == a)

char b=10;  if(0==b)   if(‘\0’==b)

float f ;     if(f>=-1e-6 && f<=1e-6)

17、请描述Linux操作系统用户空间的内存分为哪几个区段

栈区、堆区、.bss、.data、.rodata、常量区、代码区

18、请写出static关键字的作用

static修饰的局部变量:不可以被除本函数外的程序调用,初始化值为0,只初始化一次

static修饰的全局变量:不可以被除本文件以外的文件访问调用,初始化值为0

static修饰的函数:不可以被除本文件以外的文件访问调用

19、写出下列程序的输出结果____ county ________   (5分)

int main(void)

{

char s1[40]="county",s2[20]="side";

int i=0,j=0;

while(s1[i]!='\0')  i++;

while(s2[j]== '\0') s1[++i] = s2[j++];  //永远不执行

s1[i]=0;

printf("%s",s1);

return 0;

}

i计数s1的长度不包括\0

i++后置加加,s1[6]=0;没有改变字符串的值

20、char a = 178,int b = a;  unsigned char c = a;  int d = c;

请问b=__-78____, c=__178_____, d=__178___?

a=178 源码反码补码都是178

将char类型的补码赋值给int类型的补码,并转为源码算出值

补:1111....10110010

反:1111....10110001

源:1000....01001110        -->-178

178正数赋值给无符号的char可以直接赋值

178正数赋值给int类型,直接赋值

21、编写strcpy函数(不调用C的字符串库函数,编写函数 strpy).

已知strcpy函数的原型是 int strcpy (char  strDest[], const char  strSrc[]);

strDest是目的字符串,strSrc是源串。根据原型改写strcpy函数

int i;
for(i=0;strSrc[i]!='\0';i++){
    strDest[i]=strSrc[i];
}
strDest[i]='\0';
printf("%s\n",strDest);

22、已知字符串a、b及空数组c:

Char a[] = “acbdfg”

Char b[] = “13276”

Char c[50];

编写程序,要求c中存储的结果为”12367abcdfg”,并输出

strcpy(c, a);

strcat(c, b);

将c做排序

23、给定一个字符串“I love china”,编写程序完成以单词为单位的逆序,如“china love i”,并要求不允许使用第三方变量保存数据,但可以使用辅助指针变量等。

I love china ---》 anihc evol I à china love i

#include <stdio.h>
#include <string.h>
char str1[13]="Im love china";

void rever(char str[],int start,int end){
	int i=start; //字符串或单词的开始
	int j=end; //字符串或单词的结束
	int temp;
	for( ;i<j;i++,j--){ //i++ j--意为前后两头向中间靠
		temp=str[i];
		str[i]=str[j];
		str[j]=temp;
	}
	printf("%s\n",str);
}
int main(int argc, const char *argv[])
{
	int i;
	int start=0;
	int end=0;
	rever(str1,0,strlen(str1)-1); //先将整个数组翻转,再找出单词,将每个单词翻转
	for(i=0;str1[i]!='\0';i++){
		if(' '==str1[i]){ //以空格分隔判断单词的开头结尾
			end=i-1; //结尾是空格的前一个
			rever(str1,start,end);
			start=i+1; //开头是空格的后一个
		}
	}
	rever(str1,start,strlen(str1)-1); //最后结尾的单词没有末尾空格,单独再调一次
	return 0;
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值