美文网首页
c课堂笔记 day-3

c课堂笔记 day-3

作者: 努力活得更好 | 来源:发表于2016-12-14 17:58 被阅读0次

    作业讲解:阶乘:5!=5x4x3x2x1

                #include<stdio.h>
                int main()
                {
                   //阶乘:5!=5*4*3*2*1
                   //0!=1!=1;这是规定
                   int num=0,sum=1;
                   printf("input num:");
                   scanf("%d",&num);
                   int i;
                   for(i=1;i<=num;i++)
                   {
                      sum*=i;
                      
                   }
                   printf("%d %d\n",num,sum);
                }
    

    作业讲解: 注意这题的区别 程序1、2中有注意点

    $
    $$
    $$$
    $$$$
    $$$$$
           (1)  #include<stdio.h>
                int main()
                {
                   int row=0;
                   int col=0;
                   int num;
                   printf("input num:");
                   scanf("%d",&num);
                   for(;row<=num;row++)
                   {     //注意省略和不省略col=1;的结果
                        for(;col<=row;col++)
                        printf("$");
                        printf("\n");
                   }
                   return 0;
                }
                 
            (2) #include<stdio.h>
                int main()
                {
                   int row=0;
                   int col=0;
                   int num;
                   printf("input num:");
                   scanf("%d",&num);
                   for(row=0;row<=num;row++)
                   {
                        //注意省略和不省略col=1;的结果
                        for(col=0;col<=row;col++)
                        printf("$");
                        printf("\n");
                   }
                   return 0;
                }
    

    for(表达式1;表达式2;表达式3)

    执行顺序:
    A.表达式1
    B.表达式2,若表达式2成立,则执行(C);不成立,执行(E)
    c.执行循环体即{}里的内容;
    D.表达式3,执行(B)
    E.结束循环

    作业字母金字塔:

            讲解:     A
                     BBB
                    CCCCC
    

    #######include<stdio.h>
    int main()
    {
    char ch='a';
    char chb=65;
    int num=97;
    //字符变量的十进制ascii码值问题
    printf("char: ch='%c' ; ch=%d\n",ch,ch);
    printf("char: chb='%c' ; chb=%d\n",chb,chb);
    printf("int : num=%d ; num='%c'\n",num,num);
    }

    \

    #######include<stdio.h>
    int main()
    {
    int row=0;
    int col=0;
    char ch='A';
    for(row=1;row<=26;row++)
    {
    for(col=0;col<26-row;col++)
    printf(" ");
    for(col=1;col<=2*row-1;col++)
    printf("%c",ch);
    ch++;
    printf("\n");
    }
    return 0;
    }

    时钟问题:

    原版
    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
    int i,j,b;
    for(b=0;b<24;b++)
    {
    for(j=0;j<60;j++)
    {
    for(i=0;i<60;i++)
    {
    system("clear");
    printf("时钟:%d:%d:%d\n",b,j,i);

                   sleep(1);
               }
                 
                  system("clear");
                  printf("时钟:%d:%d:%d\n",b,j,i);
                   
                  sleep(1);
              
           }
           
                   system("clear");
                   printf("时钟:%d:%d:%d\n",b,j,i);
                       
                   sleep(1);
               
       }
    }
    

    改进版
    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
    int i,j,b;
    printf("输入时间:");
    scanf("%d %d %d",&b,&j,&i);
    for(;;)
    {
    for(;b<=24;b++)
    {
    for(;j<3;j++)
    {
    for(;i<3;i++)
    {
    system("clear");
    printf("时钟:%02d:%02d:%02d\n",b,j,i);

                       sleep(1);
                       
                   }
                      i=0;
                      system("clear");
                printf("时钟:%02d:%02d:%02d\n",b,j,i);
                              //%02d:代表输出的宽度
                      sleep(1);
                  
               }
                      j=0;
                       system("clear");
                printf("时钟:%02d:%02d:%02d\n",b,j,i);
                           
                       sleep(1);
                   
           }
           b=0;
         }  
         
    }
    

    百钱买百鸡问题:

            #include<stdio.h>
    
            int main()
            {
               int i,j,k;
               for(i=1;i<=20;i++)
                 for(j=1;j<=33;j++)
                   for(k=1;k<=100;k++)
              if(i+j+k==100&&i*5+j*3+k*1/3==100&&k%3==0)
                   {
                        printf("%d %d %d\n",i,j,k);
                   }   
                   
            }
    

    一.数组: 如果要定义太多的数字,如果一个一个去定义那时没有必要的

    所以数组的意义就在这里
    (1) 数组的定义:
    DataType ArrayName[size];
    DataType:数据类型,int,float,double,char,等等
    ArrayName:数组名
    size: 数组的大小或数组下标,必须是常量表达式
    [ ]: 下标运算符 从0下标开始到size-1
    例:
    定义一个数组大小为5,其中每个元素都是int类型
    int arr[5];
    arr:数组名
    5 :数组大小即数组元素的个数
    int :数组元素的类型

    (2) 数组的初始化

    int arr[3]={1,2,3}; 完全初始化
    int arr1[3]={1,3}; 缺省初始化 其他默认为0
    int arr2[3]={1};
    int arr3[3]={[2]=3}; 不建议 这么写 有些c标准支持这种写法 这是给某个元素赋初值
    int arr4[]={1,2,3,4};

    int arr5[]={}; // error

    int arr[5];
    arr[5]={1,2,3,4,5}; //这样的赋值方式 error
    注:数组若要初始化,必须在定义的同时初始化,
    不能先定义,后初始化;

    //以下方法不可以,编译器会报错:
    /*
    int n = 6;
    int arr[n];

    int m;
    scanf("%d",&m);
    int buf[m];
    */

    简单介绍宏定义
    #######define M 5 后面不能跟分号!!!
    意思是:用M代替5;

    (3) 数组元素的访问

    使用下标形式:从0下标开始到size-1
    int arr[5];
    arr[1]:访问第二个元素
    arr[4]:访问第五个元素

           #include<stdio.h>
            int main()
            {
              //数组元素初始化
              int arr[5]={1,2,3,4,5};
              //访问数组第三个元素下标从0开始为2
              printf("%d\n",arr[2]);
              //数组元素之前的值
              printf("before:%d\n",arr[3]);
              //数组元素的操作
              arr[3]*=5;
              printf("after:%d\n",arr[3]);
            }
    


    #include<stdio.h>
    int main()
    {
    //数组元素未初始化输出的随机值 情况
    int arr[5];
    printf("arr[0] = %d\n",arr[0]);
    printf("arr[1] = %d\n",arr[1]);
    printf("arr[2] = %d\n",arr[2]);
    printf("arr[3] = %d\n",arr[3]);
    printf("arr[4] = %d\n",arr[4]);
    }

    (4) 遍历数组:逐个访问

            #include<stdio.h>
            int main()
            {
              
              int arr[5]={1,2,3};
              int i;
              for(i=0;i<5;i++)
              //第一个%d:对应数组的下标
              //第二个%d:对应数组元素的值
              printf("arr[%d] = %d\n",i,arr[i]);
              return 0;
            }
    

    (5) 数组的存储

             数组也是一种数据结构,数组中的元素顺序存储
             数组中每个元素的类型都相同;
                #include<stdio.h>
                int main()
                {
                  int arr[5] = {1,2,3,4,5};
                  int i = 0;
                  for(i=0;i<5;++i)
                  {
                     //地址占位符:%p或者%x,(正规用法是%p)
                                   //这里的&是取地址符
               printf("&arr[%d] = %p\n",i,&arr[i]);
                  }
                }
                结果:
                    &arr[0] = 0x7ffcd4f0c670
                    &arr[1] = 0x7ffcd4f0c674
                    &arr[2] = 0x7ffcd4f0c678
                    &arr[3] = 0x7ffcd4f0c67c
                    &arr[4] = 0x7ffcd4f0c680
                    
                    
                    #include<stdio.h>
                    int main()
                    {
                      int arr[5] = {1,2,3,4,5};
                      int i = 0;
                      for(i=0;i<5;++i)
                      {
                   //地址占位符:%p或者%x,(正规用法是%p)
                  printf("&arr[%d] = %p\n",i,&arr[i]);
    
                      }
        printf("sizeof(arr)=%ld\n",sizeof(arr));=20
                  内存中的所占的字节
                    }
    

    (6) 数组地址问题

    int arr[5]:
    arr:0x000000 数组名,也代表数组元素的首地址,即第一个元素的地址
    &arr[0]:0x000000 数组元素的首地址,即第一个元素的地址
    &arr:0x000000 数组的首地址
    arr+1:0x000004
    &arr[0]+1:0x000004
    &arr+1:0x000014 偏移量为sizeof(arr)
    arr+1和&arr[0]+1:表达的意思一样,
    地址偏移sizeof(arr[0])个字节

                    #include<stdio.h>
                    int main()
                    {
                       int arr[5]={1,2,3,4,5};
                       //数组元素的地址问题
                      // printf("arr[0] = %d\n",arr[0]);
                      //printf("arr[1] = %d\n",arr[1]);
                       printf("arr = %p\n",arr);
                       printf("arr+0=%p\n",arr+0);
                       printf("arr+1=%p\n",arr+1);
                       printf("arr+2=%p\n",arr+2);
                       printf("arr+3=%p\n",arr+3);
                       printf("arr+4=%p\n",arr+4);
                          
                    }
             结果:
                       arr = 0x7ffe0fce0e60// 这里首地址一样
                        arr+0=0x7ffe0fce0e60//
                        arr+1=0x7ffe0fce0e64
                        arr+2=0x7ffe0fce0e68
                        arr+3=0x7ffe0fce0e6c
                        arr+4=0x7ffe0fce0e70
    

    (7) 数组元素的赋值

                 **熟练数组元素的赋值和遍历输出
                   
                    #include<stdio.h>
                    int main()
                    {
                       int arr[5];
                       int i = 0;
                       //给数组元素赋值
                       printf("input 5 num:\n");
                       for(i=0;i<5;i++)
                       {
                          //arr[i]=2*i;
                          scanf("%d",&arr[i]); //注意格式
                          
                       }
                       //遍历输出
                       for(i=0;i<5;i++)
                       printf("arr[%d]=%d\n",i,arr[i]);
                          
                    }
    
                求数组和与平均值:
                        #include<stdio.h>
                        int main()
                        {
                           int arr[5]={1,2,3,4,5};
                           int i=0;
                           int sum=0;
                           float aegv=0;
                           for(i=0;i<5;i++)
                           {
                              sum+=arr[i];
                           }
                             aegv=(float)sum/5;
                   printf("和:%5d 平均值:%f\n",sum,aegv);
    

    (8)字符串数组

               初始化定义
               char  arr[10]={"hello"};
               char  arr[10]={'h','e','l','l','o'};
               
               
               输出占位符为%s
               
                    #include<stdio.h>
                    int main()
                    {
                       char arr[16]={"hEllo world"};
               //将小写字母转成大写字母;大写字母转成小写字母
                       int i,ch;
                       for(i=0;i<16;i++)
                       {
                           if(arr[i]>='a'&& arr[i]<='z')
                               arr[i]-=32;
                        else if(arr[i]>='A'&& arr[i]<='Z')
                               arr[i]+=32;
                           
                        }   
                       printf("%s\n",arr);   
                       
                    }                            
    

    二、二维数组(基于矩阵)

         DataType ArrayName[行下标][列下标];
         初始化:int arr[3][3]={1,2,3,4,5,6,7,8,9};
                 int arr[ ][3]={1,2,3,4,5,6,7,8,9}; 
                 行下标是可以省略的 但列下标不能省  
                 一列可以是多个数 所以不能反过来  
                 int arr[3][3]={{1,2,3},{4,5,6},{7,8,9}};  
                 这种表示可以视为三个一维数组
                 在内存中是一行一行的存 
    

    三、注释

      (1) //.........;
            单行注释,可以独占一行,也可以跟在执行语句之后
            但"//"之后的内容,不能编译执行
            规定:
                 注释内容放在被注释的上一行
                或者行末(如 上图程序注释部分所示) 
     
      (2) /*...........*/:
            多行注释  注释大段代码也就是注释代码块

    相关文章

      网友评论

          本文标题:c课堂笔记 day-3

          本文链接:https://www.haomeiwen.com/subject/dtzimttx.html