类型一
代码:
#include <stdio.h>
void swap(int* a, int* b) {
int temp = 0;
temp = *a;
*a = *b;
*b = temp;
}
void (*p)(int*, int*);
p = swap;
int main() {
return 0;
}
错误:
-
error C2374: “a”: 重定义;多次初始化。
-
message : 参见“a”的声明。
解释:
-
写成两次会被编译器理解为定义了两个全局变量,所以出错。
-
全局定义一个变量后,不能单独对其赋值。编译时会报错。但是在定义时对其赋值就不会报错。
-
如果是在函数内部,也不会报错, 放全局时就报错了。
类型二
代码:
错误:
- 无法正常打印所需内容
解释:
-
else —age <=6的条件不成立才执行这里,因此没必要再判断age > 6了
-
若要两个条件都满足,使用"与"运算: if( (age >6) && (age<=16) ) //年龄大于6岁,且年龄少于等于16岁
-
若要两个条件满足任意一个都行,使用"或"运算: if( (age<6) || (age>60)) //年龄少于6岁,或者年龄大于60岁,小孩子或老人
-
若要条件不成立,使用"非"运算: if( !(age>=18)) //注意感叹号,表示非运算. 年龄低于18岁,未成年人。
类型三
代码:
- 计算sinx的值,直到最后一项的绝对值小于10时为止。要求在计算的过程中统计出参与累加的项数。
#include <stdio.h>
#include <math.h>
int main() {
float x;
int n = 1;
double sin, UP;
scanf("%f", &x);
sin = x;
UP = x;
for (; fabs(UP) >= 1e-5; n += 2) {
UP = -UP * x * x / (n + 1)* (n + 2) ;
sin = sin + UP;
}
printf("%lf", sin);
printf("累加了%d", n + 1);
return 0;
}
错误:
- 死循环,计算错误
解释:
- (n + 1)* (n + 2)整体参与运算并非先除再乘。
类型四
代码:
void Add(char* a, char* b, int x, int y) {
int x[10086] = { 0 }, y[10086] = { 0 };
int i = 0, j = 0;
for (; i < x; i++)
x[i] = a[x - 1 - i] - '0';
}
错误:
- 表达式必须包含指向对象的指针类型,但它具有类型“int“。
解释:
- 和前面的一个变量名重复了
类型五
错误:
- fatal error LNK1168: 无法打开 E:\c语言\vs\大数算法.exe 进行写入
解释:
- 退出上一次运行窗口
类型六
错误:
- error LNK2019: 无法解析的外部符号 _Multiply,函数 _main 中引用了该符号
代码:
int main() {
scanf_s("%s%s", a, sizeof(a), b, sizeof(b));
//scanf_s("%d", &fa);
int la = strlen(a), lb = strlen(b);
//printf("%d", compare(a, b));
printf("\tAdd: ");
Add(a, b, la, lb); putchar('\n');
printf("\n\tFactorial: ");
//Factorial(c, fa,1000); putchar('\n');
printf("\n\tSubtract: ");
Subtract(a, b, la, lb); putchar('\n');
printf("\n\tMultiple: ");
Multiple(a, b,m,la, lb); putchar('\n');
}
解释:
- 定义的时候时multiple,但写的时候时multiply。
类型六
错误:
解释:
- 之前的减法进行了数值交换,各数值的属性,长度之类的发生改变。