1. #include <stdio.h>
  2. int main()
  3. {
  4. int age;
  5. printf("input your age");
  6. scanf("%d",&age);
  7. if(age>)
  8. {
  9. printf("you have become old");
  10.  
  11. }
  12. else if(age < )
  13. {
  14.  
  15. printf("you are too young");
  16.  
  17. }
  18. else
  19. {
  20.  
  21. printf("you are strong");
  22.  
  23. }
  24.  
  25. }

C语言基础语法

  1. 变量,输入输出

  2. 判断

  3. 循环

  4. 函数

  5. 数据类型

  6. 数组

  7. 指针

  8. 结构体
  9. 链表

  10. 搜索

C注释

单行注释//

多行注释/*    */

判断语句:

if()

{

}

else if()

{

}

else

{

}

switch case 语句

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int grade;
  5. scanf("%d",&grade);
  6. grade/=;
  7. switch(grade)
  8. {
  9. case :
  10. case :
  11. printf("A");
  12. break;
  13. case :
  14. printf("B");
  15. break;
  16. case :
  17. printf("C");
  18. break;
  19. case :
  20. printf("D");
  21. break;
  22. }
  23. }

循环while

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int n=;
  5. int sum=;
  6. while(n<=)
  7. {
  8. sum+=n;
  9. n++;
  10.  
  11. }
  12. printf("%d",sum);
  13. return ;
  14. }

for循环

  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int n;
  6. int sum = ;
  7. for(n=;n<=;n++)
  8. {
  9. sum+=n;
  10. }
  11. printf("%d",sum);
  12. return ;
  13. }

do while循环

  1. int main()
  2. {
  3. int i = ,sum = ;
  4. int n;
  5. scanf("%d",&n);
  6. do{
  7. sum+=i;
  8. i++;
  9.  
  10. }while(i<=n);
  11. printf("%d",sum);
  12. return ;
  13. }

while语句是先检票后上车,do while语句是先上车后检票,dowhile语句至少会被执行一次。

数据类型

C语言中的变量必须先定义,并且明确数据类型

C语言中的数据类型有

  • 整数型
  • char、 short、 int、 long、 long long
  • 浮点型
  • float 、 double 、 long double
  • 逻辑
  • bool
  • 指针
  • 自定义类型

类型名称, int、long、double、

输入输出时格式化%d、%ld、 %lf、

所表达的范围

char<short<int<float<double

sizeof

是一个运算符,给出某个数据类型或者变量在内存中所占据的字节数

比如:

sizeof(int)

sizeof(i)

  1. #include<stdio.h>
  2. int main(void)
  3. {
  4.  
  5. int a[]={,,,,,,,};
  6. printf("%d\n",sizeof(a)/sizeof(a[]));
  7. long i;
  8. double f;
  9. printf("i=%d\n",sizeof(char));
  10. printf("f=%d\n",sizeof(double));
  11. }

运行结果

字符类型

char 是一种整数,也是一种特殊的类型:字符。这是因为:

字符是一种整数,可以进行整数的运算。

  1. #include<stdio.h>
  2. int main(void)
  3. {
  4. char c='';
  5. char d=;
  6. c++;
  7. printf("c=%c",c);
  8. }

用单引号表示的字符字面量:‘a’,'1'

''''也是一个字符

printf 和scanf里要用%c来输入输出字符

每一个字符都有一个对应的ASCII码值,

在ASCII码表中数字0-9是依次排列的

字母是顺序排列的,大写字母和小写字母是分开排列的,但大写字母A-Z是连续排列,小写字母也是。

大小写字符转换

  1. #include<stdio.h>
  2. int main(void)
  3. {
  4. char c='a';
  5. char d='B';
  6. c=c+'A'-'a'; //将小写字母变成大写;
  7. d=d+'a'-'A';
  8. printf("大写c=%c\n",c);
  9. printf("小写d=%c\n",d);
  10. }

函数定义调用

  1. #include <stdio.h>
  2. int getmax(int x,int y)
  3. {
  4. int result;
  5. return x>y ? x:y;
  6. }
  7.  
  8. int main()
  9. {
  10. int x,y,s;
  11. scanf("%d %d",&x,&y);
  12. s=getmax(x,y);
  13. printf("%d",s);
  14. return ;
  15. }

C语言的函数都是从main函数开始执行的

函数定义时的参数称为形式参数,(parameter)

函数调用时的参数称为实际参数,(argument)

指针

  1. #include <stdio.h>
  2. void swap(int *x,int *y);
  3. int main()
  4. {
  5. int a=;
  6. int b=;
  7. swap(&a,&b);
  8. printf("a=%d,b=%d",a,b);
  9. return ;
  10. }
  11. void swap(int *x,int *y)
  12. {
  13. int temp;
  14. temp=*x;
  15. *x=*y;
  16. *y=temp;
  17. }

指针的概念

指针是一种数据类型

指针就是保存地址的变量

指针类型的变量称为指针变量

指针不是一个地址,指针变量的值是一个地址。

访问那个地址上的变量*

*是一个单目运算符,用来访问指针的值所表示的地址上的变量,

可以做右值,也可以做左值

int k = *p

*p = k+1

想让指针变量指向哪个存储单元,就让其保存哪个单元的地址。

  • 保存一个变量的地址
  • 保存一个数组的首地址
  • 保存一个字符串的首地址
  • 保存一个函数的首地址

使用指针变量的基本原则

明确指针指向了哪里--指针初始化

明确指针指向单元的内容是什么?---基类型

只能指向同一基类型的数据。

指针的重要应用

作函数参数,向函数传递变量或函数地址

动态分配内存,实现动态数组和动态数据结构

指向函数的指针做函数参数。

被调函数根据传入的不同地址调用不同的函数。

  1. #include <stdio.h>
  2. void f(int *p);//声明函数原型
  3. int main(void) //void 表明是无参函数 ,返回值为int
  4. {
  5. int i=;
  6. printf("&i=%p\n",&i); //打印i的内存地址
  7. f(&i); //将I的地址传给f函数
  8. return ;
  9.  
  10. }
  11. void f(int *p)
  12. {
  13. printf("p=%p\n",p); //打印P的值
  14. }

运行结果如下:

取地址运算符&

& 取变量的内存地址,& 后面必须跟的是变量

取内存地址必须要用%p

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. int i=;
  5. int p;
  6. printf("%p\n",&i);
  7. printf("%p\n",&p);
  8. printf("%lu",sizeof(&i));
  9. return ;
  10. }

可以发现内存地址之间差4个字节,而且i变量处于高位。因为C语言的内存管理是用一种堆栈,stack

查看数组的内存地址

  1. #include <stdio.h> /* 取数组的内存地址,查看有什么变化*/
  2. int main(void)
  3. {
  4. int a[]; //定义一个数组,长度为10
  5. printf("%p\n",&a);
  6. printf("%p\n",a);
  7. printf("%p\n",&a[]);
  8. printf("%p\n",&a[]);
  9. printf("%p\n",&a[]);
  10. }

运行结果如下:

我们可以发现&a=a=&a[0] a[0] 和a[1]之间差4个字节

指针的应用,

数组与指针,

数组变量是特殊的指针

数组a==&a[0]

[]运算符可以对数组做,也可以对指针做

数组变量是const指针,不能被赋值

  1. #include <stdio.h>
  2. void max_min(int a[],int *p1,int *p2) ;//声明函数原型
  3.  
  4. int main(void) //void 表明是无参函数 ,返回值为int
  5. {
  6. int a[]={,,,,,,,,};
  7. int min;
  8. int max;
  9. printf("&a=%p\n",a);
  10. max_min(a,&max,&min);
  11. printf("max=%d\n",max);
  12. printf("min=%d\n",min);
  13. printf("a[0]=%d",a[]);
  14. return ;
  15.  
  16. }
  17. void max_min(int a[],int *p1,int *p2)
  18. {
  19. int i;
  20. *p1=a[];
  21. *p2=a[];
  22. a[]=;
  23. printf("&a=%p\n",a);
  24. for (i=;i<;i++)
  25. {
  26. if (a[i]>*p1)
  27. {*p1=a[i];
  28. }
  29. if(a[i]<*p2)
  30. {
  31. *p2=a[i];
  32. }
  33. }
  34. }

运行结果如下

  1. int divide(int a,int b,int *ret);
  2. /*用指针写一个除法运算*/
  3. int main(void)
  4. {
  5. int a=;
  6. int b=;
  7. int ret;
  8. if(divide(a,b,&ret))
  9. {
  10. printf("ret=%d",ret);
  11. }
  12. else
  13. printf("b 不能为 0");
  14. return ;
  15. }
  16. int divide(int a,int b,int *ret)
  17. {
  18. if(b !=)
  19. {
  20. *ret=a/b;
  21. return ;
  22. }
  23. else
  24. {
  25. return ;
  26. }
  27. }

结构体

struct是一种数据类型

语法格式为struct 结构体名{

type var;

type var;

};

比如定义一个学生的结构体

见代码

  1. int main(void)
  2. {
  3. typedef struct student{
  4. int id;
  5. char name[];
  6. float score[];
  7. }STUDENT;
  8. STUDENT stu[]= //STUDENT 与struct student是等价的,STUDENT相当于struct student 的别名
  9. {
  10. {,"于洋",{,,,}},
  11. {,"王洋",{,,,}}
  12. };
  13. STUDENT *p; //定义一个STUDENT类型的指针p
  14. p=stu;//初始化这个指针,将指针指向stu的首地址,p=stu 与p=&stu[0]是等价的
  15. printf("p->%s\n",p->name); //p->name 与(*p).name 是等价的
  16. p++; //相当于p=&stu[1],改变p指向的内存地址
  17. printf("*p%s\n",(*p).name);
  18. printf("%f\n",stu[].score[]);
  19. printf("这个数字是?:%f\n",p--->score[]);
  20. }

运行结果

字符串

深入理解字符串,数组字符串 http://blog.csdn.net/lqxandroid2012/article/details/51721061

在C语言中字符串常量本质上代表的是一个地址

所以下面的语句是成立的

char *p;

p="hello world";

  1. #include<stdio.h>
  2. #include<math.h>
  3. int main(void)
  4. {
  5. char *a[]={"shandong","hu","shanghai","beijing"};/*[]运算的优先级高于*,所以先执行a[],k可以得出定义了一个数组,
  6. 数组的元素的数据类型是char *指针*/
  7. printf("%p %p %p %p\n",a[],a[],a[],a[]); //打印数组a的每一个元素。
  8. printf("%p %p %p %p\n",&a[],&a[],&a[],&a[]);//打印 数组中的每个元素的地址
  9. printf("a:size=%d",sizeof(a));//数组a的长度
  10.  
  11. return ;
  12.  
  13. }

可以看出char *a[]={"shandong","hu","shanghai","beijing"};

是一个数组,数组的每个元素是一个char * 的指针,每个指针保存的是内存地址,固定为4个字节(32位电脑),8个字节(64位电脑)。

链表

有单链表,双链表

链表是有一个个节点串起来的,

创建一个单链表

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. typedef struct node{
  4. int num;
  5. struct node *next;
  6. }NODE;
  7. int main(void)
  8. {
  9.  
  10. NODE *head=NULL;
  11. int n;
  12. int i;
  13. do{
  14. scanf("%d",&n);
  15. if(n!=-){
  16. NODE *p=(NODE*)malloc(sizeof(NODE));
  17. p->num=n;
  18. p->next=NULL;
  19. NODE *last=head;
  20. if(last){
  21. //find last node
  22. while(last->next){
  23. last=last->next;
  24. }
  25. //attach
  26. last->next=p;
  27. }else{
  28. head=p;
  29. }
  30. }
  31. }while(n!=-);
  32. //创建完,查看一下链表中的数据
  33. NODE *q=head;
  34. printf("%d",q->num);
  35. return ;
  36. }

运行结果

查找

1遍历搜索,从第一个搜索到最后一个

  1. #include<stdio.h>
  2. int search(int *p,int len,int key);
  3. int main(void)
  4. {
  5. int a[]={,,,,,,,,};
  6. int key;
  7. int ret;
  8. scanf("%d",&key);
  9. ret=search(a,sizeof(a)/sizeof(a[]),key);
  10. printf("%d\n",ret);
  11. return ;
  12. }
  13. int search(int *p,int len,int key)
  14. {
  15. int ret=-;
  16. int i;
  17. for(i=;i<len;i++) //i最好只干一件事,不要一专多能
  18. {
  19. if(key==*p)
  20. {
  21. ret=key;
  22. break;
  23. }
  24. p++;
  25. }
  26. return ret;//最好程序有一个入口
  27. }

是出口,不是入口

二分查找

二分查找极大的提高了效率,但数据必须是有序的

  1. #include<stdio.h>
  2. #define MAXNUM 100
  3. int main(void)
  4. {
  5. int a[]={,,,,,,,,,};
  6. int len=sizeof(a)/sizeof(a[]);
  7. int left,right,middle;
  8. left=;
  9. right=len-;
  10. int key; //要找的key
  11. printf("请输入要查找的整数");
  12. scanf("%d",&key);
  13. int ret=-;
  14. while(right>=left)
  15. {
  16. middle=(left+right)/;
  17. if(key==a[middle])
  18. {
  19. ret=middle;
  20. break;
  21. }
  22. else
  23. {
  24. if(key>a[middle])
  25. {
  26. left=middle+;
  27. }
  28. else{
  29. right=middle-;
  30. }
  31. }
  32. }
  33. printf("ret=%d\n",ret);
  34. return ;
  35. }

排序

冒泡排序:相邻两个元素之间进行比较

  1. #include<stdio.h>
  2. #define MAXNUM 100
  3.  
  4. int main(void)
  5. {
  6. int a[]={,,,,,,,,,};
  7. int len=sizeof(a)/sizeof(a[]);
  8. int i,j;
  9. int t;
  10. int max;
  11. for(j=len;j>;j--)
  12. {
  13. for(i=;i<j;i++)
  14. {
  15. if(a[i]>a[i+])
  16. {
  17. t=a[i+];
  18. a[i+]=a[i];
  19. a[i]=t;
  20.  
  21. }
  22. }
  23.  
  24. }

选择排序

  1. #define MAXNUM 100
  2.  
  3. int main(void)
  4. {
  5. int a[]={,,,,,,,,,};
  6. int len=sizeof(a)/sizeof(a[]);
  7. int i,j;
  8. int t;
  9. int maxid;
  10. for(j=len;j>;j--)
  11. {
  12. maxid=;
  13. for(i=;i<j;i++)
  14. {
  15. if(a[i]>a[maxid])
  16. {
  17. maxid=i;
  18. }
  19. }
  20. t=a[maxid];
  21. a[maxid]=a[j-];
  22. a[j-]=t;
  23. }
  24.  
  25. for(i=;i<len;i++)
  26. {
  27. printf("%d\n",a[i]);
  28. }
  29. }

C语言基础语法的更多相关文章

  1. Smali语言基础语法

    1.Smali语言基础语法-数据类型与描述符 smali中有两类数据类型:基本类型和引用类型.引用类型是指数组和对象,其它都是基础类型. 基本类型以及每种类型的描述符: Java类型 类型描述符 说明 ...

  2. 黑马程序员——OC语言基础语法 面向对象的思想

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...

  3. 黑马程序员——C语言基础语法 关键字 标识符 注释 数据及数据类型

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)C语言简单介绍 (1)C语言程序是由函数组成的任何C语言程序都是由一 ...

  4. php语言基础语法与编程工具推荐

    php脚本语言,需要在服务器端执行,用浏览器返回HTML结果.在PHP中所有的语法都是如此,用户端是无法修改的,只有浏览权限. 一.php基础语法之输出方法 1.PHP中所有的脚本,可以放在文件中的任 ...

  5. C语言基础语法之指向函数的指针

    指针是C语言的精髓,对于初学者来讲,指针是C语言语法学习中比较难的知识点,而这里面指向函数的指针更是不太容易理解. 下面给大家讲下怎样学习理解C语言中指向函数的指针及编程方法和使用例子. 注意:这是一 ...

  6. Python语言基础-语法特点、保留字与标识符、变量、基本数据类型、运算符、基本输入输出、Python2.X与Python3.X区别

    Python语言基础 1.Python语法特点 注释: 单行注释:# #注释单行注释分为两种情况,例:第一种#用于计算bim数值bim=weight/(height*height)第二种:bim=we ...

  7. NDK以及C语言基础语法(一)

    一.什么是NDK? Native Development Kit (本地开发工具包): NDK中提供了一系列的工具,帮助我们快速开发C/C++的动态库,并能自动将so文件和java文件一起打包成apk ...

  8. Go语言--基础语法笔记

    ### 换了工作,好久没有添加新文章了,本来是想更新到github上的,想想还是在博客里放着,感觉以前的文章都没有很仔细,都只是问题处理的记录, 以后想新加一些整理的笔记也好 ### 主要内容 2.1 ...

  9. GO_03:GO语言基础语法

    1. Go项目的目录结构 一般的,一个Go项目在GOPATH下,会有如下三个目录: project   --- bin   --- pkg   --- src 其中,bin 存放编译后的可执行文件:p ...

随机推荐

  1. Scrum Meeting 11.11

    成员 今日任务 明日计划 用时 徐越 学习UI设计并重构上传下载界面     赵庶宏       薄霖 UI代码更新     卞忠昊 Xfermode与PorterDuff     武鑫 界面设计:独 ...

  2. 26_多线程_第26天(Thread、线程创建、线程池)_讲义

    今日内容介绍 1.多线程 2.线程池 01进程概念 A:进程概念 a:进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行, 即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能 ...

  3. 二级制包安装Tomcat 与 RPM包安装Tomcat

    1:下载二级制包 wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.47/bin/apache-tomcat-8.0.47.tar.g ...

  4. 【第十周】四则运算GUI

    下载地址:http://pan.baidu.com/s/1hsc9HRm 这次比上次多了一个记录的功能,是用QT里面的qplaintextedit记录显示出做过的题目. 我是直接看的文档,发现窗体,搜 ...

  5. apache +PHP多版本 切换的问题

    在开发中切换php版本的时候出错 经过2小时的日子排查终于找到是因为切换版本后加载的php7ts.dll模块还是原来版本的,因此保pid file 错误 解决方法 PHPIniDir "H: ...

  6. git 常用命令总结(一)

    1.初始化版本库: .进入工程根目录目录 .创建项目目录 mkdir 项目目录名称 .进入创建的项目中 cd 项目名称 pwd 显示当前目录 .项目初始化 git init //完成后会在项目目录下生 ...

  7. mysql 数字类型的长度区别

    mysql整型bigint.int.mediumint.smallint 和 tinyint的语法介绍,如下: 1.bigint 从 -2^63 (-9223372036854775808) 到 2^ ...

  8. intel 的架构图

    第一代: 第二代 第三代 以及对比

  9. Jquery插件收集【m了慢慢学】

    1. Simple Effects for Drop-Down Lists 一个jQuery插件用于将普通的select控件转成一个带有一些简单扩展效果的下拉列表. 2. X-editable 这个插 ...

  10. 字符串使用replaceAll()方法报异常

    对字符串使用replaceAll()方法替换 * ? + / | 等字符的时候会报以下异常 Dangling meta character '*' near index 0 这主要是因为这些符号在正则 ...