1.用变量a给出下面的定义(10分)
a) 一个整型数(An integer)
b)一个指向整型数的指针( A pointer to an integer)
c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)r
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 )
答案:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer
2.C语言中关键字static有哪些作用?(10分)
答案:
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
3.写一个函数将一个字符串逆序(15分)
答案示例代码:
#include<stdio.h>
#include<string.h>
void reverse_string(char *a)
{
int i=0;
char temp =0;
char *ps;
char *pe;
if(!a)
return;
ps=a;
while(*a!=0)
a++;
pe=a;
for(i=0;i<(pe-ps)/2;i++)
{
temp=*(ps+i);
*(ps+i)=*(pe-i-1);
*(pe-i-1)=temp;
}
}
4.请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1(15分)
答案示例代码:
int checkCPU(void)
{
union w
{
int a;
char b;
}c;
c.a = 1;
return(c.b == 1);
}
5. 编写函数,该函数在一个字符串中到可能的最长的子字符串,且该字符串是由同一字符组成的。(15分)
答案示例代码:
char* search(char *cpSource, char ch)
{
char *cpTemp=NULL, *cpDest=NULL;
int iTemp, iCount=0;
while(*cpSource)
{
if(*cpSource == ch)
{
iTemp = 0;
cpTemp = cpSource;
while(*cpSource == ch)
{
++iTemp;
++cpSource;
}
if(iTemp > iCount)
{
iCount = iTemp;
cpDest = cpTemp;
}
if(!*cpSource)
break;
}
++cpSource;
}
return cpDest;
}
6.一个链表的结点结构(35分)
struct Node
{
int data;
Node *next;
};
typedef struct Node Node;
(1)已知链表的头结点head,写一个函数把这个链表逆序;
(2)已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同)
答案示例代码:
(1)
Node * ReverseList(Node *head)
{
Node *p1 = head ;
Node *p2 = p1->next ;
Node *p3 = p2->next ;
if ( head == NULL || head->next == NULL )
return head;
p1->next = NULL ;
while ( p3 != NULL )
{
p2->next = p1 ;
p1 = p2 ;
p2 = p3 ;
p3 = p3->next ;
}
p2->next = p1 ;
head = p2 ;
return head ;merge函数
}
(2)
Node*Merge(Node*head1,Node*head2)
{
Node*head=NULL;
Node*p1=NULL;
Node*p2=NULL;
Node*pcurrent=NULL;
if(head1==NULL)
returnhead2;
if(head2==NULL)
returnhead1;
if(head1->data<head2->data)
{
head=head1;
p1=head1->next;
p2=head2;
}
else
{
head=head2;
p2=head2->next;
p1=head1;
}
pcurrent=head;
while(p1!=NULL&&p2!=NULL)
{
if(p1->data<=p2->data)
{
pcurrent->next=p1;
pcurrent=p1;
p1=p1->next;
}
else
{
pcurrent->next=p2;
pcurrent=p2;
p2=p2->next;
}
}
if(p1!=NULL)
pcurrent->next=p1;
if(p2!=NULL)
pcurrent->next=p2;
return head;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论