c课堂笔记 day-3

作业讲解:阶乘: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) /*...........*/:
        多行注释  注释大段代码也就是注释代码块
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容