1.字符串
"hello world!" //字符串 - 一串字符 //字符 - 键盘输入的任何一个值
这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。 注:下图中字符串的结束标志是一个'\0'的转义字符。在计算字符串长度的时候'\0'是结束标志,不算作字符串的内容。
#include<stdio.h> #include<string.h> int main() { //字符串 - 一串字符 //字符 - 键盘输入的任何一个值 char arr1[] = "abc";//[a] [b] [c] [\0] char arr2[] = { 'a','b','c'};//[a] [b] [c] ...... char arr3[]= { 'a','b','c','\0'};//[a] [b] [c] [\0] //打印字符串 - %s //输出结果 printf("%s\n", arr1); //abc printf("%s\n", arr2); //abc烫烫烫烫烫烫烫烫烫烫烫烫烫烫蘟bc - ?\ 无字符串的结束标志 - '\0' - 从而出现这样的随机值 printf("%s\n", arr3); //abc - 加入'\0'就不会出现错误了 //strlen - 库函数 - 求字符串的长度 //从给定的地址,向后数字符,直到遇到'\0'结束,'\0'不统计在内 printf("%d\n", strlen(arr1));//3 printf("%d\n", strlen(arr2));//35 - 随机值 printf("%d\n", strlen(arr3));//3 return 0; }
2.转义字符
假如我们要在屏幕上打印一个目录: c:\code\test.c 我们该如何写代码?
#include <stdio.h> int main() { // \t - 制表符 \n - 换行符 printf("c:\code\test.c\n"); // ??) 三字母词 printf("(are you ok??)"); return 0; }
实际上程序运行的结果是这样的:
1.c:code est.c 2.(are you ok]
为什么呢?因为这些字符存在特殊的意义,所以不能直接打印,从而我们就需要转义字符进行转义,这样我们才能输出我们想要表达的值。
当我们改变一下程序:将特殊含义字符前面加 \
#include <stdio.h> int main() { // \t - 制表符 \n - 换行符 printf("c:\\code\\test.c\n"); // ?// 三字母词 printf("(are you ok\?\?)"); return 0; }
此时程序运行的结果是这样的:
c:\code\test.c (are you ok??)
这样就是我们想要的结果啦。
接下来介绍一下C语言常用的转义字符
\? | 在书写连续多个问号时使用,防止他们被解析成三字母词 |
\' | 用于表示字符常量' |
\" | 用于表示一个字符串内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符。 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | d d d表示1~3个八进制的数字。 如: \130 表示字符X |
\xdd | d d表示2个十六进制数字。 如: \x30 表示字符0 |
这里我们介绍一下/ddd和/xdd
#include<stdio.h> int main() { //八进制 130 - 十进制 88 - 对应的ASCII码为 X printf("%c\n", '\130');// X //十六进制 x31 - 十进制 49 - 对应的ASCII码为 1 printf("%c\n", 'x31');// 1 return 0; }
现在让我们来看看自己是否学会了!!!
#include <stdio.h> int main() { //问题1:在屏幕上打印一个单引号',怎么做? //问题2:在屏幕上打印一个字符串,字符串的内容是一个双引号“,怎么做? printf("%c\n", '\''); printf("%s\n", "\""); return 0; }
#include<stdio.h> #include<string.h> int main() { printf("%d\n", strlen("c:\test\x22\129\test.c")); return 0; }
值为多少呢? ---15
这里有一个坑\129里面的9并不是八进制,所以算两个字符。
3.注释
1. 代码中有不需要的代码可以直接删除,也可以注释掉
2. 代码中有些代码比较难懂,可以加一下注释文字
注释有两种风格:
C语言风格的注释 /*xxxxxx*/ 缺陷:不能嵌套注释
C++风格的注释 //xxxxxxxx 可以注释一行也可以注释多行
#include<stdio.h> int main() { //以 // 开头的注释是属于C++的注释风格 //注释 //int a = 0; //以 /**/ 开头的注释是属于C语言的注释风格 - 不能嵌套 /*int a = 0;*/ return 0; }
4.选择语句
1.if -- else if -- else 语句
2.switch -- case -- break 语句
//if - else语句 #include <stdio.h> int main() { int coding = 0; printf("你会去敲代码吗?(选择1 or 0):>"); scanf("%d", &coding); if(coding == 1) { prinf("坚持,你会有好offer\n"); } else { printf("放弃,回家卖红薯\n"); } return 0; } //switch - case - break #include<stdio.h> int main() { int coding = 0; printf("你会去敲代码吗?(选择1 or 0):>"); scanf("%d", &coding); switch (coding) { case 1: printf("坚持,你会有好offer\n"); break; case 0: printf("放弃,回家卖红薯\n"); break; } }
5.循环语句
1.for语句
2.while语句
3.do ... while语句
//for语句 #include <stdio.h> int main() { printf("好好学习\n"); int line = 0; for(line = 0;line <= 20;line++) { printf("我要继续努力敲代码\n"); } if (line > 20) printf("好offer\n"); return 0; } //while语句 #include <stdio.h> int main() { printf("好好学习\n"); int line = 0; while (line <= 20) { line++; printf("我要继续努力敲代码\n"); } if (line > 20) printf("好offer\n"); return 0; } //do ... while语句 #include <stdio.h> int main() { printf("好好学习\n"); int line = 0; do { printf("我要继续努力敲代码\n"); line++; } while (line <= 20); if (line > 20) printf("好offer\n"); return 0; }
6.函数
函数可以理解为一个模块的代码,单独实现一个功能。
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int Add(int x, int y) { int z = x + y; return z;//z的类型是整型int,返回也为int } int main() { //函数可以理解为一个模块的代码 //单独实现一个功能 int a = 0; int b = 0; int sum = 0; //输入 scanf("%d %d", &a, &b); sum = a + b; sum = Add(a, b); //输出 printf("%d\n", sum); return 0; }
这里我们来看这段代码,求两个数的和,我们采用了直接求和、函数求和两种方法,单凭本程序看,函数求和的写法比直接求和的方法的代码行数明显增多,这里肯定有疑问为什么还要使用函数的方法呢?在这里我们格局要放大,当未来程序特别复杂,某个功能的实现代码量比较多的时候,我们需要多次使用该代码,但是我们总不能每次都写这个功能的代码,这样会使程序量变大,此时,就体现了函数的功能,我们只需要调用该函数就行,非常简洁。
7.数组
当我们要存储一个班上100多位学的成绩,我们该怎么存储呢?此时肯定有人说:肯可以定义一百个变量,存储每个同学的成绩,这种方法确实可以,但是如果我们有1000位,10000位同学的时候呢?这种每个同学都定义一个变量去存储成绩,必然会耗费大量的时间去写我们的代码,那有什么简便方法吗?C语言就为我们提供了数组的定义,它可以定义一组相同类型元素的集合。
#include<stdio.h> int main() { int score1 = 90; int score2 = 91; . . . //这样存储显然太麻烦 //数组 - 可以保存一组相同数据类型的集合 //整型数组 int scores[10] = { 90,91,92,93,94,95,96,97,98,99,100 }; //用数组的方式非常容易的存储了10位同学的成绩 //字符数组 char name[10]; return 0; }
C learning_3(下):https://developer.aliyun.com/article/1424323