C语言笔试题题目

更新时间:2024-06-26 17:36:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言笔试题题目

一、 简答题

1. 程序的局部变量存在于()中,全局变量存在于()中,动态申请数据存在于()中。 2. 设有以下说明和定义:

typedef union {long i; int k[5]; char c;} DATE;

struct data { int cat; DATE cow; double dog;} too; DATE max;

则语句 printf(\的执行结果是:_______ 3. 32位系统下,请问如下语句的值

unsigned char *p1; unsigned long *p2;

p1=(unsigned char *)0x801000; p2=(unsigned long *)0x810000; 请问p1+5= p2+5=

4. int i=10, j=10, k=3; k*=i+j; k最后的值是?

5. #define DOUBLE(x) x+x ,i = 5*DOUBLE(5); i 是多少? 6. 下面程序的输出是_____,为什么? char *ptr;

if ((ptr = (char *)malloc(0)) == NULL) {

puts(\} else {

puts(\}

7. 以下程序运行后的输出结果是______ 。 main() {

char m;

m='B'+32; printf(\}

8. 已有定义如下:

struct node {

int data;

struct node *next; } *p;

以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间。请填空p = (struct node *)malloc(________);

9. 在绝对地址0xXXXXXXXX上写入字符’a’的语句是___________。

10. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) 11. 写一个\标准\宏MIN ,这个宏输入两个参数并返回较小的一个。 12. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 13. 用变量a给出下面的定义

a) 一个整型数(An integer)

b) 一个指向整型数的指针( A pointer to an integer) c) 一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to

an intege)

d) 一个有10个整型数的数组( An array of 10 integers) e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to

integers)

f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers)

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a

function that takes an integer as an argument and returns an integer)

h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一

个整型数( An array of ten pointers to functions that take an integer argument and return an integer )

14. 关键字static的作用是什么? 15. 关键字const的含义。

16. 关键字volatile有什么含意?并给出三个不同的例子。 17. 一个参数既可以是const还可以是volatile吗?解释为什么。 18. 一个指针可以是volatile 吗?解释为什么。 19. 下面的函数有什么错误:

int square(volatile int *ptr) {

return *ptr * *ptr; }

20. 在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个

纯粹的ANSI编译器。写代码去完成这一任务。 21. 局部变量能否和全局变量重名? 22. 如何引用一个已经定义过的全局变量?

23. 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

24. 语句for( ;1 ;)有什么问题?它是什么意思? 25. do……while和while……do有什么区别? 26. 下列哪种方法更好,为什么?

define dPS struct s * typedef struct s * tPS;

27. 下面的结构是合法的吗,如果是它做些什么?

int a = 5, b = 7, c; c = a+++b;

28. 队列和栈有什么区别?

29. 全局变量和局部变量是否有区别?如果有,是什么区别? 30. 堆栈溢出一般是由什么原因导致的? 31. 冒泡排序算法的时间复杂度是什么?

32. 分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句。 33. 不能做switch()的参数类型是: 34. 某32位系统下,请计算sizeof 的值.

char str[] = “http://www.ibegroup.com/” char *p = str ; int n = 10;

请计算

sizeof (str ) = ? (1) sizeof ( p ) = ? (2) sizeof ( n ) = ? (3) void Foo ( char str[100]){ sizeof( str ) = ? (4) }

void *p = malloc( 100 ); sizeof ( p ) = ? (5)

35. 请说出const与#define 相比,有何优点? 36. 回答下面的问题.

a) 头文件中的 ifndef/define/endif 干什么用?预处理

b) #include 和 #i nclude “filename.h” 有什么区别?

37. 使用malloc()函数时,为什么要将其返回值强制转换成被赋值指针变量的数据类型? 38. 列举一个软件中时间换空间或者空间换时间的例子。 39. 以下C语言语句有什么区别

char * const p; char const * p;

const char *p;

40. 下面x, y, *p的值是多少,有什么问题?

int x, y, z = 2; int *p=&z; x=sizeof*p; y=x/*p;

41. 下面的语句是什么意思?如何声明或定义才使它们更易懂?(10分)

int (*foo())(); int (*foo())[]; int (*foo[])(); (*(void(*)())0)();

void (*signal(int,void(*)(int)))(int);

42. 如何定义Bool变量的TRUE和FALSE的值。

43. 运行char a*+ = ”abc”后,内存会开辟几块内存,这此内存共占多少个字节? 44. 运行char *p = ”abc”后,内存会开辟几块内存,这此内存共占多少个字节? 45. 说出 int *(*p)[3]; p是什么变量?如果p是指针变量,那么p+1的偏移量是多少? 46. 一个32位的机器,该机器的指针是多少位?

47. 已知一个数组table,用一个宏定义,求出数据的元素个数

二、 程序分析题

1. 下面的代码有什么问题?

char *_strdup( const char *strSource ) {

static char str[MAX_STR_LEN]; strcpy(str, strSource); return str; }

2. 下面的代码输出是什么,为什么? void foo(void) {

unsigned int a = 6; int b = -20;

(a+b > 6) ? puts(\}

3. 请写出下列代码的输出内容

#include main() {

int a,b,c,d; a=10; b=a++; c=++a; d=10*a++;

printf(\,c,d:%d,%d,%d\,b,c,d); return 0; }

4. Test函数的运行结果如何?

void GetMemory(char *p) {

p = (char *)malloc(100); }

void Test(void) {

char *str = NULL; GetMemory(str);

strcpy(str, \printf(str); } 5. Test函数的运行结果如何?

char *GetMemory(void) {

char p[] = \return p; }

void Test(void) {

char *str = NULL; str = GetMemory(); printf(str); }

6. Test函数的运行结果如何?

Void GetMemory2(char **p, int num) {

*p = (char *)malloc(num); }

void Test(void) {

char *str = NULL;

GetMemory(&str, 100); strcpy(str, \printf(str); }

7. Test函数的运行结果如何?

void Test(void) {

char *str = (char *) malloc(100); strcpy(str, “hello”); free(str);

if(str != NULL) {

strcpy(str, “world”); printf(str); } }

8. 写出下列代码的输出内容

#include int inc(int a) {

return(++a); }

int multi(int*a,int*b,int*c) {

return(*c=*a**b); }

typedef int(FUNC1)(int in);

typedef int(FUNC2) (int*,int*,int*);

void show(FUNC2 fun,int arg1, int*arg2) {

INCp=&inc;

int temp =p(arg1);

fun(&temp,&arg1, arg2); printf(\}

main() {

int a;

show(multi,10,&a); return 0; }

9. 请找出下面代码中的所以错误

说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba” #include\main() {

char*src=\char* dest=NULL;

int len=strlen(src);

dest=(char*)malloc(len); char* d=dest; char* s=src[len]; while(len--!=0) d++=s--;

printf(\return 0; }

10. 以下程序有什么错误

试题1: void test1() {

char string[10];

char* str1 = \strcpy( string, str1 ); }

试题2: void test2() {

char string[10], str1[10]; int i;

for(i=0; i<10; i++) {

str1 = 'a'; }

strcpy( string, str1 );

}

试题3:

void test3(char* str1) {

char string[10];

if( strlen( str1 ) <= 10 ) {

strcpy( string, str1 ); } }

11. 下面程序的运行结果:

main() {

int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1);

printf(\}

12. 请问以下代码有什么问题:

int main() {

char a; char *str=&a; strcpy(str,\ printf(str); return 0; }

13. 交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3; 14. 以下是求一个数的平方的程序,请找出错误:

#define SQUARE(a) ((a)*(a)) int a=5; int b;

b=SQUARE(a++); 15. 下面的程序运行结果是( )

设int arr[]={6,7,8,9,10}; int *ptr=arr; (ptr++)+=123;

printf("%d,%d",*ptr,*(++ptr));

16. 下面的两段代吗?有什么区别?什么时候需要使用代码2?

1、

int i = 10; int j = i; int k = i; 2、

volatile int i = 10; int j = i; int k = i;

17. printf(\输出?

18. 在32位的X86系统下,输出的值为多少?

#include int main() {

int a[5] = {1,2,3,4,5};

int *ptr1 = (int *)(&a + 1); int *ptr2 = (int *)((int)a + 1); printf(\//注意从高字节开始打印 return 0; }

19. 下面代码的有问题吗?为什么?

#include void func(char a[10]) {

char c = a[3];

}

int main() {

char b[10] = \func(b[10]); return 0; }

20. 下面代码输出的结果是多少?

#include void fun(int i) {

if(i>0) {

fun(i/2); }

printf(\}

int main() {

fun(10); return 0; }

三、 编程题

1. 不调用库函数,自己实现memcpy函数。

void *memcpy(void *dest, const void *src, size_t n); 2. 不调用库函数,自己实现strcpy函数 。 3.

a) 编写strcat函数,已知strcat函数的原型是char *strcat (char *strDest, const char

*strSrc);其中strDest 是目的字符串,strSrc 是源字符串(不能调用库函数)。 b) strcat能把strSrc 的内容连接到strDest,为什么还要char * 类型的返回值?

两个字符串,s,t;把t字符串插入到s字符串中,s字符串有足够的空间存放t字符串。 写一函数,实现删除字符串str1中含有的字符串str2。

编程,判断存储方式是大端存储,还是小端存储,并说出为什么要进行大小端的判定? 不调用库函数,自己实现long atol(const char *nptr)函数。 编写strcat函数()。已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);其中strDest 是目的字符串,strSrc 是源字符串。

a) 不调用C++/C 的字符串库函数,请编写函数 strcat。

b) strcat能把strSrc 的内容连接到strDest,为什么还要char * 类型的返回值?

写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)。功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:\的首地址传给

4. 5. 6. 7. 8.

9.

10. 11. 12. 13. 14. 15. 16. 17. 18. 19.

20. 21. 22.

intputstr后,函数将返回9,outputstr所指的值为123456789 不用库函数,用C语言实现将一整型数字转化为字符串。 用指针的方法,将字符串“ABCD1234efgh”前后对调显示。

有一分数序列:1/2,1/4,1/6,1/8??,用函数调用的方法,求此数列前20项的和。 实现子串定位。

有1,2,....一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O。

编写一个C函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的。

给定字符串A和B,输出A和B中的最大公共子串。

编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数。

在不用第三方参数的情况下,交换两个参数的值。 写一个程序,把一个100以内的自然数分解因数。(自然数分解因数就是将一个自然数分解为几个素数的乘积,提示,由于该数不是很大,所以可以将质数保存在数组中,以加快计算速度)。

完成字符串拷贝可以使用sprintf、strcpy及memcpy函数,请问这些函数有什么区别,你喜欢使用哪个,为什么?

输出和为一个给定整数的所有组合。例如n=5,5=1+4;5=2+3(相加的数不能重复)则输出1,4;2,3。

读文件file1.txt的内容(例如): 12 34 56

输出到file2.txt: 56 34 12

(逆序)

有一个数组a[1000]存放0--1000;要求每隔二个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以7个数为例:{0,1,2,3,4,5,6,7} 0-->1-->2(删除)-->3-->4-->5(删除)-->6-->7-->0(删除),如此循环直到最后一个数被删除。 写一个函数,将其中的'\\t'都转换成4个空格。 编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh”。函数头是这样的: //pStr是指向以'\\0'结尾的字符串的指针 //steps是要求移动的n

void LoopMove ( char * pStr, int steps ) {

//请填充... }

判断两个数组中是否存在相同的数字,给定两个排好序的数组,怎样高效得判断这两个数组中存在相同的数字?

23.

24. 25.

26.

27. 按单词反转字符串并不是简单的字符串反转,而是按给定字符串里的单词将字符串倒转

过来,就是说字符串里面的单词还是保持原来的顺序,这里的每个单词用空格分开。例如:Here is www.fishksy.com.cn经过反转后变为:www.fishksy.com.cn is Here 28. 求一个整形中1的位数。

29. 费波那其数列,1,1,2,3,5??编写程序求第十项。可以用递归,也可以用其他方

法,但要说明你选择的理由。

27. 按单词反转字符串并不是简单的字符串反转,而是按给定字符串里的单词将字符串倒转

过来,就是说字符串里面的单词还是保持原来的顺序,这里的每个单词用空格分开。例如:Here is www.fishksy.com.cn经过反转后变为:www.fishksy.com.cn is Here 28. 求一个整形中1的位数。

29. 费波那其数列,1,1,2,3,5??编写程序求第十项。可以用递归,也可以用其他方

法,但要说明你选择的理由。

本文来源:https://www.bwwdw.com/article/bgb3.html

Top