C语言基础语法
- #include <stdio.h>
- int main()
- {
- int age;
- printf("input your age");
- scanf("%d",&age);
- if(age>)
- {
- printf("you have become old");
- }
- else if(age < )
- {
- printf("you are too young");
- }
- else
- {
- printf("you are strong");
- }
- }
C语言基础语法
变量,输入输出
判断
循环
函数
数据类型
数组
指针
- 结构体
链表
搜索
C注释
单行注释//
多行注释/* */
判断语句:
if()
{
}
else if()
{
}
else
{
}
switch case 语句
- #include <stdio.h>
- int main()
- {
- int grade;
- scanf("%d",&grade);
- grade/=;
- switch(grade)
- {
- case :
- case :
- printf("A");
- break;
- case :
- printf("B");
- break;
- case :
- printf("C");
- break;
- case :
- printf("D");
- break;
- }
- }
循环while
- #include <stdio.h>
- int main()
- {
- int n=;
- int sum=;
- while(n<=)
- {
- sum+=n;
- n++;
- }
- printf("%d",sum);
- return ;
- }
for循环
- #include <stdio.h>
- int main()
- {
- int n;
- int sum = ;
- for(n=;n<=;n++)
- {
- sum+=n;
- }
- printf("%d",sum);
- return ;
- }
do while循环
- int main()
- {
- int i = ,sum = ;
- int n;
- scanf("%d",&n);
- do{
- sum+=i;
- i++;
- }while(i<=n);
- printf("%d",sum);
- return ;
- }
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)
- #include<stdio.h>
- int main(void)
- {
- int a[]={,,,,,,,};
- printf("%d\n",sizeof(a)/sizeof(a[]));
- long i;
- double f;
- printf("i=%d\n",sizeof(char));
- printf("f=%d\n",sizeof(double));
- }
运行结果
字符类型
char 是一种整数,也是一种特殊的类型:字符。这是因为:
字符是一种整数,可以进行整数的运算。
- #include<stdio.h>
- int main(void)
- {
- char c='';
- char d=;
- c++;
- printf("c=%c",c);
- }
用单引号表示的字符字面量:‘a’,'1'
''''也是一个字符
printf 和scanf里要用%c来输入输出字符
每一个字符都有一个对应的ASCII码值,
在ASCII码表中数字0-9是依次排列的
字母是顺序排列的,大写字母和小写字母是分开排列的,但大写字母A-Z是连续排列,小写字母也是。
大小写字符转换
- #include<stdio.h>
- int main(void)
- {
- char c='a';
- char d='B';
- c=c+'A'-'a'; //将小写字母变成大写;
- d=d+'a'-'A';
- printf("大写c=%c\n",c);
- printf("小写d=%c\n",d);
- }
函数定义调用
- #include <stdio.h>
- int getmax(int x,int y)
- {
- int result;
- return x>y ? x:y;
- }
- int main()
- {
- int x,y,s;
- scanf("%d %d",&x,&y);
- s=getmax(x,y);
- printf("%d",s);
- return ;
- }
C语言的函数都是从main函数开始执行的
函数定义时的参数称为形式参数,(parameter)
函数调用时的参数称为实际参数,(argument)
指针
- #include <stdio.h>
- void swap(int *x,int *y);
- int main()
- {
- int a=;
- int b=;
- swap(&a,&b);
- printf("a=%d,b=%d",a,b);
- return ;
- }
- void swap(int *x,int *y)
- {
- int temp;
- temp=*x;
- *x=*y;
- *y=temp;
- }
指针的概念
指针是一种数据类型
指针就是保存地址的变量
指针类型的变量称为指针变量
指针不是一个地址,指针变量的值是一个地址。
访问那个地址上的变量*
*是一个单目运算符,用来访问指针的值所表示的地址上的变量,
可以做右值,也可以做左值
int k = *p
*p = k+1
想让指针变量指向哪个存储单元,就让其保存哪个单元的地址。
- 保存一个变量的地址
- 保存一个数组的首地址
- 保存一个字符串的首地址
- 保存一个函数的首地址
使用指针变量的基本原则
明确指针指向了哪里--指针初始化
明确指针指向单元的内容是什么?---基类型
只能指向同一基类型的数据。
指针的重要应用
作函数参数,向函数传递变量或函数地址
动态分配内存,实现动态数组和动态数据结构
指向函数的指针做函数参数。
被调函数根据传入的不同地址调用不同的函数。
- #include <stdio.h>
- void f(int *p);//声明函数原型
- int main(void) //void 表明是无参函数 ,返回值为int
- {
- int i=;
- printf("&i=%p\n",&i); //打印i的内存地址
- f(&i); //将I的地址传给f函数
- return ;
- }
- void f(int *p)
- {
- printf("p=%p\n",p); //打印P的值
- }
运行结果如下:
取地址运算符&
& 取变量的内存地址,& 后面必须跟的是变量
取内存地址必须要用%p
- #include <stdio.h>
- int main(void)
- {
- int i=;
- int p;
- printf("%p\n",&i);
- printf("%p\n",&p);
- printf("%lu",sizeof(&i));
- return ;
- }
可以发现内存地址之间差4个字节,而且i变量处于高位。因为C语言的内存管理是用一种堆栈,stack
查看数组的内存地址
- #include <stdio.h> /* 取数组的内存地址,查看有什么变化*/
- int main(void)
- {
- int a[]; //定义一个数组,长度为10
- printf("%p\n",&a);
- printf("%p\n",a);
- printf("%p\n",&a[]);
- printf("%p\n",&a[]);
- printf("%p\n",&a[]);
- }
运行结果如下:
我们可以发现&a=a=&a[0] a[0] 和a[1]之间差4个字节
指针的应用,
数组与指针,
数组变量是特殊的指针
数组a==&a[0]
[]运算符可以对数组做,也可以对指针做
数组变量是const指针,不能被赋值
- #include <stdio.h>
- void max_min(int a[],int *p1,int *p2) ;//声明函数原型
- int main(void) //void 表明是无参函数 ,返回值为int
- {
- int a[]={,,,,,,,,};
- int min;
- int max;
- printf("&a=%p\n",a);
- max_min(a,&max,&min);
- printf("max=%d\n",max);
- printf("min=%d\n",min);
- printf("a[0]=%d",a[]);
- return ;
- }
- void max_min(int a[],int *p1,int *p2)
- {
- int i;
- *p1=a[];
- *p2=a[];
- a[]=;
- printf("&a=%p\n",a);
- for (i=;i<;i++)
- {
- if (a[i]>*p1)
- {*p1=a[i];
- }
- if(a[i]<*p2)
- {
- *p2=a[i];
- }
- }
- }
运行结果如下
- int divide(int a,int b,int *ret);
- /*用指针写一个除法运算*/
- int main(void)
- {
- int a=;
- int b=;
- int ret;
- if(divide(a,b,&ret))
- {
- printf("ret=%d",ret);
- }
- else
- printf("b 不能为 0");
- return ;
- }
- int divide(int a,int b,int *ret)
- {
- if(b !=)
- {
- *ret=a/b;
- return ;
- }
- else
- {
- return ;
- }
- }
结构体
struct是一种数据类型
语法格式为struct 结构体名{
type var;
type var;
};
比如定义一个学生的结构体
见代码
- int main(void)
- {
- typedef struct student{
- int id;
- char name[];
- float score[];
- }STUDENT;
- STUDENT stu[]= //STUDENT 与struct student是等价的,STUDENT相当于struct student 的别名
- {
- {,"于洋",{,,,}},
- {,"王洋",{,,,}}
- };
- STUDENT *p; //定义一个STUDENT类型的指针p
- p=stu;//初始化这个指针,将指针指向stu的首地址,p=stu 与p=&stu[0]是等价的
- printf("p->%s\n",p->name); //p->name 与(*p).name 是等价的
- p++; //相当于p=&stu[1],改变p指向的内存地址
- printf("*p%s\n",(*p).name);
- printf("%f\n",stu[].score[]);
- printf("这个数字是?:%f\n",p--->score[]);
- }
运行结果
字符串
深入理解字符串,数组字符串 http://blog.csdn.net/lqxandroid2012/article/details/51721061
在C语言中字符串常量本质上代表的是一个地址
所以下面的语句是成立的
char *p;
p="hello world";
- #include<stdio.h>
- #include<math.h>
- int main(void)
- {
- char *a[]={"shandong","hu","shanghai","beijing"};/*[]运算的优先级高于*,所以先执行a[],k可以得出定义了一个数组,
- 数组的元素的数据类型是char *指针*/
- printf("%p %p %p %p\n",a[],a[],a[],a[]); //打印数组a的每一个元素。
- printf("%p %p %p %p\n",&a[],&a[],&a[],&a[]);//打印 数组中的每个元素的地址
- printf("a:size=%d",sizeof(a));//数组a的长度
- return ;
- }
可以看出char *a[]={"shandong","hu","shanghai","beijing"};
是一个数组,数组的每个元素是一个char * 的指针,每个指针保存的是内存地址,固定为4个字节(32位电脑),8个字节(64位电脑)。
链表
有单链表,双链表
链表是有一个个节点串起来的,
创建一个单链表
- #include<stdio.h>
- #include<stdlib.h>
- typedef struct node{
- int num;
- struct node *next;
- }NODE;
- int main(void)
- {
- NODE *head=NULL;
- int n;
- int i;
- do{
- scanf("%d",&n);
- if(n!=-){
- NODE *p=(NODE*)malloc(sizeof(NODE));
- p->num=n;
- p->next=NULL;
- NODE *last=head;
- if(last){
- //find last node
- while(last->next){
- last=last->next;
- }
- //attach
- last->next=p;
- }else{
- head=p;
- }
- }
- }while(n!=-);
- //创建完,查看一下链表中的数据
- NODE *q=head;
- printf("%d",q->num);
- return ;
- }
运行结果
查找
1遍历搜索,从第一个搜索到最后一个
- #include<stdio.h>
- int search(int *p,int len,int key);
- int main(void)
- {
- int a[]={,,,,,,,,};
- int key;
- int ret;
- scanf("%d",&key);
- ret=search(a,sizeof(a)/sizeof(a[]),key);
- printf("%d\n",ret);
- return ;
- }
- int search(int *p,int len,int key)
- {
- int ret=-;
- int i;
- for(i=;i<len;i++) //i最好只干一件事,不要一专多能
- {
- if(key==*p)
- {
- ret=key;
- break;
- }
- p++;
- }
- return ret;//最好程序有一个入口
- }
是出口,不是入口
二分查找
二分查找极大的提高了效率,但数据必须是有序的
- #include<stdio.h>
- #define MAXNUM 100
- int main(void)
- {
- int a[]={,,,,,,,,,};
- int len=sizeof(a)/sizeof(a[]);
- int left,right,middle;
- left=;
- right=len-;
- int key; //要找的key
- printf("请输入要查找的整数");
- scanf("%d",&key);
- int ret=-;
- while(right>=left)
- {
- middle=(left+right)/;
- if(key==a[middle])
- {
- ret=middle;
- break;
- }
- else
- {
- if(key>a[middle])
- {
- left=middle+;
- }
- else{
- right=middle-;
- }
- }
- }
- printf("ret=%d\n",ret);
- return ;
- }
排序
冒泡排序:相邻两个元素之间进行比较
- #include<stdio.h>
- #define MAXNUM 100
- int main(void)
- {
- int a[]={,,,,,,,,,};
- int len=sizeof(a)/sizeof(a[]);
- int i,j;
- int t;
- int max;
- for(j=len;j>;j--)
- {
- for(i=;i<j;i++)
- {
- if(a[i]>a[i+])
- {
- t=a[i+];
- a[i+]=a[i];
- a[i]=t;
- }
- }
- }
选择排序
- #define MAXNUM 100
- int main(void)
- {
- int a[]={,,,,,,,,,};
- int len=sizeof(a)/sizeof(a[]);
- int i,j;
- int t;
- int maxid;
- for(j=len;j>;j--)
- {
- maxid=;
- for(i=;i<j;i++)
- {
- if(a[i]>a[maxid])
- {
- maxid=i;
- }
- }
- t=a[maxid];
- a[maxid]=a[j-];
- a[j-]=t;
- }
- for(i=;i<len;i++)
- {
- printf("%d\n",a[i]);
- }
- }
C语言基础语法的更多相关文章
- Smali语言基础语法
1.Smali语言基础语法-数据类型与描述符 smali中有两类数据类型:基本类型和引用类型.引用类型是指数组和对象,其它都是基础类型. 基本类型以及每种类型的描述符: Java类型 类型描述符 说明 ...
- 黑马程序员——OC语言基础语法 面向对象的思想
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...
- 黑马程序员——C语言基础语法 关键字 标识符 注释 数据及数据类型
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)C语言简单介绍 (1)C语言程序是由函数组成的任何C语言程序都是由一 ...
- php语言基础语法与编程工具推荐
php脚本语言,需要在服务器端执行,用浏览器返回HTML结果.在PHP中所有的语法都是如此,用户端是无法修改的,只有浏览权限. 一.php基础语法之输出方法 1.PHP中所有的脚本,可以放在文件中的任 ...
- C语言基础语法之指向函数的指针
指针是C语言的精髓,对于初学者来讲,指针是C语言语法学习中比较难的知识点,而这里面指向函数的指针更是不太容易理解. 下面给大家讲下怎样学习理解C语言中指向函数的指针及编程方法和使用例子. 注意:这是一 ...
- Python语言基础-语法特点、保留字与标识符、变量、基本数据类型、运算符、基本输入输出、Python2.X与Python3.X区别
Python语言基础 1.Python语法特点 注释: 单行注释:# #注释单行注释分为两种情况,例:第一种#用于计算bim数值bim=weight/(height*height)第二种:bim=we ...
- NDK以及C语言基础语法(一)
一.什么是NDK? Native Development Kit (本地开发工具包): NDK中提供了一系列的工具,帮助我们快速开发C/C++的动态库,并能自动将so文件和java文件一起打包成apk ...
- Go语言--基础语法笔记
### 换了工作,好久没有添加新文章了,本来是想更新到github上的,想想还是在博客里放着,感觉以前的文章都没有很仔细,都只是问题处理的记录, 以后想新加一些整理的笔记也好 ### 主要内容 2.1 ...
- GO_03:GO语言基础语法
1. Go项目的目录结构 一般的,一个Go项目在GOPATH下,会有如下三个目录: project --- bin --- pkg --- src 其中,bin 存放编译后的可执行文件:p ...
随机推荐
- Scrum Meeting 11.11
成员 今日任务 明日计划 用时 徐越 学习UI设计并重构上传下载界面 赵庶宏 薄霖 UI代码更新 卞忠昊 Xfermode与PorterDuff 武鑫 界面设计:独 ...
- 26_多线程_第26天(Thread、线程创建、线程池)_讲义
今日内容介绍 1.多线程 2.线程池 01进程概念 A:进程概念 a:进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行, 即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能 ...
- 二级制包安装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 ...
- 【第十周】四则运算GUI
下载地址:http://pan.baidu.com/s/1hsc9HRm 这次比上次多了一个记录的功能,是用QT里面的qplaintextedit记录显示出做过的题目. 我是直接看的文档,发现窗体,搜 ...
- apache +PHP多版本 切换的问题
在开发中切换php版本的时候出错 经过2小时的日子排查终于找到是因为切换版本后加载的php7ts.dll模块还是原来版本的,因此保pid file 错误 解决方法 PHPIniDir "H: ...
- git 常用命令总结(一)
1.初始化版本库: .进入工程根目录目录 .创建项目目录 mkdir 项目目录名称 .进入创建的项目中 cd 项目名称 pwd 显示当前目录 .项目初始化 git init //完成后会在项目目录下生 ...
- mysql 数字类型的长度区别
mysql整型bigint.int.mediumint.smallint 和 tinyint的语法介绍,如下: 1.bigint 从 -2^63 (-9223372036854775808) 到 2^ ...
- intel 的架构图
第一代: 第二代 第三代 以及对比
- Jquery插件收集【m了慢慢学】
1. Simple Effects for Drop-Down Lists 一个jQuery插件用于将普通的select控件转成一个带有一些简单扩展效果的下拉列表. 2. X-editable 这个插 ...
- 字符串使用replaceAll()方法报异常
对字符串使用replaceAll()方法替换 * ? + / | 等字符的时候会报以下异常 Dangling meta character '*' near index 0 这主要是因为这些符号在正则 ...