专升本期间部分C语言程序整理

说明

这些程序是我在专升本期间在CSDN上上传的作业、练习等,仅为学习备考的一小部分程序,整理成一篇文章,方便专升本的学弟学妹参考。

时间:2021年~2022年专升本期间

字符串题

输入字符串提取 数字字符 并 求和 (4处错)

题目:输入一个字符串,将其数字符号选出按顺序组成一个整数并输出到屏幕上。

例如:输入-3#45^67@,得到-34567;输入3#4-5*67,得到34567。

#include<stdio.h>
#include<string.h>
int main()
{
	char s[50];
	int i,n=0;	//错误1:n没赋初值 
	gets(s);	//错误2:gets写成了get() 
	if(s[0]=='-')
		putchar(s[0]);
	for(i=0;i<strlen(s);i++)
	{
		if(s[i]>='0'&&s[i]<='9')
		{
			//错误3:①②写反了 
			n*=10;		//②
			n+=s[i]-'0';	//① 错误4:写成了 n=s[i]-'0';  
		}
	}
	printf("%d",n);
	return 0;
 } 

运行结果1:
输入:-3#45^67@
输出:-34567

运行结果2:
3#4-5……67@
34567

strlen的实现

//计算长度 

#include<stdio.h>
int main()
{
	char *str1 = "abcdefg", *str2;
	str2 = str1;	
	
	while(*str1++);
	{
		str1++;
	}
	
	printf("%d",str1 - str2);	//9
}

strcat()的实现

//链接字符串
#include<stdio.h>

int main()
{
	char s1[30] = "abcdefg",s2[30] = "hijklmn";

	char *str1 = s1 , *str2 = s2;
	
	while(*str1)
	{
		str1++;
	}
	
	while(*str2)
	{
		*str1++ = *str2++;
	}
	
	printf("%s",s1);	//abcdefghijklmn 	//输出数组名,不要输出指针名。
//  printf("%s",str1);	//无输出结果,因为此时str2指向了0	 
 } 

strcpy()的实现

#include<stdio.h>

int main()
{
	char str1[30] = "abcdefghiklmn",str2[30] = "asdljgs";
	char *s1 = str1 , *s2 = str2;
	while(*s2)
	{
		*s1 = *s2;
		s1++;
		s2++;
	}
	
	*s1 = '\0';
	
	printf("%s",str1);	//asdljgs 
 } 

删除字符串

#include<stdio.h>

int main()
{
	char s[30] = "a1b2c3d4ef5";
	char *p=s;
	int n=0,i=0;
	
	while(s[i])
	{
		if(s[i] < '0' || s[i] > '9' )
		{
			s[n++] = s[i];
		}
		
		i++;
	}
	s[n] = '\0';
	printf("%s",s);	//abcdef
 }

比较字符串(本题认为值为左串与右串第一个不相同字符之差(左-右))

#include<stdio.h>

int main()
{
	char s1[30],s2[30];
	int i,j;
	scanf("%s%s",s1,s2);
	
	for(i=0;s1[i]==s2[i];i++);
	
	printf("%d",s1[i]-s2[i]);    
}

#include<stdio.h>

int main()
{
	char s1[30],s2[30];
	char *p = s1,*q =s2;
	
	scanf("%s%s",s1,s2);    //scanf("%s%s",p,q);
	
	while(*p == *q)
	{
		p++,q++;
	}
	
	printf("%d",*p-*q);
}

运行结果都如下:

abcdefg
abceefg
-1

字符串转成顺序数字

//把数字字符串转成数字

#include<Stdio.h>

int main()
{
	char s[10] = "1234";
	int i,n=0;
	
	for(i=0;s[i];i++)
	{
		n=n*10+s[i]-'0';
	}
	
	printf("%d",n);
}

1234

2.字符串转成逆序数字
方法很简单啊,把for循环的3条语句都改了就好了,此外注意添加头文件

//把数字字符串转成逆序数字 
#include<Stdio.h>
#include<string.h>

int main()
{
	char s[10] = "1234";
	int i,n=0;
	
	for(i=strlen(s)-1 ;i>=0 ;i--)
	{
		n=n*10+s[i]-'0';
	}
	
	printf("%d",n);
}

4321

输出字符串中最长的单词

#include<Stdio.h>
 
int main()
{
	char str[80] = "this  isndnsjfida  is a pencil   good   ";
	char *p,*s = str;
	int num=0,max = 0;
	
	while(*s)
	{
		while(*s&&(*s>='a'&&*s<='z'||*s>='A'&&*s<='Z'))
		{
			num++;
			s++;
		}
		if(num > max)
		{
			max = num;
			p = s;
		}
		num = 0;
		
		while(*s&&*s==' ')
		{
			s++;
		}
	}
	*p = 0;
	puts(p-max);
}

pencil

判断回文串

#include<stdio.h>
#include<string.h>

int main()
{
	char s[30] = "abcba";
	int i,j;
	
	for(i = 0 , j=strlen(s)-1; i<j; i++,j--)	//-1 不是strlen(s) 
	{
		if(s[i] != s[j])
		{
			break;
		}
	}
	
	if(i>=j)
	{
		printf("是回文串");
	}
	else
	{
		printf("不是回文串");
	}
	
 } 

是回文串

​子串

#include<stdio.h>
#include<string.h>

int main()
{
	char s1[30] = "abcdabdabe" ,s2[10] = "ab";
	int i,j;
	int num = 0;
	
	
	for(i=0; i<strlen(s1); i++)
	{
		for(j=0; j<strlen(s2); j++)
		{
			if(s1[i+j] != s2[j])
			{
				break;
			}
		}
		if(j == strlen(s2))
		{
			num++;
		}
	}
		
	printf("%d",num);
	
	return 0; 
} 

3

输入三个字符串,分别统计每个串的大写字母个数

方法1:指针数组法

#include<stdio.h>

int main()
{
	char str[3][50]; 
	char *name[3] = {str[0],str[1],str[2]}; //指针必须有指向
	int num[3]={0};
	int i,j;
	
	for(i=0;i<3;i++)
	{
		gets(*(name+i));
		
		for(j=0;*(*(name+i)+j);j++)
		{
			if(*(*(name+i)+j)>='A'&&*(*(name+i)+j)<='Z')
			{
				num[i]++;
			}
		}
		
		printf("大写字母有%d个",num[i]);
		putchar('\n');
	}
}

A1B2C3D4
大写字母有4个
zxcasdG
大写字母有1个
大写字母有0个

方法2:二维数组法

#include<stdio.h>

int main()
{
	char name[3][80];
	int num[3]={0};
	int i,j;
	
	for(i=0;i<3;i++)
	{
		gets(name[i]);
		
		for(j=0;name[i][j];j++)
		{
			if(name[i][j]>='A'&&name[i][j]<='Z')
			{
				num[i]++;
			}
		}
		
		printf("大写字母有%d个",num[i]);
		putchar('\n');
	}
}

abcABC123A
大写字母有4个
gjfA
大写字母有1个
kgsSHB4
大写字母有3个

数组题

从整形数组中计算奇数元素的平均值

#include<stdio.h>

double ave(int b[],int n)
{
	double sum=0.0;
	int i,j=0;	//j:奇数个数
	for(i=0;i<n;i++)
	{
		if(b[i]%2!=0)
		{
			sum+=b[i];
	 		j++; 	
		}
	} 
	printf("奇数有:%d个\n",j);
	printf("%f 除以 %d = %f\n",sum,j,sum/j);
	return sum/j;
}
int main()
{
	int a[100];
	int i,n;
	printf("请输入元素个数:");
	scanf("%d",&n); 
	for(i=0;i<n;i++)
	{
		printf("请输入a[%d]:",i); 
		scanf("%d",&a[i]);
	}
	printf("The result is : %lf",ave(a,n));	

	return 0;
}

请输入元素个数:5
请输入a[0]:1
请输入a[1]:2
请输入a[2]:3
请输入a[3]:4
请输入a[4]:5
奇数有:3个
9.000000 除以 3 = 3.000000
The result is : 3.000000

设计程序统计某班全体学生三门课的成绩,要求先输入学生人数,并依次输入每个学生的三门成绩,统计出每门课程的全班平均分及每个考生所有考试的总分。

#include<stdio.h>

int main()
{
	int i,j;
	int n;
	double a[100][5] = {0};
	double avg1 = 0 , avg2 = 0 , avg3 = 0;
	
	scanf("%d",&n);	//n:学生人数
	
	for(i=0; i<n; i++)8
	{
		scanf("%lf%lf%lf",&a[i][0],&a[i][1],&a[i][2]);
		
		a[i][3] = a[i][0] + a[i][1] + a[i][2];	//a[i][3]保存 总分 
				
		avg1+=a[i][0]/n;	//科目1平均分 
		avg2+=a[i][1]/n;
		avg3+=a[i][2]/n;
	 } 
	 
	 for(i=0;i<n;i++)
	 {
	 	printf("第%d个考生总分:%lf\n", i+1 , a[i][3]);
	 }
	 
	 printf("科目1:%lf\n科目2:%lf\n科目3:%lf\n",avg1,avg2,avg3);
	 
}

3
1 2 3
4 5 6
7 8 9
第1个考生总分:6.000000
第2个考生总分:15.000000
第3个考生总分:24.000000
科目1:4.000000
科目2:5.000000
科目3:6.000000

假设10个整数存储在数组a[10]中,要求把其中能被12整除的数标记为T,其他标记为F,标记存储在字符数组b[10]中下标相同的对应位置。输出这两个数组

#include<stdio.h>

int main()
{
	int a[10] = {1,12,144,24,48,25,26,32,2,36};
	int b[10] = {0};
	int i;
	
	for(i=0; i<10; i++)
	{
		//写法1.if - else 
		
//		if(a[i]%12==0)
//		{
//			b[i] = 'T';
//		}
//		else
//		{
//			b[i] = 'F';
//		}
//		
		//写法2.条件表达式
		b[i] = a[i]%12==0 ? 'T' : 'F'; 
		
	}
	
	for(i=0; i<10; i++)
	{
		printf("%-3d - %c\n",a[i],b[i]);
	}
}

1 - F
12 - T
144 - T
24 - T
48 - T
25 - F
26 - F
32 - F
2 - F
36 - T

输出10行杨辉三角

include<stdio.h>

int main()
{
	int a[10][10] = {0};
	int i,j;
	
	for(i=0; i<10; i++)
	{
		a[i][0] = 1;
		a[i][i] = 1;
	 } 
	 
	for(i=1; i<10; i++)
	{
		for(j=1; j<=i; j++)	// <= 或 < 都可以 
		{
			a[i][j] = a[i-1][j-1] + a[i-1][j];
		}
	}
	
	for(i=0; i<10; i++)
	{
		for(j=0; j<=i; j++)
		{
			printf("%-5d",a[i][j]);
		}
		putchar('\n');
	}
}

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1

递归输出杨辉三角

#include<stdio.h>

int f(int i , int j)
{
	if(j==0||j==i)
	{
		return 1;
	}
	else
		return f(i-1,j-1) + f(i-1,j);
}

int main()
{
	for(int i=0;i<=9; i++)
	{
		for(int j=0;j<=i;j++)
		{
			printf("%d\t",f(i,j)); 
		}
		putchar('\n');
	}
 } 

判断对称数组

#include<stdio.h>
#define M 4
#define N 4
typedef int integer;

integer Fun(int a[][4])
{
	int i,j;
	
	for(i=0; i<M; i++)
	{
		for(j=0; j<N; j++)
		{
			if(a[i][j] != a[j][i])
			{
				return 0;
			}
		}
	}
	
	return 1;
 } 
 
void main()
{
	int a[M][N] = {1,3,4,5,3,2,7,9,4,7,1,6,5,9,6,1};
	
	if(Fun(a))
	{
		printf("是对称数组");
	}
	else
	{
		printf("不是对称数组");
	}
}

是对称数组

斐波那切数列数组法

#include<stdio.h>

int main()
{
	int s[40] = {0,1};
	int i;
	
	for(i=0;i<20;i++)
	{
		printf("%d\t",s[i]);
		s[i+2] = s[i] + s[i+1];
		
		if((i+1) % 5 == 0)
			putchar('\n');
	}
 } 

0 1 1 2 3
5 8 13 21 34
55 89 144 233 377
610 987 1597 2584 4181

递归输出斐波那契额数列

#include<stdio.h>

int f2(int x)
{
	if(x==0)
	{
		return 0;
	}
	else if(x==1)
	{
		return 1;
	}
	else{
		return f2(x-2)+f2(x-1);
	}
 } 
 
 int main()
 {
 	int n,i;
 	scanf("%d",&n);
 	for(i=0;i<n;i++)
 	{
 		printf("%d\t",f2(i));
	 }
	
 	return 0;
 }
 

在这里插入图片描述

两个两个输出

#include<stdio.h>

int main()
{
	int i=0,j=1,k;
	
	for(k=0;k<10;k++)
	{
		printf("%d\t%d\n",i,j);
		i+=j;
		j+=i;
	}
}

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

删除指定下标的数组元素

硕成大模考的一道题,答案给错了,太坑了


#include<stdio.h>
#define N 5

void fun(int a[], int k, int *n) 
{
	int *p,* q,*r=a;
	
	if(k<0||k>=N) 
	{
		printf("error!\n");
		exit(0);
	}
	
	for(p=a,q=a+k;p<a+N;p++)
	{
		if(p!=q)
		{
			*r++=*p;
		}
		else
			(*n)--;
	}
}
 
int main()
{
	int a[N] ,k ,n=N,*p;
	
	for(p=a;p<a+N;p++) 
		scanf("%d",p);	
	
	scanf("%d",&k);	
	
	fun(a,k,&n);
	
	for(p=a ;p<a+n;p++)
		printf("%d\t",*p);
} 

1 2 3 4 5
2
1 2 4 5

将一个整数插入到已经排好序的数组中,是该数组仍然有序

#include<stdio.h>

int main()
{
	int a[10] = {1,2,3,4,6,7};
	int x;
	
	scanf("%d",&x);
	int i = 0,j;
	
	while(x > a[i])
	{
		i++;	
	}
	
	for(j=5 ; j>=i; j--)
		a[j+1] = a[j];

	if(x>a[5])
	{
		a[6] = x; 
	}
	else
	{
		a[i] = x;	
	}
	
	
	for(i=0;i<7;i++)
	{
		printf("%d\t",a[i]);
	}
}

0
0 1 2 3 4 6 7

5
1 2 3 4 5 6 7

8
1 2 3 4 6 7 8

删除数组中的重复数字

在这里插入图片描述

#include<stdio.h>

int delete(int a[],int n)
{
	int i,j,flag = 1,k=0;
	
	printf("数组原来元素为:");
	for(i=0;i<n;i++)
	{
		printf("%6d",a[i]);
	}
	putchar('\n');
	for(i=0;i<n;i++)
	{
		flag = 1;
		j=i; 
		for(j=i+1;j<n;j++)
		{
			if(a[i]==a[j])
			{
				flag = 0;
				break;
			}
		}
		
		if(flag ==1)
		{
			a[k++] = a[i];
		}
	}
	printf("\n数组删除后的元素为:");
	for(i=0;i<k;i++)
	{
		printf("%6d",a[i]);
	}
	putchar('\n');
	
	for(i=k;i<n;i++)
	{
		a[i]=0;
	}
	return k;
}

int main()
{
	int a[] = {1,1,1,2,2,2,3,3,4,5};
	
	printf("删除后有%d个元素",delete(a,10));
	
	return 0;
}

数组原来元素为: 1 1 1 2 2 2 3 3 4 5
数组删除后的元素为: 1 2 3 4 5
删除后有5个元素

方法2

#include<stdio.h>

int f(int a[],int n)
{
	int i,j,k=0,num;
	
	printf("\n数组删除前的元素为:");
	
	for(i=0;i<n;i++)
	{
		printf("%6d",a[i]);
	}
	
	putchar('\n');
	
	for(i=0; i<n; i+=num)
	{
		num = 0;
		
		for(j=0;j<n;j++)
		{
			if(a[i] == a[j])
				num++;
		}
		
		a[k++] = a[i];
	}
	
	printf("\n数组删除后的元素为:");
	
	for(i=0;i<k;i++)
	{
		printf("%6d",a[i]);
	}
	
	putchar('\n');
	return k;
}

void main()
{
	int a[10] = {1,1,2,2,2,3,3,4,4,5};
	
	printf("删除后有%d个元素",f(a,10));
}

数组删除前的元素为: 1 1 2 2 2 3 3 4 4 5
数组删除后的元素为: 1 2 3 4 5
删除后有5个元素

方法3

int delete(int *b,int n)
{
	int i,num = 0;
	for(i=0; i < num ; i++)
	{
		if(b[i] != b[i+1])
			b[num++] = b[i];
	}
	
	return num;
}

1 2 3 4 4 5 6 6 6 7
删除前:
1234456667
删除后:
1234567

删除后有7个字符

## 指针程序题
### 指针s所指向的字母数字串只包含数字和字母,编写程序实现如下功能:只保留第一个字母前的数字字符,其余数字字符全部删除。例如:12ab3cd456e → 12abcde
```c
#include<stdio.h>

void Fun2(char *s)
{//123abc12cd1
	char *p = s;
	
	while(*s >= '0' && *s <= '9')
	{
		s++;
		
	}
	
	p = s;
	while(*s)
	{
		if(*s < '0' || *s > '9')
		{
			*p = *s;
			p++;
		}
		
		s++;
	}
	
	*p = '\0';
	
	
//	printf("删除数字字符后的字符串为:%s" , p);	//p指针已经指向了最后一个元素,所以输出结果为空白。应在主函数中调用输出。 
}


int main()
{
	char s[32];
	scanf("%s",s);
	Fun2(s);
	
	printf("删除数字字符后的字符串为:%s" , s);
 } 

12ab3cd456e
删除数字字符后的字符串为:12abcde

用数组实现。

#include<stdio.h>

void Fun2(char *s)
{//123AB12CD1
	int i=0 , j=0;
	
	while(s[i]>='0' && s[i]<='9')
	{
		i++;
	}
	j=i;
	
	for(; s[i]; i++)
	{
		if(s[i]<'0' || s[i]>'9')
		{
			s[j++] = s[i];
		}
	}
	
	s[j] = 0;
	
	printf("删除后的字符串为:%s",s);	//是下标实现的,所以可以在此处输出。 
}


int main()
{
	char s[32];
	scanf("%s",s);
	Fun2(s);					
//	Fun2("123as321y4ddgf"); 	//程序不执行,无反应 
 } 

12ab3cd456e
删除后的字符串为:12abcde

统计字符串 中的 子串 出现的次数。例如 “abcabdabe” 中 “ab” 出现次数为 3 ,“abc”出现次数为 1

#include<stdio.h>

int FUN(char s1[],char s2[])
{
	char *p1 = s1,*p2 = s2;
	char *p3 = NULL;
	int num = 0;
	
	while(*p1)
	{
		p3 = p1;
		while(*p2 == *p3)
		{
			p2++,p3++;
			
		}
		
		if(*p2 == '\0')
		{
			num++;
		}
		
		p2 = &s2[0];
		p1++;
	}
	
	return num;
 } 

int main() 
{
	
	printf("个数为:%d\n",FUN("abcabdabe","ab"));	//个数为:3
	printf("个数为:%d\n",FUN("abcabdabe","abc"));	//个数为:1
	
	return 0;
}

个数为:3
个数为:1

鞍点

//鞍点

#include<stdio.h>
#define N 4

int main()
{
	int i,j,flag=0,t,maxi,maxj,mini,max,min;	//定义
	int a[N][N] =	{1,2,3,4,
					 1,2,3,4,
					 9,10,11,12,
					13,14,15,16
					 };
	
	for(i=0; i<N; i++)
	{
		maxj = 0;
		maxi = i;
		max = a[i][0];
		for(j=0; j<N; j++)
		{
			if(a[i][j] > max)
			{
				max = a[i][j];
				maxj = j;
				maxi = i;			
			}			
		}
		
		//产生了单行最大值
		mini = i;
		for(t=0; t<N; t++) 
		{
			if(a[t][maxj] < max)
			{
				mini = t;
			}
		}
		
		//产生了单列最小值
		
		 if(mini == maxi)
		 {
		 	printf("鞍点:%d行%d列:%d\n",maxi,maxj,max);
		 	flag = 1;
		 }
	}
	
	if(!flag)
	{
		printf("没有鞍点");
	}
	
}

鞍点:0行3列:4
鞍点:1行3列:4

结构体题

1.统计结构体数组中性别(sex)为’M’的变量的个数。

要求:

①数组元素依次赋初值为:{1 , “Andy” , ‘M’ } 、 {2 , “Mike” , ‘F’ } 、 {3 , “Rose” , ‘M’}。

②结构体定义如下:struct Student{int num;char name[30];char sex;};

#include<stdio.h>
 
struct Student{
	int num;
	char name[30];
	char sex;
};
 
int Fun(struct Student *s , int n)
{
	int num=0; 
	int i;
	
	for(i=0; i<n; i++)
	{
		if(s[i].sex == 'M')
		{
			num++;
		}
	}
	
	return 3;
}
 
int main()
{
	struct Student s[3] = {
		1,"Andy",'M',2,"Mike",'F',3,"Rose",'M'
	};
	
	printf("%d",Fun(s , 3));
	
	return 0;
}

3

2.通过函数调用实现:讲结构体数组中的三个元素按num成员进行升序排列。

要求:

①数组元素依次赋初值为:{12,“sunny”,89.1}、{8,“henry”,73.5}、{21,“lucy”,91.7}。

②结构体定义如下:struct s{int num;char name[30];float score;};

写法1:在函数外部 定义 结构体变量并且赋值,参数值为空。

#include<stdio.h>

struct s{
	int num;
	char name[30];
	float score;
}a[3] = {{12,"sunny",89.1} , {8,"henry",73.5} , {21,"lucy",91.7}}; 

void fun()
{
	int i,j;
	struct s t;
	for(i=0; i<2; i++)
	{
		for(j=0; j<2-i; j++)
		{
			if(a[j].num > a[j+1].num)
			{
				t = a[j];
				a[j] = a[j+1];
				a[j+1] = t;
			}
		}
	}
	
}

int main()
{
	int i;
	fun();
	for(i=0; i<3; i++)
	{
		printf("%d,%s,%f\n",a[i].num , a[i].name , a[i].score);
	}
	
	return 0;
}

8,henry,73.500000
12,sunny,89.099998
21,lucy,91.699997

写法2:在主函数中定义变量,通过参数传递变量值

#include<stdio.h>

struct s{
	int num;
	char name[30];
	float score;
};

void fun(struct s *a , int n)
{
	int i,j;
	struct s t;
	for(i=0; i<n-1; i++)
	{
		for(j=0; j<n-1-i; j++)
		{
			if(a[j].num > a[j+1].num)
			{
				t = a[j];
				a[j] = a[j+1];
				a[j+1] = t;
			}
		}
	}
	
}

int main()
{
	struct s a[3] = {{12,"sunny",89.1} , {8,"henry",73.5} , {21,"lucy",91.7}}; 
	int i;
	fun(a,3);
	for(i=0; i<3; i++)
	{
		printf("%d,%s,%f\n",a[i].num , a[i].name , a[i].score);
	}
	
	return 0;
}

8,henry,73.500000
12,sunny,89.099998
21,lucy,91.699997

3.计算n名学生成绩的平均分并通过函数返回。

要求:

结构体代码如下:
struct StudentScore{double score;};

#include<stdio.h>

struct StudentScore{
	double score;
};

double Fun(struct StudentScore *a , int n)
{
	int i;
	double sum = 0.0;
	
	for(i=0; i<n; i++)
	{
		sum += a[i].score;	
	}
	
	return sum/n;
}

int main()
{
	struct StudentScore a[100];
	int n;	//学生数量 
	int i;
	
	printf("请输入学生数量:");
	scanf("%d",&n);
	
	for(i=0; i<n; i++)
	{
		printf("请输入第%d个学生的成绩:",i+1);
		scanf("%lf",&a[i].score);
	}
	
	printf("%lf",Fun(a,n));
	return 0;
}

请输入学生数量:3
请输入第1个学生的成绩:90
请输入第2个学生的成绩:100.0
请输入第3个学生的成绩:80
90.000000

4.输入三个学生的学号,姓名,分数,输出分最高同学的所有信息。

#include<stdio.h>
 
int main()
{
	struct stu{
		int num;
		char name[20];
		float score;
	};
	
	int i;
	
	struct stu a[3] , max;
	
	for(i=0; i<3; i++)
	{
		printf("第%d个:",i+1);
		scanf("%d%s%f",&a[i].num,&a[i].name,&a[i].score);
	}
	
	max = a[0];		//结构体变量整体赋值 
	
	for(i=1; i<3; i++)
	{
		if(max.score < a[i].score)
			max = a[i];		//结构体变量整体赋值 
	}
	
		printf("成绩最高的是%d号,%s,%f分",max.num,max.name,max.score);
}

第1个:1 亚历山大 80
第2个:2 牛顿 100
第3个:3 李白 59
成绩最高的是2号,牛顿,100.000000分

4.2用函数

#include<stdio.h>
 
struct stu{				//struct stu定义 应该放全局。如果在主函数内,那么定义函数会提示没这个类型。 
	int num;
	char name[20];
	float score;
};
	
struct stu Fun(struct stu *a,int n)
{
	struct stu max = a[0];
	int i;
	
	for(i=1; i<3; i++)
	{
		if(max.score < a[i].score)
			max = a[i];		//结构体变量整体赋值 
	}
	
	return max;
}
 
int main()
{
	int i;
	
	struct stu a[3] = {
		1,"li",70.1,2,"wang",70.5,3,"zhai",70.3
	};
	
	
	
	struct stu max = Fun(a,3);
	
	printf("成绩最高的是%d号,%s,%f分",max.num,max.name,max.score);
}

成绩最高的是2号,wang,70.500000分

枚举类型三道题

1.枚举类型数据的输入和输出

#include<stdio.h>


enum fruits{
	watermelon,peach,strawberry,banana,pineapple,apple
};

int main()
{
	
	char fts[][20] = {"watermelon","peach","strawberry","banana","pineapple","apple"};
	enum fruits x;
	int k;
	
	scanf("%d",&k);
	x=(enum fruits)k;
	printf("%s",fts[x]);
}

2
strawberry
5
apple

2.枚举类型数据的关系运算

#include<stdio.h>

enum fruits{
	watermelon,peach,strawberry,banana,pineapple,apple
};

int main()
{
	enum fruits x;
	int k;
	scanf("%d",&k);
	x=(enum fruits)k;
	if(x==peach)
		printf("x=%d,peach=%d,x==peach\n",x,peach);
	else if(x>peach)
		printf("x=%d,peach=%d,x>peach\n",x,peach);
	else if(x<peach)
		printf("x=%d,peach=%d,x<peach\n",x,peach);
		
	return 0;
 } 

1
x=1,peach=1,x==peach
2
x=2,peach=1,x>peach
4
x=4,peach=1,x>peach

3.水果拼盘

#include<stdio.h>


	enum fruits{
		watermelon,peach,strawberry,banana,pineapple,apple
	};

int main()
{
	
	char fts[][20] = {"西瓜","桃子","草莓","香蕉","菠萝","苹果"};
	enum fruits a,b,c,d;
	int k = 0;
	
	for(a = watermelon; a<=apple; a++)
		for(b = a+1; b<=apple; b++)
			for(c = b+1; b<=apple; c++)
				for(d = c+1; b<=apple; d++)
					printf("%d:%s %s %s %s\n",++k,fts[a],fts[b],fts[c],fts[d]);
					
	printf("共有%d种水果",k);
 } 

1:西瓜 桃子 草莓 香蕉
2:西瓜 桃子 草莓 菠萝
3:西瓜 桃子 草莓 苹果
4:西瓜 桃子 香蕉 菠萝
5:西瓜 桃子 香蕉 苹果
6:西瓜 桃子 菠萝 苹果
7:西瓜 草莓 香蕉 菠萝
8:西瓜 草莓 香蕉 苹果
9:西瓜 草莓 菠萝 苹果
10:西瓜 香蕉 菠萝 苹果
11:桃子 草莓 香蕉 菠萝
12:桃子 草莓 香蕉 苹果
13:桃子 草莓 菠萝 苹果
14:桃子 香蕉 菠萝 苹果
15:草莓 香蕉 菠萝 苹果
共有15种水果拼盘

其他

最大公约数递龟实现

#include<stdio.h>

int Fun(int m , int n)
{
   int r;
   if((r = m % n) == 0)
   {
   	return n;
   }
   else
   {
   	m = n;
   	n = r;
   	return Fun(m , n); 
   }
}

int main()
{
   int m = 18 , n = 12;
   int s = m * n;
   
   printf("最大公约数:%d\n最小公倍数:%d",Fun(m,n) , s / Fun(m , n));
}

最大公约数:6
最小公倍数:36

输出100以内的素数

//素数 

#include<stdio.h>

int main()
{
	int n=100,i,j;
	
	for(i=1; i<100; i++)
	{
		for(j=2; j<i; j++)
		{
			if(i%j == 0)
			{
				break;
			}
		}
		
		if(i == j)
		{
			printf("%d\t",i);
		}
	}
}

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
53 59 61 67 71 73 79 83 89 97

公约数穷举法 和 辗转相除法

#include<stdio.h>

int main()
{
	int m=36,n=12,i;
	
	for(i=n; i>=1; i--)
	{
		if(m%i==0&&n%i==0)
			break;
	}
	
	printf("最大公约数是%d\n最小公倍数是%d\n",i,m*n/i);
}

最大公约数是12
最小公倍数是36

方法2:辗转相除法
辗转相除法终止条件是 余数=0!!!!!!!!!!!!

除数是最小公约数!!!!!!!!!在这里插入图片描述

#include<stdio.h>

int main()
{
	int m=12,n=36,r;
	
	int s=m*n;
	
	while(r=m%n)
	{
		m=n;
		n=r;
	}
	
	printf("最大公约数是%d\n最小公倍数是%d\n",n,s/n);
}

最大公约数是12
最小公倍数是36

复习函数指针 + 质因数分解

#include<stdio.h>

void nb(int n)
{
	int i;
	
	printf("%d = ",n);
	for(i=2; n!=i ;i++)
	{
		if(n % i == 0)
		{
			printf("%d * ", i );
			n /= i;
			i--;
		}
	}
	
	printf("%d\n",n);
	
	
}

int main()
{
	//定义方法1: 先定义后赋值 
//	void (*p)(int p);	 //等价 void (*p)(int);	 void (*p)(int abc); //不检查形参变量名是否一致 
//	p = nb;	//等价 p = &nb;
	
	//定义方法2:定义同时赋值 
	void (*p)(int p) = nb;
	
	
	for(int n=10; n<=20; n++)
	{
		(*p)(n);
	}
}

10 = 2 * 5
11 = 11
12 = 2 * 2 * 3
13 = 13
14 = 2 * 7
15 = 3 * 5
16 = 2 * 2 * 2 * 2
17 = 17
18 = 2 * 3 * 3
19 = 19
20 = 2 * 2 * 5

一元二次方程求根

/*
	1.两根不相等,两根相等,虚根
*/ 
#include<stdio.h>
#include<math.h>

int main()
{
	int s=0;
	
	int a,b,c,x1,x2,t;
	scanf("%d%d%d",&a,&b,&c);
	
	t = b*b-4*a*c; 
	if(t < 0 )
	{
		t = abs(t);
		printf("根为:x = %d ± %di\n",-b/2/a , (int)sqrt(t)/ (2*a));
		//由于输出格式%d,sqrt()的返回值是double,所以需要强制类型转换,
		//才可输出正确结果	
	}	
	else if(t > 0)
	{	
		x1 = (-b + sqrt(t)) / (2*a);
		x2 = (-b - sqrt(t)) / (2*a);
		printf("根为:x1 = %d\nx2 = %d\n",x1,x2);
	}
	else
	{
		x1 = -b / 2 / a;
		printf("根为:x1 = x2 = %d\n",x1);
	 } 
}

1987年,国际C语言混乱代码大赛

发表时间:2022年3月27日 B站ROCK直播
看到的各位,别报这家机构了,听我一句劝~~~

#include<stdio.h>
#include<stdbool.h>

int main()
{
	printf(&true["\021%sck\012\0"], true["have"] + "fro" - 0x60);
	

	
	//第一层
	//背景:历史背景
	//1987年,国际C语言混乱代码大赛,获奖作品
	
	//第一层 (宏定义)
	printf("true = %d\n",true);
	
	//第二层
	printf("%s\n","fro"+1); 
	//const char *p = "fro";
	//printf("%s\n" , p+1);
	
	//第三层
	printf("%c\n","have"[1]);
	//const char * p = "hava";
	//printf("%c\n",p[1]);
	//printf("%c\n ,*(p+1);
	
	//第四层 
	printf("%d\n",(1)["hava"]);	//97
	//(1)["hava"] 等价于 "hava"[1] 
	
	//第五层 
	printf("%d\n",(1)["hava"] - 0x60); //1 0x60:96
	
	//第六层 
	printf("%s\n","fro" + (1)["have"] - 0x60);
	 
	//第七层
	printf("%s\n","fro" + true["have"] - 0x60);	//带不带()编译器都能识别 
	
	//第八层
	printf("%s\n",&"abcde"[1]); //bcde
	//在字符串中,任意一个字符的地址,就是一个"子串"
	
	//第九层
	printf("%s\n",&true["abcde"]); 
	
	//第十层
	printf("%s\n",&"?%sck\n"[1]); //%sck\n
	
	//第十一层
	printf("%s\n",&"\021%sck\012\0"[1]);	//%sck\n
	
	//第十二层 
	//冲! 
	
	//第十三层 
	printf(&true["\021%sck\012\0"], true["have"] + "fro" - 0x60);
	//		"%sck\n", "ro"
	//rock! 

	return 0;
}

rock
true = 1
ro
a
97
1
ro
ro
bcde
bcde
%sck
%sck
rock

可变参数:实现多个整数的和,但是参数的个数不确定

//可变参数函数
//题目:定义一个函数,实现多个整数的和,但是参数的个数不确定


/*应用于:
	1.某些场合下,参数的个数不确定
	2.【主要场合】命令行工具的解析 
	在嵌入式/物联网中有着广泛的使用 
*/ 
#include<stdio.h>
#include<stdarg.h>

int add(int n , ...)	//...表示可变参数 
{
	int sum = 0;
	//可变参数使用,第一步
	va_list arglist;	//定义一个变量,表示参数列表
	//va list实际是一个指针,指向arglist 
	
	//可变参数使用,第2不
	va_start(arglist , n); 
	for(int i=0; i<n; i++)
	{
		sum += va_arg(arglist , int);
	}
	va_end(arglist);
	
	return sum;
 } 
 
 int main()
 {
 	int x = add(9, 1,2,3,4,5,6,7,8,9);
 	printf("sum = %d\n" , x);	//45
 }
 

输入一个正整数,以相反的顺序输出该数。 1234 → 4321

方法1:

//逆序输出数字
#include<stdio.h>

int main()
{
	int n = 1234;
	int i,s=0;
	
	while(n)
	{
		s = s * 10 + n % 10;
		n /= 10;
	}
	
	printf("%d",s);
	
 } 

4321

方法二:一位一位数字输出

#include<stdio.h>

int main()
{
	int n = 1234;
	
	do
	{
		printf("%d",n%10);
	}while(n/=10);
	
 } 

从键盘输入一个正整数,求出各位数字之和,各位数字之积,并输出。

#include<stdio.h>

int main()
{
	int n = 1234;
	int i , s = 0 , mul = 1;
	
	while(n)
	{
		s += n % 10;
		mul *= n % 10;
		n /= 10;
	}
	
	printf("sum:%d\nmul:%d",s,mul);
	
 } 

sum:10
mul:24

​数字累加 规律题

这种题在纸上先写写画画,找到规律后就好办了。

1-22+333-4444+……+999999999
方法1:简单

#include<stdio.h>

int main()
{
	int i,j=0,t=0,s=0;
	int flag=1;	//正负号变量 
	
	for(i=1;i<=9;i++)
	{
		t = (t+j) * 10 + i;
		j = j * 10 + 1;
		s += t * flag;
		printf("%d\n",t*flag);
		flag = -flag;
	}
	
	printf("\n\nsum=%d",s);
}

1
-22
333
-4444
55555
-666666
7777777
-88888888
999999999
sum=918273645

方法2:两个循环

#include<stdio.h>

int main()
{
	int i,j,t,s=0;
	int flag=1;	//正负号变量
	
	for(i=1; i<=9; i++)
	{
		t = 0;
		
		for(j=1; j<=i; j++)
		{
			t = t * 10 + i;
		}
		
		printf("%d\n",t*flag);
		s += t*flag;
		flag = -flag;
	 }
	 
	 printf("\n\nsum=%d",s);
	
}

1
-22
333
-4444
55555
-666666
7777777
-88888888
999999999
sum=918273645

二分查找法

#include<stdio.h>

int main()
{
	int a[10]={1,2,3,4,5,6,7,8,9,10};
	int l = 0 , r = 10 - 1 , mid;
	int n;
	printf("请输入要查找的数:");
	scanf("%d",&n);
	
	while(l<=r)
	{
		mid = l + (r - l) / 2;	//据说防溢出,不咋懂 
		if(a[mid] < n)
		{
			l = mid+1;
		}
		else if(a[mid] > n)
		{
			r = mid-1;
		}
		else if(a[mid] == n)
		{
			break;
		}
	}
	
	printf("数%d的下标是:%d",n,mid);
}

请输入要查找的数:5
数5的下标是:4

牛顿迭代法

在这里插入图片描述

#include<stdio.h>
#include<math.h>
#define eps 1e-6

int main()
{
	float x1,x0,f,f1;
	x1 = 1.0;
	do
	{
		x0 = x1;
		f = ((2 * x0 - 4) * x0 + 3) * x0 - 6;	
		f1 = (6 * x0 - 8) * x0 + 3;
		x1 = x0 - f / f1;
	}while(fabs(x1 - x0) > eps);
	
	printf("%6.2f",x1);	
	return 0;
} 

2.00

递归的初级中级高级应用

初级 - 斐波那切数列
int fib(int n)
{
	if(n <= 2)
	{
		return 1;
	}
	else
	{
		return fib(n-1) + fib(n-2);
	}
 } 
 
int main()
{
	for(int i=1; i <= 10; i++)
	{
		printf("%d\t",fib(i));
	}
}


1 1 2 3 5 8 13 21 34 55

中级 - 汉诺塔

void hnt(int n,
		 const char *start , //起始柱 
		 const char *mid ,	//中间柱 
		 const char *dest)	//目标柱
{
	if(n == 1 )
	{
		printf("从%s移动到%s\n",start , dest);
		return ;
	} 
	else
	{
		hnt(n-1 , start , dest , mid); //中间柱变成了目标柱 
		printf("从%s移动到%s\n",start,dest);
		hnt(n-1 , mid , dest , start);
	}
}

int main()
{
	hnt(3, "A柱","B柱","C柱");
	return 0;
} 

从A柱移动到C柱
从A柱移动到B柱
从C柱移动到A柱
从A柱移动到C柱
从B柱移动到C柱
从B柱移动到A柱
从C柱移动到B柱

高级 - 排列组合

//高级应用 - 
//对于指定的数字,请列出所有的排列组合
//例如:3的排列组合
// 1 2 3 、 1 3 2 、2 1 3 、 2 3 1 、 3 1 2 、 3 2 1
#include<stdio.h>
#define N 3		//可以改变数值 

int used[N] = {0};	//0:未被使用 1:已经使用 
int data[N] = {0};	//用来存放我们使用的数字
 
void work(int i)	//i表示已经放入了i个数据 
{
	for(int j = 0; j < N; j++)	//对所有的数字搜索一遍 
	{
		//取出一个可以使用的数字 
		if(used[j] == 0)	// = 0:数字j还未被使用 
		{
			//...马上使用数字j 
			data[i] = j;	//
			//修改标记
			used[j] = 1;
			
			if(i == N-1)	//塞满了就打印 
			{
				for(int k=0; k<N; k++)
				{
					printf("%d ",data[k]+1);
				}
				putchar('\n'); 
			}
			else	//没塞满就继续塞 
			{
				work(i + 1);
			}
			
			//清理现场 
			used[j] = 0;
			 
		} 
		 
	}	
 } 
 
 int main()
 {
 	work(0);
 }

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

数组名作为形参时,可以数组名++

#include<stdio.h>

int func(int a[5],int n)
{
	a++;	//正常执行 
}
int main()
{
	int a[5] = {1,2,3,4,5};
	//a++;	//报错 
	 
	func(a,5);
	printf("%d",0Xffa);
}

原因是:
数组名作为实参,值传递首元素地址;
因数组名作为形参,会转换为指针,指向实参中数组首元素地址,因此形参必须是一个存储地址值的变量,即指针变量。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【最通用版FPGA 实现 SPI 驱动】

最近研究了一下SPI协议的FPGA实现&#xff0c;发现网上很多大佬分享的方法都是针对某一特定的flash芯片或者某一传感器芯片来设计电路结构的。所以想根据SPI&#xff08;Serial Peripheral Interface&#xff09;的基本通讯协议实现一个通用版的SPI Master驱动。SPI在嵌入式领域…

每天一点python——day84

#每天一点Python——84 #异常处理机制try—except—else #异常处理机制try—except—else如果try块中没有抛出异常&#xff0c;则执行else块&#xff0c;如果try中抛出异常&#xff0c;则执行except块#示例&#xff1a; try:a int(input(请输入第一个整数&#xff1a;))b in…

controller能接收到数据有数据但是前端无法显示数据

又是制作系统时遇到的问题。只是想做个查询商品的页面&#xff0c;结果弄了一天&#xff0c;在网上各种查问题&#xff0c;各种解决办法用在我的代码上&#xff0c;换了无数种关键词搜索终于找到了一条成功解决了问题。 问题描述&#xff1a; 事情是这样的&#xff1a;我要写一…

无代码集成航天信息:优化电商平台用户运营,提高CRM和广告推广的效能

无代码开发的集成优势 在数字化竞争愈发激烈的商业市场中&#xff0c;企业对于提高效率和优化用户运营的需求不断增长。无代码开发的集成解决方案&#xff0c;如航天信息电子发票&#xff0c;为企业提供了无需深入编程知识即可快速实现的系统对接能力。这种集成方式简化了技术…

没了解死锁怎么能行?进来看看,一文带你拿下死锁产生的原因、死锁的解决方案。

&#x1f308;&#x1f308;&#x1f308;今天给大家分享的是死锁产生的原因&#xff0c;以及如何解决死锁问题。 清风的CSDN博客 &#x1f6e9;️&#x1f6e9;️&#x1f6e9;️希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xff0c;大家一起…

Hdoop学习笔记(HDP)-Part.09 安装OpenLDAP

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

[蓝桥杯 2019 省 B] 特别数的和-C语言的解法

小明对数位中含有 2、0、1、9 的数字很感兴趣&#xff08;不包括前导 0&#xff09;&#xff0c;在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40&#xff0c;共 28 个&#xff0c;他们的和是 574。 请问&#xff0c;在 1 到 n 中&#xff0c;所有这样的数的和是多少&…

JavaScript编程基础 – For循环

JavaScript编程基础 – For循环 JavaScript Programming Essentials – For Loop By JacksonML 循环可以多次执行代码块&#xff0c;而不用反复重写相同的语句。这无疑对提升代码质量、减少错误大有脾益。本文将简要介绍for循环的几种案例&#xff0c;希望对读者有所帮助。 …

笔记本电脑关闭触摸板

大部分人用笔记本 其实都是外接的鼠标 那么在打游戏 以及一些切图操作中 为了防止碰到触摸板导致误操作 我们就可以将他关掉 我们可以按快捷键 Win i 或者 点击桌面 此电脑/我的电脑/此计算机 打开设置界面 如果 左侧菜单中有设备 那么 直接点击设备 然后左侧菜单就会有 触摸…

阿里系列-淘宝接口抓取及相关问题

阿里系-淘宝接口抓取 一、安装charlse抓包工具 官方下载地址 安装证书 二、安装xposed hook框架 Xponsed简介 具体安装步骤 三、安装模块 关闭阿里系ssl验证 开启http模式 支持支付宝、淘宝、淘宝直播各个接口抓取 四、效果如下 接下去一段时间更新阿里系相关接口 文章目录 一、…

TA-Lib学习研究笔记(二)——Overlap Studies上

TA-Lib学习研究笔记&#xff08;二&#xff09;——Overlap Studies 1. Overlap Studies 指标 [BBANDS, DEMA, EMA, HT_TRENDLINE, KAMA, MA, MAMA, MAVP, MIDPOINT, MIDPRICE, SAR, SAREXT, SMA, T3, TEMA, TRIMA, WMA]2.数据准备 get_data函数参数&#xff08;代码&#x…

文心一言 VS 讯飞星火 VS chatgpt (148)-- 算法导论12.2 3题

三、用go语言&#xff0c;写出过程 TREE-PREDECESSOR 的伪代码。 文心一言&#xff1a; 以下是使用Go语言编写的TREE-PREDECESSOR函数的伪代码&#xff1a; func TREE-PREDECESSOR(node) { if node.parent ! nil { return node.parent } // 如果节点是根节点&#xff0c…

有点迷糊class和初始化参数的用法了

翻阅手册https://www.runoob.com/python3/python3-class.html Python从设计之初就已经是一门面向对象的语言&#xff0c;正因为如此&#xff0c;在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。 如果你以前没有接触过面向对象的编程语言&…

洛谷 P1998 阶乘之和 C++代码

前言 今天我们来做洛谷上的一道题目。 网址&#xff1a;[NOIP1998 普及组] 阶乘之和 - 洛谷 西江月夜行黄沙道中 【宋】 辛弃疾 明月别枝惊鹊&#xff0c;清风半夜鸣蝉。稻花香里说丰年&#xff0c;听取WA声一片。 七八个星天外&#xff0c;两三点雨山前。旧时茅店社林边&…

『亚马逊云科技产品测评』活动征文|基于亚马逊云EC2搭建OA系统

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 亚马逊EC2云服务器&#xff08;Elastic Compute Cloud&#xff09;是亚马…

Verilog 入门(九)(建模实例)

文章目录 建模的不同方式条件操作建模通用移位寄存器状态机建模Moore 有限状态机建模Mealy 型有限状态机建模 建模的不同方式 分别使用数据流方式、行为方式和结构方式对下图所示的电路进行建模&#xff1a; 数据流方式&#xff1a;使用连续赋值语句对电路建模 module Save_M…

【ArcGIS Pro微课1000例】0043:深度学习--框架库安装

ArcGIS Pro 中的所有深度学习地理处理工具都要求安装支持的深度学习框架库。 文章目录 深度学习框架库下载深度学习框架库安装注意事项深度学习框架库下载 由于是python开发,可以采用安装包与Pip两种方式安装,本文讲解采用安装包安装。 点击深度学习框架库下载,打开网站,…

二叉树链式结构的实现和二叉树的遍历以及判断完全二叉树

二叉树的实现 定义结构体 我们首先定义一个结构来存放二叉树的节点 结构体里分别存放左子节点和右子节点以及节点存放的数据 typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right; }BTNode;…

【数电笔记】20-有约束的逻辑函数化简

目录 说明&#xff1a; 约束项和约束条件 1. 引例 1.1 引例中的约束项 1.2 引例中的约束条件 利用约束项 / 约束条件化简逻辑函数 1. 例1 2. 例2 3. 例3 4. 例4 说明&#xff1a; 笔记配套视频来源&#xff1a;B站&#xff1b;本系列笔记并未记录所有章节&#xff0…

HTTPS安全防窃听、防冒充、防篡改三大机制原理

前言 本文内容主要对以下两篇文章内容整理过滤&#xff0c;用最直观的角度了解到HTTPS的保护机制&#xff0c;当然啦&#xff0c;如果想要深入了解HTTPS&#xff0c;本文是远远不够的&#xff0c;可以针对以下第一个链接中的文章拓展板块进行学习&#xff0c;希望大家通过本文能…