新编第2讲C基础与编程1课件

PPT
  • 阅读 189 次
  • 下载 0 次
  • 页数 34 页
  • 大小 134.575 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
新编第2讲C基础与编程1课件
可在后台配置第一页与第二页中间广告代码
新编第2讲C基础与编程1课件
可在后台配置第二页与第三页中间广告代码
新编第2讲C基础与编程1课件
可在后台配置第三页与第四页中间广告代码
新编第2讲C基础与编程1课件
新编第2讲C基础与编程1课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 34
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
文本内容

【文档说明】新编第2讲C基础与编程1课件.ppt,共(34)页,134.575 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-45666.html

以下为本文档部分文字说明:

新编第2讲C基础与编程1要求:对两个随机的100以内的整数进行加法运算,共出10题,每题10分,最后给出得分。1编程练习一:自动出题器基本思想:(1)用循环实现(2)产生两个100以内的随机数(3)将用户输入的答案与正确答案比较,如果一致则在得分上加10分,否则不得分(4)输出总

分•1编程练习一:自动出题器程序:#include<iostream>#include<cstdlib>usingnamespacestd;intmain(){intx,y,a,b,s=0;for(inti=1;i<=10;i++){x=rand()%

100;y=rand()%100;a=x+y;cout<<"第"<<i<<"题:"<<x<<"+"<<y<<"=";cin>>b;if(a==b)s+=10;}cout<<"您的总得分是:"<<s<<endl;}•问题:当程序第二次运行时,所出的题目与第1次一样。1编程练习一:自动出题器原

因:随机数的序列总是和一个随机种子相关联,相同随机种子对应的随机数序列相同。由于没有指定随机种子,因此程序运行后均以默认的随机种子产生相应的随机数序列。解决方案:使用srand库函数重新指定随机种子。•1编程练习一:自动出题器程序:#include<iostre

am>#include<cstdlib>#include<ctime>usingnamespacestd;intmain(){intx,y,a,b,s=0;srand((unsigned)time(NULL));f

or(inti=1;i<=10;i++){x=rand()%100;y=rand()%100;a=x+y;cout<<"第"<<i<<"题:"<<x<<"+"<<y<<"=";cin>>b;if(a==b)s+=10;}cout<<"您的总得分是:"<<s<<endl;

}•要求:对于一个字符串,顺读与逆读是相同的字符。定义一个子函数完成判断功能,若是回文,返回1,否则返回0。在主函数中根据返回值输出结果。2编程练习二:回文字符串判断基本思想:(1)计算字符串的长度(2)第一个字符与最后一个字符比较,第二个字符与倒数第二个字符比较(3)用循环实现(4

)考虑参数传递•程序:#include<iostream>#include<string>usingnamespacestd;intdecidePalindrome(chars[]){inti=0,j;j=strlen(s)-1;while(i<j){if

(s[i]!=s[j])return0;i++;j--;}return1;}intmain(){charstr[100];cout<<“输入一个字符串:”<<endl;cin>>str;intresult=decidePalindrome(str);if(r

esult)cout<<“该字符串是回文”<<endelsecout<<“该字符串不是回文”<<endl;return0;}2编程练习二:回文字符串判断•要求:冒泡法选择法直接插入法3编程练习三:数据排序•冒泡法程序:#include<iostre

am>#include<string>usingnamespacestd;voidbubblesort(intdata[],intn);intmain(){inta[]={20,40,-50,7,13};intn=sizeof(a)/sizeof(int);bubblesort(a,n);

for(intj=0;j<n;j++)cout<<a[j]<<"\t";cout<<endl;system("pause");}voidbubblesort(intdata[],intn){inttemp;for(inti=0;i<n-1;i++)for(intj=0;j<n-

i-1;j++)if(data[j]>data[j+1]){temp=data[j];data[j]=data[j+1];data[j+1]=temp;}}3编程练习三:数据排序•选择法程序:#include<iostream>#include<stri

ng>usingnamespacestd;voidbubblesort(intdata[],intn);intmain(){inta[]={20,40,-50,7,13};intn=sizeof(a)/sizeof(int);selso

rt(a,n);for(intj=0;j<n;j++)cout<<a[j]<<"\t";cout<<endl;system("pause");}voidselsort(intdata[],intn){intmin,k,temp;for(inti=0;i<n-1;i++){mi

n=data[i];k=i;for(intj=i+1;j<n;j++)if(min>data[j]){min=data[j];k=j;}temp=data[i];data[i]=data[k];data[k]=temp;

}}3编程练习三:数据排序•练习:把输入的字符串逆序排列,并显示。分析:数据结构:输入的字符串用字符数组存放。算法要点:逆序排列用交换算法,求出字符串最后一个字符的下标,然后将第一个和最后一个交换,第二个和倒数第二个交换,...。•程序:#include<io

stream>usingnamespacestd;intmain(){charstr[80];inttemp,i,j;cout<<"Enterastring:"<<"\n";cin>>str;for(i=0,j=strlen(str)-1;i<j;i++,j--){temp=str

[i];str[i]=str[j];/*交换i,j两个元素*/str[j]=temp;}cout<<"\nReversedstring:\n“<<str;}•练习:直接插入法排序基本思想:先将下标为0的元素作为已排好的元素,

然后从下标为1的元素开始,依次把后面的元素按大小插入到前面已排好序的元素中,直到将全部元素插完为止,从而完成排序过程。•程序:#include<iostream>usingnamespacestd;voidinsertsort(intdata[],intn);intma

in(){inta[]={20,40,-50,7,13};intn=sizeof(a)/sizeof(int);insertsort(a,n);for(intj=0;j<n;j++)cout<<a[j]<<"\t"

;cout<<endl;system("pause");}voidinsertsort(intdata[],intn){intnInsert,nPos;intnPosMax=0;intj;for(inti=1;i<n;i

++){nInsert=data[i];nPos=i;for(j=0;j<=nPosMax;j++)if(nInsert<data[j]){nPos=j;break;}j=nPosMax;while(j>=nPos){data[j+1

]=data[j];}data[nPos]=nInsert;nPosMax++;}}•voidinsertsort(intdata[],intn){intnInsert,j;for(inti=1;i<n;i++){nInsert=data[i]

;j=i-1;while((j>=0)&&(nInsert<data[j])){data[j+1]=data[j];j--;}data[j+1]=nInsert;}}•#include<iostream>#include<string.h>usingnamespace

std;intconstN=3;intmain(){charl[N][30],temp[30];inti,j,k;cout<<"请输入字符串"<<endl;for(i=0;i<N;i++){cin.getl

ine(l[i],10,'#');}for(i=0;i<N-1;i++)for(j=0;j<N-1-i;j++){k=strcmp(l[j],l[j+1]);if(k>0){strcpy(temp,l[j]);strcpy(l[j],l[j+1]);strcpy(l[j+1],temp);}

}for(i=0;i<N;i++){cout<<l[i]<<"";}system("pause");return0;}练习:对字符串进行排序•文字常量(literalconstant)又称为“符号常量”、“字面常量”经编译之后写在代码区,是不可寻址的。利用预编译指

令#define定义的常量属于文字常量。常变量(constantvariable)常变量与其他变量一样被分配空间,是可以寻址的。由普通变量在前面加const关键字定义的是常变量。4深入学习一:文字常量和常变量•常变量的值常变量的值在初始化后不能改变,是在高级语言的语义层面上定义

的,由编译器所做的语法检查进行保障。但是,由于运行时常变量并不是放在只读内存中,而是和一般变量一样放在数据区,所以在运行时如果能获得常变量的地址,一样可以通过特殊的途径对它们进行修改。4深入学习一:文字常量和常变量•例子:#include<iostream>

usingnamespacestd;voidShowValue(constint&i){cout<<i<<endl;}intmain(){constintj=5;int*ptr;void*p=(void*)&j;ptr=(int*)p

;(*ptr)++;ShowValue(j);}4深入学习一:文字常量和常变量•例子:#include<iostream>usingnamespacestd;voidShowValue(constint&i){cout<<i<<endl;}in

tmain(){constintj=5;int*ptr;void*p=(void*)&j;ptr=(int*)p;(*ptr)++;cout<<j<<endl;}4深入学习一:文字常量和常变量•原因:编译器在代码优化的过程中已经将j替换成了文字常量5

。另:ShowValue()中的形参不用引用可以吗?值传递、指针传递4深入学习一:文字常量和常变量•出于语法规则或代码优化的需要,在某些情况下文字常量和常变量会由编译器进行转换。例子:#include<iostream>usingnamespacestd;void

DefineArray(constintn){intB[n]={};//出编译错误cout<<B[0]<<endl;}intmain(){constintm=5;intA[m]={};//正确cout<<A[0]<<endl;}4深入学习一:文字常量和常变量•const的位置const的

位置与语义之间的关系:#include<iostream>usingnamespacestd;intmain(){inti=5;constintv1=1;intconstv2=2;constint*p1;intconst*p2;const*intp3;//wrongint*const

p3=&v1;//wrongint*constp3;//wrongint*constp3=&i;constint*constp4=&v1;intconst*constp5=&v2;constint&r1=v1;intconst&r2=v

2;}5深入学习二:const用法•const的位置(1)const和数据类型结合在一起,形成所谓“常类型”。利用常类型声明或定义变量,就产生了常变量。(2)const用来修饰类型时,既可以放在类型的前面,也可以放在类型的后面(3)用常类型声明或定义变量时,const

只会出现在变量前面。(4)const和被修饰类型之间不能有其他标识符存在。(5)在理解有const存在的声明语句时,关键是搞清楚到底什么是“不可变”的。5深入学习二:const用法•const的位置1)对一个具体的变量来说,如果const直接出

现在该变量的前面,则该变量的值一旦被初始化就不能再改变。2)常指针和指针常量常指针是指针指向的是一个常量,指针常量是指指针本身的值是一个常量,不能修改。如果指针被定义为指针常量,则在定义它的时候必须同时初始化,否则编译报错。3)常引用是指将

被引用对象当做一个常量,也就是不允许通过引用来修改被引用对象的值。5深入学习二:const用法•const对象和对象的const成员(P6)(1)常对象:用const修饰的对象。(2)常函数:用const修饰的类的成员函数(3)在常函数中不允许对任何成员变量进行

修改。(4)通过常对象,只能调用该对象的常函数。(5)只有类的非静态成员函数可以被声明为常函数,其他类型的函数不能被声明为常函数。(6)const是重载的标记(7)非只读对象调用某个函数时,先寻找它的非const函数

版本,如果没有找到,再调用它的const函数版本。5深入学习二:const用法•const对象和对象的const成员(8)如果一个非只读对象调用某个函数时,这个函数同时存在非const函数版本和const函数版本,而我们希望调用它的const函数版本?必须通

过建立该对象的常引用或指向该对象的常指针来达到目的。(9)定义一个常对象,是将该对象的全体数据成员当做常量看待。(10)类对象的非静态常量成员必须在构造函数中初始化,而且只能借助初始化列表进行。5深入学习二:const用法•用const修饰函

数的参数和函数的返回值(P8)(1)目的:是让编译器为程序员做变量只读性的检查,以便程序更加健壮。(2)如果函数的返回值是引用,则用const修饰返回值可以阻止对被引用对象的修改。常见的对const的误解(P10)(1)用

const修饰的变量的值一定是不能改变的。(2)常引用或常指针,只能指向常变量。引用被声明为常引用,只是说明不能通过该引用(或该指针)去修改被引用对象的值。至于被引用对象原来是什么性质,或者是否会被其他引用修改,是无法由常引用来决定的。5深入学习二:const用法•引用

变量是C++语言引入的一个重要机制,它的出现使得原来在C语言中必须用指针实现的功能有了另一种实现的选择,而且在书写形式上更为简便。曾经学过的(1)引用就是被引用对象一个别名。(2)编译器可以不为引用分配内存空间。引用的本质inti=5;int&ri=i;ri=8;经过

代码优化,可以转换成如下代码:inti=5;i=8;也就是说,既然ri是i的别名,那么凡是ri出现的地方,都可以直接用它的“原名”i,或者说,在编译的时候,在符号表中ri和i对应于相同的变量的地址,这样的

确就没有必要存在一个名为ri的变量了。6深入学习三:引用与指针常量•但是,这种在编译阶段进行静态替换的做法并不是在任何情况下都能进行的。voidswap(int&a,int&b){intt;t=a;a=b;b=t;}由于函数swap()是在不同的上下文环境中被调用的,每次调

用的时候,传进函数的实参都可能不相同。所以,在编译阶段将引用替换成被应用对象原名的做法是不行的。因此,必须把引用本身当作实体来看待。实质上,引用本身的确是一个变量。存放的是被引用对象的地址。6深入学习三:引用与指针常量•指针常量和引用变量

引用变量在功能上等同于一个指针常量,即一量指向某个单元就不能再指向别处。在底层,引用变量也是按指针常量的方式来实现的。在高级语言层面上,指针常量与引用变量的关系如下:6深入学习三:引用与指针常量•(1)在内存中都是占据4字节的空间,存放的都是被引用对象的地址,都必须在定义的同时进行初始化。(2)

指针常量本身允许寻址,即&p返回指针变量(常变量)本身的地址;引用变量本身不允许寻址,&r返回的是被引用对象的地址,r的地址由编译器掌握,程序员无法直接对它进行存取。(3)凡是使用了引用变量的代码,都可以转换成使用指针常量的

对应形式的代码,只不过书写形式上要繁琐一些。6深入学习三:引用与指针常量•关于注释(1)不用过分积极的注释:第一,转移代码阅读者的注意力,增加阅读量.第二,要维护的东西更多.第三,对注释的更改常常被忽视.(2)遵循简单易行的、

定义良好的命名习惯(3)采用标准库中的、或尽人皆知的组件小知识•感谢聆听

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?