一些C语言细节及问题的总结

1.全局变量不初始化时,默认值为0;

2.sizeof()返回的结果是unsigned int;

3.

#include <stdio.h>

int main(){
    char* ch="abcdef";//指针指向的是常量字符串,常量字符串不能被更改
    return 0;
}

4.喝饮料问题

//喝汽水,一瓶汽水1元,两个空瓶可以换一瓶汽水,给定钱数可以喝多少瓶汽水

#include <stdio.h>

int main() {
	int money = 0;
	scanf("%d", &money);
	int drink = money;
	int empty = money;
	while (empty >= 2) {
		drink += empty / 2;
		empty = empty / 2 + empty % 2;//empty%2在empty为奇数的时候返回1,在empty为偶数时返回0;
	}
	printf("%d\n", drink);
	return 0;
}

5.C语言常见的错误

编译错误,链接错误,运行时错误(包含栈溢出);

6.

//输入一个整型数组,将其中的奇数都放在前半部分,偶数都放在后半部分
//数组中的元素交换位置

#include <stdio.h>

void fun(int* left, int* right) {
	int mid = 0;
	while (left < right) {
		while ((left < right) && ((*left) % 2 != 0)) { //这里注意如果没有left<right的条件,就可能会导致数组的越界
			left++;
		}
		while ((left < right) && ((*right) % 2 == 0)) {
			right--;
		}
		mid = *left;
		*left = *right;
		*right = mid;
	}
}

int main() {
	int arr[100] = { 0 };
	int i = 0;
	while (arr[i-1]!=-1) { //while (EOF != (scanf("%d", &arr[i]))),scanf的返回值是成功读取变量值的个数,如果遇到文章末尾,则返回EOF,这一行命令如果不输入EOF的话scanf会一直等待输入
		scanf("%d", &arr[i]);
		i++;
	}
	int len = i-1;
	fun(arr, arr+len-1);
	for (i = 0; i < len; i++) {
		printf("%d ", arr[i]);
	}
	printf("\n");
	return 0;
}

7.大小端字节序是以字节为单位,而不是二进制位

8.

//已知有三个人说真话,则对每个人说的话进行判断,若结果加起来为3,凶手就为真

#include <stdio.h>

int main() {
	char killer = 0;
	for (killer = 'A'; killer <= 'D'; killer++) {
		if (3 == (killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D'))
			printf("%c\n", killer);
	}
	return 0;
}

9.

//每个选手说对了一半,可以把这个条件转换为每个人说的两句话都为判断语句,
//并且两个语句加起来的结果为1,就能保证每个人只有一句话是对的,并且所有
//选手的序号不能相同,若只有5的阶乘为120,则可以判断它们的积是否为120,
//若为120,则说明他们的名次均不一样。


#include <stdio.h>

int main() {
	int judge = 0;
	int A, B, C, D, E;
	for (A = 1; A <= 5; A++) {
		for (B = 1; B <= 5; B++) {
			for (C = 1; C <= 5; C++) {
				for (D = 1; D <= 5; D++) {
					for (E = 1; E <= 5; E++) {
							if ( (A*B*C*D*E==120)&&((B == 2)+(A == 3)==1)&&((B == 2) + (E == 4)==1)&&((C == 1) + (D == 2)==1)&&((C == 5) + (D == 3)==1)&&((E == 4)+(A == 1)==1))
								printf("A = %d B = %d C = %d D = %d E = %d\n", A, B, C, D, E);
						}
					}
				}
			}
		}
	return 0;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值