6.18-6.26 旧c语言

第一章 概述

32关键字 9种控制语句
优点:能直接访问物理地址,位操作,代码质量高,执行效率高
可移植性好
面向过程:以事件为中心
面向对象:以实物为中心
printf:系统定义的标准函数

#include<stdio.h>
#include<math.h>
void main()
{double a,b;printf("input number :\n");scanf("%lf",&a);b=sin(a);printf("sine of %lf is %lf",a,b);
}

include:文件包含命令,拓展名为.h的文件称为头文件

#include<stdio.h>
#include<math.h>
int max(int a,int b);//函数说明
void main()
{int x,y,z;int max(int a,int b);//函数说明printf("input two numbers:\n");scanf("%d%d",&x,&y);z = max(x,y);//函数调用printf("max = %d\n",z);
}
int max(int a,int b)//函数定义
{if(a>b)return a;elsereturn b;
}

第二章 数据类型、运算符和表达式

基本数据类型:特点其值不可以再分解为其他类型
构造数据类型:根据已定义的一个或多个数据类型用构造的方法来定义,一个构造类型的值可以分解成若干个成员或者元素
比如 数组类型,结构体类型,共用体类型
指针类型:它的值用来表示某个变量在存储器中的地址
空类型:调用后不需要向调用者返回函数值,这种函数可以定义为空类型,说明符为void
#define 预处理命令

#include<stdio.h>
#define PRICE 30//符号常量
void main()
{int num,total;num = 10;total = num * PRICE;printf("total = %d\n",total);
}

变量定义必须放在变量使用之前,一般放在函数体的开头
类型占多少字节跟编译器有关
short int 2字节
long int 4字节

#include<stdio.h>
void main()
{int a,b,c,d;unsigned u;a = 12;b=-24;u=10;c= a+u;d=b+u;printf("a+u=%d,b+u=%d\n",c,d);
}
#include<stdio.h>
void main()
{short int a,b;a = 32767;b = a+1;//变量溢出printf("%d,%d\n",a,b);
}

实型常量也称实数或者浮点数,实数只采用十进制,他有两种形式:十进制小数形式,指数形式。
单精度4字节,双精度8字节

#include<stdio.h>
void main()
{float a,b;a = 123456.789e5;b = a + 20;printf("%f\n",a);printf("%d\n",a);
}

\t:跳到下一个制表位
\r:回车

#include<stdio.h>
void main()
{char a,b;a = 'a';b = 'b';a = a-32;b = b-32;printf("%c %c\n",a,b);
}

可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。
可以char a = ‘a’;但是不能char a = “a”;
自动转换规则:double->long->unsigned->int->char,short

#include<stdio.h>
void main()
{float PI = 3.14159;int s,r=5;s = r*r*PI;//右边转为s的数据类型printf("s = %d\n",s);
}

双目运算符:有两个量参与加减乘除法运算(自左向右)
赋值运算符自右向左
i++:i参与运算后,i的值再自增1(单目运算符)

#include<stdio.h>
void main()
{int i = 8;printf("%d\n",++i);printf("%d\n",--i);printf("%d\n",i++);printf("%d\n",i--);printf("%d\n",-i++);printf("%d\n",-i--);
}
#include<stdio.h>
void main()
{int i =5,j = 5,p,q;p = (i++)+(i++)+(i++);//18q = (++j)+(++j)+(++j);//22?printf("%d,%d,%d,%d",p,q,i,j);
}

赋值运算符右结合性
字符型赋予整型,字符的ascll码放到整型量的低八位中,高八位为0
复合赋值运算符+=,-=,*=,/=
逗号运算符:表达式1,表达式2//以表达式2的值作为整个逗号表达式的值

#include<stdio.h>
void main()
{int a=2,b=4,c=6,x,y;y = (x = a+b),(b+c);//=优先级最高printf("y = %d,x = %d",y,x);//y=6
}

条件语句:if switch 循环执行语句:do while while for
转向:break goto continue return

#include <stdio.h>
#include <stdlib.h>int main()
{int i = 8;printf("%d\n%d\n%d\n%d\n%d\n%d\n%d\n",i,++i,--i,i++,i--,-i++,-i--);return 0;
}

printf(“%d\n %d\n”,++i,–i);//同一语句中++i,–i相抵消

#include <stdio.h>
#include <stdlib.h>int main()
{int i = 8;printf("%d\n",++i);9printf("%d\n",--i);8printf("%d\n",i++);8printf("%d\n",i--);9printf("%d\n",-i++);-8printf("%d\n",-i--);-9return 0;
}

scanf中没有精度
格式控制符中没有非格式字符作为数据之间间隔时可用空格
逻辑运算符>算术运算符
关系运算符左结合性
(a&&b)&&c

=赋值运算符 ==关系运算符
if语句两句以上用{ }

#include <stdio.h>
int main()
{int a,b,max;scanf("%d,%d",&a,&b);max = a;if(max<b) max = b;printf("max = %d",max);return 0;
}
#include <stdio.h>
int main()
{int a,b;scanf("%d%d",&a,&b);printf("max = %d",a>b?a:b);return 0;
}
#include <stdio.h>
int main()
{int score;printf("input score:");scanf("%d",&score);if(score>=90)printf("A\n");else if(score>=80 && score<90)printf("B\n");else if(score>=70 && score<80)printf("C\n");else if(score>=60 && score<70)printf("D\n");elseprintf("E\n");return 0;
}
#include <stdio.h>
int main()
{int a,b,c,temp;printf("input 3:");scanf("%d,%d,%d",&a,&b,&c);if(a>b){temp = a;a = b;b =temp;}if(a>c){temp = a;a = c;c = temp;}if(b>c){temp = b;b = c;c = temp;}printf("input 3:%d,%d,%d",a,b,c);return 0;
}
#include <stdio.h>
int main()
{char ch;scanf("%c",&ch);if(ch>='A' && ch<='Z'?ch+32:ch)printf("ch = %c\n",ch);return 0;
}

goto:使程序层次不清,且不易读,适用多层嵌套

#include <stdio.h>
int main()
{int i = 1,sum = 0;loop:if(i<=100){sum += i;i++;goto loop;}printf("sum = %d",sum);return 0;
}
#include <stdio.h>
int main()
{int i = 0,sum = 0;do{sum = sum +i;i++;}while(i<=100);printf("%d",sum);return 0;
}

for:表达式1->表达式2->执行语句->表达式3->表达式2->执行语句->表达式3

#include <stdio.h>
int main()
{int i,j;for(i=1;i<7;i++){putchar('\n');for(j=1;j<=i;j++){putchar('*');}}return 0;
}
#include <stdio.h>
int main()
{float pi = 3.14159;float area;for(int r=1;r<10;r++){area = pi*r*r;if(area>100){break;}printf("r = %d,area = %f\n",r,area);}return 0;
}
#include <stdio.h>
#include<conio.h>
int main()
{int i,j;for(i=100;i<=200;i++){if(i%3==0)continue;j++;printf("%d\n",i);}printf("%d",j);return 0;
}

数组:有序的数据集合
数组元素也称下标变量
逐个使用下标变量,而不能一次引用整个数组

#include <stdio.h>
#include<conio.h>
int main()
{int i,a[10];for(i=0;i<=9;i++){a[i] = i;printf("%d ",a[i]);}putchar('\n');for(i=9;i>=0;i--){printf("%d ",a[i]);}return 0;
}

数组赋初值时,由于数据的个数已经确定,可以不指定数组长度//int a[ ] = {1,2,3,4,5}

#include <stdio.h>
#include<conio.h>
int main()
{int i,a[5] = {1,2,3},b[5];for(i=0;i<5;i++){printf("%5d",a[i]);}putchar('\n');for(i=0;i<5;i++){printf("%5d",b[i]);}return 0;
}
#include <stdio.h>
#include<conio.h>
int main()
{int i,max,temp,a[10];for(i=0;i<10;i++){scanf("%d",&a[i]);//动态赋值}max = a[0];for(i=0;i<10;i++){if(max<a[i]){max = a[i];}}printf("max = %d",max);return 0;
}
#include <stdio.h>//冒泡排序
int main()
{int i,j,temp,a[6];for(i=0;i<6;i++){scanf("%d",&a[i]);}for(i=0;i<6;i++){printf("%d ",a[i]);}putchar('\n');for(i=0;i<5;i++){for(j=0;j<5-i;j++)//内循环,第一次循环5次{if(a[j]>a[j+1])//a[j]不是a[i],内循环控制次数{temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}}for(i=0;i<6;i++){printf("%d ",a[i]);}return 0;
}

如果对全部元素都赋初值,定义数组时对第一维的长度可以不指定,但第二维的长度不能省

#include <stdio.h>
int main()
{int i,j,v[3],sum = 0,average,a[5][3] = {{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};for(i=0;i<3;i++){for(j=0;j<5;j++){sum = sum+a[i][j];}v[i] = sum/5;sum = 0;}average = (v[0]+v[1]+v[2])/3;printf("math = %d\n lan = %d\n eng = %d\n aver = %d\n",v[0],v[1],v[2],average);return 0;
}

程序编译是以源文件为单位进行编译,而不是以函数为单位
函数有两种:1、标准函数2、用户自己定义的函数
void是不需要带回函数值,内容需要带回
定义函数,函数名后面括号中的变量称为形参

#include <stdio.h>
void main()
{void pr();void pri();pr();pri();pr();return 0;
}
void pr()
{printf("***************\n");
}
void pri()
{printf("12345\n");
}
#include <stdio.h>
int max(int x,int y);//函数声明,形参,只有调用才分配内存空间
void main()
{int a,b,c;scanf("%d,%d",&a,&b);c = max(a,b);//函数调用,实参printf("c = %d\n",c);return 0;
}
int max(int x,int y)
{int z;z = x>y?x:y;return z;
}

函数决定返回值类型

#include <stdio.h>
int max(int x,int y);
void main()
{float a,b,c;scanf("%f,%f",&a,&b);c = max(a,b);printf("c = %f\n",c);//c=5.0,c为浮点型return 0;
}
int max(int x,int y)
{float z;z = x>y?x:y;return z;
}
#include <stdio.h>
void main()
{int f(int x,int y);int p,i=2;p = f(i,i++);//从右到左(3,2),c =1printf("%d\n",p);return 0;
}
int f(int x,int y)
{int c;if(x>y){c = 1;}else if(x==y){c = 0;}elsec = -1;return c;
}
#include <stdio.h>long fa(int p); // 阶乘int main()
{long s = 0;s += 2 * fa(2); // 2*2!s += 3 * fa(3); // 3*3!printf("%ld\n", s);return 0;
}long fa(int p)
{long c = 1;int i;for (i = 1; i <= p; i++) // 注意这里应该是 <=p,因为阶乘包括p本身{c = c * i;}return c;
}
#include <stdio.h>//递归
long rec(int n);
void main()
{int n;long result;scanf("%d",&n);result = rec(n);printf("%d! = %ld\n",n,result);return 0;
}
long rec(int n)
{long res;if(n<0){printf("error\n");}else if(n == 0 || n==1){res = 1;}else{res = rec(n-1)*n;}return res;
}
#include <stdio.h>
void main()
{int a[10] = {1,2,3,4,-1,-2,-3,-4,2,3};int i;for(i=0;i<10;i++){test(a[i]);}printf("\n");return 0;
}
void test(int v)
{if(v>0){printf("%d ",v);}else{printf("0 ");}
}

数组名作为实参传递共用一段内存跟形参

#include <stdio.h>
double aver(double b[10]);
void main()
{double a[10] = {82,100,87.5,89,78,85,67.5,92.5,93,94},res;res = aver(a);//实参传递数组名跟形参共用内存空间printf("aver is %3.2lf\n",res);putchar('\n');return 0;
}
double aver(double b[10])
{int i = 0;double sum = 0;for(i=0;i<10;i++){sum += b[i];}sum /= 10;return sum;
}
#include <stdio.h>//全局变量正方形体积
int s1,s2,s3;
int vs(int a,int b,int c)
{int v;v = a*b*c;s1 = a*b;s2 = b*c;s3 = a*c;return v;
}
void main()
{int v,l,w,h;scanf("%d%d%d",&l,&w,&h);v = vs(l,w,h);printf("%d %d %d %d\n",v,s1,s2,s3);return 0;
}

存储分为两大类:静态,动态
具体:自动的,静态的,寄存器的,外部的
局部变量存储在栈区

#include <stdio.h>
int fa(int a)
{auto int b = 0;//自动变量赋初值不是在编译时进行,而是函数调用时进行,每调用一次重新给一次初值static int c = 3;//static修饰的全局变量不会变,静态局部变量编译时只赋初值一次,保留上次函数调用结束的值b = b + 1;c = c + 1;return (a+b+c);
}
void main()
{int a = 2,i;for(i=0;i<3;i++){printf("%d\n",fa(a));}return 0;
}
#include <stdio.h>
float max = 0,min = 0;
float aver(float ave[],int n);
void main()
{float ave,sco[10];int i;for(i=0;i<10;i++){scanf("%f",&sco[i]);}ave = aver(sco,10);printf("max = %6.2f,min = %6.2f,ave = %6.2f\n",max,min,ave);
}
float aver(float ave[],int n)
{int i = 0;float av,sum = 0;max = min = ave[0];for(i=0;i<n;i++){if(max <ave[i]){max = ave[i];}else if(min > ave[i]){min = ave[i];}sum +=ave[i];}av = sum/10;return av;
}

静态局部变量不赋初值,编译自动赋0,动态局部变量不赋初值是个不确定的值
内存——运算器(存数,取数),regist变量存储在cpu的寄存器中,缺点容易撑爆内存
extern来声明外部变量,以拓展外部变量的作用域

#include <stdio.h>
int max(int a,int b)
{int z;z = a>b?a:b;return z;
}
void main()
{extern a,b;printf("%d\n",max(a,b));
}
int a = 10,b = 15;
#include<stdio.h>
int fa(int i)
{static int l = 1;l = l*i;return (l);
}
void main()
{int i,sum = 0;for(i=1;i<=5;i++){int result = fa(i);//需要中层变量保存函数返回的值,因为static是静态局部变量printf("%d\n",result);sum += result;}printf("%d\n",sum);return 0;
}
#include <stdio.h>
#include <stdlib.h>
int a;
int main()
{int power(int);int b = 3,c,d,m;scanf("%d %d",&a,&m);c = a * b;printf("%d * %d = %d\n",a,b,c);d = power(m);printf("%d ^ %d = %d\n",a,m,d);return 0;
}
#include<stdio.h>
extern int a;
int power(int n)
{int i,y = 1;for(i=1;i<=n;i++){y *= a;}return y;
}

定义变量:建立存储空间
声明:引用
静态存储:程序在整个运行空间都存在
动态存储:调用函数时临时分配
在这里插入图片描述
在这里插入图片描述

  • :指针变量存放的是地址
#include<stdio.h>
void main()
{int *p,*p1,*p2,a,b;scanf("%d%d",&a,&b);p1 = &a;p2 = &b;if(a<b){p = p1;p1 = p2;p2 = p;}printf("max = %d min = %d",*p1,*p2);
}
#include<stdio.h>//用函数方式交换2个数
void swap(int *p1,int *p2);
void main()
{int *p1,*p2,a,b;scanf("%d%d",&a,&b);p1 = &a;p2 = &b;if(a<b){swap(p1,p2);}printf("%d>%d",*p1,*p2);
}
void swap(int *p1,int *p2)
{int temp;temp = *p1;*p1 = *p2;*p2 = temp;
}
#include<stdio.h>//从小到大排序3个值
void exch(int *p1,int *p2,int *p3);
void main()
{int *p1,*p2,*p3,a,b,c;scanf("%d%d%d",&a,&b,&c);p1 = &a;p2 = &b;p3 = &c;exch(p1,p2,p3);printf("%d %d %d\n",a,b,c);
}
void exch(int *p1,int *p2,int *p3)
{int temp;void swap(int *p1,int *p2);if(*p1 < *p2){swap(p1,p2);}if(*p1 < *p3){swap(p1,p3);}if(*p2 < *p3){swap(p2,p3);}
}
void swap(int *p1,int *p2)
{int temp;if(*p1 < *p2){temp = *p1;*p1 = *p2;*p2 = temp;}
}
#include<stdio.h>//指针变量指向数组首元素地址输出
void main()
{int i;int a[5];int *p;for(i=0;i<5;i++){scanf("%d",&a[i]);}putchar('\n');for(p = a;p<(a+5);p++){printf("%d ",*p);}
}
#include<stdio.h>
void res(int *p,int n);
void main()
{int a[5] = {1,2,3,4,5},i;for(i=0;i<5;i++){printf("%d ",a[i]);}putchar('\n');res(a,5);for(i=0;i<5;i++){printf("%d ",a[i]);}
}
void res(int *p,int n)
{int m,*i,*j,*x,temp;m = (n-1)/2;i = p;//指向数组首元素j = p+n-1;//指向数组最后一位x = p+m;//指向数组中间一位for(i=p;i<x;i++,j--){temp = *i;*i = *j;*j = temp;}}
#include<stdio.h>
void main()
{int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};int i,j,(*p)[4];p = a;for(i=0;i<3;i++){for(j=0;j<4;j++){printf("%2d ",*(*(p+i)+j));}putchar('\n');}}
#include<stdio.h>
void main()
{char a[] = "l love you !",b[40];int i;for(i=0;*(a+i) != '\0';i++){*(b+i) = *(a+i);}*(b+i) = '\0';//确保 b 字符串以 '\0' 结尾 printf("%s\n",a);for(i = 0;b[i] !='\0';i++){printf("%c",b[i]);}
}
#include<stdio.h>
void main()
{char a[]="l love you !",b[40];int *p1,*p2,i;p1 = a;p2 = b;for(;*p1 !='\0';p1++,p2++){*p2 = *p1;}*p2 = '\0';printf("%s\n",a);for(i=0;b[i] !='\0';i++){printf("%c",b[i]);}
}
#include<stdio.h>
void main()
{void copy(char *p1,char *p2);char a[]="l love you !",b[] = "l love you too!";copy(a,b);printf("%s\n",b);
}
void copy(char p1[],char p2[])//字符数组作参数实现字符串复制
{int i;while(p1[i] !='\0'){p2[i] = p1[i];i++;}p2[i] = '\0';
}
#include<stdio.h>
void main()
{void copy(char *p1,char *p2);char *a ="l love you !",b[] = "l love you too!";//字符串常量不能被赋值copy(a,b);printf("%s\n",b);
}
void copy(char *p1,char *p2)
{int i;for(;*p1 !='\0';p1++,p2++){*p2 = *p1;}*p2 = '\0';
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
void main()
{char *p = "l love you marry";int i;printf("%c\n",p[8]);//字符指针用下标也可以表示某个元素for(i=0;p[i] !='\0';i++){printf("%c",p[i]);}
}
#include<stdio.h>
void main()
{int max(int a,int b);int a,b,c;int (*p)();//指针变量要加()p = max;//指向函数的指针scanf("%d%d",&a,&b);c = (*p)(a,b);//函数指针printf("%d",c);}
int max(int a,int b)
{int c;if(a>b){c = a;}else{c = b;}return c;
}

在这里插入图片描述

#include<stdio.h>
int main()
{double score[][4] = {{60.0,70.0,80.5,90.5},{54.0,59.0,61.0,62.0},{75.5,76.0,85.0,89.0}};double *search(double (*po)[4],int n);double *p;int i,m;scanf("%d",&m);p = search(score,m);for(i=0;i<4;i++){printf("%5.2f\t",*(p+i));}printf("\n");return 0;
}double *search(double (*po)[4],int n){double *pt;pt = *(po+n);// 直接返回指向第 n 行的指针return pt;}
#include<stdio.h>
void main()
{int a[5] = {1,2,3,4,5};int *b[5] = {&a[0],&a[1],&a[2],&a[3],&a[4]};int i;for(i=0;i<5;i++){printf("%d ",*b[i]);//指向整型数组的指针}
}
#include<stdio.h>
void main()
{char *name[] = {"hello","world","bye"};char **p;//指向指针的指针int i;for(i=0;i<3;i++){p = name+i;printf("%s\n",*p);}
}

在这里插入图片描述
在这里插入图片描述
内容不能改变,字符串存放在常量区

#include<stdio.h>
void main()
{const char *str ="welcome to!";//加const,字符串单个值不能改变str = "see you bye!";printf("%s\n",str);
}

在这里插入图片描述

#include<stdio.h>
#define PI 3.14
#define S PI*r*r
void main()
{int r;double s;scanf("%d",&r);s = S;//宏定义printf("%g\n",s);
}

typedef是在编译时处理的

#include<stdio.h>
#define ROUND 1//0 1
#define PI 3.14159
void main()
{int r;double s;scanf("%d",&r);
#if ROUNDs = r * r*PI;printf("%6.5f\n",s);
#else
#endif // ROUND
}
#include<stdio.h>
void main()
{struct date{int month;int year;int day;};struct{int num;char name[20];struct date bir;}boy1,boy2;//结构体变量scanf("%d",&boy1.bir.year);scanf("%d",&boy1.bir.month);scanf("%d",&boy1.bir.day);printf("year = %d,month = %d,day = %d",boy1.bir.year,boy1.bir.month,boy1.bir.day);}

结构体变量的地址跟第一个成员的地址相同

#include<stdio.h>
void main()
{struct stu{int num;char *name;char sex;float score;}boy1,boy2 = {102,"mou",'m',75};//赋初值boy1 = boy2;printf("%d,%s,%c,%f",boy1.num,boy1.name,boy1.sex,boy1.score);
}

在这里插入图片描述

#include<stdio.h>
#define N 3
struct person
{char name[20];char phone[20];
};
void main()
{struct person man[N];//结构体数组int i;for(i=0;i<3;i++){printf("input name:");gets(man[i].name);printf("input phone:");gets(man[i].phone);}printf("name\t\tphone\n");for(i=0;i<3;i++){printf("%s\t\t%s\t\t\n",man[i].name,man[i].phone);}
}
#include<stdio.h>
struct person
{int num;char *name;char sex;float score;
}boy1 = {1,"wang",'m',65.5};
void main()
{struct person *pst;//指向结构体类型数据的指针pst = &boy1;printf("%d,%s,%c,%f\n",pst->num,pst->name,pst->sex,pst->score);printf("%d,%s,%c,%f",(*pst).num,(*pst).name,(*pst).sex,(*pst).score);
}

在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
struct person
{int num;char *name;char sex;float score;
};
void print(struct person *p);
void main()
{struct person pst;pst.num = 8;//strcpy(pst.name,"wang");//字符数组专用pst.name = "wang";pst.sex = 'm';pst.score = 80;print(&pst);}
void print(struct person *p)
{printf("%d,%s,%c,%f\n",p->num,p->name,p->sex,p->score);printf("%d,%s,%c,%f",(*p).num,(*p).name,(*p).sex,(*p).score);
}

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/861615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索 JQuery EasyUI:构建简单易用的前端页面

介绍 当我们站在网页开发的浩瀚世界中&#xff0c;眼花缭乱的选择让我们难以抉择。而就在这纷繁复杂的技术海洋中&#xff0c;JQuery EasyUI 如一位指路明灯&#xff0c;为我们提供了一条清晰的航线。 1.1 什么是 JQuery EasyUI&#xff1f; JQuery EasyUI&#xff0c;简单来…

DM达梦数据库转换、条件函数整理

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

【乐吾乐2D可视化组态编辑器】画布

5.1 设置画布属性 默认颜色&#xff1a;预先设置默认颜色&#xff0c;拖拽到画布的节点&#xff08;基础图形、文字、icon&#xff09;自动统一默认颜色。 画笔填充颜色&#xff1a;预先设置画笔填充颜色&#xff0c;拖拽到画布的节点&#xff08;基础图形&#xff09;自动统…

QT自定义信号和槽函数

在QT中最重要也是必须要掌握的机制&#xff0c;就是信号与槽机制&#xff0c;在MFC上也就是类型的机制就是消息与响应函数机制 在QT中我们不仅要学会如何使用信号与槽机制&#xff0c;还要会自定义信号与槽函数&#xff0c;要自定义的原因是系统提供的信号&#xff0c;在一些情…

免费录制视频软件推荐,这3款软件超实用!

随着网络技术的发展&#xff0c;录制视频已经成为人们日常生活中的一个重要需求。无论是教学、会议、游戏还是娱乐&#xff0c;视频录制都为我们提供了极大的便利。然而&#xff0c;市场上的视频录制软件琳琅满目&#xff0c;如何选择一款适合自己的免费录制视频软件成为了一个…

Java基础知识-Map、HashMap、HashTable和TreeMap

1、HashMap 和 Hashtable 的区别&#xff1f; HashMap 和 Hashtable是Map接口的实现类&#xff0c;它们大体有一下几个区别&#xff1a; 1. 继承的父类不同。HashMap是继承自AbstractMap类&#xff0c;而HashTable是继承自Dictionary类。 2. 线程安全性不同。Hashtable 中的方…

MapStruct-JavaBean映射工具使用指南

在软件开发中&#xff0c;对象之间的转换是一项常见的任务&#xff0c;尤其是在处理数据模型间的映射时。传统的做法&#xff0c;如使用JavaBeanUtils&#xff0c;可能会导致性能下降&#xff0c;而手动编写转换代码则效率低下且易出错。为了解决这些问题&#xff0c;MapStruct…

为何整个 AI 领域都朝着 AI Agents 这一方向发展?

编者按&#xff1a; 当前大热的大语言模型和检索增强生成模型&#xff0c;虽然在语言理解和内容生成方面取得了突破性的进展&#xff0c;但仍然存在诸多限制。它们缺乏根据目标导引行为、持续学习和与环境交互的能力&#xff0c;难以应对复杂多变的现实场景需求。 今天为大家带…

Go Error 处理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

HarmonyOS(39) Preferences 入门指南

Preferences Preferences应用实例初始化preferences保存并持久化数据获取数据 参考资料 Preferences Android开发程序员对此应该很熟悉&#xff0c;HarmonyOS里的Preferences跟Android里的SharePreference差不多&#xff0c;应用提供Key-Value键值型的数据处理能力&#xff0c…

HTTP性能测试工具 —— wrk!

wrk性能测试工具详解 wrk是一款轻量级但功能强大的HTTP基准测试工具&#xff0c;主要用于在单机多核CPU环境下对HTTP服务进行性能测试。它通过利用系统自带的高性能I/O机制&#xff08;如epoll、kqueue等&#xff09;&#xff0c;结合多线程和事件模式&#xff0c;能够产生大量…

AI 助力的在线 Excel 表格:真正的革命还是市场噱头?

在当今数字化和自动化的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术被广泛应用于各种领域&#xff0c;从智能手机到工业生产&#xff0c;无所不在。最近&#xff0c;一些产品声称通过AI技术来增强传统的办公软件&#xff0c;如在线Excel表格。例如&#xff0c;Cha…

1966 ssm 流浪猫领养网站系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 ssm 流浪猫领养网站系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/…

华为od-C卷200分题目3 - 两个字符串间的最短路径问题

华为od-C卷200分题目3 - 两个字符串间的最短路径问题 题目描述 给定两个字符串&#xff0c;分别为字符串A与字符串B。 例如A字符串为ABCABBA&#xff0c;B字符串为CBABAC可以得到下图m*n的二维数组&#xff0c;定义原点为(0, 0)&#xff0c;终点为(m, n)&#xff0c;水平与垂…

五月软考满分范文“模型驱动架构设计方法及其应用”,软考高级,系统架构设计师

论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法,以模型构造、模型转换和精化为核心,提供了一套软件设计的指导规范。在模型驱动架构环境下,通过创建出机器可读和高度抽象的模型实现对不同问题域的描述,这些模型独立于实现技术,以标准化的方式储存,利用…

Docker(九)-Docker运行redis6.0.8容器实例

1.宿主机新建目录存放redis.conf文件 目的&#xff1a;运行redis容器实例时使用自己的配置文件2.运行redis容器实例 docker run -d -p 6379:6379 --privilegedtrue -v 【宿主机配置文件目录】:/etc/redis/redis.conf -v 【宿主机数据目录】:/data --nameredis6.0.8 redis:6.0…

从挑战到实战!TDengine 新能源行业研讨会要点回顾

近年来&#xff0c;随着全球对可再生能源需求的不断增长&#xff0c;新能源行业迎来了前所未有的发展机遇。然而&#xff0c;伴随着行业的快速发展&#xff0c;海量数据的管理和高效利用成为了行业面临的重要挑战。如何通过先进的数据管理技术提升新能源系统的效率和可靠性&…

安科瑞智能物联网远传电表的优势

物联网远传智能电表是一种新型的电表&#xff0c;它通过物联网技术实现了电能的远程监测和管理。下面是物联网远传智能电表的优缺点&#xff1a;王盼盼&#xff1b;18721098782/Acrel 优点&#xff1a; 1. 实现了电能的远程监测和管理&#xff0c;可以随时随地了解电能的使用…

烟火监测报警摄像机

当今社会&#xff0c;随着城市化进程的加快和人们生活水平的提高&#xff0c;烟火监测报警摄像机作为一种新型智能安防设备&#xff0c;正逐步在各个领域得到广泛应用&#xff0c;其在保障公共安全和预防火灾中的作用日益凸显。烟火监测报警摄像机利用先进的视觉识别技术和智能…

基于FreeRTOS+STM32CubeMX+LCD1602+MCP3304(SPI接口)的8通道ADC转换器Proteus仿真

一、仿真原理图: 二、仿真效果: 三、STM32CubeMX配置: 1)、GPIO配置: 2)、SPI接口配置: 三、软件代码: 1)、GPIO初始化: static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOC_CLK_ENABL…