#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语言基础语法

  1. 变量,输入输出

  2. 判断

  3. 循环

  4. 函数

  5. 数据类型

  6. 数组

  7. 指针

  8. 结构体
  9. 链表

  10. 搜索

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语言基础语法的更多相关文章

  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. Beta阶段版本控制报告

    版本控制代码及文档要求 在coding.net版本控制; 公开项目,教师.专家.其他同学可以不注册源代码.在此公布git地址. 报告beta阶段2周中,项目的版本控制情况,不包括未在coding.ne ...

  2. FileInputStream与FileOutputStream练习题 -------------------图片拷贝

    package com.outputstream; import java.io.File; import java.io.FileInputStream; import java.io.FileNo ...

  3. grunt入门讲解6:grunt使用步骤和总结

    Grunt是啥? 很火的前端自动化小工具,基于任务的命令行构建工具. Grunt能帮我们干啥? 假设有这样一个场景: 编码完成后,你需要做以下工作 HTML去掉注析.换行符 - HtmlMin CSS ...

  4. cobbler技术详解(是PXE二次详解)

    Cobbler是PXE的二次封装,使用Python语言开发, 可以用来快速建立 Linux 网络安装环境,它已将 Linux 网络安装的技术门槛,从大专以上文化水平,成功降低到初中以下,连补鞋匠都能学 ...

  5. windwon安装macaca环境

      一 安装配置java   1.安装java_jdk ,安装过程中顺带一起安装jre   (1)选择[新建系统变量]--弹出“新建系统变量”对话框,在“变量名”文本框输入“JAVA_HOME”,在“ ...

  6. js中的extend,可实现浅拷贝深拷贝

    js中的extend   1.    JS中substring与substr的区别 之前在项目中用到substring方法,因为C#中也有字符串的截取方法Substring方法,当时也没有多想就误以为 ...

  7. go 面试题总结

    1.什么是goroutine,他与process, thread有什么区别? 2. 什么是channel,为什么它可以做到线程安全? 3. 了解读写锁吗,原理是什么样的,为什么可以做到? 4. 如何用 ...

  8. MDN & IRC

    MDN IRC MDN IRC xgqfrms https://developer.mozilla.org/en-US/docs/Mozilla/QA/Getting_Started_with_IRC ...

  9. MySQL复合主键下ON DUPLICATE KEY UPDATE语句失效问题

    问题的起因,假设有一张表,里面保存了交易订单,每张订单有唯一的ID,有最后更新时间,还有数据,详情如下: 1 2 3 4 5 6 7 +-------+----------+------+-----+ ...

  10. Luogu 5108 仰望半月的夜空(后缀数组)

    如果是要求左端点最大,直接求出SA,找前缀名次最小值就可以了.虽然现在要左端点最小,但我们已经知道了这个字典序最小的串是什么,找到名次数组上的合法区间求最小值即可.我也不知道为什么我会弃掉这个题,可能 ...