C语言学习之路

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

需求响应动态冰蓄冷系统与需求响应策略的优化研究(Matlab代码实现)内容概要:本文围绕需求响应动态冰蓄冷系统及其优化策略展开研究,结合Matlab代码实现,探讨了在电力需求侧管理背景下,冰蓄冷系统如何通过优化运行策略参与需求响应,以实现削峰填谷、降低用电成本和提升能源利用效率的目标。研究内容包括系统建模、负荷预测、优化算法设计(如智能优化算法)以及多场景仿真验证,重点分析不同需求响应机制下系统的经济性和运行特性,并通过Matlab编程实现模型求解与结果可视化,为实际工程应用提供理论支持和技术路径。; 适合人群:具备一定电力系统、能源工程或自动化背景的研究生、科研人员及从事综合能源系统优化工作的工程师;熟悉Matlab编程且对需求响应、储能优化等领域感兴趣的技术人员。; 使用场景及目标:①用于高校科研中关于冰蓄冷系统与需求响应协同优化的课题研究;②支撑企业开展楼宇能源管理系统、智慧园区调度平台的设计与仿真;③为政策制定者评估需求响应措施的有效性提供量化分析工具。; 阅读建议:建议读者结合文中Matlab代码逐段理解模型构建与算法实现过程,重点关注目标函数设定、约束条件处理及优化结果分析部分,同时可拓展应用其他智能算法进行对比实验,加深对系统优化机制的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值