C语言——第一次笔记

学习内容

  • 注释的使用

  • #include的作用

  • main函数介绍

  • printf函数格式化输出

  • C语言基本数据类型

  • scanf函数格式化输入

  • 变量

  • 运算符

  • 循环:if

  • 工资实战

  • 年龄转换实战

1. 注释的使用

  • // 注释内容单行注释:用于一行简短的注释,不需要换行的情况。

  • /* 注释内容 */多行注释:注释内容过多,需要换行的情况。

  • /** 注释内容 */文档注释(用于生成开发者文档):java语言特有的注释,其中的注释内容可以被JDK提供的工具 javadoc 所解析,生成一套能够以网页形式体现程序的说明文档

2. #include的作用

  • include---宏 用来导入头文件。如果系统已经提供某些功能的实现,只需要使用include将这些功能所在的头文件导入进来就可以了。

  • < >用来导入系统提供的类库,如:stdio.h stdlib.h math.h string.h,
    " "用来导入自己定义的头文件,如:calculate.h

  • #include <stdio.h> 编译器首先从系统的类库里面去查找这个头文件,如果没有,再到自己的文件中查找,否则报错。

  • #include "stdio.h" 编译器首先从自己的文件中去查找这个头文件,如果没有,再到系统的类库里面查找,否则报错。

3. main函数的使用

  • main函数 = 代码块 = 完成特定功能,所有的程序的入口点都是main函数。

  • int返回值,用来记录当前程序的运行状态,0:正常结束 资源自由分配,非0:1 异常结束 没收资源。

  • int argc:参数个数 argument count,char* argv[]:每个参数组成的字符串数组。

int main(int argc, char *argv[]) {
  printf("%d\n",argc); 
  printf("%s\n",argv[0]);
  return 0;
}

输出:
      1
      G:\ThridStudy\C_Project\Project1.exe(.c文件编译生成的exe文件所在的位置)

4. printf函数格式化输出

  • printf输出语句,用来让终端输出数据。

  • 打印常量字符串:printf("hello world");

  • 转义字符:\n 的意思是回车换行,将当前位置移到下一行的开头。\r 的意思是回车,将当前位置移到本行的开头。\t 的意思是水平制表符,将当前位置移到下一个tab位置。

int main(int argc, char *argv[]) {
   printf("helloworld\t");
   printf("%d\n",argc); 
   printf("%s\r",argv[0]);
   getchar(); 
   return 0;
}
运行结果

5. C语言基本数据类型

① 首先明确,C标准并没有具体给出规定哪个基本类型应该是多少个字节数,而且这个也与OS、编译器有关

② 虽然16位、32位或者64位的机子各种类型并不一样,但有几条规则(ANSI/ ISO制定):

  • short 至少占用2个字节

  • int 建议为一个机器字长,32位环境下为4字节,64位环境下为8字节

  • short 的长度不能大于int, long 的长度不能小于int

③ 基本数据类型参照表格:

类型 描述 16位 32 位 64位 打印方式
char 字符,如:'a','d' 1 1 1 %c
short 短整型 2 2 2 %hd
int 整型,如1,2341 2 4 4 %d
long 长整型 4 4 8 %ld
float 单精度浮点数,如1.5,82.0 4 4 4 %f
double 双精度浮点数 8 8 8 %f

在自己的平台上可以使用printf("%d\n",sizeof(int));测试具体的数据。

注意:

1. C语言中printf输出float和double都可以用%f,而double型数据还可以用%lf。

2. scanf当中若是对双精度的变量赋值是必须是%后跟lf,而printf当中可以用%f也可以用%lf没有限制。

3. printf() 只会看到双精度数,printf 的 %f 格式总是得到 double,所以在 printf() 中使用 %f 跟 %lf 的输出显示效果是一样的。

4. 对于变量来说,double 类型比 float 类型的精度要高。double 精度更高,是指它存储的小数位数更多,但是输出默认都是 6 位小数。如果你想输出更多小数,可以自己控制,比如 %.10lf 就输出 10 位小数。

④ 控制输出格式:

  • %md:要求输出字段宽度为m,右对齐,不够左端补空格,大于m按实际输出,如%3d。

  • %0md:要求输出字段宽度为m,右对齐,不够左端补0,大于m按实际输出,如%02d。

  • %m.nd:要求输出字段宽度为m,右对齐,后面n个位置当做小数,没有的补0,最前面m-n个没有的补空格,如%3.2d。

6. scanf函数格式化输入

  • scanf输入语句,用来向终端输入数据。
int a = 0;
scanf("%d",&a);
printf("%d",a);
  • 当用户在终端输入数据时,数据会被存放到缓冲流,scanf用于在缓冲流中找到数据将其放入到给定的位置。

  • 放入到给定的位置就是保存输入的数据,保存数据需要用到变量,我们只需要把数据送到对应变量的地址,就存储好了该数据,就可以通过该变量使用该数据。所以使用&获得变量a的地址。

int a = 0;
scanf("jack%d",&a);
printf("%d",a);
  • 此时输入数据必须按照jack+数据的格式,才可以将数据送入到变量中。所以,scanf函数中" "里面的内容用来控制输出格式。
int a = 0;
int b = 0;
scanf("%d %d",&a,&b);
printf("%d %d",a,b);
  • 利用上面的输出格式一次性输入两条数据。

7. 变量

  • 变量是程序可操作的存储区的名称;变量的类型决定了变量存储的大小;变量的名称可以由下划线,字母,数字组成,它必须以字母或者下划线开头。简单的说变量就是用来记录数据的。

  • 变量的声明:没有分配内存空间,使用的时候才会分配,如int a;

  • 变量的定义:立刻为我们分配内存空间 赋初值,如int a = 0;

  • 变量的使用:

int num1,num2;
scanf("%d %d",&num1,&num2);
printf("%d %d\n",num1,num2);
  • bool类型的变量(需要导入stdbool.h),其值非零即真(1),零为假(0)。
bool status = -3;
printf("%d\n",status);//结果是1   

8. 运算符

  • 算术运算符:
运算符 描述
+ 把两个操作数相加
- 第一个操作数减去第二个操作数
* 把两个操作数相乘
/ 两个数相除,取商
% 两个数相除,取余
++ 自增运算符,整数值加1
-- 自减运算符,整数值减1

注意:a++是先赋值后运算,++a是先运算后赋值

  • 逻辑运算符
运算符 描述
&& 逻辑与运算符,如果两个操作数都非零,则条件为真
|| 逻辑或运算符,如果两个操作数有任意一个非零,则条件为真
* 逻辑非运算符,逆转操作数的逻辑状态
  • 关系运算符
运算符 描述
== 检查两个操作数的值是否相等,如果相等则条件为真
!= 检查两个操作数的值是否相等,如果不相等则条件为真
> 判断左操作数的值是否大于右操作数的值,如果是则条件为真
< 判断左操作数的值是否小于右操作数的值,如果是则条件为真
>= 判断左操作数的值是否大于或等于右操作数的值,如果是则条件为真
<= 判断左操作数的值是否小于或等于右操作数的值,如果是则条件为真
  • 赋值运算符
运算符 实例
= C=A+B,将A+B的值赋给C
+= C += A 相当于 C = A + C
-= C -= A 相当于 C = A - C
*= C *= A 相当于 C = A * C
/= C /= A 相当于 C = A / C
%= C %= A 相当于 C = A % C

9. 循环:if

  • if语句的形式:C 语言把任何非0和非null的值假定为 true,把0或 null 假定为 false。
if (条件) {
  条件成立要做的事
}

if (条件) {
  条件成立要做的事
}else{
  条件不成立要做的事
}

if (条件1) {
   条件1成立要做的事
}else if (条件2){
   条件2成立,条件1不成立要做的事
}else if (条件3){
   条件3成立,条件1,2不成立要做的事
}
...
}else{
  以上条件都不成立要做的事
}
  • 问号表达式:(也称之为三目运算符)

(表达式1)?(表达式2):(表达式3),如果表达式1成立则执行表达式2,否则执行表达式3

a>b ? s = a+b : s = a-b

这里的例子,如果 a > b,那么 s 的值是a+b,否则 s 的值是a-b

  • 逗号表达式:

将两个及其以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值

(3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,最终结果是14

int temp = 1;
if(temp--,temp){
  printf("temp是1");
}else{
  printf("temp是0");
} 

输出结果:
temp是0

10. 工资实战

  • 优化前:
#include <stdio.h>

int main(){
  int salary = 0;//记录工资 
  int pay = 0; //税后工资 

  //接收输入 
  printf("请输入工资:");
  scanf("%d",&salary); 
   
  //开始计算
  if(salary < 5000){
      pay = salary; 
  }else if(salary > 5000 && salary < 8000){
      int tax = (salary - 5000)*0.1;
      pay = salary - tax;
  }else if(salary > 8000 && salary < 10000){
      int tax = (salary-8000)*0.15 + 3000*0.1;
      pay = salary - tax;
  }else{
      int tax = (salary - 10000)*0.2 + 2000*0.15 + 3000*0.1; 
      pay = salary - tax;
  }
  
  printf("到手工资: %d",pay);
  return 0;
}
  • 优化后:
#include <stdio.h>

int main(){
  int salary = 0;//记录工资 
  int tax = 0; //税 

  //接收输入 
  printf("请输入工资:");
  scanf("%d",&salary); 
   
  //开始计算
  if(salary < 5000){
      tax = 0; 
  }else if(salary > 5000 && salary < 8000){
      tax = (salary - 5000)*0.1;
  }else if(salary > 8000 && salary < 10000){
      tax = (salary-8000)*0.15 + 3000*0.1;
  }else{
      tax = (salary - 10000)*0.2 + 2000*0.15 
      + 3000*0.1; 
  }
  
  printf("到手工资: %d",salary - tax;);
  return 0;
}

11. 年龄转换实战

#include <stdio.h>
//输入年龄 20
//your age is twenty; 

int main(){
  int age = 0;
  
  //保存个位数 21%10 = 1 
  char* gewei[] = {"","one","two","three","four","five","six","seven","eight","nine"}; 
  //保存10-19
  char* temp[] = {"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};
  //保存十位 
  char* shiwei[] = {"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"}; 
  
  printf("请输入年龄:");
  scanf("%d", &age);
  
  char *name;//保存每次取出的字符串 
  if(age < 10){
      //直接访问各位数数组
      name = gewei[age];
  }else if(age >= 10 && age <= 19){
      //获取个位数  
      int index = age % 10;
      name = temp[index];
  } else{
      //获取个位数 
      int g = age % 10; 
      //获取十位数 
      int s = age / 10;
      //取出对应的单词
      int sString = shiwei[s-2];
      int gString = gewei[g];
      
      printf("your age is %s-%s\n"
      ,sString,gString); 
      
      //程序还未运行完毕就提前结束
      return 0; 
  } 
  
  printf("your age is %s\n",name);
   
  return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容