c课堂笔记 day-3

2016-12-14  本文已影响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) /*...........*/:
        多行注释  注释大段代码也就是注释代码块
上一篇下一篇

猜你喜欢

热点阅读