c语言基本数据类型
int类型
int类型是有符号整型,即int类型的值必须是整数,可以是正整数,也可以是负整数或零
c语言提供三个附属关键字修饰基本整数类型
short int(简写为short)占用的存储空间可能比int类型少,常用于较小数值用于节省空间
long int(简写为long)占用的存储空间可能比int类型多,适用于数值较大的场合
long long int占用的存储空间可能比long类型多,适用于更大数值的场合,该类型至少占64位
unsigned int只适用于非负值的场合。
char类型
char类型用于存储字符。但从技术层面来看,char是整数类型。因为char类型存储的实际上是整数而不是字符。计算机使用数字编码来处理字符,即用特定的整数表示特定的字符。65表示大写字母A,97表示小写字母a
float,double,long double类型
c标准规定float类型至少能表示6位有效数字,该数字的前6位
double至少能表示10位有效数字,该数字的前十位
long double以满足比double类型更高的精度要求
复数和虚数
许多科学和工程计算都要用到复数和虚数。
c语言有三种复数类型:float_Complex,double_Complex,long_Complex
同样有三种虚数类型:float_Imaginary,double_Imaginary,long double_Imaginary
如果包含complex.h头文件,便可用complex代替_Complex,用imaginary代替_Imaginary
#include <stdio.h>
#include <complex.h>
int main() {
// 定义复数类型变量
float complex a = 1.0 + 2.0 * I; // 定义一个复数变量a,值为1.0 + 2.0i
double complex b = 3.0 - 4.0 * I; // 定义一个复数变量b,值为3.0 - 4.0i
long double complex c = 5.0 + 6.0 * I; // 定义一个复数变量c,值为5.0 + 6.0i
// 输出复数的实部和虚部
printf("a = %.1f + %.1fi\n", crealf(a), cimagf(a));
printf("b = %.1f + %.1fi\n", creal(b), cimag(b));
printf("c = %.1Lf + %.1Lfi\n", creall(c), cimagl(c));
// 定义虚数类型变量
float _Imaginary x = 2.0f * _Imaginary_I; // 定义一个虚数变量x,值为2.0i
double _Imaginary y = 3.0 * _Imaginary_I; // 定义一个虚数变量y,值为3.0i
long double _Imaginary z = 4.0L * _Imaginary_I; // 定义一个虚数变量z,值为4.0i
// 输出虚数的值
printf("x = %.1fi\n", cimagf(x));
printf("y = %.1fi\n", cimag(y));
printf("z = %.1Lfi\n", cimagl(z));
return 0;
}
从基本类型衍生的基本数据类型
c语言还有一些从基本类型衍生的基本数据类型,包括数组,指针,结构和联合
字符串
字符串是一个或多个字符的序列
c语言没有专门用于存储字符串的变量类型,字符串都被存储在char类型的数组中。数组由连续的存储单元组成,字符串中的字符被存储在相邻的存储单元,每个单元存储一个字符
注意数组末尾位置的字符\0。这是空字符,c语言用它标记字符串的结束,这意味着c语言的字符串一定由空字符结束,这意味着数组的容量必须至少比待存储的字符数多1
指针
从根本上看,指针是一个值为内存地址的变量(或数据对象)。指针变量的值是地址
#include <stdio.h>
int main() {
int num = 10; // 定义一个整型变量num,赋值为10
int *ptr; // 定义一个指向整型变量的指针ptr
ptr = # // 将ptr指向num的地址
printf("num的值为:%d\n", num); // 输出num的值
printf("num的地址为:%p\n", &num); // 输出num的地址
printf("ptr指向的值为:%d\n", *ptr); // 输出ptr指向的值
printf("ptr的值为:%p\n", ptr); // 输出ptr的值,即num的地址
return 0;
}
#include <stdio.h>
int main() {
int arr[] = {10, 20, 30, 40, 50}; // 定义一个整型数组arr
int *ptr = arr; // 定义一个指向整型数组的指针ptr,指向数组的第一个元素
printf("第一个元素的值:%d\n", *ptr); // 输出第一个元素的值
printf("第二个元素的值:%d\n", *(ptr + 1)); // 输出第二个元素的值,指针算术运算
printf("第三个元素的值:%d\n", *(ptr + 2)); // 输出第三个元素的值,指针算术运算
return 0;
}
c语言常用的库函数
#include <string.h>
1.strlen() - 计算字符串的长度。
#include <stdio.h>
#include <string.h>
int main() {
char *str = "Hello, world!";
int length = strlen(str);
printf("字符串长度为: %d\n", length);
return 0;
}
2.strcpy() - 复制字符串。
#include <stdio.h>
#include <string.h>
int main() {
char dest[20];
char *src = "Hello, world!";
strcpy(dest, src);
printf("复制后的字符串: %s\n", dest);
return 0;
}
3.strcat() - 连接字符串。
#include <stdio.h>
#include <string.h>
int main() {
char dest[20] = "Hello, ";
char *src = "world!";
strcat(dest, src);
printf("连接后的字符串: %s\n", dest);
return 0;
}
4.strcmp() - 比较字符串。
用法
int strcmp(const char *str1, const char *str2);
str1 是第一个要比较的字符串。
str2 是第二个要比较的字符串。
函数返回值为:
如果 str1 小于 str2,则返回一个负整数(通常是 -1)。
如果 str1 等于 str2,则返回零。
如果 str1 大于 str2,则返回一个正整数(通常是 1)。
示例
#include <stdio.h>
#include <string.h>
int main() {
const char *str1 = "hello";
const char *str2 = "world";
int result = strcmp(str1, str2);
if (result < 0) {
printf("str1 小于 str2\n");
} else if (result > 0) {
printf("str1 大于 str2\n");
} else {
printf("str1 等于 str2\n");
}
return 0;
}
5.strstr() - 在字符串中查找子字符串。
用法
char *strstr(const char *haystack, const char *needle);
haystack 是要在其中搜索的主字符串。
needle 是要查找的子字符串。
函数返回值为:
如果找到了子字符串,则返回一个指向首次出现位置的指针。
如果未找到子字符串,则返回空指针(NULL)。
示例
#include <stdio.h>
#include <string.h>
int main() {
char *haystack = "Hello, world!";
char *needle = "world";
char *result = strstr(haystack, needle);
if (result != NULL) {
printf("子字符串 %s 在主字符串 %s 中的位置是: %d\n", needle, haystack, result-haystack);
} else {
printf("未找到子字符串 %s 在主字符串 %s 中\n", needle, haystack);
}
return 0;
}
6.strchr():
#include <stdio.h>
#include <string.h>
int main() {
const char *str = "hello world";
char *result = strchr(str, 'o');
if (result != NULL) {
printf("找到字符 'o',位置在字符串中的索引为:%ld\n", result - str);
} else {
printf("未找到字符 'o'\n");
}
return 0;
}
7.strrchr():
#include <stdio.h>
#include <string.h>
int main() {
const char *str = "hello world";
char *result = strrchr(str, 'o');
if (result != NULL) {
printf("找到字符 'o',位置在字符串中的索引为:%ld\n", result - str);
} else {
printf("未找到字符 'o'\n");
}
return 0;
}
#include <math.h>
1.fabs() - 计算浮点数的绝对值。
#include <stdio.h>
#include <math.h>
int main() {
double x = -4.5;
double absolute_value = fabs(x);
printf("绝对值为: %lf\n", absolute_value);
return 0;
}
2.sqrt() - 计算平方根。
#include <stdio.h>
#include <math.h>
int main() {
double x = 25.0;
double square_root = sqrt(x);
printf("平方根为: %lf\n", square_root);
return 0;
}
3.pow() - 计算幂。
#include <stdio.h>
#include <math.h>
int main() {
double base = 2.0;
double exponent = 3.0;
double result = pow(base, exponent);
printf("%lf 的 %lf 次方为: %lf\n", base, exponent, result);
return 0;
}