C++程序设计 谭浩强清华版第4章

合集下载

《C语言程序设计》第二版(谭浩强)-4-7章课后习题答案-清华大学出版社

《C语言程序设计》第二版(谭浩强)-4-7章课后习题答案-清华大学出版社

《C语言程序设计》第二版(谭浩强)-4-7章课后习题答案-清华大学出版社4-5原题:打印出下题的结果main(){int a=5,b=7;float x=67.8564,y=-789.124;char c='A';long n=1234567;unsigned u=65535;printf("%d%d\n",a,b);printf("%3d%3d\n",a,b);printf("%f,%f\n",x,y);printf("%-10f,%-10f\n",x,y);printf("%8.2f,%8.2f,%4f,%4f,%3f,%3f\n",x,y,x,y,x,y);printf("%e,%10.2e\n",x,y);printf("%c,%d,%o,%x\n",c,c,c,c);printf("%ld,%lo,%x\n",n,n,n);printf("%u,%o,%x,%d\n",u,u,u,u);printf("%s,%5.3s\n","COMPUTER","COMPUTER");}结果:575 767.856400,-789.12402367.856400 ,-789.12402367.86, -789.12,67.856400,-789.124023,67.856400,-789.1240236.78564e+01, -7.9e+02A,65,101,411234567,4553207,d68765535,177777,ffff,-1COMPUTER, COM4-6原题:用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1='A',c2='a'。

谭浩强C语言第4章

谭浩强C语言第4章

长度: 长度: 长度格式符为h,l两种, 表示按短整型量输出, 长度格式符为h,l两种,h表示按短整型量输出, h,l两种 表示按长整型量输出. l表示按长整型量输出.
练习: 练习: int a=1234; b=int b=-1; float f=123.456; ch='a ; char ch= a'; printf("%8d,%2d\n",a,a); printf( %8d,%2d\ ,a,a); %8d,%2d printf("%#x %#x",b); printf( %#x ,b); printf("%f,%8f,%8.1f,%.2f,%.2e %f,%8f,%8.1f,%.2f,%.2e\ ,f,f,f,f,f); printf( %f,%8f,%8.1f,%.2f,%.2e\n",f,f,f,f,f); printf("%3c %3c\ ,ch); printf( %3c\n",ch); printf("%2.3s %2.3s", abcdefg abcdefg"); printf( %2.3s ,"abcdefg ); 上机时验证自己的答案. 上机时验证自己的答案.
scanf函数 scanf函数 按指定格式从键盘读入数据, 按指定格式从键盘读入数据,存入地址表指定的存储 地址中,并按回车键结束.如 地址中,并按回车键结束. scanf("%d%d",&i,&j); scanf可以使用的格式字符和printf的一样 scanf可以使用的格式字符和printf的一样 可以使用的格式字符和printf scanf一般用空格,TAB或回车键作为分隔符 scanf一般用空格,TAB或回车键作为分隔符 一般用空格 scanf在遇到分隔符或非法输入时认为该数据结束 scanf在遇到分隔符或非法输入时认为该数据结束 scanf函数中的后面部分应当是变量地址 scanf函数中的后面部分应当是变量地址

谭浩强版本C语言课后习题第四章

谭浩强版本C语言课后习题第四章
法2:
1 #include<stdio.h> 2 int main() 3{ 4 int a,b,c,temp,max; 5 scanf("%d,%d,%d",&a,&b,&c); 6 temp=(a>b)?a:b; 7 max=(temp>c)?temp:c; 8 printf("最大的是:%d\n",max); 9 return 0; 10 }
31 printf("\n反序数字为\n");
32 printf("%d%d%d%d%d",indiv,ten,hundred,thousand,ten_thousand);
33 break;
34 case 4:printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);
35 printf("\n反序数字为\n");
36 printf("%d%d%d%d",indiv,ten,hundred,thousand);
37 break;
38 case 3:printf("%d,%d,%d",hundred,ten,indiv);
39 printf("\n反序数字为\n");
8、
1 #include<stdio.h> 2 int main() 3{ 4 float score; 5 char grad; 6 printf("enter score:"); 7 scanf("%f",&score); 8 while(score>100||score<0) 9 {printf("enter again:"); 10 scanf("%f",&score); 11 } 12 switch((int)(score/10)) 13 {case 10: 14 case 9:grad='A';break; 15 case 8:grad='B';break; 16 case 7:grad='C';break; 17 case 6:grad='B';break; 18 case 5: 19 case 4: 20 case 3: 21 case 2: 22 case 1:

清华大学C语言谭浩强第4章精品文档

清华大学C语言谭浩强第4章精品文档

if(a[i]<min)
/* 如果当前数小于最小数 */
{ min=a[i];
/* 记录新的最小数和下标 */
min_m=i;
x=a[min_m]; /* 交换最小数和第m个数的位置 */
a[min_m]=a[m]; a[m]=x; } for(i=0;i<n;i++)
printf("%d ",a[i]); printf("\n"); }
• 第1步、在m个数中找出最小数,然后和第一个数交换, 前1个数已经排好序。
• 第2步、在m-1个数中找出最小数,然后和第2个数交 换,前2个数已经排好序。
• …… • 第k步、在m-k+1个数中找出最小数,然后和第k个数
交换,前k个数已经排好序。 • 这样一值到第m-1步结束。
#include<stdio.h>
4.3.1二维数组的定义
• 1. 二维数组定义的一般形式 • 2. 对二维数组的说明 • 3. 多维数组的扩展
1.二维数组定义的一般形式
• 二维数组定义的一般形式为:
类型说明符 数组名[行数][列数]
• 其中“行数”表示第一维下标的长度,“列数” 则表示第二维下标的长度。
• 例如:
int m[4][5];
• 在定义数组的同时给数组元素赋予初值称为数组 的初始化。
• 初始化赋值的一般形式为:
类型说明符 数组名[常量表达式]={数据值1, 数据值2,…,数据值n};
• 其中在{ }中的各数据值即为各元素的初值,各值 之间用逗号间隔。
• C语言对数组的初始化赋值还有以下几点规定: (1)可以只给部分元素赋初值。没有赋初值的元素:

C语言第4章(谭浩强)

C语言第4章(谭浩强)
26
总结:
用于长整型整数,可加在格式符 d,o,x,u 前面; m 代表数据的最小宽度,超出就按原数据 宽度输出; n 对于实数,代表小数的位数;对于字符 串,代表截取的字符个数; - 输出的字符或数字向左靠,右边补空格。 l
注意:
(1)除了xX,eE,gG以外,都不可以使用大写,只可以用 小写表示。 (2)可以在printf函数中的格式控制字符串中包含转义字 符。 (3)格式符号以%开头,以上述9种格式符之一结束。 如:printf(“c=%cf=%fs=%s”,c,f,s);
25
总结:
%d 以带符号十进制形式输出整数。 %f 以小数形式输出单、双精度数,有6 位小数。 %c 以字符形式输出,只有一个字符。 %o 以无符号的八进制形式输出整数。 %x 以无符号十六进制形式输出整数。
%u 以无符号十进制形式输出整数。 %s 以字符串形式输出。 %e 以标准指数形式输出单、双精度数。 %g 选取%f或%e格式中输出较短的一种 格式输出,不输出0。
14
§4.5 格式输入与输出
一、printf函数(格式输出函数) 这个函数我们在前面见过很多 次了。它的作用是向终端输出任意 类型的数据。 printf() 函数的使用格式为:
printf(格式控制,输出表列);
1、格式控制符: 是用双引号括起来的字符串, 包括两种信息:
15
1)普通字符进行原样输出:如空格、逗号 printf(“this is my book!”); printf(“x=%d,y=%d”,x,y);
<stdio.h>”
11
例如:
#include <stdio.h> main() { char a , b , c ; a = ‟B‟ ; b = ‟O‟ ; c = ‟Y‟ ; putchar (a) ; putchar (b) ; putchar (c) ; }

谭浩强C程序设计第三版清华课件第4章简单程序

谭浩强C程序设计第三版清华课件第4章简单程序

21
4.5 格式输入与输出
(1) d格式符。用来输出十进制整数。
几种用法: ① %d:按十进制整型数据的实际长度输出。 ② %md:m为指定的输出字段的宽度。如果数据的位数小于m,
则左端补以空格,若大于m,则按实际位数输出。 例: printf(″%4d,%4d″,a,b);
若a=123,d=12345,则输出结果为 123,12345 ③ %ld:输出长整型数据。 例: long a=135790;/* 定义a为长整型变量*/ printf(″%ld″,a);
9
4.2 赋值语句
•赋值语句是由赋值表达式加上一个分号构成 例:a=100 赋值表达式
a=100; 赋值语句
•条件中不能含有赋值符号,但是赋值表达式可以
包含于条件表达式中
例:if(a=b)
t=a;
错误
if((a=b)>0) t=a;
正确
C程序设计(第三版)
10
4.2 赋值语句
问题:c语言中的赋值语句于其他高级语言 的赋值语句有什么不同点
C程序设计(第三版)
13
4.3 数据输入输出的概念及在C 语言中的实现
(三).在使用系统库函数时,要用预编译命令 “#include”将有关的“头文件”包括到用户源 文件中.
例如:在调用标准输入输出库函数时,文件开头应
该有:
头文

#include “stdio.h”
或:
#include <stdio.h>
右侧,左补空格。 ⑤ %-m.ns,n个字符输出在m列的左侧,右补空格,若n〉m,m自
动取n值。
C程序设计(第三版)
28
4.5 格式输入与输出

C程序设计(第四版)(谭浩强编)教程-第4章_选择结构程序设计

C程序设计(第四版)(谭浩强编)教程-第4章_选择结构程序设计


==
!=
等于
不等于
a==b
x!=0
低 (赋值运算符)
Lecture Notes
12
Liu Yong, USTC © 2010
关系表达式
用关系运算符将两个表达式连接起来 a+b>c+d, (a=3)>x
注意区分等于(==)和赋值运算符(=)

a=b, a==b
关系表达式的值是逻辑值—“真”或“假”
if(exp1)
语句1
else
语句1}
else
语句2
Lecture Notes 8
语句2
Liu Yong, USTC © 2010
例:
#include <stdio.h>
int main() {
int result;
printf(“input your score:”); scanf(“%d”,&result);
case 6: printf("Sat.\n"); break;
default:printf("Sun.\n"); }
Lecture Notes 27 Liu Yong, USTC © 2010
Lecture Notes
18
Liu Yong, USTC © 2010
逻辑表达式求值特点
逻辑表达式中的运算符,只有会影响表
达式求值时,才会执行
a&&b&&c a||b||c
若a为“假”,则不再判断b和c 若a为“真”,则不再判断b和c
举例,(m=a>b)&&(n=c>d)

C语言(谭浩强)第4章模块化程序设计

C语言(谭浩强)第4章模块化程序设计
(2) 通过给变量定义不同的存储类别,控制模 块内部及外部的信息交换。
(3) 具有编译预处理功能,为程序的调试、移 植提供了方便,也支持了模块化程序设计。
整理ppt
2
4.1函 数
4.1.1 设计C语言程序就是设计函数
无论涉及的问题是复杂还是简单,规模是大 还是小,用C语言设计程序,任务只有一种,就 是编写函数,至少也要编写一个main函数。执行C 程序也就是执行相应的main函数。即从main函数 的第一个前花括号开始,依次执行后面的语句, 直到最后的后花括号为止。
• 纯粹计算型函数,如squt()和sin()。这类函数将返回一 个计算结果。
• 完成一项具体工作,返回完成的成败。如printf()执行成 功时,返回显示的字节数;失败时,返回一个负整数。
• 只执行一个过程的函数,不产生返回值,其类型应定义 为void。
C99规定,对于非void类型的函数,必须使用有返回

float add (unsigned int a, unsigned int b)

printf(″a=%u, b=%u\n″, a,b);
return (a+b);

整理ppt
16
2. 传值调用的虚实结合过程
程序进行编译时,并不为形式参数分配存储 空间。只有在被调用时,形式参数才临时地占有 存储空间,其过程如下:
int func(int x)
{
x=5;
return x+3;
}
int main(void)
{
printf("x=%d\n",x);
return 0;
}
这个程序企图在main函数中使用func函数中的 变量x。编译这个程序,系统将给出如下编译错误:

《C++面向对象程序设计》答案-第四章--谭浩强-清华大学出版社

《C++面向对象程序设计》答案-第四章--谭浩强-清华大学出版社

1:#include <iostream>using namespace std;class Complex{public:Complex(){real=0;imag=0;}Complex(double r,double i){real=r;imag=i;}double get_real();double get_imag();void display();private:double real;double imag;};double Complex::get_real(){return real;}double Complex::get_imag(){return imag;}void Complex::display(){cout<<"("<<real<<","<<imag<<"i)"<<endl;}Complex operator + (Complex &c1,Complex &c2){return Complex(c1.get_real()+c2.get_real(),c1.get_imag()+c2.get_imag()); }int main(){Complex c1(3,4),c2(5,-10),c3;c3=c1+c2;cout<<"c3=";c3.display();return 0;}2:#include <iostream>using namespace std;class Complex{public:Complex(){real=0;imag=0;}Complex(double r,double i){real=r;imag=i;}Complex operator+(Complex &c2);Complex operator-(Complex &c2);Complex operator*(Complex &c2);Complex operator/(Complex &c2);void display();private:double real;double imag;};Complex Complex::operator+(Complex &c2){Complex c;c.real=real+c2.real;c.imag=imag+c2.imag;return c;}Complex Complex::operator-(Complex &c2){Complex c;c.real=real-c2.real;c.imag=imag-c2.imag;return c;}Complex Complex::operator*(Complex &c2){Complex c;c.real=real*c2.real-imag*c2.imag;c.imag=imag*c2.real+real*c2.imag;return c;}Complex Complex::operator/(Complex &c2){Complex c;c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag); return c;}void Complex::display(){cout<<"("<<real<<","<<imag<<"i)"<<endl;}int main(){Complex c1(3,4),c2(5,-10),c3;c3=c1+c2;cout<<"c1+c2=";c3.display();c3=c1-c2;cout<<"c1-c2=";c3.display();cout<<"c1*c2=";c3.display();c3=c1/c2;cout<<"c1/c2=";c3.display();return 0;}3:#include <iostream> //用VC++时改为∶#include <iostream.h> using namespace std; //用VC++时为取消此行class Complex{public:Complex(){real=0;imag=0;}Complex(double r,double i){real=r;imag=i;}Complex operator+(Complex &c2);Complex operator+(int &i);friend Complex operator+(int&,Complex &);void display();private:double real;double imag;};Complex Complex::operator+(Complex &c){return Complex(real+c.real,imag+c.imag);}Complex Complex::operator+(int &i){return Complex(real+i,imag);}void Complex::display(){cout<<"("<<real<<","<<imag<<"i)"<<endl;}Complex operator+(int &i,Complex &c){return Complex(i+c.real,c.imag);}int main(){Complex c1(3,4),c2(5,-10),c3;int i=5;c3=c1+c2;cout<<"c1+c2=";c3.display();c3=i+c1;cout<<"i+c1=";c3=c1+i;cout<<"c1+i=";c3.display();return 0;}4:#include <iostream>using namespace std;class Matrix //定义Matrix类{public:Matrix(); //默认构造函数friend Matrix operator+(Matrix &,Matrix &); //重载运算符“+”void input(); //输入数据函数void display(); //输出数据函数private:int mat[2][3];};Matrix::Matrix() //定义构造函数{for(int i=0;i<2;i++)for(int j=0;j<3;j++)mat[i][j]=0;}Matrix operator+(Matrix &a,Matrix &b) //定义重载运算符“+”函数{Matrix c;for(int i=0;i<2;i++)for(int j=0;j<3;j++){c.mat[i][j]=a.mat[i][j]+b.mat[i][j];}return c;}void Matrix::input() //定义输入数据函数{cout<<"input value of matrix:"<<endl;for(int i=0;i<2;i++)for(int j=0;j<3;j++)cin>>mat[i][j];}void Matrix::display() //定义输出数据函数{for (int i=0;i<2;i++){for(int j=0;j<3;j++){cout<<mat[i][j]<<" ";}cout<<endl;}}int main(){Matrix a,b,c;a.input();b.input();cout<<endl<<"Matrix a:"<<endl;a.display();cout<<endl<<"Matrix b:"<<endl;b.display();c=a+b; //用重载运算符“+”实现两个矩阵相加cout<<endl<<"Matrix c = Matrix a + Matrix b :"<<endl;c.display();return 0;}5:#include <iostream.h>//using namespace std;class Matrix{public:Matrix();friend Matrix operator+(Matrix &,Matrix &);friend ostream& operator<<(ostream&,Matrix&);friend istream& operator>>(istream&,Matrix&);private:int mat[2][3];};Matrix::Matrix(){for(int i=0;i<2;i++)for(int j=0;j<3;j++)mat[i][j]=0;}Matrix operator+(Matrix &a,Matrix &b){Matrix c;for(int i=0;i<2;i++)for(int j=0;j<3;j++){c.mat[i][j]=a.mat[i][j]+b.mat[i][j];}return c;}istream& operator>>(istream &in,Matrix &m){cout<<"input value of matrix:"<<endl;for(int i=0;i<2;i++)for(int j=0;j<3;j++)in>>m.mat[i][j];return in;}ostream& operator<<(ostream &out,Matrix &m){for (int i=0;i<2;i++){for(int j=0;j<3;j++){out<<m.mat[i][j]<<" ";}out<<endl;}return out;}int main(){ Matrix a,b,c;cin>>a;cin>>b;cout<<endl<<"Matrix a:"<<endl<<a<<endl;cout<<endl<<"Matrix b:"<<endl<<b<<endl;c=a+b;cout<<endl<<"Matrix c = Matrix a + Matrix b :"<<endl<<c<<endl; return 0;}6:#include <iostream>using namespace std;class Complex{public:Complex(){real=0;imag=0;}Complex(double r){real=r;imag=0;}Complex(double r,double i){real=r;imag=i;}operator double(){return real;}void display();private:double real;double imag;};void Complex::display(){cout<<"("<<real<<", "<<imag<<")"<<endl;}{Complex c1(3,4),c2;double d1;d1=2.5+c1;cout<<"d1="<<d1<<endl;c2=Complex(d1);cout<<"c2=";c2.display();return 0;}7:#include <iostream>using namespace std;class Student{public:Student(int,char[],char,float);int get_num(){return num;}char * get_name(){return name;}char get_sex(){return sex;}void display(){cout<<"num:"<<num<<"\nname:"<<name<<"\nsex:"<<sex<<"\nscore:"<<score<<"\n\n";} private:int num;char name[20];char sex;float score;};Student::Student(int n,char nam[],char s,float so){num=n;strcpy(name,nam);sex=s;score=so;}class Teacher{public:Teacher(){}Teacher(Student&);Teacher(int n,char nam[],char sex,float pay);void display();private:int num;char name[20];float pay;};Teacher::Teacher(int n,char nam[],char s,float p){num=n;strcpy(name,nam);sex=s;pay=p;}Teacher::Teacher(Student& stud){num=stud.get_num();strcpy(name,stud.get_name());sex=stud.get_sex();pay=1500;}void Teacher::display(){cout<<"num:"<<num<<"\nname:"<<name<<"\nsex:"<<sex<<"\npay:"<<pay<<"\n\n";}int main(){Teacher teacher1(10001,"Li",'f',1234.5),teacher2;Student student1(20010,"Wang",'m',89.5);cout<<"student1:"<<endl;student1.display();teacher2=Teacher(student1);cout<<"teacher2:"<<endl;teacher2.display();return 0;}。

C语言程序设计第四版第四章答案谭浩强.doc

C语言程序设计第四版第四章答案谭浩强.doc
break;
case 3: printf( * *%d,%d,%d "9hundred9ten9indiv);
printf(n\n反序数字为:”);
printf(H%d%d%d\nM,indiv,ten,hundred);
break;
case 2: printf(n%d,%dH,ten,indiv);
解:计算利润时,要特别注意不同利润的不同提成比例。例如,利润为15万元,其中有10万元按10%的比例提成,另外5万元则按7.5%提成。
(1)用if语句编程序。
#include <stdio.h>
main()
{long i;
float bonus,bonl^bon2^bon4^bon6^bonl0;
bonl=100000*0.1;
printf(M\n反序数字为:”);
printf(fl%d%d\nf\indiv,ten);
break;
case 1: printf(n%dn,indiv);
printf(M\n反序数字为:”);
printf(H%d\nM,indiv);
break;
}
}
4.10企业发放的奖金根据利润提成。利润I低于或等于10万元时,奖金可提成10%;利 润高于10万元,低于20万元(100()00vlW200000)时,其中10万元按10%提成,高于10万元的部分,可提成7.5%;200000<1^400000时,其中20万元仍按上述办法提成(下 同),高于20万元的部分按5%提成;400000<1^600000时,高于40万元的部分按3%提 成;600000 <1^1000000时,高于60万的部分按1.5%提成;1>1000000时,超过100万元 的部分按1%提成。从键盘输入当月利润I,求应发放奖金总数。要求:(1)用if语句编程序; ⑵用switch语句编程序。

《C语言程序设计》教案(清华谭浩强)

《C语言程序设计》教案(清华谭浩强)

《C语言程序设计》教案(清华谭浩强)第一章:C语言概述1.1 课程介绍介绍C语言的历史和发展解释C语言的特点和应用范围强调学习C语言的重要性和目的1.2 C语言的基本概念解释编程语言和编译器的概念介绍C语言的基本数据类型和变量讲解C语言的语法结构和程序结构1.3 C语言的编译过程解释编译器的角色和功能介绍编译过程中的预处理、编译、汇编和步骤强调编译过程中产生的文件和它们的作用第二章:基本数据类型和运算符2.1 基本数据类型介绍整型、浮点型、字符型和布尔型的概念和用法解释不同数据类型的存储方式和大小强调数据类型的选择和使用场景2.2 变量和常量解释变量的概念和作用介绍变量的声明和初始化方法讲解常量的概念和用法2.3 运算符介绍算术运算符、关系运算符和逻辑运算符的概念和用法解释赋值运算符和条件运算符的作用强调不同运算符的优先级和使用规则第三章:控制语句3.1 条件语句介绍if语句的语法和用法讲解switch语句的概念和用法强调条件语句的选择和嵌套使用3.2 循环语句介绍for循环、while循环和do-while循环的概念和用法解释循环控制语句如break和continue的作用强调循环条件的设置和循环次数的控制3.3 跳转语句介绍goto语句的概念和用法讲解label标签的作用和跳转规则强调跳转语句的使用场景和可能导致的问题第四章:函数和指针4.1 函数的基本概念介绍函数的定义和声明讲解函数的参数传递和返回值强调函数的命名规则和命名规范4.2 指针的概念和用法解释指针的概念和作用介绍指针的声明和初始化方法讲解指针的赋值和指针运算4.3 指针和数组介绍数组的概念和用法解释指针和数组的关系强调指针在数组操作中的应用第五章:结构体和文件操作5.1 结构体的概念和用法介绍结构体的定义和声明讲解结构体的成员访问和内存布局强调结构体在数据组织中的应用5.2 文件操作的基本概念解释文件的概念和文件操作的重要性介绍文件打开、读写、关闭等操作的方法强调文件操作中的错误处理和文件指针的管理第六章:动态内存分配6.1 动态内存分配的概念介绍动态内存分配的原因和必要性解释malloc、calloc和realloc函数的作用和用法强调动态内存分配的注意事项和错误处理6.2 链表的概念和用法介绍链表的定义和结构讲解链表的创建、插入、删除和遍历操作强调链表的优势和应用场景6.3 动态内存分配的应用实例通过实例演示动态内存分配在实际编程中的应用讲解内存泄漏和内存溢出的概念强调编写高效和安全的程序的重要性第七章:字符串处理7.1 字符串的基本概念介绍字符串的定义和表示方法解释字符串的长度和字符串的结束标志强调字符串与数组的区别和联系7.2 字符串的常用函数介绍字符串的输入输出函数如printf和scanf 讲解字符串的拷贝、连接、比较等操作函数强调字符串处理函数的使用和注意事项7.3 字符串处理的应用实例通过实例演示字符串处理在实际编程中的应用讲解字符串排序、查找和替换等操作强调字符串处理在文本分析和数据处理中的应用第八章:标准库函数8.1 标准输入输出库函数介绍标准输入输出库stdio.h中的常用函数讲解文件读写、数据转换等函数的用法和功能强调标准库函数的使用场景和注意事项8.2 字符串处理库函数介绍字符串处理库string.h中的常用函数讲解字符串比较、查找和替换等函数的用法和功能强调字符串处理库函数的使用和与其他库函数的配合8.3 数学计算库函数介绍数学计算库math.h中的常用函数讲解数学运算、三角函数和指数函数等函数的用法和功能强调数学计算库函数在数学计算和科学计算中的应用第九章:并发编程和同步机制9.1 并发编程的基本概念介绍并发编程的定义和目的解释进程和线程的概念和关系强调并发编程的优势和挑战9.2 并发编程的同步机制介绍互斥锁、条件变量和信号量等同步机制的原理和用法讲解同步机制在多线程编程中的应用和注意事项强调同步机制在避免竞态条件和数据一致性中的重要性9.3 并发编程的应用实例通过实例演示并发编程在实际应用中的优势和挑战讲解多线程的创建、同步和通信等操作强调并发编程在多任务处理和性能优化中的应用第十章:C语言编程实践10.1 编程实践的重要性强调编程实践在学习和掌握C语言中的重要性解释编程实践对于提高编程能力和解决问题的作用强调编程实践中的代码质量和编程规范10.2 编程实践的项目和案例介绍常见的编程实践项目和案例讲解实际编程中的问题解决方法和技巧强调编程实践中的调试和测试的重要性10.3 编程实践的资源和工具介绍编程实践中的常用工具和环境讲解集成开发环境(IDE)的使用和代码管理强调编程实践中的团队合作和代码分享的重要性重点和难点解析重点环节1:C语言的基本概念和特点需要重点关注C语言的历史和发展,以及其特点和应用范围。

C语言程序设计_课件_第四章(适于清华谭浩强版)

C语言程序设计_课件_第四章(适于清华谭浩强版)

例4.6:将输入字符的大写字符转换成小写字符输 出,小写字符原样输出。 #include "stdio.h" /*-------------------lowercase--------------------------*/ void main() { int c; c=getchar(); if (c>='A' && c<='Z') putchar(c+32); else putchar( c); }
的值为非0,表达式即为真。
例4.2使用if形式编写程序:输入x,求出并输出x的 绝对值。 #include "stdio.h" /*----------------------abs(x)--------------------------*/ void main() { int x; scanf("%d",&x); if (x<0) x=-x; printf("|x|=%d\n",x); }
判断其它条件,跳转到下一条语句执行。若全部 表达式为假,则执行语句n+1。 if (x>0) printf (" x=0"); else if (x<0) printf("x<0"); else
printf("x>0");
例4.8
根据输入的百分制按五分制的成绩输出。百
分制与五分制之间的关系见下表。 百分制 90 ~ 100 80 ~ 89 60 ~ 79 0 ~ 59 五分制 5 4 3 2
表达式语句 最简单的可执行语句。只要在表达 式后面加上分号就可以了。 例如: ++i; x=y; 有效的表达式语句一般都要有赋值 运算, 否则,不做任何赋值运算的表达 式大多数是无意义的。

C程序设计(第四版)(谭浩强编)教程-第4章_选择结构程序设计

C程序设计(第四版)(谭浩强编)教程-第4章_选择结构程序设计
每周一句:想跟同学们说的话 每周一句 想跟同学们说的话
健康、青春和自由可以说是人生的三大财宝, 健康、青春和自由可以说是人生的三大财宝, 和自由可以说是人生的三大财宝 但当我们拥有它时,却毫无所觉,一旦丧失后,才 但当我们拥有它时,却毫无所觉,一旦丧失后, 意识到它们的可贵。 意识到它们的可贵。 ---- Arthur Schopenhauer(德) Schopenhauer(
if (disc<0) printf(“has not real roots\n”); else { p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(“real roots:\nx1=%7.2f\n x2=%7.2f\n”,x1,x2); } return 0; 复合语句 }
在现实生活中 在现实生活中,需要进行判断和选择的 情况是很多的 处理这些问题,关键在于进行条件判断 处理这些问题, 这些问题 由于程序处理问题的需要, 由于程序处理问题的需要,在大多数程 序中都会包含选择结构, 序中都会包含选择结构,需要在进行下 一个操作之前先进行条件判断
4.1 选择结构和条件判断
#include <stdio.h> int main() { float a,b,c,t; scanf("%f,%f,%f",&a,&b,&c); if(a>b) { t=a; a=b; b=t; } if(a>c) { t=a; a=c; c=t; } if(b>c) 如果 b>c,将b和c对换 , 和 对换 { t=b; b=c; c=t; } b是三者中的次小者 是三者中的次 中的 printf("%5.2f,%5.2f,%5.2f\n",a,b,c); return 0; }

C语言程序设计谭浩强第四课后答案讲

C语言程序设计谭浩强第四课后答案讲

第一章程序设计和C语言【第15页】1-5#include <stdio.h>int main ( ){ printf ("**************************\n\n");printf(" Very Good!\n\n");printf ("**************************\n");return 0;}1-6#include <stdio.h>int main(){int a,b,c,max;printf("please input a,b,c:\n");scanf("%d,%d,%d",&a,&b,&c);max=a;if (max<b)max=b;if (max<c)max=c;printf("The largest number is %d\n",max);return 0;}第2章算法——程序的灵魂【第36页】暂无答案第3章最简单的C程序设计——顺序程序设计【第82页】3-1#include <stdio.h>#include <math.h>int main(){float p,r,n;r=0.1;n=10;p=pow(1+r,n);printf("p=%f\n",p);return 0;}3-2-1#include <stdio.h>#include <math.h>int main(){float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r1=0.0414;r0=0.0072;p1=p*((1+r5)*5); // 一次存5年期p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次p5=p*pow(1+r0/4,4*5); // 存活期存款。

C程序设计谭浩强第四章习题与答案

C程序设计谭浩强第四章习题与答案

第四章简单程序4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’。

想得到以下输出格式和结果,请写出程序(包括定义变量类型和设计输出)。

a=_3_ _b=_4_ _c=_5x=1.200000,y=2.400000,z=-3.600000x+y=_3.600_ _y+z=-1.20_ _z+x=-2.40c1=ˊaˊ_or_97(ASCII)c2=ˊbˊ_or_98(ASCII)main(){int a=3,b=4,c=5;long int u=51274,n=128765;float x=1.2,y=2.4,z=3.6;char c1=’a’,c2=’b’;printf("a=%2d b=%2d c=%2d\n",a,b,c);printf("x=%f,y=%f,z=%f\n",x,y,z);printf("x+y=%5.2f y+z=%5.2f z+x=%5.2f\n",x+y,y+z,z+x);printf("u=%6ld n=%9ld\n",u,n);printf("%s %s %d%s\n","c1=’a’","or",c1,"(ASCII)");printf("%s %s %d%s\n","c2=’a’","or",c2,"(ASCII)");}4.7用scanf下面的函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=ˊAˊ,c2=ˊaˊ,问在键盘上如何输入?main(){int a,b;float x,y;char c1c2;scanf("a=%d_b=%d",&a,&b);scanf("_x=%f_y=%e",&x,&y);scanf("_c1=%c_c2=%c",&c1,&c2);}a=3_b=7_x=8.5_y=71.82_c1=A_c2=a4.8设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。

谭浩强C语言__第4章_选择PPT教学课件

谭浩强C语言__第4章_选择PPT教学课件
else printf("您输入的是其它字符\n"); system("pause");
10
}
if语句的嵌套
匹配规则:
Else总是与它上面的,最近的,统一复合语句中的,未配
对的if语句配对。
例:
例:
If()
If()
if() 语句1
{if() 语句1}
else
else
if() 语句2
if() 语句2
!a的值为0
a&&b的值为1
a||b的值为1
!a||b的值为1
4&&0||2的值为1
逻辑表达式
例:5>3&&8<4-!0
自左向右运算
5>3逻辑值为1
!0逻辑值为1
4-1值为3
表达式值为0
1&&0逻辑值为0 8<3逻辑值为0
逻辑表达式
在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。 (1)a&&b&&c 只有a为真时,才需要判断b的值,只有a和b都为真时
复习
顺序结构程序设计
从键盘输入一个大写字母,要求改用小写字母输出
int main() {
char c1,c2; scanf("%c",&c1); printf("您输入的字符是:%c,%d\n",c1,c1); c2=c1+32; printf("转换为小写字母是:%c,%d\n",c2,c2); system("pause");
else 语句3
else 语句3

谭浩强C程序设计第4章

谭浩强C程序设计第4章
开发商和软件开发人员将一些常用的功能模块编写 成函数,放在函数库中供公共选用。程序开发人员 要善于利用库函数,以减少重复编写程序段的工作 量。
图4.1是一个程序中函数调用的示意图。 图4.1
例4.1 在主函数中调用其他函数。
#include <iostream>
பைடு நூலகம்
using namespace std; void printstar(void)
//定义printstar函数
{
cout<<″****************************** ″<<endl;
}
//输出30个“*”
void print_message(void)
//定义print_message函数
{
cout<<″ Welcome to C++!″<<endl;
//输出一行文字
要根据需要编写一个个函数,每个函数用来实现某
一功能。因此,读者必须掌握函数的概念以及学会 设计和使用函数。
“函数”这个名词是从英文function翻译过来的,其 实function的原意是“功能”。顾名思义,一个函数 就是一个功能。
在实际应用的程序中,主函数写得很简单,它的作 用就是调用各个函数,程序各部分的功能全部都是 由各函数实现的。主函数相当于总调度,调动各函 数依次实现各项功能。

C++要求在定义函数时必须指定函数的类型。
4.3 函数参数和函数的值
4.3.1 形式参数和实际参数
在调用函数时,大多数情况下,函数是带参数的。 主调函数和被调用函数之间有数据传递关系。前面 已提到:在定义函数时函数名后面括号中的变量名 称为形式参数(formal parameter,简称形参),在 主调函数中调用一个函数时,函数名后面括号中的 参数(可以是一个表达式)称为实际参数(actual parameter,简称实参)。

谭浩强 c语言程序设计(第四章)

谭浩强 c语言程序设计(第四章)
格式: scanf("格式控制串 格式控制串" 地址表) 格式: scanf( 格式控制串",地址表) 功能:按指定格式从键盘读入数据, 功能:按指定格式从键盘读入数据,存入地址表指定的 存储单元中, 存储单元中,并按回车键结束 地址表:变量的地址,常用取地址运算符& 地址表:变量的地址, 地址表 格式字符 格式字符:d,i,o,x,u,c,s,f,e 格式字符
例4.1 main( )
{ int a; ★ b 的 用 作 { int b; 域只在内 层大 号 括 b=3; //复合语句(分程序) 复合语句(分程序) 这样一个 printf("%d\n",a+b); 局部 } 是复合语句中定义的, 由于 b是复合语句中定义的,在 是复合语句中定义的 b=1; } 它之外使用是错误的
例 scanf("%d",&a); 输入: 输入:10
a=10
例 scanf("%x",&a); 输入: 输入:11
a=17
16
Hale Waihona Puke 第四章 顺序程序设计附加格式说明符(修饰符)
修饰符 功 能 h 用于d,o,x前 指定输入为short型整数 用于d,o,x前,指定输入为short型整数 d,o,x short l m * 用于d,o,x前 指定输入为long型整数 用于d,o,x前,指定输入为long型整数 d,o,x long 用于e,f前 指定输入为double型实数 用于e,f前,指定输入为double型实数 e,f double 指定输入数据宽度,遇空格或不可转换字符则结束 指定输入数据宽度, 抑制符, 抑制符,指定输入项读入后不赋给变量
2
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

*4.8 有默认参数的函数
多次调用同一函数时用同样的实参,C++提供简单 的处理办法,给形参一个默认值,这样形参就不必 一定要从实参取值了。如有一函数声明
float area(float r=6.5);
指定r的默认值为6.5,如果在调用此函数时,确认r 的值为6.5,则可以不必给出实参的值,如
area( ); //相当于area(6.5);
g=max(g1,g2,g3); cout<<″g_max=″<<g<<endl; } int max(int a,int b,int c) {if(b>a) a=b; if(c>a) a=c; return a; }
//求3个长整数中的最大者
//定义求3个整数中的最大者的函数
double max(double a,double b,double c) //定义求3个双精度数中的最大 者的函数 {if(b>a) a=b; if(c>a) a=c; return a; }
程序的组织形式: 在实际应用的程序中,主函数写得很简单,它的作 用就是调用各个函数,程序各部分的功能全部都是 由各函数实现的。主函数相当于总调度,调动各函 数依次实现各项功能。 开发商和软件开发人员将一些常用的功能模块编写 成函数,放在函数库中供公共选用。程序开发人员 要善于利用库函数,以减少重复编写程序段的工作 量。
4.4 函数的调用
(1) 首先被调用的函数必须是已经存在的函数。 (2) 如果使用库函数,一般还应该在本文件开头用 #include命令将有关头文件“包含”到本文件中来。 (3) 如果使用用户自己定义的函数,而该函数与调 用它的函数(即主调函数)在同一个程序单位中, 且位置在主调函数之后,则必须在调用此函数之前 对被调用的函数作声明。 所谓函数声明(declare),就是在函数尚在未定义的 情况下,事先将该函数的有关信息通知编译系统, 以便使编译能正常进行。
例4.2 调用函数时的数据传递。
#include <iostream> using namespace std; int max(int x,int y) {int z; z=x>y?x:y; return(z); }
//定义有参函数max
int main( ) {int a,b,c; cout<<″please enter two integer numbers:″; cin>>a>>b; c=max(a,b); //调用max函数,给定实参为a,b。函数值赋给c cout<<″ma}
if (j>i) i=j; if(k>i) i=k; m=i;
注意使用条件: 使用内置函数可以节省运行时间,但却增加了目标 程序的长度。因此一般只将规模很小(一般为5个语 句以下)而使用频繁的函数(如定时采集数据的函数) 声明为内置函数。
内置函数中不能包括复杂的控制语句,如循环语句 和switch语句。 归纳起来,只有那些规模较小而又被频繁调用的简 单函数,才适合于声明为inline函数。
图4.3
图4.4
调用结束后,形参单元被释放,实参单元仍保留并 维持原值。
4.3.2 函数的返回值
(1) 函数的返回值是通过函数中的return语句获得 的。return语句将被调用函数中的一个确定值带回 主调函数中去。 return语句后面的括号可以要,也可以不要。 return后面的值可以是一个表达式。 (2) 函数值的类型。既然函数有返回值,应当在定 义函数时指定函数值的类型。 (3) 如果函数值的类型和return语句中表达式的值 不一致,则以函数类型为准,即函数类型决定返回 值的类型。对数值型数据,可以自动进行类型转换。
例4.4 函数指定为内置函数。
#include <iostream> using namespace std; inline int max(int,int, int); //声明函数,注意左端有inline int main( ) {int i=10,j=20,k=30,m; m=max(i,j,k); cout<<″max=″<<m<<endl; return 0; }
inline int max(int a,int b,int c) //定义max为内置函数 {if(b>a) a=b; //求a,b,c中的最大者 if(c>a) a=c; return a; }
由于在定义函数时指定它为内置函数,因此编译系 统在遇到函数调用“max(i,j,k)”时,就用max函数 体的代码代替“max(i,j,k)”,同时将实参代替形参。 这样,程序第6行 “m=max(i,j,k);”就被置换成
上例3个max函数的函数体是相同的,其实重载函 数并不要求函数体相同。重载函数除了允许参数类 型不同以外,还允许参数的个数不同。
重载的规则: 参数的个数和类型可以都不同。但不能只有函数 的类型不同而参数的个数和类型相同。 在使用重载函数时,同名函数的功能应当相同或 相近,不要用同一函数名去实现完全不相干的功能
#include <iostream> using namespace std; int main( ) {int max(int a,int b,int c); //函数声明 double max(double a,double b,double c); //函数声明 long max(long a,long b,long c); //函数声明 int i1,i2,i3,i; cin>>i1>>i2>>i3; //输入3个整数 i=max(i1,i2,i3); //求3个整数中的最大者 cout<<″i_max=″<<i<<endl; double d1,d2,d3,d; cin>>d1>>d2>>d3; //输入3个双精度数 d=max(d1,d2,d3); //求3个双精度数中的最大者 cout<<″d_max=″<<d<<endl; long g1,g2,g3,g; cin>>g1>>g2>>g3; //输入3个长整数
4.3 函数参数和函数的值
4.3.1 形式参数和实际参数
在调用函数时,大多数情况下,函数是带参数的。 主调函数和被调用函数之间有数据传递关系。前面 已提到:在定义函数时函数名后面括号中的变量名 称为形式参数(formal parameter,简称形参), 在主调函数中调用一个函数时,函数名后面括号中 的参数(可以是一个表达式)称为实际参数(actual parameter,简称实参)。
从用户使用的角度看,函数有两种: (1) 系统函数,即库函数。这是由编译系统提供的, 用户不必自己定义这些函数,可以直接使用它们。 (2) 用户自己定义的函数。用以解决用户的专门需 要。 从函数的形式看,函数分两类: (1) 无参函数。调用函数时不必给出参数。 (2) 有参函数。在调用函数时,要给出参数。在主 调函数和被调用函数之间有数据传递。
例4.3 对被调用的函数作声明。
#include <iostream> using namespace std; int main( ) {float add(float x,float y); float a,b,c; cout<<″please enter a,b:″; cin>>a>>b; c=add(a,b); cout<<″sum=″<<c<<endl; return 0; } float add(float x,float y) {float z; z=x+y; return (z); }
(4) 实参与形参的类型应相同或赋值兼容。 (5) 实参变量对形参变量的数据传递是“值传递”, 即单向传递,只由实参传给形参,而不能由形参传 回来给实参。在调用函数时,编译系统临时给形参 分配存储单元。请注意: 实参单元与形参单元是 不同的单元。图4.3表示将实参a和b的值2和3传 递给对应的形参x和y。
运行情况如下: please enter two integer numbers:2 3↙ max=3
图4.2
有关形参与实参的说明: (1) 在定义函数时指定的形参,在未出现函数调用 时,它们并不占内存中的存储单元,因此称它们是 形式参数或虚拟参数,表示它们并不是实际存在的 数据,只有在发生函数调用时,函数max中的形参 才被分配内存单元,以便接收从实参传来的数据。 在调用结束后,形参所占的内存单元也被释放。 (2) 实参可以是常量、变量或表达式,如max(3, a+b);但要求a和b有确定的值。以便在调用函数时 将实参的值赋给形参。 (3) 在定义函数时,必须在函数首部指定形参的类 型(见例4.2程序第3行)。
long max(long a,long b,long c) 数 {if(b>a) a=b; if(c>a) a=c; return a; } //定义求3个长整数中的最大者的函
运行情况如下:
185 -76 567↙ (输入3个整数) 56.87 90.23 -3214.78↙ (输入3个实数) 67854 -912456 673456↙ (输入3个长整数) i_max=567 (输出3个整数的最大值) d_max=90.23 (输出3个双精度数的最大值) g_max=673456 (输出3个长整数的最大值)
*4.6 函数的重载
在编程时,有时我们要实现的是同一类的功能,只 是有些细节不同。
int max1(int a,int b, int c); //求3个整数中的最大者 double max2(double a,double b,double c); //求3个双精 度数中最大者 long max3(long a,long b,long c); //求3个长整数中的 最大者
相关文档
最新文档