C语言网络笔记转的修改.docx

上传人:b****6 文档编号:7059831 上传时间:2023-01-16 格式:DOCX 页数:75 大小:61.59KB
下载 相关 举报
C语言网络笔记转的修改.docx_第1页
第1页 / 共75页
C语言网络笔记转的修改.docx_第2页
第2页 / 共75页
C语言网络笔记转的修改.docx_第3页
第3页 / 共75页
C语言网络笔记转的修改.docx_第4页
第4页 / 共75页
C语言网络笔记转的修改.docx_第5页
第5页 / 共75页
点击查看更多>>
下载资源
资源描述

C语言网络笔记转的修改.docx

《C语言网络笔记转的修改.docx》由会员分享,可在线阅读,更多相关《C语言网络笔记转的修改.docx(75页珍藏版)》请在冰豆网上搜索。

C语言网络笔记转的修改.docx

C语言网络笔记转的修改

C语言网络笔记

    程序设计方法:

        1.从问题的全局出发,写出一个概括性的抽象的描述。

        2.定义变量,选取函数,确定算法。

算法这个东西不好说,遇到的问题多了,自然就会形成自己一整套的算法。

        3.按照解决问题的顺序把语句和函数在main()里面堆砌起来。

    一个好的C程序员应该做到:

        1.在运行程序之前存盘

        2.所有在程序中用到的常量都用预处理语句在程序开头定义

        3.所有在程序中用到的函数都在程序开头声明

        4.头文件的#ifndef

        5.变量名和函数名使用有意思的英文单词或汉语拼音

        6.尽量少用全局变量或不用全局变量

        7.采用层次的书写程序格式,对for,while,if_else,do_while,switch_case等控制语句或他们的多重嵌套,采用缩格结构

        8.所有对应的{}都对齐

        9.尽量用for,而不用while做记数循环

        10.尽量不用goto语句

        11.一个函数不宜处理太多的功能,保持函数的小型化,功能单一化

        12.一个函数要保持自己的独立性,如同黑匣子一样,单进单出

        13.函数的返回类型不要省略

        14.用malloc()分配内存空间时,以后一定要用free()释放

        15.打开文件后,记住在退出程序前要关闭

        16.出错情况的处理

        17.写上必要的注释

    这里说的是一些基本的,经常遇到的情况,还有其他很多要注意的地方,在实际编程中都会遇到.

(六)条件语句

二、if--else语句

            if(表达式)  语句1;

        else  语句2;

    同样,当语句1或语句2是多于一个语句时,需要用{}把语句括起来。

    

三、if--else if--else结构。

        if(表达式1) 

            语句1; 

        else if(表达式2) 

            语句2; 

        else if(表达式3) 

            语句3; 

              . 

              . 

              . 

        else 

            语句n; 

    条件语句可以嵌套,这种情况经常碰到,但条件嵌套语句容易出错,其原因主要是不知道哪个if对应哪个else。

    例如:

 

        if(x>20||x<-10) 

            if(y<=100&&y>x) 

                printf(Good); 

            else 

                printf(Bad); 

    对于上述情况, Turbo C2.0规定:

 else语句与最近的一个if语句匹配, 上例中的else与if(y<=100&&y>x)相匹配。

为了使else与if(x>20||x<-10)相匹配, 必须用花括号。

如下所示:

 

最好用花括号!

        if(x>20||x<-10)

        { 

            if(y<=100&&y>x) 

                printf(Good); 

        } 

        else 

            printf(Bad); 

      

     例如求绝对值的功能在C的库里面就有。

看下面的:

  

             y=fabs(x);   /*求x的绝对值,然后赋值给y*/

      求开方sqrt(),求指数幂exp()等等,这些与数学方面有关的函数都在math.h里面。

     

     

    

四、switch--case语句

    在编写程序时, 经常会碰到按不同情况分转的多路问题,  这时可用嵌套if -else-if语句来实现, 但if-else-if语句使用不方便, 并且容易出错。

对这种情况, Turbo C2.0提供了一个开关语句。

开关语句格式为:

 

        switch(变量) 

        { 

            case 常量1:

 

                 语句1或空; 

            case 常量2:

 

                 语句2或空; 

                   . 

                   . 

                   . 

            case 常量n:

 

                 语句n或空; 

            default:

 

                 语句n+1或空; 

        } 

                

    执行switch开关语句时,将变量逐个与case后的常量进行比较,若与其中一个相等,则执行该常量下的语句,若不与任何一个常量相等,则执行default后面的语句。

    注意:

 

        1.switch中变量可以是数值,也可以是字符,但必须是整数。

        2.可以省略一些case和default。

        3.每个case或default后的语句可以是语句体,但不需要使用{和}括起来。

    例如:

        main()

        {

            int x,y;

            scanf(%d,&x);

            switch(x)

            {

                case 1:

                     y=x+1;

                     break;  /*退出开关语句,遇到break才退出*/

                case 4:

                     y=2*x+1;

                     break;

                default:

                     y=x--;

                     break;

            }

            printf(%d\n,y);

        }

                

    从上面的例子可以看出,用开关语句编的程序一定可以用if语句做。

那么在什么情况下需要用switch语句呢?

一般在出现比较整的情况下或者能转化成比较整数的情况下使用。

看下面的例子:

    

    例子:

一个学生的成绩分成五等,超过90分的为'A',80-89的为'B',70-79为'C',60-69为'D',60分以下为'E'。

现在输入一个学生的成绩,输出他的等级。

        

(1).用if语句

        省略

       

(2).用switch语句

       main()

       {

           int num;

           char grade;

           scanf(%d,&num);

           num/=10;

           switch(num)

           {

               case 10:

(冒号)

               case 9:

                    grade='A';

                    break;

               case 8:

                    grade='B';

                    break;

               case 7:

                    grade='C';

                    break;

               case 6:

                    grade='D';

                    break;

               default:

                    grade='E';

                    break;(可以省略的)

           }

           printf(%c,grade);

       }

                

       说明一点,并不是每个case里面有都语句,有时侯里面是空的,就好象这一题。

switch语句执行的顺序是从第一case判断,如果正确就往下执行,直到break;如果不正确,就执行下一个case。

所以在这里,当成绩是100分时,执行case 10:

然后往下执行,grade='A';break;退出。

(妙)

       想想看,这里为什么要用num/=10;?

       假设当程序中有浮点数时怎么办呢?

(七)循环语句和循环控制

一、循环语句

    

(一)、for循环  它的一般形式为:

        for(<初始化>;<条件表达式>;<增量>)

        

        注意:

 

            

(1).

For与while之间的选择是:

当已知循环的结束点,用for

否则用while.

            

(2).for循环中的初始化、条件表达式和增量都是选择项,即可以缺省,但;不能缺省。

省略了初始化,表示不对循环控制变量赋初值。

省略了条件表达式,则不做其它处理时便成为死循环。

         

   (3).for循环可以有多层嵌套。

  

   

(二)、while循环  它的一般形式为:

 

       while(条件)

           语句;

       while循环表示当条件为真时,便执行语句。

直到条件为假才结束循环。

并继续执行循环程序外的后续语句。

       例如:

           #include stdio.h

           main() 

           { 

               char c; 

               c='\0';             /*初始化c*/

               while(c!

='\n')      /*回车结束循环*/

                   c=getche();       /*带回显的从键盘接收字符*/

           } 

                

              注意:

 

           

(1).在while循环体内也允许空语句。

 

               例如:

 

                   while((c=getche())!

='\n'); 

               这个循环直到键入回车为止。

 

           

(2).可以有多层循环嵌套。

 

           (3).语句可以是语句体, 此时必须用{和}括起来。

               用while循环求1+2+……+100的和:

               main()

               {

                   int sn=0,i=0;

                   while(++i<=100)

                       sn+=i;                /*求1+2+……+100*/

                   printf(%d\n,sn);

               }

    (三)、do--while循环  它的一般格式为:

        do

        {

            语句块;

        }

        while(条件);(do…while需要“;”)

       

二、循环控制

    

(一)、break语句

             当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起。

即满足条件时便跳出循环。

        例如:

        main()

        {

            int sn=0,i;

            for(i=1;i<=100;i++)

            {

                if(i==51) break;      /*如果i等于51,则跳出循环*/

                sn+=i;                /*1+2+……+50*/

            }

            printf(%d\n,sn);

        }

                

       可以看出,最终的结果是1+2+……+50。

因为在i等于51的时候,就跳出循环了。

       注意:

 

           1. break语句对if-else的条件语句不起作用。

           2. 在多层循环中,一个break语句只向外跳一层。

         

    

(二)、continue语句

        continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。

        continue语句只用在for、while、do-while等循环体中, 常与if条件语句一起使用,用来加速循环。

  

    (三)、goto语句

        goto语句是一种无条件转移语句,与BASIC中的goto语句相似。

goto语句的使用格式为:

 

            goto  标号; 

        其中标号是Turbo C 2.0中一个有效的标识符,这个标识符加上一个:

一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句。

标号既然是一个标识符,也就要满足标识符的命名规则。

另外标号必须与goto语句同处于一个函数中,但可以不在一个循环层中。

通常goto语句与if条件语句连用,当满足某一条件时,程序跳到标号处运行。

goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时,用goto语句则比较合理。

Goto语句一般很少用,而且很不好用

        main()

        {       

            int sn=0,i;

            for(i=1;i<=100;i++)

            {

                if(i==51) goto loop;  /*如果i等于51,则跳出循环*/

                sn+=i;                /*1+2+……+50*/

            }

            loop:

 ;

            printf(%d\n,sn);

        }

        可以看出,这儿的goto语句和break作用很类似。

        这儿的loop:

 ;

              printf(%d\n,sn);

        也可以写成loop:

 printf(%d\n,sn);

        main()

        {

            int sn=0,i;

            for(i=1;i<=100;i++)

            {

                if(i==51) goto loop; /*如果i等于51,则跳出本次循环*/

                sn+=i;               /*1+2+……+50+52+……+100*/

                loop:

 ;

            }

            printf(%d\n,sn);

        }

        可以看出这儿的loop语句和continue的作用类似。

        但是某些情况下又必须使用goto语句,否则会让程序大大臃肿。

如:

        main() 

        {

            int i,j,k;

            printf(i  j  k\n);

            for(i=0;i<2;i++)

                for(j=0;j<3;j++)

                    for(k=0;k<3;k++)

                    {

                        if(k==2) goto loop;

                        printf(%d  %d  %d\n,i,j,k);

                    }

                    loop:

 ;

        } 

          输出结果为:

 

            i  j  k

            0  0  0

            0  0  1

        如果不使用goto语句,而使用break,continue语句,应该这样

        main() 

        {

            int i,j,k;

            printf(i  j\n);

            for(i=0;i<2;i++)

            {

                for(j=0;j<3;j++)

                {

                    for(k=0;k<3;k++)

                    {

                        if(k==2) break;

                        printf(%d  %d  %d\n,i,j,k);

                    }

                    if(k==2) break;

                }

                if(k==2) break;

            }

        }

             输出结果为:

 

              i  j  k

              0  0  0

              0  0  1

       所以在同时跳出多层循环时,应该使用goto语句。

记住,所有的goto语句其实都是可以用break,continue代替的。

     下面举几个例子:

     1.求两个整数的最大公约数。

例如10和15的最大公约数是5。

         分析:

最大公约数一定小于等于最小的那个数一半,同时能被两数整除。

妙解

     main()

     {

         int num1,num2,i,min;

         scanf(%d%d,&num1,&num2);

         min=num1

num1:

num2;       /*得到最小值*/

         for(i=min/2;i>0;i--)

             if(num1%i==0&&num2%i==0) break;

         printf(最大公约数为%d\n,i);

     }

    

     3.判断一个整数是不是素数(素数就是只能被本身和1整除的数)。

  

             flag=0;                /*标志变量复位*/

             if(num%i==0)

             {

                 flag=1;

                 break;

             }

         }

         if(flag==0) printf(是素数\n);

         else printf(不是素数\n);

     }      

     (八)数组

数组,顾名思义就是一组同类型的数。

   四、字符数组

  Care:

字符数组的‘h’

        char array[5]={72,69,76,76,79};  /*用对应的ASCII码*/

      举几个例子:

    1.很不错的题目:

输入10个整数存入数组中,然后把它们从小到大排列并放在同一数组中。

(思路:

先找出最小的,放在第一个位置,为了防止把原先的数覆盖掉,可以把原先的第一个数和最小数的位置互换)。

    main()

    {

        int array[10];

        int i,j,min,stmp;

        for(i=0;i<10;i++) scanf(%d,&array[i]);

   for(i=0;i<9;i++)

   {

       min=array[i];

       for(j=i+1;j<10;j++)

           if(min>array[j])        /*里面的4行语句很重要*/

           {

               min=array[j];

               stmp=array[i];

               array[i]=array[j];

               array[j]=stmp;

           }

   }

         for(i=0;i<10;i++) printf(%d ,array[i]);

        printf(\n);

    }

                

分析:

先让第一个值作为基准,如果后面有比它小的,那么就把这两个数互换一下,同时把基准换成小的值。

两个数互换应该这样(stmp=a;a=b;b=stmp;),而不是(a=b;b=a;),想想这是为什么?

必须要用一个变量作为桥梁。

这种一个一个的把最小的放在前面的排序方法,我们形象的叫做冒泡法。

冒泡法:

#include

ma

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1