第二周笔记巩固(坚持)

本文介绍了C语言中的基本数据类型,如int、float、char及其打印方式,以及变量的分类和作用,包括静态、全局、局部变量。还涵盖了运算符的使用,如算术、逻辑运算符,以及自增自减操作。此外,文章讨论了控制语句,如if分支、switch分支和循环结构(while、for)。同时提到了数组的定义、初始化及应用,包括斐波那契数列的计算。
摘要由CSDN通过智能技术生成

☆数据类型   

类型/名称                分类                 作用                 打印方式                   字符长度(一个字符8位)

int/整形                long/short        返回量为整数       printf("%d\n", i);    占4个字符/long/short占用4/2

float/浮点型        double 双精度    返回量均可为小数 printf("%f\n",i)        4个字符/8个字符

char/字符型        字符串常量和字符常量:打印一串或者一个字符   printf("%c\n",i);        占1个字符

signed/unsigned有符号类型,无符号类型

#define标识常量                   定义之后可以全局引用

☆Aacall码:十进制Ascall码48 -57对应字符0~9,十进制A-Z对应字符97-122        ‘空格’对应32 

'\n'对应10

☆变量

储存类型:自动型变量默认不写:auto不在程序中体现出来。

寄存器变量:register int a; 寄存器不用打印取地址&a。寄存器与cpu内部连接与内存位置无关

静态变量:static int a;

               特点:a不赋值时默认为0,内存在全局区中存放,变量只会随着程序结束而结束

                static 修饰变量的区别:修饰局部变量时仅能用于函数局部,修饰全局变量时仅能作用于当前文件调用

外部变量extern fun() :可以调用fun()函数个所有文件使用

全局变量:定义在函数体外部,未初始化初始值默认为0。 extern int global_a; 
         任意文件2只要在全局中添加extern int global_a; 则文件2可以调用global_a文件内容,编译时gcc 文件1.c 文件2.c -o文件12。
         生命周期:同程序共存亡
         存储位置:全局区存放未初始化的全局和静态
局部变量:定义在函数体内部,未初始化为初始值随机。
         生命周期:同函数共存亡
         存储位置:栈区存放局部变量

大小端:多字节数据在存储时,会以某种大端和小段两种方式放到内存中

        小端存储:低到低,高到高

        大端存储:低到高,高到低

☆运算符:在程序中经常与if中条件结合,用来判定不符合

      算数运算符:  +-*/这里注意/是向下取整砍掉小数   "="是赋值运算, "=="才是等于

sum%2:取sum这个数对2的余数,如果==0,那么说明整除是偶数

sum/数:sum对这个数取整。求num的个位:num%10. 求sum的十位:num/10%10。求sum的百位就是sum/100%10......

        逻辑运算符:&&有0出0,全1才1。 || :有1出1,全0才0。^异或:相异出1,相同出0。  !():将()里的内容取反  ,特别注意与或运算有截断原则。 左移n位 << 右边补n个0相当于数乘2^n次方。 右移n位 >> 左边要补n个1 相当于数/2^n,特别注意!这里的右移运算是向下取整-50 >> 2 = -50 / 4 = -13

运算优先级背诵口诀:单算移关羽,异或罗条赋

自增自减(重点!!!)

++i:是i先加1后在输出值   
--i:是i减1后在参与取值
i++:是先取i的值后在加1
i--:是先取i的值后在减1

类型1:int x, y=1;  x=y++; printf("x=%d y=%d", x, y);  输出结果x=1,y=2

类型2:int x =1;        printf("x=%d", x++);   先打印x=1这步运算      printf("x=%d\n",++x); 前一步输出后+1=2 在打印++x之后等于3。

类型3独立成句 int x =1;        x++;printf("%d\n",x);         ++x;printf("%d\n",x);        输出结果都为2. 

 ☆控制语句

☆if分支语句---应用于范围较大的选择

单纯if(非0为真)
            执行printf("\n".)
        if()
            printf("\n",)
    
    多重if选一个,如果符合第一个条件下面的条件23就不执行了
        if(条件1)
        {
            表达式(1);
        }
        else if(条件2)
        {
        表达式2;
        }
        else
        {
        表达式3;
        }
☆if嵌套
  if(条件1成立)
  {
        if(条件2成立)
        {
            表达式1;
        }
        else若干语句后必须打括号
        {
            表达式2;
        }
  }
  else
    {
        表达式3;
    }
    return 0;

注意! 括号问题:如果if不打括号就仅顺序执行第一个语句,esle前面必须要跟上if对应,且else后面不允许跟条件,if else后面跟若干语句则必须要打{}。

 

个人需注意的问题:

if(区别x=1是赋值将1给x,x==1是逻辑判断是x为1)

printf("请输入:");后面必须跟上scanf("%",&i)不要落下&

if的应用:海伦公式求三角形面积;      输入三个数按照大->小排序;        按照成绩排序;

排序注意!这里的交换顺序需要多定义一个中间商变量t:如果a>b;先将a赋值给t然后a空了,在将b赋值给a然后b空了,再将t中a的值赋值给b,完成ab交换。

 海伦公式注意:三条边的条件分别是两边之和不能大于第三边,area面积和p半周长的公式要背过。sqrt函数在调用是需要引用数学库文件#include<math.h>   并且在编译时需要后面加上 -lm!!   

          

 

 

 

☆switch分支语句--用于关系明确的选择条件


        功能:判断switch后面表达式结果,和case后面的常量进行匹配,匹配成功实现case功能。
    int a = 常量;

    switch(变量或表达式):要判断啥switch括号里就写啥    
    {
    case (常量1):printf("");
    break;
    case (常量2):printf("");
        break;
    ....
    ....
    default:默认放最后:匹配不上执行其他情况
        printf("");
    }
     return 0;
    
注意!switch(不能是表达式或者浮点型)
     如果case后面的语句不加break;就会一直向下执行不结束。
     case空格+常量 后面一定加: 
     向下取整只能用整形(int)score/10
     case字符要加单引号,case字符串要加双引号。

应用:加减乘除分别匹配并且计算

 注意的问题case 后面的+-*/均为字符需要用单引号

while循环三要素:初值,终止条件,变化

  while循环求对100求和

   int i = 1;初值

        while(i <= 100)终止条件

        { sum  =sum +i; i++;}自增自减     printf("%d\n",sum);

 do while循环
    int i = 1;先做在循环
    do
    {
        sum = sum + i;
        i++;
    }while(i <= 100);
    
while(1)死循环
    {
            break语句与continue的区别
        for(i=0; i<3; i++)
          {
            if(n%3 == 0)
                break/continue;终止当前for循环/   跳出本次循环直接进行下一次
          } 
            printf("%d",n);  
        注意! continue,break必须要写在循环里面。
    }

for循环(初始值;结束条件;自增)


    for(一i=1; 二i<=100; 四i++)
    {
        三sum = sum + i;
    }
执行顺序:先执行表达式一 给循环变量赋初值,判断表达式二是否成立,如果成立就进入循环执行语句块三,执行完语句三就执行四在回来判断表达式2是否成立。
          
☆for循环嵌套
 for(一i=0; 二i<3; 三i++)
  {
    for(四j=0; 五j<4; 六j++)
    语句块;
  }  
执行顺序:先执行一,判断二,如果符合则进入下面for循环,再次先执行四,判断五如果符合五,则执行语句块,运行六自增直到不符合条件五之后,则进行三自增一次,一次进行。
 

应用99乘法表。水仙花数。输入任意两个整数,输出两数之间(包括这两个数)偶数之和。

 

 

注意!水仙花数的范围是100~999,对个位,十位,百位的获得方式 ,pow(,)需要引用#include<math.h>头文件。

偶数之和:需要注意输入的两个数不光是从小到大能取得偶数只和,还要从大到小取得。偶数就是对2取余==0

getchar()按照字符输入

功能:从终端输入一个字符/        int ret;
 参数:没有                        ret = getchar();
 返回值:Ascall码                printf("%d\n", ret);

应用大小写字母的转化


☆垃圾字符

getchar() / scanf("%*c", &a); / scanf("空格%c",a);
注意!如果单独打印字符就用getchar(); 吃掉'回车'

putchar()打印字母输出函数        

功能:向终端输出一个字符        
 参数:要输出字符的Ascall码值
 返回值:一般不接受返回的Ascall
功能:键盘输入

 

数组:有顺序关系的若干变量的元素集合。

一维数组定义常量: int a[6];        a:数组在内存中首地址,是个地址常量,是不能被赋值和a++的。
访问元素:数据组[下标]; 下标范围[0到n-1];千万不要越界;
特点:1)数据类型相同
      2)数组内存是连续的 并且每个地址相差4个字节。


数组的初始化

全部初始化:a[5] = {1,2,3,4,5}; 
部分初始化:没被赋值的元素全部为0 例如a[5] = {1,2,3}; 那么a[3] a[4]均为0  
定义一个空数组 int a[5] = {};

定义一个空数组的方式:int a[5] = {};

引用时需注意!

 必须先定义在引用
 每次只能引用一次a[i]
 打印数组元素地址用%p
 想引用所有数组中元素,需要循环遍历用for,打印时一定是&a[i],数组遍历肯定用
    int main()
    {
        int a[] = {1, 2, 4, 7, 8, 98};
        int i,n;                                                                  
        n = sizeof(a) / sizeof(i);  计算数组a的总长度 n = 数组个数/数组类型

        for(i=0; i<n-1; i++)
            {
                printf("%p\n", &a[i]);
            }
        puts("");
    }
    return 0;

注意!数组和指针取地址时必须用%p。
      数组名字定义好了之后不允许修改。  
      数组不做越界检查,编写时注意定义的a[6],i值最大只能是0~5。

应用斐波那契前15项求和的思路:先找到数列的规律是前两个数相加等于后面的那个数,通过int a a[15]  ={1,1};将a[0], a[1]赋值为1 剩下的13个数通过for循环找规律依次累加。在通过for循环i自减的形式打印出所有逆序数。

 注意:打印时数组的下标,还有数组千万不能越界问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值