浙江大学C颜晖原版c1课件
- 格式:ppt
- 大小:73.50 KB
- 文档页数:21
c语言程序设计实验与习题指导颜晖答案【篇一:c语言程序设计谭浩强版何钦铭颜晖版习题答案全集】【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:main(){int i,j,k;printf(\n);for(i=1;i5;i++) /*以下为三重循环*/for(j=1;j5;j++)for (k=1;k5;k++){if (i!=ki!=jj!=k) /*确保i、j、k三位互不相同*/printf(%d,%d,%d\n,i,j,k);}}【程序2】题目:企业发放的奖金根据利润提成。
利润(i)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
2.程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf(%ld,i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i=100000)bonus=i*0.1;else if(i=200000)bonus=bonus1+(i-100000)*0.075;else if(i=400000)bonus=bonus2+(i-200000)*0.05;else if(i=600000)bonus=bonus4+(i-400000)*0.03;else if(i=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf(bonus=%d,bonus);}-----------------------------------------------------------------------------【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
C语言程序设计何钦铭颜晖第5章函数函数在C语言中有很多优点。
首先,函数可以将一个复杂的问题分解为多个简单的子问题,从而提高代码的可读性和可维护性。
通过将程序分解为多个函数,我们可以更好地组织代码,使得程序结构更加清晰明了。
其次,函数可以提高代码的重复利用性。
通过将常用的功能封装在函数中,我们可以在程序的不同部分多次调用这些函数来完成相同的任务,而不需要重复编写相同的代码。
这样不仅可以减少代码量,还可以提高代码的可重复使用性。
此外,函数可以提高代码的可扩展性和模块化。
将功能相关的代码封装在一个函数中,可以使得它们更加独立,从而方便对程序进行扩展或修改。
如果我们需要修改一些功能,只需要修改对应的函数而不影响其他部分的代码,这样可以减少错误和改动的影响范围。
在C语言中,函数的定义包括函数头和函数体两部分。
函数头包括函数的返回类型、函数名和参数列表,用来声明函数的类型和参数信息。
函数体包括函数的具体实现,是函数执行具体任务的地方。
C语言中的函数使用方法如下:```c返回类型函数名(参数列表)函数体return 返回值;```其中,返回类型指定函数的返回值类型,可以是基本数据类型(如int、float等)或自定义的结构体类型。
函数名是函数的标识符,用来唯一标识一个函数。
参数列表包括函数的参数类型和参数名,用来接收调用函数时传递的参数。
函数体是函数的具体实现代码,它包含了函数要执行的任务和具体的算法逻辑。
return语句用于返回函数的返回值并结束函数的执行。
C语言中的函数可以分为库函数和用户自定义函数两种类型。
库函数是由C语言提供的一系列函数,它们以函数库的方式被编译成目标文件,并通过链接器与用户程序进行链接。
库函数包括C标准库(如stdio.h、stdlib.h等)和操作系统提供的函数(如文件IO、内存管理等),它们可以直接在C程序中使用。
用户自定义函数是程序员根据实际需求自己编写的函数,它们可以根据不同的功能和需求来定义,从而实现各种不同的任务。
C语言程序设计何钦铭颜晖第7章数组《C语言程序设计(第3版)》是由何钦铭和颜晖共同编写的一本C语言教材,主要介绍了C语言的基础知识和编程方法。
其中第7章是关于数组的内容,涵盖了数组的定义、初始化、访问元素以及数组的运算等方面。
本文将从以下几个方面对本章进行详细介绍。
首先,第7章首先介绍了数组的概念和定义。
数组是一组有序的、相同类型的数据元素的集合,通过下标来唯一标识数组中的每个元素。
章节中详细介绍了数组的声明和初始化方式,包括静态数组和动态数组的定义。
其次,本章还讲解了数组元素的访问和操作。
可以通过数组的下标来访问数组中的元素,数组的下标从0开始,依次递增。
章节通过实例演示了如何通过循环遍历数组和输入输出函数来操作数组中的元素。
同时,还介绍了数组的一些特殊运算,比如数组的拷贝和交换等操作。
接着,本章进一步讨论了多维数组的概念和使用方法。
多维数组是一种特殊的数组类型,每个元素还可以拥有多个子元素。
本章通过示例介绍了多维数组的定义和初始化方式,并且详细演示了如何通过嵌套循环来遍历多维数组。
此外,本章还介绍了C语言中常用的数组函数和头文件。
通过引入相关的头文件和函数,可以方便地进行数组的操作和处理。
例如,<stdlib.h>头文件中的rand(函数可以用来生成随机数,<string.h>头文件中的strcpy(函数可以用来拷贝字符串等。
最后,本章还提供了一些数组的应用实例,包括数组的排序、查找和统计。
通过这些实例,读者可以更好地理解如何运用数组来解决实际问题。
总的来说,第7章《数组》是《C语言程序设计(第3版)》中的一章,主要介绍了数组的概念、定义、访问和操作,以及多维数组和数组函数的使用方法。
通过本章的学习,读者可以全面掌握C语言中数组的知识和应用技巧,为后续的编程学习和实践奠定良好基础。
C语言程序设计何钦铭颜晖第10章函数与程序结构函数是C语言程序设计的重要组成部分,可以帮助我们组织和管理代码,实现代码的复用和模块化开发。
本章将介绍函数的定义、调用和参数传递等基本概念,以及程序的模块化结构和头文件的使用。
1.函数定义与调用函数是一些已经封装好的代码块,可以在需要的地方被调用执行。
函数的定义包括函数名、参数列表和函数体。
函数的调用通过函数名和实参列表来实现。
在C语言中,函数的定义一般是在main函数之前。
函数可以返回一个值,也可以不返回任何值。
例如:int main(,其中int表示返回值类型,main表示函数名。
没有返回值的函数使用关键字void来表示。
函数可以有多个参数,参数之间用逗号分隔。
参数可以是任意数据类型。
函数体中的代码用花括号{}括起来。
例如:int add(int a, int b) {return a + b;}表示定义了一个add函数,接受两个int类型的参数a和b,返回它们的和。
函数的调用通过函数名和实参列表来实现。
例如:int sum = add(3, 5);表示调用了add函数,并将返回结果赋值给sum变量。
函数调用前面需要指定返回类型,以便正确使用函数返回的值。
2.递归函数递归函数是一种特殊的函数,它在函数体内部调用自己。
递归函数可以解决一些问题,如阶乘、斐波那契数列等。
但是要注意递归函数的退出条件,否则可能会导致无限递归,造成程序崩溃。
3.函数的参数传递在函数的定义中,可以指定参数的传递方式。
C语言中有两种参数传递方式:值传递和指针传递。
值传递是将实参的值复制给形参,函数内部对形参的修改不会影响实参。
指针传递是将实参的地址传递给形参,可以在函数内部修改实参的值。
4.程序结构与模块化开发模块化开发是将程序分解成多个模块,每个模块负责一个特定的功能。
C语言中使用头文件来实现模块化开发。
头文件包含了函数的声明,以及一些常量、宏定义等。
头文件需要使用#include指令引入到主文件中。
Object-Oriented Programming1.Abstraction(数据抽象)Encapsulation(hidden implementation)封装性ObjectState,Data,Message, Method, Interface, Operation,Function Type:All objects of a particular type can receive the same messages.2.Inheritance(继承性)3.Polymorphism(多态性)4.A Better C4.1 // comments/* *///4.2 Function Prototypevoid *malloc(size_t);4.3 The new & delete Operators char *p = new char[3];int *p = new int[3];4.4 Defining variables anywhereint k;k = 5;int m;m = k+6;4.5 Referenceint k = 8;int &m = k;4.6 Inline function4.7 const5.Object Oriented Programming 5.1 AbstractionEncapsulation(hidden implementation) object & classstruct A{int k;float b;int GetK(){return k;}};A a;a.k = 555;class A{private:int k; //hidden implementationfloat b;public:void SetK(int k){ //member function k = k;}};A a;a.k = 777; //. Xa.GetK()constructor (initialization)destructor(cleanup)class Stack{};5.2 Inheritanceclass Basic{};class Derive1 : public Basic{};5.3 Polymorphism(多态性)5.3.1Static PolymorphismOverloading5.3.1.1 function Overloading(函数重载) 5.3.1.2 operator Overloading(操作符重载) class Complex{double m_r;double m_i;Complex(double r=0.0,double i=0.0){m_r=r;m_i=i;}void operator()(double r,double i){m_r=r;m_i=i;}Complex operator+(const Complex &c)const{return Complex(m_r+c,m_r, m_i+c,m_i);}double GetR() const{retur m_r;}double GetI() const{retur m_i;}}class ComplexPtr{Complex *m_ptr;public:ComplexPtr(Complex &c){m_ptr=c;}const ComplexPtr & operator=(Complex * const ptr) {m_ptr=ptr;return *this;}Complex * operator->()const{return m_ptr;}Complex & operator *(){return *m_ptr;}Complex &operator[] (int i){return m_ptr[i];}const Complex &operator[] (int i) const{return m_ptr[i];}ComplexPtr &operator++(){m_ptr++;return *this;}ComplexPtr &operator++(int){m_ptr++;return *this;}}void main(){Complex c(3,4);ComplexPtr ptr(c);cout<<ptr->GetR()<<endl;cout<<(*ptr).GetR()<<endl;ptr=new Complex[10];ptr[1](5.6);ptr[2]=ptr[1]+c;++ptr;ptr++;}●Default Arguments(默认参数)5.3.1.3 Redefining(重定义)●name hiding●Overriding(重写,覆盖,超载,过载)5.3.2Dynamic polymorphism●Upcasting(向上类型转换)●Virtual Function●Incremental development(增量式开发)6.File & Stream6.1 Text filecout << 123.567 << endl;k = 123 ;cout ≪ k ;cout.fill('$');cout.precision(8);cout.width(7);cout.setf(ios::hex);cout << 23 << endl;fstream in("in.txt",ios::in);fstream out("out.txt",ios::out);if (!in)return;while (!in.eof()){char ch = in.get();out.put(ch);}6.2 Binary filereadwrite7.Templates7.1 Function templatestemplate <class T>T Max(T x,T y){return (x>y?x : y);}7.2 Class templates#include <iostream.h>const int STACKSIZE = 50; template <class T>class Stack{T *m_pItem;int m_top;int m_size;public:Stack(int size = STACKSIZE){m_size = size;m_pItem = new int[size];m_top = -1;}void Push(T item){m_pItem[++m_top] = item;}T Pop();};template <class T>T Stack<T>::Pop(){return m_pItem[m_top--];}void main(){Stack<int> s(10);int i;for (i=0;i<10;i++){s.Push(i);}for (i=0;i<10;i++)cout << s.Pop() << endl;}}8.Exception handling8.1 assert8.2 return true/false8.3 try/catch throw#include <iostream.h>class Overflow{};class Underflow{};const int STACKSIZE = 50; template <class T>class Stack{T *m_pItem;int m_top;int m_size;public:Stack(int size = STACKSIZE){m_size = size;m_pItem = new int[size];m_top = -1;}void Push(T item){if (m_top >= m_size-1)throw Overflow();m_pItem[++m_top] = item;}T Pop();};template <class T>T Stack<T>::Pop(){if (m_top < 0)throw Underflow();return m_pItem[m_top--];}void main(){Stack<int> s(3);int i;try{for (i=0;i<10;i++){s.Push(i);}}catch(Overflow obj){cout << "Stack Overflow" << endl;}try{for (i=0;i<10;i++)cout << s.Pop() << endl;}catch(Underflow){cout << "Stack Underflow" << endl;}}global data areastackheap9.Copy-constructorT(const T &)overloading =overloading T(const &T) class String{char *p;int l;public:String(char * s=null){if(s){l=::strlen(s);p=new char[l+1];::strcpy(p,s)}else{p=null;l=0;}}String (const String &s){if(s.p){l=::strlen(s.p);p=new char[l+1];::strcpy(p,s.p)}else{p=null;l=0;}}~String(){delete[] p;}}String s1(“Hi”);String s2=s1;(虚析构函数与纯虚函数)Abstract base classes(抽象基类)class Base{int *p;public:Base(int size){p=new int[size];}~Base(){delete []p;}};class Derive:public Basechar * s;public:Derive(int size):Base(size){s=new char[size];}~Derive(){s=new char[size];}}Base *pB=new Derive(10);delete pB;11.Run-time type identification (RTTI)typeid(t).name()#include<typeinfo.h>class Base{};class Derive:public Base{};void main(){Base *bp=new Derive;cout<<typeid(*bp).name()<<endl;}12.C++ explicit castsdynamic_cast<> downcastingstatic_cast<> upcastingreinterpret_cast<>const_castBase b;Derive d;Base *bp;Derive *dp;bp=dynamic_cast<Base *>(&d);bp=&b;dp=dynamic_cast<Derive *>(bp);bp=*d;dp= dynamic_cast<Derive *>(bp);Derive &dr1=dynamic_cast<Derive &>(*bp); Derive &dr2=dynamic_cast<Derive &>(b);13.How C++ implements late binding VTABLE VPTR14.Static membersclass A{static int m;int n;};A a1,a2;A1.m=7;A* ap=new A;cout<<ap->m<<”,”;ap->m+=12;cout<<ap->m<<”,”; delete aplcout<<a1.m;spacenamespace A{int m;namespace B{int m;int n;void Fb(){m=3;n=4;}}void Fa(){B::m+=7;m=23;}}namespace B{int m;}int m;void F(){m=8;A::m=9;B::m=10;A::B::m=10;}16.Pointer to class member17.Multiple inheritanceclass Base1{int i;}class Base2{int i;}class Derive:public Base1,public Base2 {float f;int getInt(){return i;}float getFloat(){return f;}}。