【c语言中的坑】c语言中的坑

声明:本帖记录我考试中出现的c语言错误。

1、取模运算操作数,必须是整型,浮点型不能作为操作数

例如:3.14%2 是错误的

2.在打印输出

	printf("%d",strlen("\\TOP\t\65\""));

     输出结果是7  问了老师之后才知道\t只占用一个位置,并不是4个位置 \\  一个 top 3个  \t 一个  \65一个  \" 一个 一共七个长度 

3.当声明一个共用体变量时,系统分配给他的内存是成员中占用内存最大者所需的容量

4.c语言中基本的数据类型包括整型、实型、字符型

5.

#include<stdio.h>
void main(){

	char x [] = "language";
	char y [] = "IIngga";
	int i = 0;
	while(x[i]!='\0'&&y[i]!='\0')
	{
		if(x[i]==y[i])
			printf("%c",x[i++]);\\ x[i]  和x[i++]的区别 主要在于 应该在判断完成后 进行i值的自增 否则的话 程序会进入死循环
		else
			i++;

	}

}

6.

int a,b,y,x;
	switch(pow(a,2)+pow(b,3))
	{
	case 1:case 3: y = a+b;break;
	case 0:case 5: y = a-b;


	}

error C2450: switch expression of type 'double' is illegal

编译报错,因为switch()中只能是整型 字符型和枚举类型。pow返回的是一个double类型的数据

7.若x是实型变量,表达式(x=10.0/4.0)的值是2.5

查了下百度百科。找到的解释,记录一下。

在程序运行过程中可以改变其值的实型量被称为实型变量,实型变量分为单精度(float),双精度(double)和长双精度(long double)型。

8.


	/*
		程序的理解:p = a+8 指针指向了下标为8的地方 也就是'9'的地方
		在执行p-3 首地址元素指针指向了'6'  所以程序最后输出的是 6789 0在这里的做的是一个结束标志

	**/

	char a [10] = {'1','2','3','4','5','6','7','8','9',0},*p;

	int i = 8;
	p = a+i;
	printf("%s\n",p-3);

9.


	/*
	程序理解:定义了一个字符数组,和一个字符指针变量
	用字符指针变量指向了字符数组的第一个元素
	因此程序的执行的结果就是
	ABCD
	BCD
	CD
	D
	**/
	char s [] = "ABCD";
	
	char * p;
	for(p=s;p<s+4;p++)
		printf("%s\n",p);
	

10.

#include<stdio.h>
void main(){
	
	/*
	  程序理解:++p 一直指向 直到指针指向e处 停止执行 因此程序输出的efg 
	  指针p 指向的是e的地址。因此 输出会包含 e
	**/
	char * p = "abcdefg";

	while(*(++p)!='e');

	printf("%s\n",p);

}

 

说明:如果对此有疑问的欢迎 指正 谢谢! 联系qq 1137821448

快速排序是一种高效的排序算法,其基本思想是分治法。在C语言实现快速排序时,可能会遇到一些常见的“”需要处理,比如处理边界情况、递归终止条件和优化性能等。这里简单介绍一下快速排序的C语言实现和常见填方法: 1. **选择基准元素**:通常选择数组的第一个元素或最后一个元素作为基准(pivot),但在实际代码,为了减少最坏情况(数组已排序或反序)下的性能损耗,可以选择随机元素。 ```c int pivot = arr[random_index]; ``` 2. **分区操作**:将数组分为两部分,一部分所有元素小于基准,另一部分所有元素大于等于基准。这一步可能会遇到数组越界的问题,需要确保索引在数组范围内。 ```c int i = low, j = high; while (i < j) { while (arr[i] < pivot) i++; while (arr[j] > pivot) j--; if (i < j) { swap(&arr[i], &arr[j]); } } swap(&arr[i], &pivot); ``` 3. **递归终止条件**:当子数组只有一个元素或者没有元素时,递归结束。这是防止栈溢出的关键。 ```c if (low < high - 1) { // 递归调用 quicksort(arr, low, i - 1); // 对左侧子数组 quicksort(arr, i + 1, high); // 对右侧子数组 } ``` 4. **优化**:对于小规模数组,使用插入排序可以提高效率。另外,避免在每次递归调用时都复制整个数组,可以考虑就地排序。 5. **递归调用**:递归深度过深可能导致栈溢出,可以使用循环代替递归或者限制递归深度。 6. **性能分析**:通过使用尾递归或循环结构,以及使用预分配的内存池来减少动态分配开销。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qxlxi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值