C语言学习

C语言简要概述

简单来说一个C程序就是由若干头文件和函数组成。
简单示例:

#include //头文件
int main() //主函数
{
printf("I love C");
return 0;
  }

一个C程序,有且只有一个主函数,即main函数,C程序就是执行主函数种的代码。

良好的代码规范

在写C语言程序的时候为了书写清晰、便于阅读、便于理解、便于维护,在编写程序时应遵循以下规则:
1、一个说明或一个语句占一行,例如:包含头文件、一个可执行语句结束都需要换行;
2、函数体内的语句要有明显缩进,通常以按一下Tab键为一个缩进;
3、括号要成对写,如果需要删除的话也要成对删除;
4、当一句可执行语句结束的时候末尾需要有分号;
5、代码中所有符号均为英文半角符号。

#include 
int main()
{
    printf("一个说明或者一个语句占一行\n");
    printf("函数体内的语句要有明显缩进\n");
    printf("括号要成对写,成对删除\n");
    printf("当一句可执行语句结束的时候末尾需要有分号\n");
    printf("代码中所有符号均为英文半角符号")        
    return 0;
            }

c语言的注释:

C语言注释方法有两种:
多行注释: /* 注释内容 */
单行注释: //注释一行

//C语言的注释
/*多行注释
   与单行注释
*/
#include
int main()
{
    printf("C语言的注释");
    printf("/*这是多行注释*/");
    printf("//这是单行注释");

}

标识符

标识符
编程时给变量或者函数起的名字
C 语言规定,标识符可以是字母(A~Z,a~z)、数字(0~9)、下划线_组成的字符串,并且第一个字符必须是字母或下划线。在使用标识符时还有注意以下几点:
(1)标识符的长度最好不要超过8位,因为在某些版本的C中规定标识符前8位有效,当两个标识符前8位相同时,则被认为是同一个标识符。
(2)标识符是严格区分大小写的。例如Imooc和imooc 是两个不同的标识符。
(3)标识符最好选择有意义的英文单词组成做到”见名知意”,不要使用中文。
(4)标识符不能是C语言的关键字。想了解更多C语言关键字的知识

#include
int main()
{
    //这个是错的 int 3myAge = 18; 
    int myAge = 18;
    printf("我的年龄是18");
    return 0;
}

变量及赋值

变量 就是可以变化的量,而每个变量都会有一个名字(标识符)。变量占据内存中一定的存储单元。使用变量之前必须先定义变量,要区分变量名和变量值是两个不同的概念。就好比:住在房间里的客人与房间号是两个不同的概念。
变量名和标识符的命名规范完全相同

int age = 18;
int a,b,c;//同时赋值多个变量,然后再分别赋值
a = 18;
b = 19;
c = 20;

基本数据类型:

在C语言中数据类型可以分为:
1.基本数据类型
2.构造数据类型
3.指针类型
4.空类型
C语言学习_第1张图片
基本数据类型中最简单最常用的是:整型,实型,字符型

这里写图片描述

整型数据是指不带小数的数字

C语言学习_第2张图片

浮点数据是指带小数的数字

这里写图片描述

#include 
int main()
{
       int age = 15;
       int height = 162;
       float weight = 82.5;
       char isfat = 'y';
    printf("年龄:%d 岁\n", age);
    printf("身高:%d CM\n", height);
    printf("体重:%f KG\n", weight);
    printf("是否属于肥胖儿童:%c\n", isfat); 
    return 0;    
}

格式化输出语句

格式化输出语句,也可以说是占位输出,是将各种类型的数据按照格式化后的类型及指定的位置从计算机上显示。
格式:
printf(“输出格式符”,输出项);
%d(带符号十进制整数)
%c(单个字符)
%s(字符串)
%f(6位小数)

#include 
int main(){
    int age = 18;
    float height = 1.85;
    char unit = 'm';
    printf("小明今年%d岁\n", age);
    printf("小明身高%f%c\n", height, unit);
    printf("小明现在学习IT技术"); 
    return 0;
}

不可改变的常量

常量:
在程序执行过程中,值不发生改变的量称为常量。
C语言中,常量分为两种:
1.直接常量
2.符号常量
直接常量:
直接常量也叫字面量,可以直接拿来使用,不需要说明。
例如:
* 整型常量:12, 0, -12;
* 实型常量:23.4,12.9;
* 字符常量:”a”,”M”;
* 字符串常量:”String”,”state”;

#include 
int main()
{
    printf("%d\n",100);//整型常量
    printf("%f\n",12.55);//实型常量
    printf("%c\n","N");//字符常量
    printf("%s","I love coding");//字符串常量
    return 0;
    }

符号常量:
C语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义
格式: #define 标识符 常量值

#include 
#define POCKETMONEY 10     //定义常量及常量值
int main()
{
    printf("今天得到%d元零花钱\n", POCKETMONEY);
    return 0;  
}

自动转换类型

数据类型存在自动转换的情况

char c ="A";
int  b ;
double g ;
b = c;(字符串可以转换为整型)
g = b;(整型可以转换为浮点类型)

自动类型转换发生在不同数据类型运算时,在编译期间自动完成。
遵行的规则:
好比大盒子里放小盒子

#include 
int main()
{
    char c = 'a';
    int n = c;        //将c赋值给n
    float f = c;       //将c赋值给f
    double d = c;     //将c赋值给d
    printf("%d\n",n);
    printf("%f\n",f);
    printf("%lf\n",d);
    return 0;    
}

强制类型转换

强制类型转换:
通过定义类型转换运算来实现的,
作用是把表达式的运算结果强制转换成类型说明符所表示的类型
格式:
(数据类型) (表达式)
在使用强制转换时应注意以下问题:
1.数据类型和表达式都必须加括号,如把(int)(x/2+y)写成(int)x/2+y则成了把x转换成int型之后再除2再与y相加了。
2.转换后不会改变原数据的类型及变量值,只在本次运算中临时性转换。
3.强制转换后的运算结果不遵循四舍五入原则。

#include 
int main()
{
    double num = 2.5; //定义浮点型变量num并赋值为2.5
    printf("num的整数部分是%d\n", (int)num ); 
    return 0;
}

C中的运算符:

C语言中的运算就是对数据进行操作、处理的过程。
运算符就是指定该运算的处理方式。

C语言中的运算符:
* 算术运算符
* 赋值运算符
* 关系运算符
* 逻辑运算符
* 三目运算符

#include 
int main()
{
    int a,b,c,d;
    double result;
    a = 1;
    b = 2;
    c = 3;
    d = 4;
    result = a + b + c + d;   
    printf("%f\n", result);
    return 0;
}

基本算术运算符:

C语言学习_第3张图片
除法运算中注意:
如果相除的两个数都是整数的话,则结果也为整数,小数部分省略,如8/3 = 2;而两数中有一个为小数,结果则为小数,如:9.0/2 = 4.500000。
取余运算中注意:
该运算只适合用两个整数进行取余运算,如:10%3 = 1;而10.0%3则是错误的;运算后的符号取决于被模数的符号,如(-10)%3 = -1;而10%(-3) = 1。

#include 
int main()
{
    int x,y;
    x = 10;
    y = -3;
    printf("x+y=%d\n",  7   );  
    printf("x-y=%d\n",  13   );
    printf("x*y=%d\n",  -30   );
    printf("x/y=%d\n",  -3   );
    printf("x%y=%d\n",  1   );  
    return 0;    
}

自增与自增运算符

自增运算符为“++”,其功能是使变量的值自增1;自减运算符为“–”,其功能是使变量值自减1。它们经常使用在循环中。
自增自减运算符有以下几种形式:
这里写图片描述
无论是a++还是++a都等同于a=a+1,在表达式执行完毕后a的值都自增了1,无论是a–还是–a都等同于a=a-1,在表达式执行完毕后a的值都自减少1。

#include 
int main()
{
    int x = 0;
    printf("x=%d\n",x++);
    printf("x=%d\n",++x);
    return 0;
}

练习题:
int a = 3; b = 4;
计算a+b%(a+b)/a+a*b-b该算式的运算结果?
答案:12

赋值运算符:

C语言中赋值运算符:
1.简单赋值运算符
简单赋值运算符“=”
2.复合赋值运算符
复合运算符就是在简单赋值符“=”之前加上其它运算符构成,
例如+=、-=、*=、/=、%=。

#include 
int main()
{
    int x = 10;
    int y = 10;
    //简单赋值语句实现x乘以2x = x*2;
    //复合赋值语句实现y乘以2y*=2;
    printf("x=%d\n", x);
    printf("y=%d\n", y);
    return 0;
}

关系运算符:

C语言中的关系运算符:
C语言学习_第4张图片

关系表达式的值是“真”和“假”,在C程序用整数1和0表示

#include 
int main()
{
    int x=5;
    int y=5;
    int z=10;
    printf("x是否大于y:%d\n",    x>y        ); //x是否大于y
    printf("y是否大于等于x:%d\n",  y>=x       ); //y是否大于等于x
    printf("y是否小于z:%d\n",       y//y是否小于z
    printf("z是否小于等于x:%d\n",   z<=x     ); //z是否小于等于x
    printf("z是否等于x+y:%d\n",     z==x+y    ); //z是否等于x+y
    return 0;
}
结果为:
x是否大于y:0
y是否大于等于x:1
y是否小于z:1
z是否小于等于x:0
z是否等于x+y:1

逻辑与算符:

C语言中的逻辑运算符:
这里写图片描述
逻辑运算的值也是有两种分别为“真”和“假”,C语言中用整型的1和0来表示。求值规则如下:
1. 与运算(&&)
参与运算的两个变量都为真时,结果才为真,否则为假。例如:5>=5 && 7>5 ,运算结果为真;
2. 或运算(||)
参与运算的两个变量只要有一个为真,结果就为真。 两个量都为假时,结果为假。例如:5>=5||5>8,运算结果为真;
3. 非运算(!)
参与运算的变量为真时,结果为假;参与运算量为假时,结果为真。例如:!(5>8),运算结果为真。
例题:
某女招男盆友,给出的条件是身高不能低于180CM且银行存款不少于100万。
现某男身高175CM,银行存款150万来应征,用C语言中的运算来看一下他满足条件吗?

#include 
int main()
{
    int height = 175;   //身高为175cm
    double money = 1500000;  //银行存款为150万
    printf("是否符合条件:%d\n", height>=180 && money>=1000000
    );  
    return 0;    
}

例题2:
int a = 5; int b = 9;
在以下算式中,选出运算结果为真,即结果为1的算式
A: b++>=a*2 && b-a<=a
B: b++>=a*2 || b-a<=a
C: !(a*2-b)
D: ++b-a*2
结果为B

三目运算符:

C语言中的三目运算符:“?:”,
格式
表达式1 ? 表达式2 : 表达式3;
执行过程是
先判断表达式1的值是否为真,如果是真的话执行表达式2;如果是假的话执行表达式3。
例题:
小明下班回家兜里有12元钱,打车回家需要花费11.5元,请用三目运算符写一个算式,计算一下小明能不能打车回家?

#include 
int main()
{
    //定义小明兜里的钱
    double money = 12     ; 
    //定义打车回家的费用
    double cost =    11.5   ;  
    printf("小明能不能打车回家呢:"); 
    //输出y小明就打车回家了,输出n小编就不能打车回家
    printf("%c\n",money>=cost ? 'y' : 'n' );
    return 0;
}
结果:
小编能不能打车回家呢:y

运算符的优先级:

优先级?
优先级就是在运算中运算的先后顺序。
各种运算符号的顺序
优先级别为1的优先级最高,优先级别为10的优先级别最低
C语言学习_第5张图片
示例:

#include 
int main()
{
    int x = 5;
    int y = 8;
    //在这里合适的位置加上括号使z的值为4
    int z = x*8/(y+2);
    printf("z=%d\n", z);
    return 0;  
}

C语言结构语句:

简单if语句
基本结构:
这里写图片描述
语义:
如果表达式的值为真,则执行其后的语句,否则不执行该语句
例题:
学校入选篮球队的资格条件为身高必须大于等于180CM,小明身高185CM,那么小明能入选吗?

#include 
int main() 
{       
    int height = 185;
    if(height >= 180)
    {
        printf("%s\n","恭喜小明可以参加校篮球队");
    }
    return 0;
}

简单if-else语句

基本结构:
C语言学习_第6张图片
语义是:
如果表达式的值为真,则执行代码块1,否则执行代码块2
例题:

#include 
int main() 
{
    int year = 2014; //今年是2014if(year%4==0&&year%100!=0)
    {
        printf("%s\n","今年是瑞年");
    }
    else{
        printf("%s\n","今年是平年");
    }
    return 0;
}

多重if-else语句
基本结构:
C语言学习_第7张图片
语义:
依次判断表达式的值,当出现某个值为真时,则执行对应代码块,否则执行代码块n
例题:
某游戏对不同等级的积分的玩家赋予不同的荣誉称号,其对应关系如下:
积分>=10000分为钻石玩家
积分>=5000并且<10000为白金玩家
积分>=1000并且<5000为青铜玩家
积分<1000为普通玩家。
小明现在是有7200分,请在代码编辑器中完善代码,看一下小明是什么级别的玩家。

#include 
int main() 
{
    int score = 7200;
    if(score >= 10000)
    {
        printf("钻石玩家");
    }
    else if(score >= 5000 && score <10000 )
    {
        printf("白金玩家");    
    }
    else if (score >=1000 && score <5000)
    {
        printf("青铜玩家");     
    }
    else
    {
        printf("普通玩家");    
    }
    return 0;
}

嵌套if-else语句
基本结构:
C语言学习_第8张图片
嵌套if-else语句的意思,就是在if-else语句中,再写if-else语句。
例题:
获奖条件为年销售业绩100万以上,并且入职满两年的员工。小明进入公司1年,销售业绩为120万。

#include 
int main() 
{
    int sale=120; //销售业绩为120int year=1; //刚刚进入公司1if(sale > 100)
    {
        if(year >= 2)
        {
            printf("%s\n","优秀员工奖");
        }
            printf("%s\n","很遗憾,期待你再接再厉");
    }
    else
    {
        printf("%s\n","很遗憾,希望你再接再厉");
    }
     return 0;
}

C语言循环语句

循环结构之while循环

基本结构:
这里写图片描述

表达式表示循环条件执行代码块循环体
例题:
用while循环实现100以内所有整数之和。

#include 
int main()
{
    int i,sum=0;
    i=1;
    while( i <= 100  )  //循环条件应该是什么呢?
    {
        sum=sum+i;
         i++ ;        //这里是不是应该改变循环变量的值
    }
    printf("100以内所有整数之和为:%d\n", sum);
    return 0;
}

注意点:
1.while语句中的表达式一般是关系表达或逻辑表达式,当表达式的值为假时不执行循环体,反之则循环体一直执行。
2.一定要记着在循环体中改变循环变量的值,否则会出现死循环(无休止的执行)。
3.循环体如果包括有一个以上的语句,则必须用{}括起来,组成复合语句。

循环结构之do-while循环
基本结构:
这里写图片描述

它先执行循环中的执行代码块,然后再判断while中表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。
例题:
公司2014年在职人数为200人,以每年20%增长速度不断扩大招工规模,请使用do-while循环计算从2014开始至哪一年招工规模能够突破1000人。

#include 
int main()
{
    int number=200;
    int year=2014;
    do{
      year++;     
      number*=1.2;            
    }while(number<1000);  
    printf("到%d年招工规模突破1000人\n", year);
    return 0;
}

循环结构for循环
基本结构:
这里写图片描述

在for循环中,表达式1是一个或多个赋值语句,它用来控制变量的初始值;表达式2是一个关系表达式,它决定什么时候退出循环;表达式3是循环变量的步进值,定义控制循环变量每循环一次后按什么方式变化。这三部分之间用分号(;)分开。
例题:
实现一个10以内的数之和的小程序

#include 
int main()
{
    // 定义变量sum, num
    int sum, num;  
    sum = 0;
    for(num = 0; num<=10 ;num++  ) //for循环条件与num的变化值
    {
       sum+=num;
    }
    printf("10以内数的和为:%d", sum);
    return 0;
}

for语句应该注意:
1.for循环中的“表达式1、2、3”均可可以缺省,但分号(;)不能缺省。
2.省略“表达式1(循环变量赋初值)”,表示不对循环变量赋初始值。
3.省略“表达式2(循环条件)”,不做其它处理,循环一直执行(死循环)
4.省略“表达式3(循环变量增量)”,不做其他处理,循环一直执行(死循环)。
5.表达式1可以是设置循环变量的初值的赋值表达式,也可以是其他表达式。
6.表达式1和表达式3可以是一个简单表达式也可以是多个表达式以逗号分割。
7.表达式2一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,只要其值非零.
8.各表达式中的变量一定要在for循环之前定义。
例题:
求水仙花数字

#include 
int main()
{
    //定义三位数num,个位数sd,十位数td,百位数hd
    int num, sd, td, hd;
    //循环所有三位数
    for(  num =100  ; num<1000   ;  num++  )
    {
        //获取三位数字num百位上的数字
        hd = num/100 ;
        //获取三位数字num十位上的数字
        td = num%100/10;
        //获取三位数字num个位上的数字
        sd = num%10;
        //水仙花数的条件是什么?
        if( num==hd*hd*hd+td*td*td+sd*sd*sd ) 
        {
            printf("水仙花数字:%d\n", num);    
        }
    }
    return 0;    
}

三种循环结构的比较
(while , do-while , for )使用场合上是有区别的:

1.在知道循环次数的情况下更适合使用for循环;
2.在不知道循环次数的情况下适合使用while或者do-while循环,如果有可能一次都不循环应考虑使用while循环,如果至少循环一次应考虑使用do-while循环。
例题:
使用循环计算1-2+3-4+5-6+…-100的值?

#include 
int main()
{   
    int sum = 0;  //定义计算结果变量sum
    int i = 1;    //定义循环数字变量i
    int flag = 1; //定义符号状态变量flag
    //do-while循环
    do{
        //sum=sum+flag*i;
       // flag=-flag;
        i++;
    }while(i<=100);
    i = 1;  //重新初始化变量i
    printf("sum=%d\n",sum); 

    return 0;    
}

C语言多重循环语句

多重循环就是在循环结构的循环体中又出现循环结构。
实际开发中一般最多用到三层重循环。因为循环层数越多,运行时间越长,程序越复杂,所以一般用2-3层多重循环就可以了。另外不同循环之间也是可以嵌套的。
执行过程:
多重循环在执行的过程中,外层循环为父循环(一个父循环可以有多个子循环),内层循环为子循环,父循环一次,子循环需要全部执行完,直到跳出循环。父循环再进入下一次,子循环继续执行…
例题:
这里写图片描述
用多重循环打印这样的三角形.

#include 
int main()
{
    int i, j, k;
    for(i=1; i<5; i++)
    {
        /* 观察每行的空格数量,补全循环条件 */
        for( j=i;j<5; j++  )  
        {
            printf(" ");    //输出空格
        }
        /* 观察每行*号的数量,补全循环条件 */
        for(k=0;k2-1;k++) 
        {
            printf("*");   //每行输出的*号
        }
        printf("\n");     //每次循环换行
    }
    return 0;
}

for多重循环练习题:
打印99乘法表

#include 
int main() 
{ 
    // 定义相乘数字i,j以及结果result
    int i, j, result;
    /*
     * 使用for循环解决本题相对简单哦~
     */
     for(i=9;i>=1;i--)
     {
        for(j=1;j<=i;j++)
        {
            printf("%d*%d=%d ",i,j,result=i*j);
        }
        printf("\n");
     }
    return 0;
}

结束语句之break语句。
break通常用于跳出循环语句
使用break语句时注意以下几点:
1.在没有循环结构的情况下,break不能用在单独的if-else语句中。
2.在多层循环中,一个break语句只跳出当前循环。
例题:
找出50以内的素数。

#include 
int main()
{
    int m, n;
    for(m=2; m<=50; m++)
    {
        for(n=2; nif(m%n==0  )       //什么条件下跳出当前循环
             break;      //这里退出当前循环
        }   
        if(m == n)   //n循环结束后,如果m=n的话就输出m
            printf("%d  ", m);
    }
    return 0;    
}

结束语句之continue语句
break语句与continue语句的区别是:
break是跳出当前整个循环,continue结束本次循环开始下一次循环。
例题:
计算1到20之间不能被3整除的数字之和。

#include 
int main()
{
    int i, sum;
    for(i=1, sum=0; i<=20; i++)
    {
        if(i%3==0  )    //能被3整除这个条件如何写呢?
        {
           continue;             //应该用哪个循环结束语句呢?
        }                  
        sum += i;
    }
    printf("sum=%d\n", sum);
    return 0;    
}

分支结构之switch语句
基本结构:
C语言学习_第9张图片
例题:
小明参加期末考试,分数等级分为A-D,等级划分方式如下:
90<=分数<=100 ,等级为A。
80<=分数<90 ,等级为B。
60<=分数<80 ,等级为C。
分数<60 ,等级为D。
小明期末考试分数为87分,其输出结果为: 等级B
代码示例:

你可能感兴趣的:(C)