重难点请勿分享仅限私人使用
关键字详解
关键字详解链接: link
用户自定义标识符
c语言的用户自定义标识符只能由字母、数字、下划线3种字符组成,开头不能是数字。
整型常量
0开头为8进制不能出现超过8的数字
0x或0X为16进制只能出现1-9以及a-f
其余则为10进制
浮点型常量
浮点型中小数点前面或后面的0可以省略,但是不能只有小数点。
e为阶码
字母e或E之前必须要有数字,且e或E后面的指数必须为整数
%e输出
例如123456.0输出为1.23e+005
1.23输出为1.23e+00
转义字符
转义字符 | 字符值 |
---|---|
\‘ | 一个单引号 |
\“ | 一个双引号 |
\? | 一个问号 |
\\ | 一个\ 转义后不能继续转义 |
\a | 警告(alert) |
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\f | 换页 |
\o或\oo或\ooo o代表数字 | 与8进制对应的ASCII字符 |
\xh h代表数字可以是多个 | 与16进制对应的ASCII字符 |
‘\012’,‘\64’是正确的8进制转义
’\x12’、’\x1B’也是正确的16进制转义
未出现在以上的转义均为错误的转义
逗号运算符
main()
{
int x,y,z;
x=y=1;
z=x++,y++,++y;
printf("%d,%d,%d\n",x,y,z);
}
2,3,1
(a=3*5,a*4)的值是60
逗号运算符的优先级别在所有运算符中最低。
从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值
只有赋值运算符(a=3*5)、自增自减运算符(x++)会改变大小。
算数运算符
两个同号整数相除时结果为正整数,如5/3、-5/-3的结果值为1。
两个异号整数相除时结果为负整数,即-5/-3=-1,5/-3=-1,
但如果参加运算的两个数中有一个数为实数时结果为实数。
对于求余(%)运算,运算结果与第一个数的符号相同。
scanf总结
1、scanf只能限定宽度不允许限定精度
2、scanf不允许添加\n换行符
3、scanf不允许能忘记添加取地址符&
4、scanf的普通字符一定要原样输入
scanf输入时空格算一个字符
在scanf()函数中,添加了*的部分对应的输入会被忽略,不会赋给参数。
printf总结
数据格式小于变量长度
如printf直接用 %3d 打印 n ,输出为 12345 。
如printf直接用 %3s 打印数组arr,输出为 Hello 。
就是说,在printf中,当变量长度比数据格式大时,printf与用"%d"数据格式输入完全相同,即原样输出。
%5d表示输出5位整型数,不够5位右对齐,左补空格。
而在"%-3d"中,-号表示对齐方式,即左对齐,右补空格。如果是+号或者不写,表示右对齐。
printf既能限定宽度又能限定小数位数(宽度要包括小数点)
printf(“%#o”,a);中的#代表按原进制输出
%08ld中0的意思,如果不足8位,左面用0补充。靠左不补靠右补。
%i 则可以匹配八进制、十进制、十六进制表示的 整数
%u无符号整数
%l可以加载d十进制o八进制x十六进制u无符号整数前面
%4.3打印时3.1415结果为3.142结果四舍五入
#include <stdio.h>
void main()
{
int a=5,b=2;
printf("%d %d\n",b=a+1,a=a+1);
}
输出结果是:7 6
而不是:6 6
这是因为printf函数的计算是从右向左进行的。
条件表达式
main()
{
int k=4,a=3,b=2,c=1;
printf(“%d”,k<a?k:c<b?c:a);
}
答案:1
详解:条件表达式是从右向左运算,所以在本例中先计算表达式c<b?c:a的值,把各数值代入此表达式的值为1。再计算表达式k<a?k:1的值,因为k<a为假,所以整个表达式的值为1。
指针
*p++
++和 *(指针访问运算符)优先级相同,根据从右往左的结合性,因此等价于 *(p++),又因为后置++是先使用再自加,所以先取值 *p,然后再让p加1.
*++p
++和 *(指针访问运算符)优先级相同,根据从右往左的结合性,因此等价于 *(++p),也就是先让指针p加1,再取此时指针p的值。
++*p
++和 (指针访问运算符)优先级相同,根据从右往左的结合性,因此先取p的值p,然后再将值 *p加1。
字符数组初始化正确方法
char s[20]={“C Language”};
char s[20] = “C Language”;
下列语句正确的是(D)
A.char s[20];s={“C Language”}; B.char s[20];s=“C Language”;
C.char *s;s={“C Language” }; D. char *s;s=“C Language”;
数学函数
cos() 函数
double cos(double x)
返回弧度角 x 的余弦。
头文件:math.h
double result = cos(x);
sqrt() 函数
double sqrt(double x)
返回 x 的平方根。。
头文件:math.h
double result = sqrt(x);
pow() 函数
double pow(double x,double y);
用来求 x 的 y 次方的值。
头文件:math.h
double result = pow(x, y);
exp() 函数
double exp(double x);
exp() 是一个指数函数,用来求 e(底数)的 x 次幂(次方)的值。
头文件:math.h
double result = exp(x); //求双精度数x的指数函数值
fabs() 函数
double fabs(double x);
参数 x 是求绝对值的数。
头文件:math.h
double result = fabs(x); //求x的绝对值
log() 函数
double log(double x)
返回 x 的自然对数(基数为 e 的对数)
头文件:math.h
double result = log(x); //求x的自然对数
log10()函数
double log10(double x)
该函数返回 x 的常用对数,x 的值大于 0。
头文件:math.h
double result = log10(x); //求x的自然对数
sin() 函数
double sin(double x)
该函数返回 x 的正弦。
头文件:math.h
double result = sin(x*3.14159265/180.0); //求角度的正弦值
字符函数
isalnum
void isalnum(int c)
检查所传的字符是否是字母和数字。
头文件:ctype.h
int var1 = 'd';
int var2 = '2';
if( isalnum(var1) )
{
printf("var1 = |%c| 是字母数字\n", var1 );
}
else
{
printf("var1 = |%c| 不是字母数字\n", var1 );
}
if( isalnum(var2) )
{
printf("var2 = |%c| 是字母数字\n", var2 );
}
else
{
printf("var2 = |%c| 不是字母数字\n", var2 );
}
isalpha
void isalpha(int c)
检查所传的字符是否是字母。
头文件:ctype.h
int var1 = 'd';
if( isalpha(var1) )
{
printf("var1 = |%c| 是字母\n", var1 );
}
else
{
printf("var1 = |%c| 不是字母\n", var1 );
}
isdigit
int isdigit(int c)
检查所传的字符是否是十进制数字字符。
头文件:ctype.h
int var1 = '1';
if( isdigit(var1) )
{
printf("var1 = |%c| 是数字\n", var1 );
}
else
{
printf("var1 = |%c| 不是数字\n", var1 );
}
islower
int islower(int c)
检查所传的字符是否是小写字母。
头文件:ctype.h
int var1 = 'a';
if( islower(var1) )
{
printf("var1 = |%c| 是小写字母\n", var1 );
}
else
{
printf("var1 = |%c| 不是小写字母\n", var1 );
}
isupper
int isupper(int c)
检查所传的字符是否是大写字母。
头文件:ctype.h
int var1 = 'A';
if( isupper(var1) )
{
printf("var1 = |%c| 是大写字母\n", var1 );
}
else
{
printf("var1 = |%c| 不是大写字母\n", var1 );
}
tolower
int tolower(int c)
把给定的字母转换为小写字母。
头文件:ctype.h
#include <stdio.h>
#include <ctype.h>
int main()
{
int i = 0;
char c;
char str[] = "RUNOOB";
while( str[i] )
{
putchar(tolower(str[i]));
i++;
}
return(0);
}
toupper
int toupper(int c)
把小写字母转换为大写字母。
头文件:ctype.h
#include <stdio.h>
#include <ctype.h>
int main()
{
int i = 0;
char c;
char str[] = "runoob";
while(str[i])
{
putchar (toupper(str[i]));
i++;
}
return(0);
}
字符串函数
strcpy
char *strcpy(char *dest, const char *src)
复制会覆盖原字符串的所有内容
头文件:string.h
把 src 所指向的字符串复制到 dest。
#include <stdio.h>
#include <string.h>
int main ()
{
char str1[]="Sample string";
char str2[40];
char str3[40];
strcpy (str2,str1);
strcpy (str3,"copy successful");
printf ("str1: %s\nstr2: %s\nstr3: %s\n",str1,str2,str3);
return 0;
}
strcmp
int strncmp(const char *str1, const char *str2, size_t n)
头文件:string.h
把 str1 和 str2 进行比较,最多比较前 n 个字节。
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str1 大于 str2。
如果返回值 = 0,则表示 str1 等于 str2。
char str1[15];
char str2[15];
int ret;
strcpy(str1, "abcdef");
strcpy(str2, "ABCDEF");
ret = strncmp(str1, str2, 4);
strcat
char *strcat(char *dest, const char *src)
追加不会覆盖考点与strcpy的区别
头文件:string.h
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
#include <stdio.h>
#include <string.h>
int main ()
{
char src[50], dest[50];
strcpy(src, "This is source");
strcpy(dest, "This is destination");
strcat(dest, src);
printf("最终的目标字符串: |%s|", dest);
return(0);
}
文件操作
#include <stdio.h>
int main ()
{
FILE * pFile;
//打开文件
pFile = fopen ("myfile.txt","w");
//文件操作
if (pFile!=NULL)
{
fputs ("fopen example",pFile);
//关闭文件
fclose (pFile);
}
return 0;
}
fread(地址,读写的字节数,读写多少个数据项,fp指针类型);
fwrite(地址,读写的字节数,读写多少个数据项,fp指针类型);
rewind(fp指针类型);使文件位置指向开头
fseek(fp指针类型,离文件开头多少字节,文件开始位置);(0文件开始位置1文件当前位置2文件末尾位置)