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;
}