C语言程序设计——教材回顾2

傍晚才开始写代码,貌似有点晚了,谁让昨天巴西1:7惨败德国,明天早上还有阿根廷VS荷兰,看好梅西,打算起来看直播,今晚看来又写不完这本C语言了,而且指针部分也不是很通,得好好看看。刚才细数了一下,暑假里要做的事还真多,感觉暑假刚开始就有点不够用了,这可怎么办好!算了,还是别这边打一炮,那边打一枪了,还不如好好地一件事一件事的做好,不仅效率高,而且也更有成就感。好了,废话不说了,接着上一篇开始写了。

 

17.Hanoi(汉诺)塔问题。古代有一个梵塔,塔内有3个座A、B、C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但每次只允许移动一个盘,且在移动的过程中在3个座上都始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求编程序输出移动的步骤。

#include 
#include 

int main()
{
    void hanoi(int n,char one,char two,char three);
    int m;
    printf("input the number of diskes:");
    scanf("%d",&m);
    printf("The step to moving %d diskes:\n",m);
    hanoi(m,'A','B','C');
    return 0;
}

void hanoi(int n,char one,char two,char three)
{
    void move(char x,char y);
    if(n==1)
        move(one,three);
    else
        {
            hanoi(n-1,one,three,two);
            move(one,three);
            hanoi(n-1,two,one,three);
        }
}

void move(char x,char y)
{
    printf("%c-->%c\n",x,y);
}

这题其实不错啊,感觉到了递归的优势,如果不用递归还真想不出什么好方法可以这么简单。而且注意move函数并未真正移动盘子,而只是输出移盘的方案。

 

18.用选择法对数组中10个整数按由小到大排序。所谓选择法,就是先将10个数中最小的数与a[0]对换;再将a[1]到a[9]中最小的数与a[1]对换……每比较一轮,找出一个未经排序的数中最小的一个。共比较9轮。

#include 
#include 

int main()
{
    void sort(int array[],int n);
    int a[10],i;
    printf("enter the array\n");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    sort(a,10);
    printf("the sorted array: \n");
    for(i=0;i<10;i++)
        printf("%5d",a[i]);
    printf("\n");
    return 0;
}

void sort(int array[],int n)
{
    int i,j,k,t;
    for(i=0;i


 

19.有一个一维数组,内放10个学生成绩,用全局变量写一个函数,求出平均分、最高分和最低分。

#include 
#include 
float Max=0,Min=0;
int main()
{
    float average(float array[],int n);
    float ave,score[10];
    int i;
    for(i=0;i<10;i++)
        scanf("%f",&score[i]);
    ave=average(score,10);
    printf("max=%6.2f\nmin=%6.2f\naverage=%6.2f\n",Max,Min,ave);
    return 0;
}

float average(float array[],int n)
{
    int i;
    float aver,sum=array[0];
    Max=Min=array[0];
    for(i=1;iMax) Max=array[i];
            else if(array[i]


 

20.外部变量与部变量同名情况。(如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被屏蔽,即它不起作用)

#include 
#include 
int a=3,b=5;//a、b为外部变量
int main()
{
    int max(int a,int b);//本行是函数申明,a和b为形参名
    int a=8;//a为局部变量,主函数内为局部变量a作用域(a=8)
    printf("%d\n",max(a,b));
    return 0;
}

int max(int a,int b)
{
    int c;
    c=a>b?a:b;//a=8,b=5
    return(c);
}


 

21.静态局部变量。

#include 
#include 

int main()
{
    int f(int);
    int a=2,i;
    for(i=0;i<3;i++)
        {
            printf("%d",f(a));
        }
    return 0;
}

int f(int a)
{
    auto int b=0;
    static int c=3;
    b=b+1;
    c=c+1;
    return(a+b+c);
}


 

22.输出1到5的阶乘值。(静态局部变量)

#include 
#include 

int main()
{
    int fac(int n);
    int i;
    for(i=1;i<=5;i++)
        printf("%d!=%d\n",i,fac(i));
    return 0;
}

int fac(int n)
{
    static int f=1;
    f=f*n;
    return(f);
}


 

23.使用寄存器变量。(C语言允许将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取。由于对寄存器的存取速度远高于对内存的存取速度,因此这样做可以提高执行效率。寄存器变量用register声明。)(当今的优化编译系统能够识别使用频繁的变量,从而自动地将这些变量放在寄存器中,而不需要程序设计者指定。。。老谭你这不是在逗我么,既然系统自动会处理,你还说个毛线?!!)

#include 
#include 

int main()
{
    long fac(long);
    long i,n;
    scanf("%ld",&n);
    for(i=1;i<=n;i++)
        printf("%ld!=%ld\n",i,fac(i));
    return 0;
}

long fac(long n)
{
    register long i,f=1;
    for(i=1;i<=n;i++)
        f=f*i;
    return(f);
}


 

24.用extern声明外部变量,扩展它在程序文件中的作用域。

#include 
#include 

int main()
{
    int max(int,int);
    extern int A,B;
    printf("%d\n",max(A,B));
    return 0;
}

int A=13,B=-8;
int max(int x,int y)
{
    int z;
    z=x>y?x:y;
    return(z);
}


 

 

P214页的条件编译,有空回过去看看,对于编译的调试阶段还是蛮有用处的。好了,到此为止把前九章都算打过一遍了,明天是第十章的指针了,得先把书上的好好看看,然后再打程序,这样效率比较高。今天其实没有什么收获啊,一天晃晃就过去了,唯一的收获算是写了篇日记,明确了暑假的任务,然后决定一本书一本书地看,而不是广撒网,这样反而捕不到鱼。

 

 

 

 

 

 

 

你可能感兴趣的:(c语言)