目录
1.C语言关键字:C语言定义的,具有特定含义、专门用于特殊用途的C语言标识符,也称为保留字
一.字符串
C语言规定:以'\0'作为有效字符串的结尾标记
数组的下标是从0开始的。
#include <stdio.h>
#include <string.h>
int main()
{
printf("%d\n", strlen("c:\test\121"))
return 0;
}
strlen:获取字符串的有效长度,不包括'\0'
"c:\test\121": 在该字符串中,\t是转移字符,水平制表,跳到下一个tab的位置;而\121表示一个字符,是讲121看做8进制数组,转换为10进制后的81,作业为ASCII码值的字符,即:字符'Q' ,故上述字符串实际为:"c esty",只有7个有效字符
'\n' 转义字符,代表换行
'\060' 转义字符,060八进制数据,十进制为48,表示ASCII码为48的'0'
'\b' 转义字符,表示退格
下面代码的结果是:( )
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = {'b', 'i', 't'};
printf("%d\n", strlen(arr));
return 0;
}
strlen是用来获取字符串的有效长度的,结尾标记'\0'不包含在内。
strlen获取的规则非常简单:从前往后依次检测,直到遇到'\0'是就终止检测。
而上体中arr是一个字符数组,不是一个有效的字符串,因为后面没有放置'\0',因此strlen在求解时,将有效字符检测完之后,还会继续向后检测,直到遇到'\0'是才终止,因此答案为不确定,就看紧跟在't'之后的第一个'\0'在什么位置。
二.关键字
C语言定义的,具有特定含义、专门用于特殊用途的C语言标识符,也称为保留字
关键字具有特殊含义,不能作为变量名
(其中define不是关键字,是编译器实现的,用来定义宏的预处理指令,不是C语言中的内容。)
例题
用在switch语言中的关键字不包含哪个? A.continue B.break C.default D.case 答案是A switch是用来进行多分支选择的语句,一般结构是: switch(变量表达式) { case xx1: // ... break; case xx2 // ... break; default: // ... } 当变量表达式的内容与某个case后的常量相等后,就执行该case下的语句 break表示该case以后的内容不会执行,如果没有跟break,会继续执行当前case之后的case分支。 当变量表达式的内容没有与那个case匹配,就会执行default下的内容。 switch中常用的关键字:case 、break、 default,当然case中语句比较复杂时,可能会用if进行判断。 continue是用来结束本次循环的,而switch不是循环,因此其中不能使用continue关键字。
练习1.判断2个数的大小
#include <stdio.h>
int main()
{
int a, b;
while (scanf("%d%d", &a, &b) != EOF)
{
if (a > b)
printf("%d>%d\n", a, b);
else if (a < b)
printf("%d<%d\n", a, b);
else
printf("%d=%d\n", a, b);
}
return 0;
}
练习2.总成绩和平均分计算
%3.2f意思
%m.nf
m - 决定了输出数据的总长度,如果输出数据的总长度没有指定输出的长,则在数据的左侧用空格补上。如果大于或等于输出的长度则不用。
n - 决定小数点输出的位数,末位四舍五入。如果数据的小数位小于指定的位数,则末尾补0。
int main()
{
float a=0;
float b=0;
float c=0;
scanf("%f %f %f",&a,&b,&c);
float ret=a+b+c;
float Average=(a+b+c)/3;
printf("%3.2f ",ret);
printf("%3.2f",Average);
return 0;
}
练习3.反向输出一个四位数
例如n=1234,首先1234%10=4,n除10=123. 123%10=3,123除10=12
循环下去直到n=0,循环结束打印4 3 2 1
#include <stdio.h>
void Nixu(int n)
{
while(n)
{
printf("%d",n%10);
n/=10;
}
}
int main()
{
int n=0;
scanf("%d",&n);
Nixu(n);
return 0;
}
C语言中,0表示假,非0表示真
//#define 定义常量
#define MAX 1000
#define STR "hello world"
int main()
{
int m = MAX;
printf("%d\n", m);/1000
printf("%s\n", STR);/hello world
return 0;
}
static修饰局部变量
void test()
{
static int a = 5;
a++;
printf("%d ", a);
}
int main()
{
int i = 0;
while (i<10)
{
test();
i++;
}
return 0;
}
static修饰局部变量,延长生命周期
static修饰局部变量的时候,局部变量就变成了静态的局部变量出了局部的范围,不会销毁
下一次进入函数依然存在其实是因为: static修饰的局部变量是存储在静态区的static修饰局部变量时,实际改变的是变量的存储位置
本来一个局部变量是放在栈区的,被static修饰后放在了静态区。从而导致,出了作用域依然存在,生命周期并没有结束。