黑马程序员——C语言基础1

来源:互联网 发布:java字符串切割 编辑:程序博客网 时间:2024/05/17 03:10

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

 

.数据类型和变量

1.变量的初始化

(1)int i=5;
(2)int i;  i=5;

(3)int i; scanf("%d",&x);

2.常量 

关键字:const
如:const floatPI=3.1415926;
定义了一个常量以后这个常量是不允许被改变的;

3.标准输入输出

使用输入输出函数是一定要包含头文件 #include<stdio.h>
(1)
输出函数
printf(format string,data list);

format string :格式字符串
data list :
数据列表可以是一个或多个数据,多个时要用给隔开;
如:printf("%d\n%d",a,b);
几个常用的格式字符:
%d(
输出十进制整型数据)
%hd(
输出十进制短整型数据)
%ld(
输出十进制长整型数据)
%c(
输出字符型数据)
%f(
输出浮点型数据)
%f
:默认输出六位小数,不够六位的时候小数位要补0,多于六位的时候四舍五入保留六位小数;
如:printf("%d\n%c\n%f",23,'a',4.23);
结果是:23
           a

           4.230000
(2)scanf(format string,address list);
address list :变量的地址

#include<stdio.h> intmain(){        int i;        float p;               scanf("%d%f",&i,&p);        printf("%d\n%f\n",i,p);               return 0;}





从键盘上输入一个整型数据和一个浮点型数据,分别赋值给了ip

输入数据时候可以用空格,tab,回车来进行分隔,最后输入回车结束!!


4.枚举类型

关键字:enum
格式:enum名称{成员1,成员2,成员3....};
:enum city{beijing,shanghai,guangzhou};
定义枚举类型的变量:
(1)
可以声明枚举类型接着就定义枚举类型变量
   
如:enum city{beijing,shanghai,guangzhou}city1,city2;
(2)
可以声明枚举类型以后在定义变量
   
如:enum city city1,city2;
(3)
还可以不写名称直接定义枚举类型接着定义变量(不常用)
   
如:enum{beijing,shanghai,guangzhou} city1,city2;


5.数组

(1)一维数组
在内存中分配连续的一组存储空间,存放相同数据类型的数据;
格式:数据类型数组名 [数组的长度]
定义数组是必须指定数组的长度
数组的下表是从0开始的
如:int a[5];
数组的初始化:int a[]={1,2,3,4,5};(方括号中的长度可以省略不写)
数组元素的赋值:
如:for(i=0;i<5;i++)a[i]=i;
还可以为数组中的元素逐个赋值;
(2)
二维数组
如:int a[3][4]表示一个三行四列的二维数组;
赋值:

for(inti=0;i<3;i++){for(intj=0;j<4;j++)a[i][j]=3*i+j;       }





.操作符和表达式



1.算术运算符

+-*/%(取余运算符)

++--:只能对变量进行运算

2.赋值运算符

= -=+=*=/=,%=;

3.逻辑运算符

&&||,!

先算前面的表达式的值,若前面的表达式的结果已经确定了整个表达式的结果,后面的表达式就不用计算了

4.sizeof();

5.if else 语句

1.if语句和elseif语句的区别

(1)

#include<stdio.h> int main(){        int grade;        char letter_grade;         printf("Please input a mark out of100:");        scanf("%d",&grade);         if(grade<=100 &&grade>=80)        {                letter_grade='A';        }        if(grade<80 && grade>=70)        {                letter_grade='B';        }        if(grade<70 && grade>=60)        {                letter_grade='C';        }        if(grade<60 && grade>=50)        {                letter_grade='D';        }        if(grade<50 && grade>=0)        {                letter_grade='F';        }        if(grade<0)        {                printf("输入错误!!\n");        }         printf("A mark of %d is an%c\n",grade,letter_grade);         return 0;}




(2)

#include<stdio.h> int main(){        int grade;        char letter_grade;         //printf("Please input a mark outof 100:");        //scanf("%d",&grade);      //输入一个满足条件的grade,如果不满足条件要一直输入,直到满足条件为止        do        {                printf("请输入一个成绩(0~100之间的数):");               scanf("%d",&grade);         }while( grade<0 || grade>100 );                 if(grade>=80)        {                letter_grade='A';        }        else if(grade>=70)        {                letter_grade='B';        }        else if(grade>=60)        {                letter_grade='C';        }        else if(grade>=50)        {                letter_grade='D';        }        else        {                letter_grade='F';        }               if(grade<=100 &&grade>=0)        {                printf("A mark of %d is an%c\n",grade,letter_grade);        }        return 0;}



在程序1中如果输入的是90,那么没一个if语句都要执行一遍,而在程序2中如果输入90则执行第二个elseif语句

2.开关语句switch

格式:switch(表达式)
{
case 常量表达式:语句1break
case 常量表达式:语句2break
....
default:语句n+1
}


#include <stdio.h> int main(){        char c;        printf("Enter your letter gradeand press return:");        scanf("%c",&c);         switch(c)        {        case 'A':                printf("Your mark isbetween 80 and 100\n");                break;        case 'B':                printf("Your mark isbetween 70 and 79\n");                break;        case 'C':                printf("Your mark isbetween 60 and 69\n");                break;        case 'D':                printf("Your mark is between50 and 59\n");                break;               case 'F':                printf("grade is below50\n");                break;        default:                printf("You have typed inan illegal letter\n");        }         return 0;}





如果case后面没有break;的话,程序将一直执行知道遇到break,或者到了程序的末尾

3.循环

(1)for():
格式:for(expr1;expr2;expr3)statement
如:

#include<stdio.h>int main(){int i;for(i=0;i<3;i++){printf("count=%d\n",i);}return 0;}


输出的结果为:
count=0
count=1
count=2


(2)while()循环

格式:while(条件)
{
语句;
}


#include<stdio.h> int main(){        int count=0;//统计输入的整数的个数        int sum=0;//求和        int a;//输入的整数               printf("请输入若干个整数,输入负数结束!\n");        printf("请输入第%d个整数:",count+1);        scanf("%d",&a);         while( a>=0 )        {                sum=sum+a;                count++;                printf("请输入第%d个整数:",count+1);                scanf("%d",&a);        }         if(count!=0)        {                printf("一共输入了%d个整数\n",count);                printf("这%d个整数的平均值为%f\n",count,sum/(double)count);        }        else                printf("你没有输入整数!");         return 0;}




(3)do while 语句和while循环语句的区别:
while循环是先判断条件,如果满足则执行循环
do while是先循环一次,在判断条件,如果不满足的话,退出循环
while循环至少执行0次循环,而do while语句至少执行一次循环
(4)continue :终止本次循环,进行下一次循环


#include<stdio.h>int main(){        int i=0;        int a[3];        int num;/***要求输入10~20之间的整数,将这个整数放到数组a中,如果不是这个范围的数据的话,将提示重新输入**/           while(i<3)        {                                printf("请输入第%d个数:",i+1);                scanf("%d",&num);                 if(num>20||num<10)                {                                               printf("输入错误,请重新输入(输入10~20之间的整数)!!\n");                                               continue;//返回到while循环的开始部分,后面的不再执行                }                a[i]=num;                i++;         }         printf("\n数组a的数据为:\n");        for(i=0;i<3;i++)        {               printf("a[%d]=%d\n",i,a[i]);        }         return 0;}



break:结束循环

#include<stdio.h> int main(){        //输入一个整数,计算这个整数的阶乘        int n;        int a=1;        int i;        printf("请输入一个整数:");        scanf("%d",&n);         for(i=1;;i++)        {                a*=i;                 if(i==n)                {                        break;                }        }         printf("%d!=%d\n",n,a);         return 0;}



6.强制类型转换

float i=0; int j=(int)i;

7.运算符优先级从高到低的排列顺序:

  1):!
  
2):算术运算符
  
3):关系运算符
  
4):逻辑运算符

  5):赋值运算符

 

三.函数

格式:
返回值类型函数名(形参表)

:double area (double length,doublewidth);
函数要先声明在调用。
括号中的形参表中形参的名称是可以省略的
:double area (double,double)
但是实现函数的时候,一定要加上形参的名称


#include<stdio.h>//求三角形的面积doublearea(double width,double height){        double area;        area=width*height/2;        return area;} intmain(){        double w,h;         printf("请输入底的长度:");        scanf("%lf",&w);        printf("请输入高的长度:");        scanf("%lf",&h);         printf("这个三角形的面积是%.2f\n",area(w,h));          return 0;}





//求两个数的最大公约数:#include<stdio.h>//求两个数的最大公约数//先找到两个数中最小的一个数min,//最大公约数可能是这个最小的数min到1之间的数//通过循环从大到小一次判断这几个数哪个是最大公约数//如果a,b能够整除i,则i即为最大公约数intzdgys(int a,int b){        int i;               int min=a;        if(min>b)        {                min=b;        }                for(i=min;i>=1;i--)        {                if(a%i==0 && b%i==0)                {                        break;                }        }    return i;       } intmain(){        int a,b;        printf("请输入两个数:\n");        scanf("%d%d",&a,&b);         printf("%d和%d的最大公约数是%d\n",a,b,zdgys(a,b));         return 0;}



0 0