自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 收藏
  • 关注

原创 C语言| 数组的折半查找

3 此时a[2]=87,而key > a[2]=87,说明256在87的右边,则往右边查找。high = mid-1 = 2, 更新mid =(low+high)/2=1。low = mid+1, 更新mid=(low+high)/2,high不变。high = mid-1,更新mid=(low+high)/2,low不变。low = mid+1 =2, 更新mid =(low+high)/2=2。low = mid+1=4, 更新mid=(low+high)/2=5;

2024-06-22 16:35:45 1499

原创 JSP技术实现用户登录

一、实验目的:1. 掌握JSP语法;2. 了解JSP生命周期;3. 掌握JSP请求转发和包含。二、实验内容:1. 创建login.jsp页面,其有用户名,密码及对应的文本框;2. 创建ControlLogin.java类,验证用户名和密码是否正确,如果用户名等于自己的学号,密码等于123456,则跳转到index.jsp页面,并显示欢迎用户名您好,否则显示登录失败。三、软硬件环境:jdk1.8,t...

2018-05-26 18:23:25 12208 3

原创 C语言| 只读变量const

数组的长度不能是变量,在C语言中不能使用const 定义的变量作为数组的长度,但是在C++中可以使用,因为C++拓展了const的含义。如果p 存放的是指向的内存单元的地址,这个地址可变,就是说p的指向可变,但指向谁,谁的内容就不可变。其他指向a的没有用const修饰的指针变量照样可以修改a的值,而且变量a自己也可以修改自己的值。*p 表示的是指针变量p 所指向的内存单元里面的内容,此时这个内容不可变,其他的都可变。此时const修饰的是p,所以p 中存放的内存单元的地址不可变,而内存单元中的内容可变。

2025-05-28 16:27:00 543

原创 C语言| 函数参数传递指针

如果要改变指针变量里面存放的地址,需要改变指针变量的指向,就必须要传递指针变量的地址。举例 int i;//如果想传递 i 的地址,直接传递&i 就行。1 普通变量,传递它的地址,可以直接操作该变量的内存空间。数组名本身就是地址,所以传递数组的话,直接传递数组名就行。2 指针变量, 指针变量本身就是地址,直接传过去就行。只要函数的参数不满足上面的条件,全部使用指针传递。1 数据很小,比如4字节的 int 型变量。2 单纯使用它的值,不需要改变。

2025-05-28 10:48:15 179

原创 C语言| 拷贝传递(指针控制内存单元)

所以虽然将i和j的值传给了a和b,交换的只是a和b内存单元的数据,对i和j没有任何影响。printf("调用函数之后 i = %d, j = %d\n", i, j);不管如何改变内存B中的值,对内存A中的值都没有任何影响,因为它们两个是不同的内存空间。因为实参和形参之间的传递是单向的,只能由实参向形参传递。而p和q存放的是i和j的地址,可以进行拷贝传递。&i传递给p, &j传递给q。【拷贝传递】将内存A中的值拷贝到内存B中。此时实参向形参传递的是变量i和j的地址。被调函数调用完,释放p和q的内存单元,

2025-05-26 16:54:38 302

原创 C语言| 指针变量的初始化

i. 把变量a的地址,放到了指针变量b中,通过a的地址,指针变量b就能找到a的数据,所以指针变量b就指向了变量a。//给指针变量初始化,当b指向a之后,*b 就完全等同于 a了,可以相互替换。//b里面存储的是变量a的地址。//b里面存储的是变量c的地址。//定义指针变量时,*b只是一个声明,没有其他含义。指针变量b是a的地址,b是。//*b 表示定义了一个指针变量b。,而a是变量a里面的数据,a是。

2025-05-20 14:39:03 775

原创 C语言| 指针变量的定义

/如果两个指针变量相减,相差4个地址,就是1个int 元素,结果就是1。iii. 变量a的数据类型是[ int * ]型,是存放int变量地址的类型,int称为基类型。两个指针变量相减的结果,是一个常量,是这两个地址之间元素的个数,而不是地址的个数。//表示指针变量i里面存放的地址,所指向的存储单元里的【数据】。2) “基类型”,用来指定该指针变量,可以指向的变量的类型。表示指针变量里面所存放的“变量的地址”,所指向的变量的类型。[指针变量的内容]:指针变量里面存放的另一个变量的地址。

2025-05-17 20:24:48 392

原创 C语言| 指针的优点

存储数据可以用数组表示,在数据结构中,可以通过链表、树、图来存储。一个函数只能执行一个return语句,最多只能返回一个值。7 必须理解指针,猜明白“下标”的用法,明白数组是连续的。2 指针能够高效、快速地传递数据。5 指针能够指向字符串,对字符串的处理更加灵活。指针是C语言的第二个重点,耐心去学,可以掌握。4 指针能够直接访问硬件,可以直接操作地址。6 指针是理解面向对象语言中“引用”的基础。1 用指针可以表示一些复杂的数据结构。3 通过指针可以让一个函数返回多个值。

2025-05-14 15:28:53 124

原创 C语言|关于函数这件小事

--- 释放A所占的空间 ---- 把L的值返回主调函数。函数是C语言的模块,有较强的独立性,可以相互调用。函数是一系列C语句的集合,能完成某个特定的功能。一个函数可以有多个return语句,执行到哪个return语句,哪个return语句才起作用。主函数不允许被其他函数调用,其他函数之间,允许相互调用、嵌套调用、自己调用自己(递归调用)。1 和变量命名规则一样,都是字母、数字、下划线的组合,而且不能以数字开头,通常以字母开头。编写函数的功能,有自定义的函数名称,函数返回值,形参及其类型、函数体等。

2025-05-14 14:43:56 373

原创 C语言| extern的用法&作用

全局变量的使用范围,只在定义处到文件结束。在引用前使用关键字extern对该变量进行“外部变量声明”,即 extern int a;因为函数默认为extern,但是实际编程中,会单独把函数声明写在一个.h头文件中,然后在要调用该函数的文件中,使用#include 包含该头文件即可。ii 如果是引用其他文件中的函数,直接把对函数的声明拷贝过来,就可以使用了。同一个.c文件中,对同一个函数进行多次声明也是允许的,但起作用的只有一个。Q:如果要在一个文件中,引用另一个文件中定义的全局变量,该怎么做?

2025-05-13 17:02:36 270

原创 C语言| 静态局部变量

静态局部变量能不用就尽量不用。static修饰过的局部变量==静态局部变量,它就会存储在静态存储区了,未初始化,系统自动将其初始化为0。2 定义成static型的变量是存放在静态存储区中的,在程序的整个运行过程中都不会释放。ii 相当于全局变量,是因为它们都存放在静态存储区中,所以它们都一直存在程序运行的整个过程中。ii 使用static修饰,即使其他文件使用extern,对它进行声明,也不能使用它。x定义的是静态局部变量,每次调用结束后,都不会释放。所以,每次调用结果,x的值都有变化,相当于全局变量。

2025-05-13 14:19:23 415

原创 C语言| 局部变量、全局变量

寄存器] 在CPU内部存储数据的区域,是CPU的组成部分,用来暂时存放参与运算的数据和运算结果。4 在同一个程序中,全局变量和局部变量同名,会导致在局部变量的作用范围内,全局变量失效。在程序设计中,划分模块要求模块的功能单一,对其他模块的影响要尽量小。在一个函数中,可以使用本函数的局部变量,可以使用有效的全局变量。[局部变量]定义在函数内部的变量,只在本函数内有效。[注] 全局变量和局部变量的名字,不能设置一样的!所以根据定义位置的不同,全局变量的作用范围不同。所以,不同函数中,可以定义同名的局部变量。

2025-05-12 16:51:26 239

原创 C语言| sizeof(array)占多少字节

被调函数Array_Sum()中,数组array使用sizeof会得到多少?此时被调函数Array_Sum()中的数组array,本质上是一个指针变量,int Array_Sum(int array[]);实参数组a占32字节,实参a传给形参array,只占4字节。数组名做函数参数时,只是将实参数组的首地址,传给了形参数组。sizeof(array),指针变量非常重要!在C语言中,指针变量所占的字节数都是4。可以求出整个数组在内存中所占的字节数。里面存放的是主调函数中数组a的地址。sizeof(数组名);

2025-05-09 16:00:17 347

原创 C语言| 数组名作为函数参数

printf("数组中各个元素之和 sum = %d\n", Array_Sum(a, size));int Array_Sum(int array[], int n) //形参数组不需要写长度。(因为数组是连续存放的,只要知道数组的首地址和数组的长度,[实际参数]主调函数,调用其他函数另设的参数,简称实参。数组的首地址+数组的长度,可以唯一地确定一个一维数组。(系统在编译时,只检查数组名,不会检查数组的长度。1 数组名作为函数的实参,形参定义相应的数组,2 再定义一个参数,用来传递数组的长度。

2025-05-09 15:39:34 399

原创 C语言| 递归求两个数的最大公约数

3 如果余数不为0,则用较小的数除以上一步计算出的余数,直到余数为0。此时,上一步的余数即为这两个数的最大公约数。printf("m=%d,n=%d,它们的最大公约数为%d\n", m, n, ZDGYS(m,n));2 用较大的数除以较小的数,如果余数为0,则较小的数即为这两个数的最大公约数。数学上求解两个数的最大公约数有多种方法,包括辗转相除法、相减法、穷举法等。1 取两个数中较大的数作为除数,较小的数作为被除数。printf("请输入m,n的值:");

2025-05-07 14:49:43 440

原创 C语言| 递归实现斐波那契数列

斐波那契数列又称黄金分割数列:0, 1, 1, 2, 3, 5, 8, 13,printf("第n项的值为:%1d\n", FBNQSL(n));主函数,通过键盘输入任意值,调用FBNQSL()函数,得到第n项的结果。定义一个FBNQSL()函数,直接输出“斐波那契数列”第n项的值。2 if条件有4个,n<0;printf("请输入n的值:");1 使用if结构语句,把n的情况列清楚。【输出“斐波那契数列”第n项的值。[FBNQSL()函数]

2025-05-06 16:59:52 457

原创 C语言| 递归和循环的优缺点

递归一次就要压栈一次,就要申请一次栈的空间,最后得到最小事件的值,还要逐个出栈,释放内存空间。不到万不得已不建议使用递归算法,费时又费空间。递归的优点:简化程序设计,结构简洁清晰,容易编程,可读性强,容易理解。递归能把复杂问题,分解为更简单的步骤,反应出问题的本质。递归的缺点:速度慢,运行效率低,对存储空间的占用比较多。【递归思想】从上到下逐层分解,从下到上逐层合并。循环的缺点:不易理解,遇到复杂问题编写困难。循环的优点:速度快、效率高、不浪费空间。

2025-05-06 16:38:36 168

原创 C语言| 递归求1+2+...+100的和

定义变量,通过键盘输入任意值,调用SUM()函数求和。2 if条件有3个,n<=0;printf("请输入n的值:");定义一个求和函数SUM(),主函数直接调用。【递归求1+2+3+...+100的和】1 使用了if结构,把n的情况列出来。

2025-05-06 16:14:02 362

原创 C语言|递归求n!

求到Factorial(4),把值返回给main()函数,释放Factorial(4)的内存空间,结束函数调用。4 为Factorial(1)分配栈的空间,调用Factorial(1)的结果是return 1,得到一个值。”,所以把Factorial(4)压入栈中,重新调用Factorial()函数。”,所以把Factorial(3)压入栈中,重新调用Factorial()函数。”,所以把Factorial(2)压入栈中,重新调用Factorial()函数。printf("请输入n的值(<=33):");

2025-05-06 15:20:44 289

原创 C语言|函数的递归调用

3 Function()函数,用if语句判断num大小,Function(num-1);2 main()函数,定义变量num,通过键盘输入数字,直接调用Function()函数。1 自定义Function函数,在程序开头放函数声明,主函数调用Function函数。自己调用自己,必须要知道什么时候停止调用,不然会造成电脑死机。printf("想输出几个不愧是小新少爷!printf("不愧是小新少爷!【程序功能】函数的递归调用。

2025-05-05 17:29:22 341

原创 C语言|判断是否为素数

2 库函数名都是小写,自定义函数名最好以大写字母开头,多个单词组成,每个单词的首字母全部大写,必要时用下划线间隔;1 和变量命名规则一样,都是字母、数字、下划线的组合,而且不能以数字开头,通常以字母开头。//执行到这步,该数不能被整除,说明它是素数。ii 大于2的数字,先判断是否为偶数(2之后的偶数一定不是素数)int Prime(int x) //Prime是素数的英文单词。1 输入一个数num,num

2025-01-15 17:16:55 480

原创 C语言| 求两个整数的最小值

/对Min函数的声明,x,y为形参。return (z);//返回z的值给主调函数使用。//函数体中的声明部分。//定义Min函数,x y 为形参。在VC++6.0中的输出结果为。//主函数,有且只有一个。

2025-01-15 16:46:56 312

原创 C语言| 函数声明、函数的返回值

ii (同一个文件中)被调函数的位置在主调函数的后面,在主调函数中,一定要把函数声明放在调用位置之前;(1)(库函数)必须在程序开头用#include命令引用某个库函数的头文件,才可以对它调用,无需再声明。一个函数可以有多个return语句,执行到哪个return语句,哪个return语句才起作用。把函数声明写在程序开头#include的下面,后续多个主调函数就可以不用声明了。返回值类型的被调函数,必须包含return语句,return后面要有返回值。i 被调函数在主调函数前面,无需函数声明;

2025-01-15 16:43:52 261

原创 C语言| 无参函数、有参函数、形参、实参

只有函数被调用,才会给形参分配内存空间,调用结束后释放形参的空间。3 实参可以是常量、变量、表达式,必须要有确定的数值,在调用其他函数时把实参的值赋给形参。ii 一般情况下,有参函数在执行被调函数时会得到一个值,并返回给主调函数使用。i 在执行被调函数时,形参的值并不会改变主调函数实参的值。主调函数main(),调用其他函数另设的参数,叫做实参。i 被调用时,主调函数通过参数向被调函数传递数据。i 被调用时,主调函数没有向被调函数传递数据。函数分两类:无参函数、有参函数。形参是自定义的函数使用的参数。

2025-01-15 16:40:46 282

原创 C语言| 二维数组的应用II

条件2 其他位置上的数字都是它“上面那个数字”和“左上那个数字”之和。if语句 条件1 (j==0) || (i==j),令数组元素等于1。int count;//给输出空格缩进时的计数。//只给数组赋值一半,条件为j<=i。2 用for循环给数组赋值,内嵌一个if语句赋值。3 用for循环输出数组,内嵌2个for循环输出。//空格进行缩进用for循环。选择性输出,只输出 i>=j 的元素。可以采取边赋值边输出的方式,优化程序。//用for循环给数组赋值。//用for循环输出数组。

2025-01-15 16:20:38 376

原创 C语言|二维数组的应用 I

2 其他位置上的数字都是它“上面那个数字”和“左上那个数字”之和。- 左对齐,3 是三个空格,加上后面的\x20就是四个空格。直角三角形的杨辉三角,用二维数组a[i][j]来存放。3 选择性输出,只输出 i>=j 的元素。4 数字之间的空格,放在printf里面。二维数组的应用:杨辉三角(直角三角形)1 j==0 和 i==j都是1。//用for循环给数组赋值。//用for循环输出数组。在VC++6.0中的输出结果为。

2025-01-15 15:30:08 323

原创 C语言| 二维数组的使用

2 举例 int a[3][3]={{11,22,33}, {44,55,66}, {77,88,99}};// 输出元素占3个空格。1 在计算机内存是一维的,在内存中先顺序存放第一行元素,再存放第二行元素,以此类推进行存储。数组元素只能一个一个的输出引用,二维数组要用2个for循环嵌套输出元素。ii a[0], a[1], a[2] 为一维数组的名字。2 把所有数据都写在一个{}里面,按数组的排列顺序赋初值{i 看作有3个元素,每个元素都是一个长度为3的一维数组。

2025-01-15 15:07:28 329

原创 C语言| 二维数组的定义

元素名字依次是:a[0][0],a[0][1],a[0][2];a[1][0],a[1][1],a[1][2]举例 int a[2][3];3 数组int a[m][n]最大范围处的元素是a[m-1][n-1].5 int a[2][3];a[1][2] 则对应一个具体的元素,下标指明它具体的位置。2 元素a[i][j]表示第i+1行、第j+1行元素。看作数组a中有2个元素,每个元素长度是3的一维数组,a[0]和a[1]分别是这2个一维数组的数组名。举例 int a[2][3];

2025-01-03 16:13:15 431

原创 C语言| 冒泡排序-从大到小-

每轮中第n次比较是新序列中第n个元素和第n+1个元素的比较(假如n从1开始)。4 for循环,一共比较n-1轮,每轮比较n-1-i次,所以内嵌一个for循环。内嵌的for循环,放置if语句,如果a[j]<a[j+1],互换这两个数。所以排序了多少次,就有多少数字已经按照排序规则排好了,它们不需要再比较了。//a[0]是int型,占4字节,所以总字节数除以4等于元素的个数。2 i比较的轮数 j每轮比较的次数 temp交换数据的中间变量。每次比较一轮,就会找到序列中最大的一个元素或者最小的元素。

2024-06-25 14:38:04 1365

原创 C语言| 数组元素的删除

/找到了要删除的元素位置,用b[i] = a[i+1];数组元素的删除,是先删除元素,再把后面的元素往前移动一位,而本程序代码是直接覆盖被删除元素的值。//数组下标从0开始,a[9]表示数组a长度为9,有9个元素为a[0]~a[8]数组元素的插入,是先移动要插入元素位置后面的所有元素,再插入新元素,长度+1。//循环变量i的值小于index时,数组元素原样输出。//设一个新数组,用来存放删除元素后。//要删除元素的下标。//用for循环,输出删除元素后的数组。

2024-06-23 17:29:47 1543 2

原创 C语言| 数组的插入

if数组的最大下标i < index,说明插入元素的位置在数组中不存在,系统随机分配一个垃圾值。else if 数组的最大下标i == index,说明把新元素插入到数组最后面,无需移动位置。else 数组最大下标i > index,说明要把插入新元素位置后面的每一个元素往后移动一位,//用来存放插入数字后的新数组,因为插入一个数,长度为10。1 定义数组a,数组b存放插入元素后的数组,下标index 值num 循环变量i。printf("请输入插入值的下标:");//for循环,输出插入元素后的新数组。

2024-06-23 17:09:25 1681

原创 C语言| 数组的顺序查找

/求出数组中所有元素的个数。printf("下标 = %d\n", i);1 定义变量 数组a,n表示数组的个数, m要查找的数字。查找数组a中第一次出现数字m的下标,并输出该下标;5 遍历完整个数组,都没有找到m,输出sorry。//存放数组a中元素的个数。2 用sizeof()函数,求出数组元素的个数。printf("请输入一个数字:");3 从键盘中任意输出一个数字m,进行查找。如果没有则输出sorry。找到了m,输出其下标。

2024-06-22 14:21:01 564

原创 C语言| 数组倒置II

printf("数组倒置后的结果为a[%d] = %d\n", i, a[i]);printf("数组倒置后为a[%d] = %d\n", i, a[i]);printf("数组a[%d] = %d\n", i, a[i]);//循环变量2, j的值表示数组的最后一个元素下标。//循环变量,i表示数组下标,从0开始。// 表示数组的第一个元素的下标。//表示数组的最后元素一个下标。//数组元素的输出需要for循环。数组元素个数为奇数,最中间的元素不变。//数组倒置,互换算法。//输出倒置后的数组。

2024-06-22 13:42:05 569

原创 C语言| 数组倒置算法

printf("数组a[%d]倒置后为%d\n", i, b[j]);printf("数组a倒置后为%d\n", b[i]);2 用for循环,把数组a的最后一个数,赋值给数组b第一个元素。printf("请输入10个整数,给数组初始化:");//把数组a最后一个元素,赋值给数组b第一个元素。1 定义两个数组a[5] b[5],两个循环变量i j。//从键盘给数组赋值初始化,用for循环。

2024-06-22 13:03:20 547

原创 C语言| 宏定义

这是固定格式,一般放在#include <stdio.h>后面,标识符是临时的符号,预处理之后就不存在了。//scanf中,double只能用%lf。宏所表示的常量可以是数字、字符、字符串、表达式。其中最常用的是数字。宏定义最大的好处是方便修改常量,标识符一般都是用大写字母表示。放在哪个位置,就表示前面宏定义的常量到此结束,不能再引用了。#undef 后面的标识符和宏定义的标识符是一样的。printf("请输入%d个数:", j);printf("请输入圆的半径:");

2024-06-22 12:32:55 314

原创 C语言|十进制数转换任意进制数

/得到下一次除2取余的数,直到m=0退出循环结束。//因为除2取余,最后要把结果倒过来才是二进制数,所以从后往前输出。//除2得到的余数,放到数组a中。就是m不断地除以2,写下每一次除完的余数,能整除就是0,不能就是1。2 for循环,把余数从后往前输入,输出数组a[i],得到二进制数。printf("您想将输入的十进制数转换成几进制:");1 定义一个数组a[100],先归0,再存放运算过程中的余数。//又因为i最后多加了一次,所以从i-1开始。1 while循环,表示十进制除2取余数的过程,

2024-06-14 16:32:09 776

原创 C语言| 找出数组里最小数,并指出位置

/因为跟个数有关,所以是cnt。4 假设第一个数a[0]为最小数,再用for循环,一个个对比判断得到最小数。printf("请输入%d个整数,以空格隔开:", cnt);//min 初始化为第一个元素。1 键盘输入n个整数,需要变量cnt来计算个数,数组存放数字。//存储最小数的下标。实现输入n个整数,输出其中最小的数,并指出它是第几个数。//存储输入数的个数。printf("您想输入几个数:");//数组初始化,给数组赋值用for循环。//从第二个元素开始比较。

2024-06-14 15:28:56 1813

原创 C语言| 编程获取数组的长度

这样不管数组是增加还是减少元素,sizeof(a) /sizeof(a[0])都能自动求出数组的长度。printf("数组b的长度cnt = %d\n", cnt);字符串中有一个strlen()函数可以求出字符数组中字符串的长度。用sizeof也可以获得整个数组在内存中所占的字节数。总的字节数除以一个元素所占的字节数就是数组的总长度。

2024-06-13 16:46:24 606

原创 C语言| 把数组a赋给数组b

正确的写法是用for循环,将数组a中的元素一个一个赋给数组b的元素。把数组a赋给数组b,

2024-06-13 16:28:40 1778

原创 C语言| 数组

printf("请输入5个整数:");数组的下标从0开始,下标又表示数组的长度。直接定义一个数组,并给所有元素赋值。在VC++6.0中的输出结果为。需要通过键盘给数组赋值。

2024-06-13 16:04:55 373

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除