1、char类型 

  char c;定义了一个char变量
  'a' ; char常量
  char的本质就是一个整数,一个只有一个字节大小的整数
  char c; 定义一个有符号的char
  unsigned char b; 定义一个无符号的char
  c = 4; //c等于一个整数 -->4
  c = '4';//c等于一个字符4,对应ASCII码的52
  %c 表示是输出一个字符,而不是一个整数
 大写字母转小写的方法:
  例如: char a = 'B';
  a = a + 32;
  printf("%c \n",a);
 例二:
  char a = 127;
  a = a+5;
  printf("%d",a); // -124

  分析:a=127 --> 0111 1111 -->+5-->1000 0100(最高位为1,计算机便认为它是负数,则当做了补码,则转成原码输出)
  补码-->原码 1000 0100 --> 1111 1011 + 1-->1111 1100(最高位表示符号),则输出的二进制是0111 1100,十进制为-124。
  char 和 unsigned char
  char的取值范围 -128到127。
  unsigned char 为0-255

2、不可打印char转义符

  \a 警报 char a = '\a' ; printf("%c",a); 不显示,只有一声警报
  \b 退格
  \n 换行(回车+换行)
  \r 回车(回到头部)
  \t 制表符
  \’ 输出单引号
  \? 输出问号
  \\ 输出 \

3、浮点数float(4bytes)、double(8bytes)、long double类型-->效率低

  其字节数随系统而变化,常用32架构系统如上的所示。
  小数四舍五入的方法:
  float a = 3.6;
  a = a + 0.5;
  printf("%d",a);# 只保留整数部分

4、volatile

  代表变量是一个可能被CPU指令之外的地方改变的,编译器就不会针对这个变量去优化目标代码。例如:volatile int i
  register 变量在CPU寄存器里面,而不是内存里面。但regist是建议型的指令,而不是命令型的指令。例如:register int a

5、字符串格式化输出和输入  

  1、字符串在计算机内部的存储方式
    字符串是内存中一段连续的char空间,以'\0'结尾。
  2、"" 是c语言表示字符串的格式。printf("%s",'hello world' );
  3、printf函数、putchar函数
    输出%,-->printf("%%");
    'l'附加在d,u,x,o前面,表示长整数。
    '-'左对齐-->printf("%-5d");去掉'-'默认右对齐。
    '0'位宽不够0来凑,但不能与'-'混用。
  4、putchar函数是显示一个字符的函数。
    putchar(97) -->输出‘a’

  5、scanf函数
    scanf("%d",&a) //用&取变量的地址。

   常用字符串输入输出函数如下:   

#include<stdio.h>
#include<stdlib.h> // scanf 输入
int main1(void)
{
char a[] = {}; // 输入:hello world
scanf("%s",a); //%s 表示输入一个字符串 ,scanf是以回车作为输入完成标识的,但回车键本身并不会作为字符串的一部分
// 如果scanf参数中的数组长度小于用户在键盘输入的长度,那么scanf就会缓冲区溢出,导致程序崩溃
int i = ;
for(i=;i<;i++)
{
printf("%d\n",a[i]);
}
printf("---------\n"); //输出:hello -->scanf将回车和空格都视为字符串结束标志
printf("%s",a);
return ;
} // gets() 输入 ,不能用类似“%s”或者 "%d"之类的字符转义,只能接受字符串的输入。
int main2(void)
{ char s[] = {};
gets(s); // 输入:hello world ,gets()函数同样是获取用户输入,它将获取的字符串放入s中,仅把回车键视为结束标志 ,但也有溢出问题
int i;
for(i=;i<;i++)
{
printf("%d\n",s[i]);
}
printf("-------\n");
printf("%d\n",s); // 输出:hello world
return ;
} // gets()获取用户输入,atoi() 函数将字符串转为数字
int main3(void)
{
char a[] = {};
char b[] = {};
gets(a); // 获取第一次输入,a的对象只能是数组 ,不能转义(字符串转为数字),需要 使用专门的函数
gets(b);
int i1 = atoi(a); // 将字符串转化为一个整数
int i2 = atoi(b);
printf("%d\n",i1+i2); return ;
} // fgets()函数用法
int main4(void)
{
char c[] = {};
fgets(c,sizeof(c),stdin);//第一个参数是char的数组,第二个参数是数组的大小,单位字节,第三个参数代表标准输入。
// 输入: hello world
printf("%s\n",c);// 输出:hello wor --> 它把字符串尾的 0 也包括在内了,fgets()会自动截断,防止溢出,所以很安全
// 调用fgets()的时候,只要能保证第二个参数小于数组的实际大小,就可以避免缓冲区溢出的问题。
return ;
} // puts() 函数自动会在输出完成后打印一个'\n'出来
int main5(void)
{
char d[] = {};
gets(d);
printf("------\n");
puts(d); //自动输出,附带换行
return ;
} // fputs()函数,是puts的文件操作版
int main(void)
{
char e[] = {};
fgets(e,sizeof(e),stdin); // hello world mylove
printf("----------\n");
fputs(e,stdout); // hello world mylove
return ;
}

  6、getchar函数
    char a ,b;
    a = getchar();//得到用户键盘的按键对应的ASCII码值
    getchar() //获取回车
    b = getchar();//得到用户键盘的按键对应的ASCII码值
    printf("a+b=%d",(a-'0')+(b-'0')); //得到对应的值
  7、左值:表示可以被更改的数据对象。
    右值:能赋给左值的量。

6、运算符

  + - * / % += -= *= /= %=
  a+=1 <-> a++ //自加1 ++(后缀)从左到右;++(前缀)从右到左
  a-=1 <-> a-- //自减1
  例如:
    int a,i;
    i = 3;
    a = ++i; //a=4
    //a = i++; // a=3
  总结:i++先计算表达式的值;++i先自身++,再计算表达式的值。
  例如:
    int i = 6;
    int a = i++ + ++i;
    printf("%d\t%d",a,i); // 14   8
  分析:实际分以下三步
    i = i+1;
    int a = i+i;
    i = i+1;

7、逗号表达式

  int a,b,c;
  a = 1;
  b = 2;
  c = (a=b,a+b) //先算括号内逗号左边的,再算逗号后边的,表达式取逗号右边的值
  printf("%d",c) //4

8、空语句,只有一个 ; 号表示

  强制类型转换
  double f = 3/2; //c语言两个整数相除的结果自动转化为一个整数
  double d = (double)3/2; //(double)3将整数3强制转化为double型
  printf("%f\t%f",f,d); // 1.000000 1.500000

9、关系运算(从左到右)

  > < >= <= 为一类,优先级相同
  == != 为一类,优先级相同,上一类的优先级高于这一类。

10、逻辑运算符(从左到右) 

  与(&&) 一假则假
  或(||) 一真则真
  非(!) 真变假,假变真

11、int main() 在c里面,代表这个函数可以有参数,也可以没有参数

  int main(void) 明确表示没有参数

12、if..else(if、if...else 、 if...else if...else if...else..)

13、switch 多重选择 

  int main()
  {
    int i = 1;
    switch(i)
    {
    case 0:
      printf("i = 0\n")
      break
    case 1:
      printf("i = 1\n")
      break
    case 2:
      printf("i = 2\n")
      break
    case 3:
      printf("i = 3\n")
      break
    default: # 以上情况都不满足时执行
      printf("error\n")
    }
  }
  说明:不加break时,上述程序会执行case1、case2、case3,输出i=1,i=2,i=3
  加break后,只会执行case1,输出i=1(加reak才是正确用法)

14、if 和 switch 的比较: 

  当条件很复杂,分支中包含&&、||、!等时,用if语句
  当条件很简单,但分支很多,适合用switch语句。

15、条件运算符 ?  

  int c = (a>b) ? a:b
  先求?左边的表达式值,如果表达式成立,冒号左边的值为整个表达式的值,反之为冒号右边的值

16、goto语句与标号  

  无条件跳转goto,不建议使用,使代码可读性变差。

17、while  

  while(条件) 条件为真时执行循环,条件为假,退出循环。
  while(1) //死循环
  {
  printf('hello');
  }

18、continue 和 break 

  continue会导致循环语句直接回到循环的开始(终止当前循环,继续下一次循环)。
  break 终止当前循环,退出循环。

19、do...while循环  

  do{

  复合语句;

  }while(条件); //分号一定不能少
  do...while和while的区别:do...while中的复合语句至少执行一次,而while语句中复合语句可能一次都不执行。

20、for循环 

  for(i = 0;i<10;i++)
  {
    语句;
  }
  //i=0只执行一次,就是第一次for循环,此时不执行i++.
  for(;;) // 死循环 for(;1;) 死循环 for(;0;) 不执行
  {
    printf('hello');
  }

  实例:打印三角形 

    #include<stdio.h>
int main(void)
{
int i,j; for(i=;i<;i++) //行数
{
for(j=;j<-i;j++) //空格
{
printf(" ");
}
for(j=;j<(*i-);j++) // *
{
printf("*");
}
printf("\n");
} return ;
}

   扩展:打印倒三角形,打印钻石

C语言语法目录二的更多相关文章

  1. R语言语法基础二

    R语言语法基础二 重塑数据 增加行和列 # 创建向量 city = c("Tampa","Seattle","Hartford"," ...

  2. c语言语法目录一

    1.#include<stdio.h> include 是要告诉编译器,包含一个头文件 在c语言中,任何库函数调用都需要提前包含头文件 <头文件> 代表让c语言编译器去系统目录 ...

  3. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  4. PL真有意思(二):程序设计语言语法

    前言 虽然标题是程序语言的语法,但是讲的是对词法和语法的解析,其实关于这个前面那个写编译器系列的描述会更清楚,有关语言语法的部分应该是穿插在整个设计当中的,也看语言设计者的心情了 和英语汉语这些自然语 ...

  5. JS基础语法(二)

    目录 JavaScript基础语法(二) 八. 函数 1. 函数的概念 2. 函数的使用 声明函数 调用函数 3. 函数的封装 4. 函数的参数 函数的参数匹配问题 5. 函数返回值 6. argum ...

  6. Go语言语法汇总(转)

    Go语言语法汇总 分类: 技术2013-09-16 14:21 3007人阅读 评论(0) 收藏 举报 go语言golang并发语法   目录(?)[+]   最近看了看GoLang,把Go语言的语法 ...

  7. 黑马程序员_ C语言基础(二)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述):   1.Hello W ...

  8. 苹果新的编程语言 Swift 语言进阶(二)--基本数据类型

    一  .   常量和变量 Swift语言 对常量和变量的声明进行了明确的区分 Swift语言的常量类型比C 语言的constants类型更加强大,语义更加明确. 常量和变量的区别是常量在设置或初始化后 ...

  9. Ruby语法基础(二)

    Ruby语法基础(二) 继续ruby的学习,这次主要把目光放到运算符,条件判断,循环,方法,以及其他ruby特有的基本概念上 运算符 算术运算符:+,-,/,%,**,值的注意的是,ruby中一切皆为 ...

随机推荐

  1. L144

    Puny Dwarf Planet, Named 'Goblin,' Found Far Beyond PlutoA scrawny dwarf planet nicknamed "the ...

  2. macOS Ruby版本需要升级到2.2.2以上

    在安装 Ruby on Rails 时遇到问题,提示依赖 ruby 2.2.2 或更高的版本. ERROR: Error installing rails: activesupport require ...

  3. std::hash实现太简单分布不匀

    std::hash实现太简单分布不匀(金庆的专栏 2017.5)#include <iostream>#include <functional>using namespace ...

  4. HihoCoder1041 国庆出游 树形DP第四题

    小Hi和小Ho准备国庆期间去A国旅游.A国的城际交通比较有特色:它共有n座城市(编号1-n):城市之间恰好有n-1条公路相连,形成一个树形公路网.小Hi计划从A国首都(1号城市)出发,自驾遍历所有城市 ...

  5. asp.net core mcroservices 架构之 分布式日志(三):集成kafka

    一 kafka介绍 kafka是基于zookeeper的一个分布式流平台,既然是流,那么大家都能猜到它的存储结构基本上就是线性的了.硬盘大家都知道读写非常的慢,那是因为在随机情况下,线性下,硬盘的读写 ...

  6. C++多态技术

    转自:    http://blog.sciencenet.cn/blog-58025-691458.html 摘要 本文介绍了C++中的各种多态性,重点阐述了面向对象的动态多态和基于模板的静态多态, ...

  7. Android开发的基础知识点

    1.Android开发的四大组件: Activity:android应用程序上看到的一页. Service:运行在后台,可以其他组件交互(音乐播放器). BroadcoastReceiver:用来对外 ...

  8. 脚本工具---自动解析mysql建表语句,生成sqlalchemy表对象声明

    常规建表语句: CREATE TABLE `test_table` ( `id` int(11) NOT NULL, `name` char(64) NOT NULL, `password` char ...

  9. Ambari的资源池管理

    操作: YARN→Config→Advanced→Schedule capacity-scheduler=null yarn.scheduler.capacity.default.minimum-us ...

  10. 在html与php中实现上传图片

    form.html文件 <body> 点击浏览按钮添加要上传的文件(*请上传大小不能大于2M的静态图片)<br /> <form enctype="multip ...