以后做题一般不会花太长时间写笔记,因为这个着实有些耗费时间
简略写几个小细节
1.当使用unsigned int 限制数据为正整数,请使用格式占位符%u
%i
就更强了,它用于读取整数值。它可以自动识别输入的整数的进制(十进制、八进制或十六进制)
如果输入的数字以 0
开头,scanf
将其视为八进制;如果以 0x
或 0X
开头,则视为十六进制;否则,视为十进制
//%i具有通用性
2.关系运算符是==不是=
3.使用scanf函数请不要忘记&取地址运算符
4./=不要只写成/,不然数据自己不会被改变
5.尽量都新定义新的变量并将原变量值赋予该新的变量,一个步骤使用一个新的变量(别把变量又写成原来的了),避免原变量的值发生改变
我靠,我说为什么goto执行后出错了
m = n, n = m;
真nb,这他妈就相当于n的值给m,m的值给n,两个的值都成了n原来的值,根本不符合m>n这些条件,自然不会进入循环,不会输出对的结果了
你可以用一个变量去保留较小的数的原来值
欧几里得方法计算两个数的公约数
上一个除数就成了下一的被除数,上一个余数就成了下一个除数(辗转相除法)
重复这个过程,直到余数为0,此时除数和被除数中较小的数就是最大公约数(就是除数,最后的除数就是最大公约数)
LCM(a,b)=(a*b)/GCD(a,b)
这就可以利用最大公因数计算最小公倍数
局部变量:在函数或代码块(如循环或条件语句)内部定义的变量,只能在该函数或代码块内部使用。它们在函数或代码块结束时被销毁
就针对主函数里面,要想在循环或条件语句里面使用了还能在主函数其他位置使用,你必须把变量放在非循环/条件语句的外面先定义
同时,在循环/条件语句里面不能再进行定义,但是可以进行用它运算,运算完执行完循环/条件语句后它的值不会被销毁,而是保留
但如果你又在循环/条件语句中使用int等等定义,那么你定义的这个局部变量就会遮蔽(shadow)外部的该变量,最终还是会导致局部变量被销毁,该变量的值就会是你最初在外面定义的值
include
int main() {
char chain[200] = {0};
scanf("%s", chain); // 使用 scanf 读取字符串
int zimu = 0, figure = 0, kong = 0, other = 0;
int i = 0;
// 使用 strlen 来获取字符串的实际长度
while (chain[i] != '\0') { // 直到遇到字符串结束符
if (chain[i] >= 'a' && chain[i] <= 'z') {
zimu++;
} else if (chain[i] >= '0' && chain[i] <= '9') { // 修正了这里的条件
figure++;
} else if (chain[i] == ' ') {
kong++;
} else {
other++;
}
i++; // 移动到下一个字符
}
printf("%d,%d,%d,%d\n", zimu, figure, kong, other); // 输出结果
return 0;
}
ascii值是以十进制存储,可不代表1-9的数字就是’1-9‘,不能省略!
如果是输入,scanf中直接使用chain,不加[ ]
\0是字符串结束符,它用作结束判断条件再好不过
Comments NOTHING