c语言错误集合

一、数据类型

long long与int不要混用

用int就全int,一但用long long就全long long
错误示例

#include<stdio.h>
int main()
{
	int a=1000000;
	int b=1000000;
	printf("%lld",a*b);
    /*
    或者是
    int a=1000000;
	int b=1000000;
    long long c=a*b;
	printf("%lld",c);
    */
	return 0;
}
结果是3567587328,并不是预期值

正确做法

#include<stdio.h>
int main()
{
	long long a=1000000;
	long long b=1000000;
	printf("%lld",a*b);
    /*
    或者是
    long long a=1000000;
	long long b=1000000;
    long long c=a*b;
	printf("%lld",c);
    */
	return 0;
}
结果是预期值
牵扯到可能会出现小数的算数必须用double,这是一小时debug给的教训,血的教训!!!

尝试找出该程序的bug

#include<math.h>
int isinround(int x1,int x2,int y1,int y2,int r)
{
	int ret=0;
	int num;
	num=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
	if(num>r)
	{
		ret=0;
	}
	else
	{
		ret=1;
	}
	return ret;
}

答案是

#include<math.h>
int isinround(int x1,int x2,int y1,int y2,int r)
{
	int ret=0;
	double num;		//int改成double
	num=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));		//sqrt平方根函数会产生小数,一定要用double!!!!
	if(num>r)
	{
		ret=0;
	}
	else
	{
		ret=1;
	}
	return ret;
}

栈内存不足,炸了

***str开到main函数外面(静态),不会炸;开到main函数里面(自动,栈),内存不足,炸了。

#include<stdio.h>
#include<string.h>
char str[10000000];
int main()
{
//	char str[10000000];
	gets(str);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以使用C语言中的数组和循环来实现求两个集合的并集。首先定义两个数组分别表示两个集合,然后使用循环遍历这两个数组,将其中的元素添加到一个新的数组中,最后去重即可得到两个集合的并集。 以下是示例代码: ```c #include <stdio.h> int main() { int set1[] = {1, 2, 3, 4, 5}; int set2[] = {4, 5, 6, 7, 8}; int len1 = sizeof(set1) / sizeof(set1[]); int len2 = sizeof(set2) / sizeof(set2[]); int union_set[len1 + len2]; int i, j, k = ; // 将set1和set2中的元素添加到union_set中 for (i = ; i < len1; i++) { union_set[k++] = set1[i]; } for (i = ; i < len2; i++) { union_set[k++] = set2[i]; } // 去重 for (i = ; i < k; i++) { for (j = i + 1; j < k; j++) { if (union_set[i] == union_set[j]) { union_set[j] = union_set[--k]; } } } // 输出结果 printf("集合1:"); for (i = ; i < len1; i++) { printf("%d ", set1[i]); } printf("\n集合2:"); for (i = ; i < len2; i++) { printf("%d ", set2[i]); } printf("\n并集:"); for (i = ; i < k; i++) { printf("%d ", union_set[i]); } printf("\n"); return ; } ``` ### 回答2: 在C语言中,可以使用数组来表示一个集合。要求两个集合的并集,可以通过遍历两个集合,找到不同的元素添加到新的集合中。以下是一个简单的示例代码: ```c #include <stdio.h> #define MAX_SIZE 100 void findUnion(int set1[], int size1, int set2[], int size2, int result[], int* sizeResult) { int i, j, k; int flag; // 将set1中的元素添加到result for(i = 0; i < size1; i++) { result[i] = set1[i]; } *sizeResult = size1; // 遍历set2中的元素 for(i = 0; i < size2; i++) { flag = 0; // 判断是否与result中的元素重复 for(j = 0; j < *sizeResult; j++) { if(set2[i] == result[j]) { flag = 1; break; } } // 若set2中的元素与结果集中的元素不重复,则将其添加到结果集中 if(!flag) { result[*sizeResult] = set2[i]; (*sizeResult)++; } } } int main() { int set1[MAX_SIZE], set2[MAX_SIZE]; int result[MAX_SIZE]; int size1, size2, sizeResult; int i; // 输入集合1 printf("请输入集合1中的元素个数:"); scanf("%d", &size1); printf("请输入集合1的元素:"); for(i = 0; i < size1; i++) { scanf("%d", &set1[i]); } // 输入集合2 printf("请输入集合2中的元素个数:"); scanf("%d", &size2); printf("请输入集合2的元素:"); for(i = 0; i < size2; i++) { scanf("%d", &set2[i]); } // 求并集 findUnion(set1, size1, set2, size2, result, &sizeResult); // 输出结果 printf("集合1和集合2的并集:"); for(i = 0; i < sizeResult; i++) { printf("%d ", result[i]); } printf("\n"); return 0; } ``` 这段代码定义了 `findUnion()` 函数来计算两个集合的并集,并在主函数中进行输入、调用并输出结果。你可以根据实际需要修改代码,增加错误处理等等。 ### 回答3: 在C语言中,我们可以使用数组来表示集合,并利用循环和条件语句实现两个集合的并集操作。以下是一个简单的示例代码: ```c #include <stdio.h> // 定义集合A和集合B的元素个数 #define SIZE_A 5 #define SIZE_B 4 // 定义函数,用于求两个集合的并集 void unionSet(int setA[], int setB[], int setSizeA, int setSizeB, int resultSet[]) { // 将集合A的元素复制到结果集中 for (int i = 0; i < setSizeA; i++) { resultSet[i] = setA[i]; } int resultSetSize = setSizeA; // 检查集合B中的元素,如果不在结果集中,则将其添加到结果集中 for (int i = 0; i < setSizeB; i++) { int isDuplicate = 0; for (int j = 0; j < resultSetSize; j++) { if (setB[i] == resultSet[j]) { isDuplicate = 1; break; } } if (!isDuplicate) { resultSet[resultSetSize] = setB[i]; resultSetSize++; } } } int main() { // 定义集合A和集合B int setA[SIZE_A] = {1, 2, 3, 4, 5}; int setB[SIZE_B] = {4, 5, 6, 7}; // 定义结果集 int resultSet[SIZE_A + SIZE_B]; // 求两个集合的并集 unionSet(setA, setB, SIZE_A, SIZE_B, resultSet); // 输出结果集 printf("集合A:"); for (int i = 0; i < SIZE_A; i++) { printf("%d ", setA[i]); } printf("\n集合B:"); for (int i = 0; i < SIZE_B; i++) { printf("%d ", setB[i]); } printf("\n并集:"); for (int i = 0; i < SIZE_A + SIZE_B; i++) { printf("%d ", resultSet[i]); } return 0; } ``` 运行以上代码,结果输出为: ``` 集合A:1 2 3 4 5 集合B:4 5 6 7 并集:1 2 3 4 5 6 7 ``` 以上代码实现了求两个集合的并集的功能,先将集合A的元素复制到结果集中,然后检查集合B中的元素,如果不在结果集中,则将其添加到结果集中。最后,输出结果集的元素即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PeiYuYu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值