2014中兴笔试试题

1.c语言中的volatile关键字

volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如 操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行 优化,从而可以提供对特殊地址的稳定访问。

2.

2014中兴笔试试题_第1张图片

访问越界了:定义的数组是a[0]-a[9],循环里面是到a[10]了

3.

#include<stdio.h>

void foo(void)
{
	int i;
	printf("%d\n",i);
	i = 999;
}
int main(void)
{
	foo();
	//printf("hello\n");
	foo();
	return 0;
}
运行结果可能为什么?为什么?在两个foo();之间加入printf("hello\n");呢?

结果为随机数;或者是随机数  999;因为第一次释放的空间有可能被第二次重新申请。


4.

#include<stdio.h>

int main()
{
	/*union   _UnionTest
	{
		unsigned int    i;
		unsigned char   ch[2];
	};
	_UnionTest uniontest;
	uniontest.i = 0x1420;
	printf("%d\t%d\n", uniontest.ch[0], uniontest.ch[1]);
}
运行结果是什么?

32  20  

小端优先,先存储20再存储14,后面补0,把上面数转化为2进制的数。由于是共享内存,所以把第一个字节给[0],第二个字节给[1],你算一下,20对应的十进制是32,14对应的十进制是20

#include<stdio.h>

int main()
{
	char buf1[10] = "hello";
	char buf2[10] = "hello";
	if (buf1 == buf2)
		printf("equal");
	else
		printf("not equal");
} 

输出结果是not equal:if语句比较的是地址值而非字符串的值。

5.

阅读下列函数说明,并编写函数 (10分)考点:工具语言  难度:较高)

<函数说明>
  本题中的函数encode()实现对字符串的变换.变换函数encode()顺序考察已知字符串的字符,按以下规则逐组生成新字符串:

(1) 若已知字符串的当前字符不是数字字符,则复制该字符于新字符串中.

(2) 若已知字符串的当前字符是一个数字字符,且它之后没有后继字符,则简单地将它复制到新字符串中

(3) 若已知字符串的当前字符是一个数字字符,并且还有后继字符,设该数字字符的面值为n,则将它的后继字符(包括后继字符是一个数字字符)重复复制n+1次到新字符串中.

(4) 以上述一次变换为一组,在不同组之间另插入一个下划线’_’用于分隔.例如:encode()函数对字符串26a3t2的变换结果为666_a_tttt_2

假定调用变换函数encode()时的已知字符串中不含下划线字符.

<函数原形>

int encode(char *instr,char *outstr);

代码:

#include<stdio.h>
int encode(char *instr,char *outstr)
{
	char *ip,*op,c;
	int k,n;

	ip=instr;
	op=outstr;

	while (*ip) 
	{
		if (*ip>='0'&&*ip<='9'&&*(ip+1))
		{
			n=*ip -'0' + 1;
			c=*++ip;
			for (k=0;k<n;k++)
			{
				*op=c;
				printf("%c",*op);
				op++;
			}
		}
		else
		{
			*op=*ip;
			printf("%c",*op);
			op++;

		}
		if(*(ip+1))
		{
			*op='_';
			printf("%c",*op);
		}
		op++;
		ip++;
	}
	*op='\0';
	return 0;
}
int main()
{
	char *s = "26a3t2",*p;
	p = new char;
	encode (s,p);
	return 0;

} 


你可能感兴趣的:(2014中兴笔试试题)