自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 将10个整数按由小到大的顺序排列

在调用此函数时,通过虚实结合,将主函数中的数组a的首元素地址传递给形参p,因此p就指向数组a的首元素。在select_sort函数中通过对指针变量p的操作,可以访问a数组的各元素,例如*(p+1)就是a[1],*(p+j)就是a[j],*(p+k)就是a[k],*(p+i)就是a[i]。用户可以认为有一个形参数组,它从实参数组那里得到起始地址,因此形参数组与实参数组共占同一段内存单元,在调用函数期间,如果改变了形参数组的值,也就是改变了实参数组的值,在主调函数中可以利用这些已改变的实参数组的值。

2024-06-07 15:20:45 414

原创 输出有10个元素的整型数组各元素的值

数组a最后一个有效的元素是a[9],现在要求输出a[10],但C++编译系统并不把它认作非法。系统按p+10xd计算出要访问单元的地址,这显然是a[9]后面一个单元的地址,然后输出这个单元中的内容。C++编译系统是将a[i]转换为*(a+1)处理的,对每个a[i]都分别计算地址a+ixd,然后访问该元素。第(3)种方法比方法(1)、(2)快,用指针变量直接指向元素,不必每次都重新计算地址,像p++这样的自加操作是比较快的。//要输出a[10]的值。将上面程序第7行和第10行的a[i]改为"*(a+i)"。

2024-06-06 15:25:07 302

原创 输入a,b,c3个整数,按由大到小的顺序输出

exchange函数的作用是使指针变量p1,p2,p3所指向的整型变量按由大到小的顺序交换它们的值。在执行exchange函数的过程中执行swap函数,以实现两个变量的值互换。在对函数exchange 和swap作原型声明时,在形参表中只写了数据类型(int *),而没有写形参名,这样看起来可能更清晰些。读者在看到数据类型"int *"时,应该很快地判定这是声明基类型为整型的指针变量。用3个指针变量指向3个整型变量,然后用swap函数来实现互换3个整型变量的值。

2024-06-05 10:00:39 569

原创 输入a和b两个整数,按先大后小的顺序输出a和b(用函数处理且用指针类型的数据作函数参数)

注意实参pointer_1和pointer_2是指针变量,在函数调用时,将实参变量的值传送给形参变量,而现在实参变量的值是地址,通过虚实结合,形参p1得到实参pointer_1的值&a,形参p2得到实参pointer_2的值&b。函数的调用可以(而且只可以)得到一个返回值(即函数值),而使用指针变量作函数参数,就可以通过指针变量改变主调函数中变量的值,相当于通过函数调用从被调用的函数中得到多个值。②编写被调用函数,其形参为n个指针变量,这些形参指针变量应当与主调函数中的n个指针变量具有相同的基类型。

2024-06-04 10:06:43 635

原创 输入a和b两个整数,按先大后小的顺序输出a和b(用指针变量处理)

变量a和b的内容并未交换,它们仍保持原值,但p1和p2的值改变了。p1的值原为&a(指向a),后来变成&b(指向b)。p2原值为&b(指向b),后来变成&a(指向a)。这样在输出*p1和*p2时,实际上是输出变量b和a的值,所以先输出78,然后输出45。使p1指向a和b中的大者,p2指向小者,顺序输出*p1,*p2就实现了按先大后小的顺序输出a和b。输入a的值45,b的值78,由于a<b,将p1的值和p2的值交换,即将p1的指向与p2的指向交换。

2024-06-03 12:21:13 530

原创 通过指针变量访问整型变量

此时 pointer_1的值为&a(即a的地址),pointer_2的值为&b。"&"和"*"两个运算符的优先级别相同,但按自右而左方向结合,因此先进行*pointer_1的运算,它就是变量a,再执行&运算。先进行 &a 的运算,得a的地址,再进行*运算,即&a所指向的变量,*&a和*pointer_1的作用是一样的(假设已执行了"pointer_1 =&a;它的作用是将&a(a的地址)赋给 pointer_2,如果pointer_2原来指向b,经过重新赋值后它已不再指向b了,而也指向了a。

2024-06-02 12:56:32 538

原创 一个班有n个学生,需要把每个学生的简单材料(姓名和学号)输入计算机保存。然后可以通过输入某一学生的姓名查找其有关资料。

在search函数中将find_name和全班学生姓名逐个相比,如果其中有某一个学生的姓名与find_name的值相同,就表示找到了,输出该学生的姓名name[i]和学号num[i],并使布尔变量flag的值由false改变为true,然后用 break中止循环。在编写应用程序时,一定要考虑程序的使用者是谁,在大多数情况下,程序的使用者并不是程序设计者本人,而是对C++不熟悉,甚至对计算机不熟悉的人,因此程序设计者要设身处地为用户着想,使输入输出的界面对用户友好亲切。这是一个练习程序,所以简单一些。

2024-06-01 17:42:04 469

原创 输入3个字符串,要求将字母按由小到大顺序输出

对于将3个整数按由小到大顺序输出,是很容易处理的。可以按照同样的算法来处理将3个字符串按大小顺序输出。这个程序是很好理解的。在程序中对字符串变量用关系运算符进行比较,如同对数值型数据进行比较一样方便。

2024-05-31 12:40:09 320

原创 有3个国家名,要求找出按字母顺序排在最前面的国家。要求用函数调用

比较的结果"最小"的字符串就是按字母顺序排在最前面的字符串。用cin分别读入3个字符串。然后调用smallest_string函数,可得到"最小"的字符串,把它放在一维字符数组string中,在函数smallest_string中输出"最小"的字符串。现在实参country_name是3行30列的字符数组名,它代表二维数组中第1行的首地址,第2个实参的值为3,它是需要处理的字符串个数。本程序不仅可以处理国家名的比较,它是找"按字母排列在最前面"的字符串的通用程序,可以从多个字符串中找出"最小"的字符串。

2024-05-30 15:51:21 305

原创 设计和输出一个钻石图形

/错误,不能对整个数组整体赋值。//错误,不能对整个数组一次赋值。a[0]=b[0];//正确,引用数组元素。//正确,分别对数组元素赋值。

2024-05-29 10:25:29 560

原创 有一个3x4的矩阵,求矩阵中所有元素中的最大值。要求用函数处理

解此题的算法已在之前的文章中介绍,详见:https://mp.csdn.net/mp_blog/creation/editor/139181787编写程序:运行结果:

2024-05-28 09:55:35 558

原创 用选择法对数组中10个整数按由小到大排序

在执行 select_sort 函数中的for循环时,当i为0时,将array[0]与array[1]-array[9]比较,只要发现某一个数组元素array[j]的值大于array[0],就将它的下标j存放在变量k中,执行完内循环(j循环)后,k中存放的是array[1]-array[9]中最大数的下标,然后将该元素与array[0]对换。因此用数组名作函数实参时,不是把实参数组各元素的值传递给形参,而只是将实参数组首元素的地址传递给形参。形参可以是数组名,也可以是指针变量,它们用来接收实参传来的地址。

2024-05-27 13:55:23 736

原创 有一个3x4的矩阵,要求用函数编写程序求出其中值最大的那个元素,以及其所在的行号和列号

将a[i][j]作为函数max_value的实参,传给形参x,在函数max_value中将x(即a[i][j])与max进行比较,如果x>max,就使函数返回值为x,否则返回max的值。可以看到max_value函数的作用是将max和a[i][j]比较后将大者返回。在主函数中,将得到的函数返回值赋给max,如果该值等于a[i][j],表示a[i][j]大于原来的max,将a[i][j]的行号和列号保存下来。常量和变量可以用作函数实参,同样数组元素也可以作函数实参,其用法与变量相同。

2024-05-26 09:45:35 538

原创 有一个3x4的矩阵,要求编写程序求出其中值最大的那个元素,以及其所在的行号和列号

先考虑解此问题的思路。如果有若干人比武,先有一人站在台上,再上去一人与其交手,败者下台,胜者留在台上。第3个人再上台与在台上者比,同样是败者下台,胜者留在台上。如此比下去,直到所有人都上台比过为止,最后留在台上的就是胜者。程序模拟这个方法,开始时把a[0][0]的值赋给变量max,max就是开始时的擂主,然后让下一个元素与它比较,将二者中值大者保存在max中,然后再让下一个元素与新的max比,直到最后一个元素比完为止。数组中最大值为56,位置在0行3列,即a[0][3]的值是所有数中最大的。

2024-05-25 09:16:55 438

原创 将一个2x3的二维数组a的行和列元素互换,存到一个3x2的二维数组b中

编写程序:运行结果:

2024-05-24 18:12:24 241

原创 编写程序,用起泡法对10个数排序(由小到大)

若有6个数(8,9,5,4,2,0)。第1次比较第1个数和第2个数(8和9)的大小,如果第1个数大于第2个数,就把两个数位置交换,第2次将第2个数和第3个数(9和5)进行比较和交换……如此共进行5次,得到8,5,4,2,0,9的顺序。可以看到,最大的数9已"沉底",成为最下面一个数,而小的数"上升"。在第1轮中要对两个数之间的比较(和交换)进行5次,在第2轮中为4次……可以推知,如果有n个数,则要进行(n-1)轮比较(和交换)。在第1轮中要进行(n-1)次两两比较,在第j轮中要进行(n-j)次两两比较。

2024-05-23 18:55:47 286

原创 用数组来处理求Fibonacci数列问题

求Fibonacci数列问题在前面的文章中接触过,现在用数组来处理,可以用20个元素代表数列中的20个数,从第3个数开始,可以直接用表达式f[i]=f[i-2]+f[i-1]求出各数。请读者比较用数组和不用数组时的两种算法。

2024-05-22 10:35:26 515

原创 定义一个整型数组a,把0~9共10个整数赋给数组元素a[0]~a[9],然后按a[9],a[8],…,a[0]的顺序输出。

数组必须先定义,然后使用。只能逐个引用数组元素的值而不能一次引用整个数组中的全部元素的值。下标可以是整型常量或整型表达式。数组元素的表示形式为。

2024-05-21 10:55:25 518

原创 求2个或3个正整数中的最大数,用带有默认参数的函数实现

如果在声明函数时已对形参给出了默认值,而在定义函数时又对形参给出默认值,有的编译系统会给出"重复指定默认值"的报错信息,有的编译系统对此不报错,甚至允许在声明时和定义时给出的默认值不同,此时编译系统以先遇到的为准。如果只想从两二个正整数中找大者,则在调用时写成"max(a,b)"形式,此时c自动取默认值0,由于0比任何正整数都小,因此从14,-56,0中选最大数和从14,-56中选大者的结果是一样的。可以看到,在调用有默认参数的函数时,实参的个数可以与形参不同,实参未给定的,从形参的默认值得到值。

2024-05-20 15:25:16 1076

原创 通过函数模板求两个整数或3个整数中的最大数。如果输入两个整数,程序就输出这两个整数中的最大数,如果输入3个整数,程序就输出这3个整数中的最大数。

template的含义是"模板",尖括号中先写关键字typename(或class),后面跟一个类型参数T,这个类型参数实际上是一个虚拟的类型名,表示模板中出现的T是一个类型名,但是现在并未指定它是哪一种具体的类型。其实也可以不用T而用任何一个标识符,许多人习惯用T(T是Type的第1个字母),而且用大写,以与实际的类型名相区别。在对程序进行编译时,遇到第13行调用函数max(i1,i2,i3),编译系统会将函数名max与函数模板max相匹配,将实参的类型代了函数模板中的虚拟类型T。

2024-05-19 13:20:33 412

原创 编写一个程序,用来求两个整数或3个整数中的最大数。如果输入两个整数,程序就输出这两个整数中的最大数,如果输入3个整数,程序就输出这3个整数中的最大数。

在使用重载函数时,同名函数的功能应当相同或相近,不要用同一函数名去实现完全不相干的功能(如求最大值和求三角形面积),虽然程序也能运行,但可读性不好,易使人莫名其妙。参数的个数和类型可以都不同。但不能只有函数的类型不同而参数的个数和类型相同。两次调用max函数的参数个数不同,系统就根据参数的个数找到与之匹配的函数并调用它。int f(int);//函数返回值为整型。在函数调用时都是同一形式,如"f(10)"。//函数返回值为长整型。函数返回值类型可以相同也可以不同。

2024-05-18 13:58:16 309

原创 用函数重载方法求3个数中最大的数(分别考虑整数、双精度数、长整数的情况)

上面的main函数3次调用max函数,而每次实参的类型不同。例如希望从3个数中找出其中的最大数,而每次求最大数时数据的类型不同,可能是3个整数、3个双精度数或3个长整数。如果在一个程序中这类情况较多,对程序编写者来说,要分别编写出功能相同而名字不同的函数,这是很不方便的。以后可以看到,不仅函数可以重载,运算符也可以重载,例如,运算符"<<"和">>"既可以作为位移运算符,又可以作为输出流中的插入运算符和输入流中的提取运算符。上例3个max函数的函数体是相同的,其实重载函数并不要求函数体相同。

2024-05-17 12:51:49 276

原创 用递归方法求n!

递归是一种典型的算法,许多问题既可以用非递归方法来处理,也可以用递归方法来处理。在实现递归时,在时间和空间上的开销比较大,但符合人们的思路,程序容易理解。人们可以不去考虑实现递归的过程细节,只须写出递归公式和递归结束条件(即边界条件),即可很容易写出递归函数。由于计算机的性能提高很快,人们首先考虑的往往不再是效率问题,而是程序的可读性问题。可以用递推方法,即从1开始,乘以2,再乘以3……递推法的特点是从一个已知的事实出发,按一定规律推出下一个事实,再从这个新的已知的事实出发,再向下推出一个新的事实。

2024-05-16 15:13:19 365

原创 函数的递归调用

求解可分成两个阶段:第1阶段是回溯,即将第n个人的年龄表示为第(n-1)个人年龄的函数,而第(n-1)个人的年龄仍然不知道,还要回溯到第(n-2)个人的年龄……直到第1个人的年龄。应当强调说明的是:在某一次调用age函数时并不是立即得到age(n)的值,而是一次又一次地进行递归调用,到age(1)时才有确定的值,然后再递推出age(2),age(3),age(4),age(5)。要求第4个人的年龄必须先知道第3个人的年龄,而第3个人的年龄又取决于第2个人的年龄,第2个人的年龄取决于第1个人的年龄。

2024-05-15 10:51:00 1017

原创 输入4个整数,找出其中最大的数,用一个函数来实现

再用max(m,c)函数求出a,b,c三者中的大者,再赋给m(因为m是a和b 中的大者,因此max(m,c)就是a,b,c三者中的大者),把它赋给m。max_4函数执行过程是这样的:第1次调用max函数得到的函数值是a和b中的大者,把它赋给变量m,第2次调用max(m,c)得到m和c的大者,也就是a,b,c中的最大数,再把它赋给变量m。在max_4函数中3次调用max函数(这是嵌套调用),因此在max_4函数的开头要对max函数作声明。在max_4函数中调用3次max函数,就求出4个数中的最大数。

2024-05-14 18:50:35 558

原创 向计算机输入两个整数,用一个函数求出两数之和

的作用则是把函数的名字、函数类型以及形参的个数、类型和顺序(注意,不包括函数体)通知编译系统,以便在对包含函数调用的语句进行编译时,据此对其进行对照检查(例如函数名是否正确,实参与形参的类型和个数是否一致)。从程序中可以看到对函数的声明与函数定义中的第1行(函数首部)基本上是相同的,可以简单地照写已定义的函数的首部,再加一个分号,就成了对函数的声明。(3)如果使用用户自己定义的函数,而该函数与调用它的函数(即主调函数)在同一个程序单位中,且位置在主调函数之后,则必须在调用此函数之前对被调用的函数作声明。

2024-05-13 15:16:14 1189

原创 求两个整数中的大者,用函数调用实现

因此,在执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中实参的值。例如,若在执行max函数过程中形参x和y的值变为10和15,调用结束后,实参a和b仍为2和3。,表示它们并不是实际存在的数据,只有在发生函数调用时,函数max中的形参才被分配内存单元,以便接收从实参传来的数据。(formal parameter,简称形参),在主调函数中调用一个函数时,函数名后面括号中的参数(可以是一个表达式)称为。(1)在定义函数时指定的形参,在未出现函数调用时,它们并不占内存中的存储单元,因此称它们是。

2024-05-12 14:33:47 612

原创 编写程序输出两排星号和一行文字

(6)在本程序中,由于main函数的位置在其他两个函数之后,因此在main函数中不必对 printstar和print_message函数进行声明,如果main函数的位置在其他两个函数之前,在main函数调用这两个函数前,必须对它们进行声明。一个函数并不从属于另一个函数,即函数不能嵌套定义,也就是不能在定义一个函数的过程中又定义另一个函数,也不能把函数的定义部分写在主函数中。(3)程序的执行从main函数开始,调用其他函数后流程回到main函数,在main函数中结束整个程序的运行。

2024-05-11 12:30:23 391

原创 用C++译密码

例如,可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。但是还要对w,x,y,z(包括大小写)这4个字母作专门处理,使它们变为大小写的a,b,c,d。方法是如果执行完c=c+4后,c的新值已大于z(或Z),则表示原来的字母在v(或V)之后,应按规律将它转换为a~d(或A~D),办法是使c减26。因此必须限制其范围为"c>'Z'&&c<='Z'+4",即原字母为'W'~'Z',在此范围以外的不是原大写字母W~Z,不应按此规律转换。

2024-05-10 15:21:37 394

原创 找出100~200的全部素数

当发现 m 被某一整数整除之后即可判断 m 不是素数,不必再继续检查 m 是否会被其他整数整除了,因此用 break 提前结束循环。第16行的 if 语句检查 prime 是否为真,如果在本循环中,m 始终未被任何一个整数整除,prime 就保持其在循环开始时的 true,因此应输出素数 m。然后使 m 的值加2,再用同样方法检测新的 m 是否为素数。在循环开始时先设 prime 为真,若 m 被某一整数整除,就表示 m 不是素数,此时使布尔变量prime 的值变为假。除,如果 m 不能被2~

2024-05-09 21:57:26 365 4

原创 求Fibonacci数列前40个数

不满1个月的为小兔子,满1个月不满2个月的为中兔子,满3个月以上的为老兔子。可以看到每个月的兔子总数依次为1,1,2,3,5,8,13,…这就是Fibonacci数列。这是一个有趣的古典数学问题:有一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假设所有兔子都不死,问每个月的兔子总数为多少?这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。根据给出的每月兔子总数的关系,可编写程序。请注意分析最后两个语句的思路,它使程序简洁清晰。

2024-05-08 10:41:07 564

原创 编写程序,判断某一年是否为闰年

前面曾介绍过判别闰年的方法。我们用布尔变量 leap 表示被测试的年份是否为闰年的信息。若是闰年,令leap=true(真);若非闰年,则令leap= false(假)。true和 false 是布尔常量,分别代表"真"和"假"。最后判断leap是否为真,若是,则输出"闰年"信息。

2024-05-07 09:50:46 604

原创 条件运算符和条件表达式

a:b"的执行结果是将条件表达式的值赋给max。条件运算符优先于赋值运算符,因此上面赋值表达式的求解过程是先求解条件表达式,再将它的值赋给max。它是这样执行的:如果(a>b)条件为真,则条件表达式的值就取"?"后面的值,即条件表达式的值为a,否则条件表达式的值为":"后面的值,即b。若在 if 语句中,当被判别的表达式的值为"真"或"假"时,都执行一个赋值语句且给同一个变量赋值时,可以用简单的条件运算符来处理。条件表达式中的(ch+32),其中,32是小写字母和大写字母ASCII码的差值。

2024-05-06 16:15:06 458 2

原创 求三角形的面积

变量s和area只在复合语句内用得到,因此在复合语句内定义,它的作用范围为从定义变量开始到复合语句结束。如果在复合语句外使用s和area,则会在编译时出错,系统认为这两个变量未经定义。将某些变量局限在某一范围内,与外界隔离,可以避免在其他地方被误调用。

2024-05-05 12:10:21 455

原创 求一元二次方程式的根。a,b,c的值在运行时由键盘输入,它们的值满足判别式公式。

如果程序中要用数学函数,就要包含头文件 cmath(也可以用老形式的头文件math.h,但提倡使用C++新形式的头文件)。在写程序时,一定要注意将数学表达式正确地转换成合法的C++表达式。时,各执行语句之间存在一定的关系。最简单的一种关系就是:从上到下顺序执行各语句。即先执行第一个语句,再执行第二个语句,再执行第三个语句……可以看到,顺序结构的程序中的各执行语句是顺序执行的。这种程序最简单,最容易理解。通过这个程序可以初步了解编写C++程序的基本方法。根据它可以编写C++程序。

2024-05-04 12:40:36 321

原创 用 scanf 和 printf 函数进行输入和输出

可以看到:使用 printf 和 scanf 函数进行输出和输入,必须指定输出和输入的数据的类型和格式,不仅烦琐复杂,而且很容易出错。C++保留 printf 和 scanf 函数只是为了和C兼容,以便过去用C语言写的程序可以在C++的环境下运行。读者应该对 printf 和 scanf 有一定的了解,以便在阅读和改写用C语言写的程序时不会感到困惑。C++的编程人员都愿意使用 cout 和 cin 进行输出和输入,很少使用 printf 和 scanf。printf 函数的一般格式是。

2024-05-03 11:30:42 10 2

原创 用getchar函数输入单个字符

getchar 函数得到的字符可以赋给一个字符量或整型变量,也可以不赋给任何变量,作为表达式的一部分。这时输出的是整数97,因为用getchar() 读入的实际上是字符的ASCII码,现在并未把它赋给一个字符变量,cout就按整数形式输出。因为getchar()读入的值为'A','A'+32是小写字母'a'的ASCII码,因此putchar 函数输出'a'。可以看到,用putchar 和getchar 函数输出和输入字符十分灵活方便,由于它们是函数,所以可以出现在表达式中,例如,//设c已定义为字符变量。

2024-05-02 12:05:20 21 4

原创 用putchar函数输出单个字符

可以看到,用putchar可以输出转义字符,putchar('\n') 的作用是输出一个换行符,使输出的当前位置移到下一行的开头。putchar(66) 的作用是将66作为ASCII 码转换为字符输出,66是字母'B'的ASCII码,因此putchar(66) 输出字母'B',其余类似。putchar(10) 中的10是换行符的ASCII 码,putchar(10) 输出一个换行符,作用与putchar('\n') 相同。putchar('\") (输出单引号字符')

2024-05-01 15:10:22 14

原创 各行小数点对齐

先统一设置定点形式输出、取两位小数,右对齐。这些设置对其后的输出均有效(除非重新设置),而setw只对其后一个输出项有效,因此必须在输出a,b,c之前都要写setw(10)。

2024-04-30 10:05:27 229 2

原创 有符号数据传送给无符号变量

1的补码形式为1111111111111111(即全部16个二进制位均为1),将它传送给a,而a是无符号型变量,16个位全1是十进制的65535。如果b为正值,且范围为0~32767,则赋值后数值不变。C和C++使用灵活,在不同类型数据之间赋值时,常常会出现意想不到的结果,而编译系统并不提示出错,全靠程序员的经验来找出问题。这就要求编程人员对出现问题的原因有所了解,以便迅速排除故障。

2024-04-29 15:15:04 299

空空如也

空空如也

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

TA关注的人

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