2025/4/5 今天学到变量
变量有四要素:变量名,变量值,存储单元,类型。
这四要素缺一不可,每一项都要明确写出。存储单元可以类比丰巢快递柜,异曲同工之妙。
变量名由下划线、字母、数字组成,可以由字母和下划线开头,但不能以数字开头。
例如:int a(√),int _a(√),int 1a(×)
变量名要做到顾名思义,看到名字就知道这个变量表达的什么意思。同时采用驼峰命名法,即在一个变量名出现多个单词时,首个单词开头小写,后续出现新单词首字母大写(变量名每个单词后面跟下划线一般是函数名)。
数据类型
数据类型目前学的有三类,分为整型(int),字符型(char),浮点型(float,double)。
其中字符型和整型是有密切联系的,这个联系就是ASCII码,通过把字符转化成对应的数字实现字符型和整型之间的转换。
各个数据类型的大小分别为:整型 4个字节,字符型 1个字节,浮点型 4个字节。
1个字节是8比特位
整型能表示的最大数是2^32(32是整型的大小,32比特位)。
printf打印的用法
1、printf的一般格式为:printf(格式控制,输出列表)
格式控制是有双撇号括起来的一个字符串,称为“转换类型字符串”,其包含两个部分,格式声明和普通字符。
格式声明由“%”和格式字符组成,如%d和%f等,它的作用是将输出数据转换为指定格式后输出,格式声明总是由“%”开头。普通字符即在输出时想要保持原样输出的字符。
%d 10进制整数,%f 小数,x 16进制整数,%p 取变量的内存地址,也是16进制格式输出。
%m.nf准确输出想要长度的小数
%m.nf中m代表输出数长,n代表小数点后的数长,即保留n位小数。如果小数点后的数大于n,例如12.4567按照%5.2f输出得12.46(四舍五入)。如果总位数大于m(小数只到两位),按照实际位数输出,例如111.4567按%5.2f输出,111.46(总数长6)。(注意小数点也算一位数字,占据一个数长)如果实际位数小于m,则要补齐空格,例如1.23按照%5.2f输出,_1.23(_表示空格)(四位数长加空格一共五位)。再来讨论小数小于n的情况,小数小于n空格补齐,例如23.1按照%5.2f输出,得到23.1_(_表示空格)。
综上,m多了不限制小数点前,n多了四舍五入,mn少了空格补足。
2025/4/6 今天学到scanf函数
scanf函数的一般格式是scanf(格式控制,地址列表)
格式控制和printf一样,地址列表和printf不同,不能直接写变量名,要加一个取地址符号“&”,否则无效。
例如:scanf("%d, %d",&a, &b);为什么要取地址,涉及到指针部分,学完指针才懂。
注: 如果在格式控制中出个格式声明还有其他字符,则在输入数据时在相同位置输入和这些字符相同的字符。
例如:scanf("a = %d, b = %d",&a,&b);在终端输出时要先把"a ="敲出来,然后再敲数据,才能正确返回值。即,原样输入!
所以,在scanf的格式控制中一般不出现除格式声明歪的其他字符,包括逗号等。同时在scanf函数前一般都有printf函数声明需要输入的值是什么,否则会非常混乱。
在scanf输入字符时,注意空格也是一个字符,因此当输入字符时,不加空格,不能用回车,直接连续输入字符。
例如:scanf("%c%c%c",&data1,&data2,&data3);
终端输入时直接输入abc
!!scanf混合输入!!
即scanf("%d%c%f",&data1,&data2,&data3);
这种混合输入方式,在输入后极大概率会出现错误而且不美观(包括但不限于格式声明对应错误,例如整型对应%f,浮点型对应%d的情况),所以scanf尽量在同一个语句中用相同的格式声明,或者一个scanf函数中只用一个格式声明以确保代码正确运行。
2025/4/12 今天学了while循环
循环语句相对于前面的选择语句,对我来说更难理解一点,有时候编写代码会出现各种小错误,包括但不限于while条件格式错误,函数体的自增运算或自减运算写错等等。
函数格式:
int main()
{
int sum = 0;//变量最好初始化为0,这是一种好的编码习惯
int data = 1;//第一个表达式,条件的初始值
while(data <= 100)//第二个表达式,条件的临界值
{
printf("data = %d\n",data);
sum = sum + data;
data++;//第三个表达式,条件发生变化
}
printf("0到100的和是%d",sum);
return 0;
}
三条表达式控制了整个while循环。
还学了for循环
for循环要格外注意函数的三个表达式
#include <stdio.h>
int main()
{
int data;
for(data=0/*赋初值*/;data<10/*判断临界值*/;data++/*条件改变*/){
//步骤:判断,执行循环体,条件改变
puts("小谷超帅");//循环体
}
return 0;
}
data = 0这条表达式代表给for循环变量赋初值,该初值在执行该for循环时只执行一次,后续重复循环均不执行表达式1。
data<10代表判断临界值的表达式,主要用于判定是否继续执行该循环,在每次之性循环体之前都要先执行一次该表达式。
表达式3data++是赋予条件的改变形式,例如上述代码中的data++代表每次执行完循环体后就让data自增1(一定注意表达式3时在每次执行完循环体后再执行!!)。
下面再写两条死循环代码
while(1){
这是死循环
}
for(;;){
这同样也是死循环
}
小tips:
1、表达式1可以不写,但是条件赋值语句要放在外面。
int main()
{
int data = 0;
for(;data <= 10;data++){
sum = sum + i;
}
return 0;
}
2、表达式3不写,如果循环体内也不写,将陷入死循环。如果写到循环体内,则表达式3的位置可以不写。
int main()
{
int data;
for(data = 0;data <= 10;){
sum = sum + i;
data++;
}
return 0;
}
3、可以1.2结合食用,即把条件赋值语句写在外面,把条件改变语句写在循环体里面。
int main()
{
int data = 0;
for(;data <= 10;){
sum = sum + i;
data++;
}
return 0;
}
这种情况也可以直接写成while循环
int main()
{
int data = 0;
while(data <= 10){
sum = sum + i;
data++;
}
return 0;
}
continue实例:
int main()
{
int data;
for(data = 100;data <= 200;data++){
if(data %3 != 0){
continue;//如果除以3有余数则证明不能被3整除,跳出当次循环
}
printf("%d\n",data);
}
return 0;
}
break实例:
//捐款数目到达10万元时,截止捐款
int main()
{
int numOfPerson;
int totalMoney = 0;
int money = 0;
for(numOfPerson = 1;numOfPerson <= 1000;numOfPerson++){
printf("请输入捐款的数目:\n");
scanf("%d",&money);
totalMoney = totalMoney + money;
if(totalMoney == 100000){
puts("很好,已经到达10万元");
break;
}
}
printf("累计捐款人数有%d人",numOfPerson);
printf("每人平均捐款数目是%f\n",(float)totalMoney/numOfPerson);
return 0;
}
循环体嵌套例子:(不是很好理解,应多次复习加深理解)
int main()
{
int i;
int j;
int data = 0;
for(i = 0;i < 5;i++){//每执行一次外层for循环,就执行一遍内层for循环。
//即执行一次i = 0的循环,就执行了一次j从0到2循环。
//外层执行一次,内层全部执行完
for(j = 0;j < 3;j++){
printf("%d ",data++);
printf("i = %d,j = %d\n",i,j);//这行代码辅助理解代码运行逻辑
}
}
return 0;
}
//输入一个4*5的矩阵
int main()
{
int i;
int j;
for(i = 1;i <= 4;i++){
for(j = 1;j <= 5;j++){
printf("%d ",i*j);
}
printf("\n");//外部for循环的整个循环体代表一行,本质是输入5行数
}
return 0;
}
2025/4/13 今天学了数组(终于迈进新章节 !(ง •̀_•́)ง)
数组的格式:类型符 数组名[常量表达式]
int a[10];//[]内一定是常量表达式!
!!数组中的元素用下标表示,注意第一个元素是从0开始,例如a[10]用下标表示是0~9。
数组的初始化既可以全部赋值,也可以部分赋值,如果是部分赋值则按照从前到后的顺序依次赋值,未赋值的元素则会按照编译器的默认进行初始化。
见怪不怪的写法:在元素已经确定的情况下[]内可以不指定数组长度,按照初始化的元素个数确定数组长度。
int array[] = {1,2,3,4,5};//即array数组中有5个元素,共占用20个字节 int i; int size; size = sizeof(array) / sizeof(array[0]);//未指定数组长度但要和后续代码进行联动 //可以用该语句求出数组的大小,后续方便使用 for(i = 0;i < size;i++){ //写需要的循环体 }
二维数组(常称为矩阵,写成行列形式)
二维数组的格式:类型符 数组名[常量表达式][常量表达式]
#include <stdio.h>
int main()
{
int i,j;
int arr[2][3] = {{222,333,444},{777,888,999}};//二维数组中的每个元素又是一个数组
for(i = 0;i < 2;i++){
for(j = 0;j < 3;j++){
printf("%d,%d,%d\n",i,j,arr[i][j]);
}
putchar("\n");
}
return 0;
}
2万+

被折叠的 条评论
为什么被折叠?



