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小时内删除。