C+语言程序设计 第3讲:更好的C
C++语言程序设计 第3讲: 更好的C/5
运算符分类 算术运算符加(+)、减(-)、乘(*)、除()、求余(或称模运 算,%)、自增(++)、自减(-)共七种 关系运算符大于(>)小于()、等于(==)大于等于(>=) 于等于(>)六种。 赋值运算符赋值(=)、复合算术赋值(+=,-=,*=,/=%=)和复 合位运算赋值(=,|=,=,少>=,,.)等几种
运算符分类 1. 算术运算符 加(+)、减(-)、乘(*)、除(/)、求余(或称模运 算,%)、自增(++)、自减(--)共七种。 2. 关系运算符 大于(>)、小于(=)、 小于等于(>)六种。 5. 赋值运算符 赋值(=)、复合算术赋值(+=,-= , *= ,/=,%=)和复 合位运算赋值(&=,|=, ^= ,>>=,,.)等几种
运算符优先级 高括号 ++, ,Si思考: int x=l, y=0; bool z =!x&&x+y&&++yi 位运算 && z→(!x)&(x+y)&(++y) 0&&(1+0)&(1)0 赋值运算 逗号运算, 低
运算符优先级 括号 ++,--,sizeof *, /, % +, - ==, != 位运算 && || ?: 赋值运算 = 逗号运算 , 思考: int x=1, y=0; bool z = !x&&x+y&&++y; Z = ? 高 低 z ➔ (!x)&&(x+y)&&(++y) ➔ 0&&(1+0)&&(1) ➔ 0
例2-2:输入一个年份,判断是否闰年 #include using namespace std; 运行结果: int main() Enter the year: 2000 t int yeari boo工 lEapyEar; 2000 is a leap year cout year; IsLeapYear = ( yeax号4 o&s Yeax号100 0)||(year%400 0)); if(工 lEapyEar) cout < year < w is a leap year < endli else cout < year < w is not a leap year < endl
#include using namespace std; int main() { int year; bool IsLeapYear; cout > year; IsLeapYear = (( year % 4 == 0 && year % 100 != 0)||(year % 400 == 0)); if (IsLeapYear) cout << year << " is a leap year“ << endl; else cout << year << " is not a leap year“ << endl; } 例2-2 :输入一个年份,判断是否闰年 运行结果: Enter the year: 2000 2000 is a leap year
例2-4:输入一个0~6的整数,转换成星期 include using namespace stdi int main o 运行结果: t int day i cin > day i Tuesday switch (day) t case 0: cout<<" Sunday <<endli breaki case 1: cout<<"Monday <<endli breaki case 2: cout<< "Tuesday <<endli breaki case 3: cout<< Wednesday<<endl i break case 4: cout<<" Thursday<<endl; break case 5: cout<<"Friday<<endli breaki case 6: cout<<"Saturday<<endl; breaki defau1七 cout<<"Day out of range Sunday Saturday <<endli break
#include using namespace std; int main() { int day; cin >> day; switch (day) { case 0: cout<<"Sunday"<<endl; break; case 1: cout<<"Monday"<<endl; break; case 2: cout<<"Tuesday"<<endl; break; case 3: cout<<"Wednesday"<<endl; break; case 4: cout<<"Thursday"<<endl; break; case 5: cout<<"Friday"<<endl; break; case 6: cout<<"Saturday"<<endl; break; default: cout<<"Day out of range Sunday .. Saturday"<<endl; break; } } 例2-4 :输入一个0~6的整数,转换成星期 运行结果: 2 Tuesday
例2-7:用do- while语句编程 程序1: 程序2: #include #include using namespace std; using namespace std int main int maino) I int i, sum(o) t int i, sum(o)i Cin>>i Cin>>i hi1e(i<=10) do t I sum+=ii sum+=1; i十十 1++; }whi1e(i<=10); cou七<<"sum="<<sum cout<<sume<<sum <<endl <<endl
例2-7 :用 do-while 语句编程 程序1: #include using namespace std; int main() { int i,sum(0); cin>>i; while(i using namespace std; int main() { int i, sum(0); cin>>i; do{ sum+=i; i++; }while(i<=10); cout<<"sum="<<sum <<endl; }
警例2-8:用for语句编程 sinclude > n 运行结果2: cout < " Number Enter a positive integer:36 for( k=l, k Number 36 Factors 1 2 3 i£(n号k 469121836 cout < cout < endl
例2-8 :用 for 语句编程 #include using namespace std; int main() { int n, k; cout > n; cout << "Number " << n << " Factors "; for ( k=1; k <= n; k++ ) if ( n % k == 0 ) cout << k << " "; cout << endl; } 运行结果1: Enter a positive integer: 7 Number 7 Factors 1 7 运行结果2: Enter a positive integer: 36 Number 36 Factors 1 2 3 4 6 9 12 18 36
关于宏定义 1定义一个常量 #define pi 3.1415926 float x, y;x= PI/2.0; y=3*PI 2.定义一个带参数的表达式 a#define distant(x,y) sqrt(x)(x)+(y(y)) float, y, d; d= dIStAnt(x y); 3.字符串可以这样定义 #define PRint MYname(myname printf( my name is=%os,#myname); 4.字符串还能这样 #define new variable(newtype) V ar=Ⅴar## newtype
关于宏定义 1. 定义一个常量 #define PI 3.1415926 float x, y; x = PI/2.0; y = 3*PI; 2. 定义一个带参数的表达式 #define DISTANT(x,y) sqrt((x)*(x)+(y)*(y)) float x, y, d; d = DISTANT(x,y); 3. 字符串可以这样定义: #define PRINT_MYNAME(myname) \ printf(“My name is = %s”, #myname); 4. 字符串还能这样: #define NEW_VARIABLE(newtype) \ var = Var_##newtype;
关于地址和指针 地址( address)是数据在内存中存 A 按字节编号 每个有效的变量都有有效的地址 在有效地址上存放的可能是别的地址b=4B 设→为等价于(数值相同)的意思。 例如设a的地址是A,A=&a;则a→ 另有变量b的地址B(b→B)存放了地址A的值 B=A;则*→&a即b→&a或为→a 因此a→*(&a)→*A→*(B)→“b 所以b是指向a的指针! FF int a; int* b; b= &a: a=10; 这时,*b今10 指针是记录别的变量的地址的变量
关于地址和指针 地址(address)是数据在内存中存放的位置。 按字节编号。 每个有效的变量都有有效的地址。 在有效地址上存放的可能是别的地址的值。 设 ➔ 为等价于(数值相同)的意思。 例如 设 a的地址是A,A = &a; 则 a ➔ *A; 另有变量b的地址B(b ➔ *B)存放了地址A的值 *B = A; 则 *B ➔ &a 即 b ➔ &a 或 *b ➔ a 因此 a ➔ *(&a) ➔ *A ➔ *(*B) ➔ *b 所以 b 是指向a的指针! 例: int a; int* b; b = &a; a = 10; 这时,*b ➔ 10 指针是记录别的变量的地址的变量。 a A b=A B
更好的C C+的单行注释 C代码中只能是:/* This is a multi- line comment.米 C++代码增加:// This is a single- line comment. 2.C++的输入/输出流 C代码: printf( Enter new tag:");//打印输出 scanf(;d",&tag);//等待输入 printf( fag 1s:d\n",tag);//打印输出 C++代码 cout>tag;//输入流 cout<< wTag is:"<tag<n';/输出流
更好的C 1. C++的单行注释 C代码中只能是:/* This is a multi-line comment. */ C++代码增加: // This is a single-line comment. 2. C++的输入/输出流 C代码: printf(“Enter new tag:”); // 打印输出 scanf(“%d”,&tag); // 等待输入 printf(“Tag is: %d\n”,tag); //打印输出 C++代码: cout > tag; //输入流 cout << “Tag is:” << tag << ‘\n’; // 输出流