计算机考研机试笔记之C/C++基础3
参考书籍:
计算机考研复试上机指导全书.天勤计算机考研系列.孙肇博 张飞飞.2014.01
C语言库函数(续前)
math.h
- fabs()
返回a的绝对值。函数原型:
在计算整型数的绝对值时,可以使用abs(),个别编译器可能不存在此函数,故也使用fabs()即可,不过使用fabs()时需要用到强制类型转换。double fabs(double a);
int a = 4, b = 2; printf("%d",(int)fabs(a-b));
- sqrt()
开方计算。函数原型:
同上,操作数为整型数时,需要用到强制类型转换。double sqrt(double a);
- pow()
返回以ab。若a为0,则b不能为负数;若a不为0,则b无限制。函数原型:double pow(double a, double b);
- ceil()、floor()
ceil()返回不小于a的最小整数。double ceil(double a);
floor()返回不大于a的最大整数。double floor(double a);
- log()
返回a的以自然对数为底的对数
C中仅有以自然对数为底求对数的函数,若求其他底数的对数,要先使用换底公式。double log(double a);
- sin()、cos()、tan()、asin()、acos()、atan()
返回a的正弦、余弦、正切、反正弦、反余弦、反正切值double sin(double a);
- round()
对double型变量a,四舍五入取整double round(double a);
关于数据类型的一些总结
scanf和printf
- scanf方式读入数据时,除了格式符%c,均是以空白符(空格、TAB)为结束判断标志的,如果想把空格作为读入数据,使用格式符%c;字符数组使用%s读入数据时,是以空格和换行为结束判断标志的。另外,使用scanf时,不要漏写&。
#include <stdio.h> int main() { int a,b; char c,d[10]; scanf("%d%d",&a,&b); //此处%d%d中间无需空格 printf("a = %d, b = %d\n",a,b); scanf("%s",d); printf("数组a:%s\n",d); scanf("%d%c%s",&a,&c,d); printf("a = %d, c = %c, d = %s\n",a,c,d); return 0; }
12 34 a = 12, b = 34 1234 5678 数组a:1234 123 scanf a = 5678, c = , d = 123
- 数据类型对应的scanf和printf格式符
%md 使不足m位的int型变量以m长度右对齐输出,高位用空格补齐;%0md与%md类似,不同之处是以0补齐高位。数据类型 printf格式符 scanf格式符 int %d %d char %c %c char 数组 %s %s long long %lld %lld float %f %f double %f %lf
%.mf 输出浮点型变量时,保留m位小数。#include <stdio.h> int main() { int a = 15; double b = 123.45678; printf("%d\n",a); printf("%2d\n",a); printf("%3d\n",a); printf("%04d\n",a); printf("%.3f\n",b); printf("%.7f\n",b); return 0; }
15 15 15 0015 123.457 123.4567800
getchar与putchar
直接放例子:
#include <stdio.h>
int main() {
char a,b,c;
a = getchar();
b = getchar();
getchar();
c = getchar();
putchar(a);
putchar(b);
putchar(c);
return 0;
}
输入:
h
ello
输出:
h
l
可见,b中存储换行符,第三个getchar()接收了字符e,但并未存储到变量中,因此可以用getchar()过滤输入中的换行。
typedef
为复杂数据类型起别名,常见将long long数据类型,用LL代替,从而提高编码效率。
#include <stdio.h>
typedef long long LL;
int main() {
LL a = 1234567890987654321;
printf("%lld",a);
return 0;
}
sscanf和sprintf
在stdio.h头文件下,将字符数组中的内容作为输入或输出到字符数组中。另外,sscanf支持正则表达式。
#include <stdio.h>
int main() {
char a[] = "1234567";
char b[] = "9876543";
printf("z %s\n",b);
sscanf(a,"%s",b);
//把a的内容作为输入存到b中
printf("x %s\n",b);
memset(a,0,sizeof(a));
//把字符数组a置零
printf("%s\n",a);
sprintf(a,"c %s\n",b);
//把b的内容存入a中
printf("%s\n",a);
return 0;
}
输出结果:
z 9876543
x 1234567
c 1234567