C++程序设计-大模型思维与实践课件 第03章 顺序结构程序设计_第1页
C++程序设计-大模型思维与实践课件 第03章 顺序结构程序设计_第2页
C++程序设计-大模型思维与实践课件 第03章 顺序结构程序设计_第3页
C++程序设计-大模型思维与实践课件 第03章 顺序结构程序设计_第4页
C++程序设计-大模型思维与实践课件 第03章 顺序结构程序设计_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章顺序结构程序设计C++程序设计——大模型思维与实践内容导航基本数据类型函数算术表达式顺序结构程序设计赋值表达式实践探究自增自减运算符大模型探究复杂数据类型本章小结顺序结构程序设计3char类型用来表示单个字符,包括字母、数字与符号编码:字符到数字的转换(计算机只能理解和处理二进制数据)ASCII编码每个字符都有一个独一无二的数值,确保了字符的唯一性和一致性。使用一个字节(8位)表示一个字符,为字符的存储和处理提供了标准化的方法。char类型4使用7位二进制数表示128个字符包括大小写英文字母、数字、标点符号以及控制字符ASCII码字符编码是否有规律?大小写字母的规律在ASCII码表中分别连续小写字母的编码减去大写字母的编码等于32'A':65,'a':97'B':66,'b':98数字字符的规律ASCII码连续'0':48'5':53其它符号空格:32换行'\n':105存储方式定义变量:charc1='a',c2='b';c1变量字符'a'

ASCII码为97二进制01100001c2变量字符'b'

ASCII码为98二进制011000106即是符号,又是整数ASCII编码系统将每个字符映射到一个唯一的整数上,在内存中真正存储的是一个整数,从而赋予了字符“整数”的属性。在输入输出时,表现出“符号”的一面char类型变量在输入和输出时表现为一个符号,意味着当输入或输出char类型变量时,它们被视为字符而不是整数。charch;cin>>ch;cout<<"字符是:"<<ch<<endl;程序运行时,输入“AB”,将输出“字符是:A”,即读入到ch变量中的字符为'A'。如果程序运行时输入“97”,将输出“字符是:9”。字符的双重属性7char类型变量在进行运算时,表现出“整数”的一面一个字符加上一个整数:将字符转换为其对应的编码值,然后与整数进行加法运算,结果是一个整数,通常可以将其转换回字符以查看结果。charch='A';cout<<ch+4;//输出69,即字母'E'的编码ch=ch+4;cout<<ch;//输出E,因为输出char类型变量,char在输出时表现为“符号”ch='3';cout<<ch+3;//输出54,即字符'6'的编码ch='D';ch=ch+32;cout<<ch;//输出d,大写字母加32,即得到对应小写字母的编码一个字符减去一个整数:将字符转换为其对应的编码值,然后与整数进行减法运算,结果是一个整数,通常可以将其转换回字符以查看结果。charch='e';cout<<ch-4;//输出97,即字母'a'的编码ch=ch-4;cout<<ch;//输出ach='3';cout<<ch-3;//输出48,即字符'0'的编码ch='e';ch=ch-32;cout<<ch;//输出E,小写字母减32,即得到对应大写字母的编码字符的双重属性8两个字符相减:如果ch1和ch2都是字符,表达式ch1-ch2表示两个字符在编码序列中的距离。cout<<'e'-'a';//输出4.charupper='E';charlower=upper+('a'-'A');//lower为字母e,其中'a'-'A'得到小写与大写字母编码之间的差值charch1='5';cout<<ch1–'0';//输出5。将数字字符减去字符'0'可得到对应的数字两个字符比较大小:如果ch1和ch2都是字符,表达式ch1<ch2表示判断ch1的编码是否小于ch2的编码,例如:'a'<'b'的结果为真,而'a'<'B'的结果为假。字符的双重属性可以改为:lower=upper-'A'+'a';9通过特定字符组合表示其他字符或控制功能。通常用来表示无法直接输入的字符,如换行符、回车符等。转义字符10如下代码:cout<<"老师说:\12\"cout输出时,可以使用转义字符'\\n'进行换行\"\n";输出结果:\12输出为一个换行\''输出为一个双引号,因为在双引号内部,不能直接用"表示该字符,需要使用\"。\\n输出为\n两个字符,因为\\表示字符\,所以其后的字符n是一个普通的字符。末尾的\n:输出为一个换行,体现在图中输出的最后有一个空行。

字符串中的单引号使用了',也可使用\'代替,因为在双引号内部使用单引号,不会产生歧义,可以直接使用单引号。转义字符11基本数据类型,用于表示逻辑值。只有两个可能的值:true和false,分别表示逻辑上的“真”和“假”。定义一个bool变量并初始化或赋值:boolisRaining=true;//定义一个bool变量并初始化为trueboolisSunny;isSunny

=false;//定义一个bool变量并赋值为false在内部表示上,true表示整数1,false表示整数0。这种表示方式使得布尔型数据可以方便地与整数进行比较和运算。boolflagTrue=true;cout<<"flagTrue的值:"<<flagTrue<<endl;boolflagFalse=false;cout<<"flagFalse的值:"<<flagFalse<<endl;intsum=flagTrue+10;cout<<"flagTrue+10的结果:"<<sum<<endl;bool类型内容导航基本数据类型函数算术表达式顺序结构程序设计赋值表达式实践探究自增自减运算符大模型探究复杂数据类型本章小结顺序结构程序设计13运算符用于执行特定操作,根据操作数的个数分为以下两类:(1)一元运算符:只作用于一个操作数,又称为单目运算符。常见的一元运算符包括:正号(+):表示正数,通常省略。负号(-):表示负数。递增(++):将运算对象的值增加1。递减(--):将运算对象的值减少1。inta=+5;//通常省略正号,写成inta=5;intb=-a;//负号运算符算术运算符14(2)二元运算符:作用于两个操作数,又称双目运算符。常见的二元运算符包括:加法(+):将两个操作数相加。减法(-):将第一个操作数减去第二个操作数。乘法(*):将两个操作数相乘。除法(/):将第一个操作数除以第二个操作数。取余(%):将第一个操作数除以第二个操作数后取余数(仅适用于整数)。

intx=10,y=3;cout<<x+y<<""<<x–y<<""<<x*y<<""<<x/y<<""<<x%y;算术运算符15算术运算符在运算时具有不同的优先级,决定了哪些运算先进行。优先级从高到低,常见的算术运算符优先级:(1)一元运算符+(正号)、-(负号)、++(递增)、--(递减)(2)乘法和除法*(乘法)、/(除法)、%(取模)(3)加法和减法+(加法)、-(减法)例:-3*5-7+8负号优先级最高,得到-3,再计算*,然后是-和+算术运算符16算术表达式允许我们对数据进行加、减、乘、除等基本数学操作。基本语法格式:操作数运算符操作数运算符操作数主要由以下几个元素构成:操作数:进行计算的基本单元,可以是常量、变量或更复杂的表达式。算术运算符括号:改变表达式的求值顺序。算术表达式17(1)乘法运算符

*

不能省略,省略会导致编译错误或意外的结果。inta=5;intb=3;intresult=a*b;//正确,乘法运算符不能省略//intresult=ab;//错误,省略乘号会导致编译错误//intresult=a(b+2);//错误,省略乘号会导致编译错误应用算术表达式的注意事项18(2)使用括号确保运算顺序假设有以下表达式:

正确写法:intresult=(a+b)/(c*d);//使用括号确保运算顺序intresult2=(a+b)/c/d;//依次除以c和d错误写法://intresult=(a+b)/c*d;//错误,按从左到右顺序执行,结果不符合预期//intresult2=a+b/c*d;//错误,除法和乘法的优先级高于加法,结果不符合预期(3)运算符前后插入空格为了使算术表达式更加清晰和易读,通常在运算符前后各插入一个空格。应用算术表达式的注意事项19除法操作:W/Z当W或Z中有一个是浮点数时:为了保持结果的精确性,结果被自动提升为浮点数类型。3.0/2(W是浮点数,Z是整数):结果是1.5,类型为浮点数。3/2.0(W是整数,Z是浮点数):结果是1.5,类型为浮点数。3.0/2.0(W是浮点数,Z也是浮点数):结果是1.5,类型为浮点数。floatWf=10.0;cout<<Wf/3;//输出10.0/3=3.33333doubleZd=3.0;cout<<10/Zd;//输出10/3.0=3.33333当W和Z都是整数时:执行整除,即结果向下取整到最接近的整数。3/2(W和Z都是整数):结果是1,类型为整数。intW=10,Z=3;cout<<W/Z;//输出10/3=3除法运算初学者经常犯错,切记:两个整数相除,结果为整数20用于计算两个整数相除后的余数,通过%运算符实现。10.0%3将出现语法错误,因为分子和分母都必须为整数。取余运算的常见应用有:(1)取一个整数的个位,例如235%10即可得到个位数字5.(2)判断一个整数能否被另一个整数整除(是否为它的倍数),例如,若m%n的结果为0,则m是n的倍数。(3)判断一个整数的奇偶性,例如,若m%2的结果为0,则m是偶数。取余运算21【例3-1】计算并输出一个三位整数的个位、十位和百位数字之和。取余运算#include<iostream>usingnamespacestd;intmain(){intnumber=153;//示例三位整数

intunits=number%10;//获取个位数字

153%10=3

inttens=(number/10)%10;//获取十位数字

153/10=15;15%10=5。

inthundreds=number/100;//获取百位数字

153/100=1

intsum=units+tens+hundreds;//计算数字之和

cout<<"数字

"<<number<<"的个位、十位和百位数字之和为:"<<sum<<endl;return0;}22

隐式类型转换:进行算术运算时,如果参与运算的两个操作数类型不同(称为混合数据类型运算),编译器会按照一定的规则将这两个操作数转换为同一类型,以确保运算的准确性和效率。

数据类型高低等级的大致规律为:(1)数值范围大的高于数值范围小的,例如float>longlong。(2)占用空间多的高于占用空间少的,例如double>float、longlong>int。说明:可以使用sizeof(类型)查看该类型的变量占用的字节数,或sizeof(变量)查看所定义变量占用的字节数。例如:有定义inta;,则sizeof(int)和sizeof(a)都为4。算术运算中的类型转换23数据类型的高低等级纵向的箭头表示必然的转换,横向的箭头表示根据需要进行转换。在算术运算前,两个操作数的类型将进行以下转换:如果存在short、char、bool类型,无条件将它们提升为int类型。完成第1个转换后,如果两个操作数的类型不相同,则按照图中横向箭头方向将低类型操作数的类型提升到另一个操作数的类型(高类型)。完成转换后,两个类型相同的操作数参与运算,得到的结果类型与转换后的操作数类型相同。算术运算中的类型转换unsignedlonglong处在哪个位置?24两个字符相减时,需要将字符类型无条件转换为int类型(即它们的编码)进行运算;两个整数相除时,结果也为整数,不包含小数。'a'+2.2:将字符'a'无条件转换为int类型,之后再提升为常量2.2的类型double,再参与计算,结果为double类型。理解以上转换规则对于编写正确的C++代码至关重要。算术运算中的类型转换25强制类型转换:显式地进行类型转换。处理数据类型不兼容的情况,需谨慎使用,不恰当的强制类型转换可能会导致数据丢失、精度下降或运行时错误。两种常用的强制类型转换方式:C风格的强制类型转换:(目标类型)待转换的表达式;目标类型(待转换的表达式);C++风格的强制类型转换:static_cast<类型>(待转换的表达式)强制类型转换26

C风格强制类型转换语法格式:(目标类型)待转换的表达式;目标类型(待转换的表达式);示例:intW=10,Z=3;cout<<(double)W/Z;//输出3.33333除法intW=10,Z=3;cout<<double(W)/Z;//如果将分母转换为double类型也可以语法简单直接,通用。不提供任何运行时或编译时检查。可以执行几乎任何类型的转换,包括不安全的转换。强制类型转换27

C++风格的static_cast语法格式为:static_cast<目标类型>(待转换的表达式);示例:intW=10,Z=3;cout<<static_cast<double>(W)/Z;//输出3.33333

更安全、更清晰的转换方式,推荐使用。强制类型转换内容导航基本数据类型函数算术表达式顺序结构程序设计赋值表达式实践探究自增自减运算符大模型探究复杂数据类型本章小结顺序结构程序设计29

赋值运算符用于执行赋值操作,赋值表达式格式为:

变量=表达式赋值表达式的作用为:将右边的表达式的值存入左边的变量。赋值运算符的左侧为左值,假设已有定义inta;constintb=3;,那么:变量可以作为左值,如:a=2表达式不能作为左值,如:a+2=3错误常变量也不能作为左值,如:b=4错误,const修饰符表示b是常量,不可改变。赋值运算符的右侧为右值,右值可以是常量、变量和表达式。x

=3//左值是变量,右值是常量。x=x+2//左值是变量,右值是表达式,含义为将x本来的值加上2,再将结果存到x中。赋值表达式后面加上分号即为赋值语句赋值表达式30赋值表达式可以出现在更多地方,包括:(1)将赋值表达式作为更大的表达式的一部分a=(x=6)+(y=7);//首先执行x=6;y=7;,并将x和y相加,结果存于变量a中。cout<<(a=7);//首先执行a=7,并输出赋值表达式返回的结果。(赋值运算符的优先级比算术运算符和输出运算符“<<”的优先级低)(2)链式赋值:在一个赋值表达式中连续使用多个赋值操作符inta,b,c;a=b=c=100;//将100赋值给c,然后c的值赋给b,最后b的值赋给a赋值表达式31复合赋值操作符C++提供了一系列复合赋值操作符,包括+=,-=,*=,/=,%=等。语法格式为:

变量复合赋值运算符表达式;执行流程为:首先计算右边表达式的值左边变量的当前值与右边表达式的值进行算术运算(+-*/%)将运算结果赋值给左边的变量inta=5;a+=3;//等价于a=a+3,a现在为8a-=2;//等价于a=a-2,a现在为6a*=3+2;//等价于a=a*(3+2),先计算3+2得到5,再计算a*5=30,赋值给a。a现在为30a%=2;//等价于a=a%2,a现在为0赋值表达式32执行赋值操作时,要求右边表达式的执行结果的类型和左边的变量的类型一致,当它们的类型不一致时,编译器会尝试对右边表达式的结果执行自动类型转换(即隐式类型转换)来匹配变量的类型。1.实型数(如float,double)

整型(如int,short,long等)小数部分舍弃,只保留整数部分,可能导致精度丢失。intx=3.14;赋值后,x的值为3。2.整型数

实型数(如float,double)数值本身不变,以浮点数形式存储在变量中,不会丢失信息。floaty=5;赋值后,y的值为5.0。3.doublefloat仅保留double值的前七位有效数字,可能导致精度丢失。floatf=123.456789012345;赋值后,f的值可能接近于123.456787,具体取决于浮点数的表示方式。赋值时的类型转换334.字符型(如char)整型将字符的ASCII码值赋给整型变量。示例:intz='A';赋值后,z的值为65(因为'A'的ASCII码是65)。5.整型

字符类型整型数据的最低八位(一个字节)被赋给字符变量。可能会导致数据截断,当整型值超出字符类型的表示范围时,会导致溢出。charc=65;赋值后,c的值为'A'(因为65是'A'的ASCII码)。charc=330;赋值后,c的值为'J',因为330的最低八位为74,是'J'的ASCII码。赋值运算中的类型转换内容导航基本数据类型函数算术表达式顺序结构程序设计赋值表达式实践探究自增自减运算符大模型探究复杂数据类型本章小结顺序结构程序设计35自增(++)和自减(--)运算符用于将变量的值增加或减少1。它们可以以两种形式出现:前缀形式和后缀形式。++、--运算符前置自增或自减(例如:++a、--a):首先将变量a的值加(减)1。然后返回增加(减少)后的值。后置自增或自减(例如:a++、a--):首先返回变量的当前值。然后将变量a的值加(减)1。自增自减运算符36如果++a;或者a++单独为一个语句,它们的运算效果相同,都是将a的值加1。如果它们嵌在一个更大的表达式中,就需要考虑先做自增操作还是先返回a的值。inta=5,b;b=++a;//前置自增:先将a加1,此时,a为6,然后赋值给b,b也为6。

b=a++;//后置自增:先将a的值(已被改为6)赋值给b(b为6),然后a再加1,此时a为7。intc=7,d;d=--c;//前置自减:先将c减1,然后赋值给d。此时,c为6,d也为6。

d=c--;//后置自减:先将c的值(已被改为6)赋值给d,然后c再减1。此时,c为5,d为6。自增自减运算符37可以如下方式理解++、--操作:拆分法前置++(--):将一个语句拆分成多个,先做增1(减1)操作,再做其它运算;后置++(--):将一个语句拆分成多个,先做其它运算,再做增1(减1)操作;①b=++a–2;相当于两个语句:++a;b=a–2;②b=a++-2;相当于两个语句:b=a–2;a++;③cout<<(-a++);相当于两个语句:cout<<(-a);a++;注意,是对a而不是-a做++操作。④c=(++a)*(b++);相当于三个语句:++a;c=(a)*(b);b++;本方式容易理解,但对于if(a++)、while(++a)这种语句,无法将其拆分为两个语句。自增自减运算符38打包法将++a以及a++打包成一个操作fp(a)和bp(a)。

假想计算机的内存由一个管理员负责管理,其中变量a为他管理的对象之一。自增自减运算符操作fp(a)为向内存管理员取“++a”的值,管理员将执行两个步骤:将a的值加1(变为6),然后返回a的值。操作bp(a)为向内存管理员取“a++”的值,管理员将执行两个步骤:先返回a的值(因此该操作将得到5),然后管理员自己悄悄地将a的值加1(变为6)。39表达式中遇到++a时,可以打包(替换)成操作fp(a),遇到a++时,可以打包(替换)成操作bp(a)。对于以上4个示例,假设已有定义inta=5,b=5;①b=++a–2;可替换成:b=fp(a)–2;

fp(a)得到的值为6。因此,执行完成后,b=4,a=6。②b=a++-2;可替换成:b=bp(a)–2;

bp(a)得到的值为5。因此,执行完成后,b=3,a=6。③cout<<(-a++);可替换成:cout<<(-bp(a));由于bp(a)得到的值为5,因此输出-5,而a的值将变为6。④c=(++a)*(b++);可替换成:c=(fp(a))*(bp(b));fp(a)得到的值为6,bp(b)得到的值为5,因此,执行之后,c=30,a=6,b=6。采用以上打包法,理解if(a++)、while(++a)这种语句时,只需将其替换为if(bp(a))、while(fp(a))即可。自增自减运算符40注意事项避免在一个表达式中多次使用++、--修改同一个变量的值,这可能导致难以预测的结果。inta=0,b=0;cout<<a++<<""<<a++<<""<<a++<<endl;cout<<++b<<""<<++b<<""<<++b<<endl;在VisualStudio中,程序运行输出结果为:210333结果不符合直观理解自增自减运算符内容导航基本数据类型函数算术表达式顺序结构程序设计赋值表达式实践探究自增自减运算符大模型探究复杂数据类型本章小结顺序结构程序设计42指针存储的是另一个变量的内存地址。通过指针,程序可以间接访问和操作该地址所指向的变量。指针变量的的定义语法格式如下:

数据类型*指针变量名;“数据类型”指的是该指针所指向变量的类型,可以是基本数据类型(如int、double、char等)或其它复合数据类型。“指针变量名”是用户为指针定义的名称,用于在程序中引用该指针。inta;int*p;p=&a;*p=5;指针本节简单介绍几个复杂数据类型的概念,核心目的在于帮助读者在利用大模型生成代码时,能够识别这些数据类型。一旦在生成的代码中遇到这些数据类型,能够主动请求大模型避免采用,以符合特定的编程需求或限制;在无法完全规避的情况下,也能明确知晓需深入学习哪些相关章节的内容,以便有效处理并应用这些数据类型。定义变量时用到了“*”43数组可以存储多个相同类型数据。数组的声明需要遵循一定的格式:

数据类型数组名[数组大小];“数据类型”指的是数组中元素的数据类型,可以是基本数据类型或复合数据类型。“数组名”是用户为数组定义的名称,用于在程序中引用该数组。“数组大小”指定了数组中元素的个数。inta[10];//数组名为a,可以存储10个整数使用数组时,通过下标(也称为索引)访问数组中的单个元素。a[1]=1;cout<<a[0];数组定义变量时使用到了方括号[]44vector是一个动态数组,能够根据需要自动增长和缩小。需要包含<vector>头文件。定义一个存储整数的向量:#include<vector>vector<int>vec;//定义一个名为vec的向量,可以用来存储int整数向量vector定义变量时用到vector关键字45string提供了对字符串高效和方便的操作。需要包含<string>头文件,并在定义变量时用到string关键字。定义一个string对象:#include<string>stringstr;//声明一个空的string对象,可以用来存储字符串字符串string定义变量时用到string关键字46允许将多个不同类型的数据项组合成一个单一的复合类型,常用于组织和封装一组相关联的数据。使用struct关键字定义一个结构体,包括结构体的名称和它所包含的数据成员。每个数据成员都有其自己的数据类型。使用class关键字定义一个类。类的定义和使用方法与结构体类似。结构体和类structStudent{stringname;intage;double

gpa;};class

Student{stringname;intage;double

gpa;};定义时用到struct或class关键字内容导航基本数据类型函数算术表达式顺序结构程序设计赋值表达式实践探究自增自减运算符大模型探究复杂数据类型本章小结顺序结构程序设计48库函数是预先编写好的代码,用于执行常见的任务,如数学计算、字符串处理、文件操作等。cmath库(对应于C语言中的math.h)提供了一系列数学函数。库函数及使用示例类别函数声明说明绝对值函数intabs(intx);doublefabs(doublex)intabs(intx)函数在cstdlib库中,本表其余函数都在cmath库中。exdoubleexp(doublex)

xydoublepow(doublex,doubley)不要写intre=pow(10,3)这种计算结果为整数的幂值,结果将有误差,re的值可能为999。平方根doublesqrt(doublex)

lnxdoublelog(doublex)

Log10xdoublelog10(doublex)

三角函数doublesin(doublex)doublecos(doublex)doubletan(doublex)参数x表示弧度值。49函数声明(函数原型)告诉编译器有关函数的信息包括函数的返回类型、函数名以及它接受的参数类型和数量,但不包括函数体。求平方根的函数sqrt,它的原型为:

doublesqrt(double)库函数及使用示例#include<iostream>#include<cmath>//包含sqrt函数所需的头文件usingnamespacestd;intmain(){doublex;x=sqrt(6.25);//调用函数计算6.25的平方根

cout<<"Thesquarerootof6.25is"<<x<<endl;return0;}50函数调用时应遵循的语法格式在示例中,计算结果被赋值给了变量x。也可不执行赋值操作,将函数返回结果sqrt(6.25)作为double类型变量,应用到各类表达式和语句中。函数的调用及执行过程51函数调用时的执行流程函数的调用及执行过程52标准库函数:直接使用满足需求的预定义函数自定义函数:用户需编写源代码,完成特定功能设计算法逻辑:自顶向下将功能模块化,调用函数细化函数逻辑初学阶段可使用大模型辅助,不用过于关注语法细节定义函数:黑盒思维无需关注内部实现设计函数头部用户自定义函数53设计函数头部的核心:1.输入参数(需要向函数提供什么数据以使得它能完成所期望的功能):(1)定义了函数执行所需的信息或数据。(2)设计时,应仔细考虑哪些数据是函数执行所必需的,这些数据的类型是什么。2.返回值(调用函数期望得到什么结果):(1)函数执行完毕后向调用者提供的结果。(2)设计时,需要明确函数应该返回什么类型的数据,以及这个数据代表的含义。用户自定义函数54例:自定义一个函数计算两个整数2和3的和需要提供两个整数2和3给函数,以使得它能完成加法操作,此即函数的输入参数。加法得到的结果为5,需要由函数将该结果返回给调用者,该结果的类型为int。为计算两数之和的函数取名为add,它输入两个参数,返回一个结果,函数头部可设计为:

intadd(inta,intb)用户自定义函数235intadd(inta,intb)int类型值进入函数函数返回int类型的值55函数的定义格式:函数头部{//从左花括号开始直到对应的右花括号,都为函数体的部分

语句序列return(值);}函数头部形如intadd(inta,intb),包括函数返回结果类型、函数名、输入参数列表。函数体:由一对花括号{}包围的代码块,包含函数执行时所需的所有语句。其中:“return(值)”语句用于结束函数的执行,并将指定的值作为结果返回给函数的调用者。用户自定义函数56定义一个计算两数之和的C++函数,并调用该函数完成“2加3”的计算:用户自定义函数#include<iostream>usingnamespacestd;intadd(inta,intb)//函数头部{

returna+b;//函数体,实现求和操作,并将结果返回}intmain(){ intresult=add(2,3);//调用函数,传入两个整数2和3

cout<<"Thesumis:"<<result<<endl;//输出结果

return0;}return语句之后可以跟一个常量、变量或者表达式。57如果函数不返回结果,可将其类型定义为void。以下函数输出两个整数之和,不返回任何结果给调用者。用户自定义函数#include<iostream>usingnamespacestd;voidprintSum(inta,intb)//函数头部{//函数体,输出结果 cout<<"Thesumis:"<<a+b<<endl; return;}intmain(){ printSum(2,3);//调用函数,传入两个整数2和3 return0;}由于不执行任何返回值操作,return语句后无需跟随任何返回值,仅书写return;即可作为函数正常结束的标志。内容导航基本数据类型函数算术表达式顺序结构程序设计赋值表达式实践探究自增自减运算符大模型探究复杂数据类型本章小结顺序结构程序设计59按照语句的书写顺序,从上到下依次执行每一条语句,不包含分支或循环结构。在解决复杂的问题时,可以结合自顶向下逐步细化的程序设计方法,它将一个复杂的问题逐步分解成更小、更简单的子问题,直到每个子问题都可以直接解决。这个过程通常包括:(1)定义问题:明确要解决的问题和目标。(2)分解问题:将问题分解成若干个子问题。(3)逐步细化:对每个子问题进一步分解,直到每个子问题都可以用简单的代码实现。(4)实现和测试:编写代码实现每个子问题,并进行测试。顺序结构的计算思维(4)实现和测试60(2)分解问题:①

输入两个数a、b

②交换a和b的值。③输出交换后的结果。(3)逐步细化将第②步继续细化为:定义一个临时变量temp。将a的值赋给temp。将b的值赋给a。将temp的值赋给b。顺序结构的计算思维—示例【例3-2】:编写程序,输入两个整数a和b,交换它们的值并输出。(1)问题定义:有两个数a和b,需要交换它们的值。#include<iostream>usingnamespacestd;intmain(){

inta,b,temp;

cin>>a>>b;

//使用临时变量交换两个数的值

temp=a;

a=b;

b=temp;

cout<<"交换后的数是:a="<<a<<",b="<<b<<endl;

return0;}61

应用实例(3)实现和测试#include<iostream>#include<cmath>usingnamespacestd;intmain(){doublea,b,c;cin>>a>>b>>c;doubles=(a+b+c)/2;doublearea=sqrt(s*(s-a)*(s-b)*(s-c));cout<<"三角形的面积是:"<<area<<endl;return0;}62【例3-4】输入一个包含三位以上小数的浮点数,要求四舍五入到小数点后两位。(1)分解问题①获取用户输入的浮点数。②对浮点数进行四舍五入,保留两位小数。③

输出四舍五入后的结果。(2)逐步细化将第②步继续细化为:首先,将浮点数乘以100,将需要保留的两位小数转换为整数的一部分。随后,向结果中加上0.5。去除小数部分,得到一个整数。将得到的整数除以100.0(使用浮点数除法以保持结果的精确度),得到两位小数。应用实例63(3)实现和测试应用实例#include<iostream>usingnamespacestd;intmain(){doublenum;

cin>>num;//对浮点数进行四舍五入,保留两位小数intresult=num*100+0.5;num=result/100.0;

cout<<"四舍五入结果是:"<<num<<endl;return0;}首先,将浮点数乘以100。随后,向结果中加上0.5。去除小数部分,得到一个整数。将得到的整数除以100.0。64(3)实现和测试测试结果如下:第1次运行(其中下划线部分为输入):1.44499999四舍五入结果是:1.44结论:结果正确第2次运行:1.445四舍五入结果是:1.45结论:结果正确第3次运行2.445四舍五入结果是:2.44结论:结果错误,应该为2.45应用实例65分析原因:浮点数的误差问题。输入2.445时,计算机内部的num值实际上为2.4449999999999998。对于2.445,按照四舍五入的步骤操作为:2.445乘以100,得到244.5;加0.5,得到245;取整数部分,仍然是245;除以100.0,得到2.45。对于2.4449999999999998,按照四舍五入的步骤操作为:2.4449999999999998乘以100,得到244.49999999999998;加0.5,得到244.99999999999998;取整数部分,仍然是244;除以100.0,得到2.44。在得到244.99999999999998时,应该消除误差的影响,使其值超过245。可以在244.99999999999998的结果上加上一个非常小的数字1e-10(即10-10)。应用实例66修改后的代码:第4次运行2.445四舍五入结果是:2.45结论:结果正确继续测试…应用实例#include<iostream>usingnamespacestd;intmain(){doublenum;

cin>>num;intresult=num*100+0.5+1e-10;num=result/100.0;

cout<<"四舍五入结果是:"<<num<<endl;return0;}内容导航基本数据类型函数算术表达式顺序结构程序设计赋值表达式实践探究自增自减运算符大模型探究复杂数据类型本章小结顺序结构程序设计68提出问题,让大模型提供示例代码,自己先学习,再模仿、编写。不过,大模型提供的代码可能存在错误,采用之前必须经过严格的测试。第一步:向大模型提问【提问】我正在尝试解决一个C++编程题,题目要求输入三个整数,每个整数在1到10000之间,表示立方体的三个边长,输出立方体的体积。请给出详细的分析和解答,并给出实现代码。立方体体积69【回复】要解决这个C++编程题,我们需要编写一个程序,接受三个整数输入,表示立方体的三个边长,然后计算并输出立方体的体积。以下是详细的分析和解答:(1)分析输入:程序需要从用户那里获取三个整数,分别表示立方体的三个边长。计算:立方体的体积公式是体积=长*宽*高。输出:程序需要输出计算得到的体积。(2)步骤包含必要的头文件:我们需要包含<iostream>头文件来进行输入输出操作。使用命名空间:为了简化代码,我们可以使用usingnamespacestd;。定义主函数:在main函数中实现输入、计算和输出的逻辑。输入三个整数:使用cin从用户那里获取三个整数。计算体积:使用乘法运算符计算体积。考虑到边长的范围是1到10000,体积的最大值是10000^3=1,000,000,000,000,这个值在C++中超出了int的表示范围,可以用longlong类型来表示。输出结果:使用cout输出计算得到的体积。立方体体积70(3)实现代码以下是实现上述逻辑的完整C++代码:立方体体积#include<iostream>usingnamespacestd;intmain(){intlength,width,height;//输入三个边长cin>>length>>width>>height;//计算体积longlongvolume=length*width*height;//输出体积cout<<"立方体的体积是:"<<volume<<endl;return0;}71第二步:测试第一次运行:567立方体的体积是:210说明:以上输出结果正确。第二次运行:100001000010000立方体的体积是:-727379968说明:以上输出结果错误,体积不可能为负数。立方体体积72第三步:解决错误如果自己无法检查出错误,可以继续向大模型提问:【提问】我正在尝试解决一个C++编程题,题目要求输入三个整数,每个整数在1到10000之间,表示立方体的三个边长,输出立方体的体积。以下是我的代码,但是为三个边长都输入10000时,输出的体积是个负数,哪里出错了?[贴上代码,此处略]【回复】你遇到的问题是由于整数溢出导致的。虽然你将volume变量声明为longlong类型,但在计算过程中,length、width和height都是int类型,导致乘法运算在int范围内进行,结果溢出后才赋值给longlong类型的volume。为了避免这种情况,你需要在乘法运算之前将其中一个操作数转换为longlong类型,这样整个乘法运算就会在longlong范围内进行。修改后的代码:(说明:大模型提供了完整的代码,此处仅展示修改的代码行)

//计算体积

longlongvolume=(longlong)length*width*height;立方体体积73第四步:再次测试第三次运行:100001000010000立方体的体积是:1000000000000说明:以上输出结果正确。但仍需增加其它测试,包括第一次运行时的测试数据。立方体体积大模型生成的代码并非完全准确,对其进行严格测试非常重要!7474第一步:提问【提问】我正在尝试解决一个C++编程题,题目要求输入两个整数,分别表示全世界总人口数目和全世界总家庭数目,要求输出每个家庭的平均人数。请给出详细的分析和解答,并给出实现代码。【回复】要解决这个C++编程题,我们需要编写一个程序,接受两个整数输入,分别表示全世界总人口数目和全世界总家庭数目,然后计算并输出每个家庭的平均人数。以下是详细的分析和解答:(1)分析输入:程序需要从用户那里获取两个整数,分别表示全世界总人口数目和全世界总家庭数目。计算:每个家庭的平均人数可以通过将总人口数除以总家庭数来计算。输出:程序需要输出计算得到的每个家庭的平均人数。家庭平均人口数7575家庭平均人口数(2)步骤包含必要的头文件:我们需要包含<iostream>头文件来进行输入输出操作。使用命名空间:为了简化代码,我们可以使用usingnamespacestd;。定义主函数:在main函数中实现输入、计算和输出的逻辑。程序首先提示用户输入全世界的总人口数目和总家庭数目。输入被读取并存储在totalPopulation和totalFamilies变量中。程序检查totalPopulation和totalFamilies是否大于零,以确保不会发生除以零的错误。如果totalFamilies不大于零,程序会输出错误信息并返回错误代码1。如果输入有效,程序使用强制类型转换将总人口数目转换为double类型,然后除以总家庭数目来计算平均每个家庭的人数。这样做是为了确保结果是一个小数,即使总人口和总家庭数目都是整数。输出结果:使用cout输出计算得到的平均人数。7676家庭平均人口数(3)实现代码以下是实现上述逻辑的完整C++代码:#include<iostream>usingnamespacestd;intmain(){inttotalPopulation,totalFamilies;cout<<"请输入全世界总人口数目:"<<endl;cin>>totalPopulation;cout<<"请输入全世界总家庭数目:"<<endl;cin>>totalFamilies;

//检查输入是否有效if(totalPopulation<=0||totalFamilies<=0){

cout<<

"输入的总人口数和总家庭数必须为正数。"

<<

endl;return1;//返回非零值表示错误

}//计算每个家庭的平均人数doubleaveragePeoplePerFamily=static_cast<double>(totalPopulation)/totalFamilies;//输出平均人数cout<<"每个家庭的平均人数是:"<<averagePeoplePerFamily<<endl;return0;}7777家庭平均人口数第二步:测试第一次运行:请输入全世界总人口数目:100请输入全世界总家庭数目:30每个家庭的平均人数是:3.33333说明:以上输出结果正确。第二次运行:请输入全世界总人口数目:7000000000请输入全世界总家庭数目:输入的总人口数和总家庭数必须为正数。说明:以上仅仅输入了一个总人口数70亿,还未输入家庭数目,程序即输出错误提示信息,说明程序代码出现了错误。78第三步:解决错误如果自己无法检查出错误,可以继续向大模型提问:【提问】我正在尝试解决一个C++编程题,题目要求输入两个整数,分别表示全世界总人口数目和全世界总家庭数目,要求输出每个家庭的平均人数。但是我输入总人口数为7000000000后,未待输入总家庭数,即提示我“输入的总人口数和总家庭数必须为正数。”以下是我的代码,哪里出错了?[贴上代码,此处略]【回复】你遇到的问题可能是由于输入数据类型不匹配导致的。你当前的代码使用int类型来存储总人口数和总家庭数,但int类型的范围可能不足以存储非常大的数值(例如,70亿)。在大多数系统中,int类型的范围是-2,147,483,648到2,147,483,647。为了处理非常大的数值,你应该使用longlong类型,它可以存储更大的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论