一、简单问题:
5. 编程计算: 1!+2!+3!+…+20!,并将结果输出.输出格式: 1!+2!+3!+…+20!= 表达式的值 package moreEasy; public class The5th {
public static void main(String[] args) { long sum=0;
for(int i=1;i<=20;i++){ long r=1;
for(int j=1;j<=i;j++){ r*=j; }
sum=sum+r;
//System.out.print(\ if(i<20)
System.out.print(i+\ else
System.out.print(i+\ } } }
1. 编程求下列式子的值,
y=1-1/2+1/3-1/4+…+1/99-1/100
并将结果输出,格式为: 1-1/2+1/3-1/4+…+1/99-1/100 = 表达式的值 public class Porg {
public static void main(String[] args) { double sum=0;
for(double i=1;i<=100;i++) {
sum=sum+Math.pow(-1, i-1)*(1/i); }
System.out.print(\1/4+…+1/99-1/100=\ } }
2. 请编程实现:由键盘输入的任意一组字符,统计其中大写字母的个数m和小写字母的个数n,并输出m、n中的较大者。
import java.util.Scanner; public class Prog2 {
public static void main(String[] args) { int m=0,n=0;
Scanner cin=new Scanner(System.in);
409--1
}
}
String str=cin.nextLine();
for(int i=0;i if(str.charAt(i)>'A'&&str.charAt(i)<='Z') m++; else n++; } if(m>n) { System.out.println(m); } else System.out.println(n); 3 3. 编程,求全部水仙花数。所谓水仙花数是指一个三位数,其各位数字立方的和等于该数。如:153 = 1 33 + 5+ 3。 public class Prog3 { public static void main(String[] args) { int a,b,c; for(a=1;a<=9;a++) { for(b=0;b<=9;b++) { for(c=0;c<=9;c++) { if(a*100+b*10+c==a*a*a+b*b*b+c*c*c) System.out.println(a*100+b*10+c); } } } } 4. 请编制程序判断输入的正整数是否既是5又是7的整倍数。若是,则输出yes;否则输出no。 import java.util.Scanner; public class Prog4 { public static void main(String[] args) { Scanner cin=new Scanner(System.in); int i=cin.nextInt(); if( i%5==0&&i%7==0) System.out.print(\ 409--2 } } else System.out.print(\ 5. 请编程实现:对于给定的一个百分制成绩,输出相应的五分制成绩。设:90分以上为‘A’,80—89分为‘B’,70—79分为‘C’,60—69分为‘D’,60分以下为‘E’ 。 import java.util.Scanner; public class Prog5 { public static void main(String[] args) { Scanner cin=new Scanner(System.in); int m=cin.nextInt(); if(m>=60&&m<=69) System.out.print(\ else if(m>=70&&m<=79) System.out.print(\ else if(m>=80&&m<=89) System.out.print(\ else if(m>=90) System.out.print(\ else System.out.print(\ } } 6. 输入一行字符,将其中的字母变成其后续的第3个字母,输出。例:a→d,x → a;y → b;编程实现。 import java.util.Scanner; public class Prog6 { public static void main(String[] args) { char[] zimu=new char[]{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c'}; Scanner cin=new Scanner(System.in); String str=cin.nextLine(); for(int j=0;j for(int i=0;i<29;i++) { if(str.charAt(j)==zimu[i]) { System.out.println(zimu[i+3]); 409--3 break; } } } 7. 编写程序,输入任意一个1~7之间的整数,将他们转换成对应的英文单词. 例如:1转换成Monday,7转换成Sunday. import java.util.Scanner; public class Prog7 { public static void main(String[] args) { System.out.print(\请输入任意一个1~7之间的整数\\n\ Scanner cin=new Scanner(System.in); int m=cin.nextInt(); if(m==1) System.out.print(\ else if(m==2) System.out.print(\ else if(m==3) System.out.print(\ else if(m==4) System.out.print(\ else if(m==5) System.out.print(\ else if(m==6) System.out.print(\ else System.out.print(\ } } 8. 输入三角形的三边a, b, c,判断能否构成三角形. 若能,计算面积. import java.util.Scanner; public class Prog8 { public static void main(String[] args) { System.out.print(\请输入三个整数\\n\ Scanner cin=new Scanner(System.in); int a=cin.nextInt(); int b=cin.nextInt(); int c=cin.nextInt(); if(a+b 409--4 } { System.out.print(\不能构成三角形\\n\ } else { int l=a+b+c; System.out.print(l); } } 2 9. 编程序,输入a,b,c,求方程 ax+bx+c=0 的解。 import java.util.Scanner; public class Prog9 { public static void main(String[] args) { System.out.print(\请输入三个整数\\n\Scanner cin=new Scanner(System.in); int a=cin.nextInt(); int b=cin.nextInt(); int c=cin.nextInt(); if(a==0) { System.out.println(-c/b); } else if(b*b-4*a*c>=0) { double x1=(-b+Math.pow(1/2, b*b-4*a*c))/(2*a); double x2=(-b-Math.pow(1/2, b*b-4*a*c))/(2*a); System.out.println(x1); System.out.print(x2); } else System.out.print(\无解\} } 10.计算出前20项 fibonacci 数列, 要求一行打印5个数. 一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔都不死,那么一年以后可以繁殖多少对兔子? 我们不妨拿新出生的一对小兔子分析一下: 第一个月小兔子没有繁殖能力,所以还是一对; 两个月后,生下一对小兔总数共有两对; 409--5 三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对; ?? 依次类推可以列出下表: 经过月数 0 1 2 3 4 5 6 7 8 9 10 11 12 幼仔对数 0 1 1 2 3 5 8 13 21 34 55 89 144 成兔对数 1 1 2 3 5 8 13 21 34 55 89 144 233 总体对数 1 2 3 5 8 13 21 34 55 89 144 233 377 import java.util.Scanner; public class Prog10 { public static void main(String[] args) { Scanner cin=new Scanner(System.in); int n=cin.nextInt(); int a=0,b=1,c=1; if(n==1){System.out.println(a ); System.out.println(b ); System.out.println(c );} else { for(int i=2;i<=n;i++) { a=b; b=c; c=a+b; } System.out.println(\幼崽数\成年兔子书\总数\ } } } 11.输出100~10000之间个位数为3的所有素数。 public class Prog11 { public static void main(String[] args) { for(int i=103;i<10000;i=i+10) { boolean flag=true; 409--6 } } for(int j=2;j if(i%j==0) {flag=false;break;} } if(flag==true){System.out.println(i);} } 12. 百钱买百鸡问题:公鸡每只 5 元,母鸡每只 3 元,小鸡 3 只一元,问一百元买一百只鸡有几种买法. public class Prog12 { public static void main(String[] args) { int m=0; for(int a=0;a<100;a++) { for(int b=0;b<100;b++) { for(int c=0;c<100;c++) if(5*a+3*b+1/3*c==100&&a+b+c==100) m++; } } } System.out.print(\一百元买一百只鸡有\种买法\} 2222 13. 请编制程序要求输入整数a和b,若a+b大于100,则输出a+b百位以上的数字,否则输出两数之和。 import java.util.Scanner; public class Prog13 { public static void main(String[] args) { System.out.print(\请输入两个整数\\n\Scanner cin=new Scanner(System.in); int a=cin.nextInt(); int b=cin.nextInt(); if(a*a+b*b>100) { System.out.print(a*a+b*b); } else System.out.print(a+b); 409--7 } } 14. 编程实现:对键盘输入的任意一个四位正整数,计算各位数字平方和。 2222 如:2345 ,则:计算2+3+4+5 import java.util.Scanner; public class Prog14 { public static void main(String[] args) { System.out.print(\请输入任意一个四位正整数\\n\ int sum=0; Scanner cin=new Scanner(System.in); int a=cin.nextInt(); sum=(a/1000*a/1000)+((a/100)*(a/100))+((a/100)*(a/100))+((a)*(a)); System.out.print(sum); } } 15. 有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完,请编程. public class Prog15 { public static void main(String[] args) { int m=0,sum=1020; do{ sum=sum/2-2; m++; }while(sum>=0); System.out.print(m+\天以后能卖完\ } } 222 16. 编程,输出200以内所有完全平方数C(满足C=A+B)及其个数. 409--8 public class Prog16 { public static void main(String[] args) { int m=0; for(int C=1;C<200;C++) { for(int A=1;A<=200;A++) { for(int B=1;B<=200;B++) { if(A*A+B*B==C*C) {System.out.println(C); A=201; B=201; m++;} } } } System.out.println(\个数为:\ } } 17. 设N是一个四位数,它的9倍恰好是其反序数(例如:123的反序数是321),编程,输出所有满足条件的N。 package easy; public class The17 { static long s,M; public static void main(String[] args) { for(long N=1009;N<=1109;N=N+10){ M=9*N; s=0; while(M>0){ s=s*10+M; M=M/10; } 409--9 if(N==s) System.out.println(s); } } } 18. 编程,输出555555的约数中最大的三位数。 package easy; public class The18th { public static void main(String[] args) { double a=555555; long b=0; //long[] yueShu=new long[555555]; for(long i=1;i<=555555;i++){ if(a%i==0&&i>99&&i<1000){ while(i>b){ b=i; } } } System.out.println(b); } } 19. 编程,输出所有个位数为6且能被31整除的五位数及其个数。 package easy; public class The19th { public static void main(String[] args) { for(long i=10006;i<=99996;i=i+10){ if(i1==0){ System.out.println(i); } } } } 20. 编写程序,输入两个整数,和+、-、*、/ 、%之中的任意一个运算符,输出计算结果. package easy; //import java.util.InputMismatchException; import java.util.Scanner; public class The20th { static Scanner cin=new Scanner(System.in); public static void main(String[] args) { Scanner cin1=new Scanner(System.in); 409--10 int d1,d2; String str=new String(\ d1=cin.nextInt(); d2=cin.nextInt(); //System.out.println(d1); //System.out.println(d2); str=cin1.nextLine(); //System.out.println(str); //System.out.println(str.charAt(0)); switch(str.charAt(0)){ case '+':{ System.out.println(d1+d2); break; } case '-':{ System.out.println(d1-d2); break; } case '*':{ System.out.println(d1*d2); break; } case '/':{ System.out.println(d1/d2); break; } } } /*static int add(int a,int b){ return a+b; } static int sub(int a,int b){ return a-b; } static int multiply(int a,int b){ return a*b; } static int divide(int a,int b){ return (int)(a/b); }*/ 409--11 } 21. 计算:1+1/(1+2)+1/(1+2+3)+…+ 1/(1+2+…+n), n由键盘输入。 package easy; import java.util.Scanner; public class The21th { public static void main(String[] args) { double sum=0,div=0; Scanner cin=new Scanner(System.in); int n=cin.nextInt(); for(int i=1;i<=n;i++){ div=div+i; System.out.println(\ sum=sum+1/div; } System.out.println(sum); } } 22. 编程计算: 1*2*3+3*4*5+…+99*100*101 的值. package easy; public class The22th { public static void main(String[] args) { long sum=0; for(int i=1;i+2<=101;i=i+2){ sum=sum+i*(i+1)*(i+2); } System.out.println(sum); } } 二、比较简单问题: 1. 编一个函数GCD,求两个无符号整数的最大公约数。主函数输入两个正整数m 和 n, 调用GCD,求出m和n的最大公约数和最小公倍数.并输出。 package moreEasy; import java.util.Scanner; public class The1th { public static void main(String[] args) { Scanner cin=new Scanner(System.in); int m=cin.nextInt(); int n=cin.nextInt(); 409--12 System.out.println(m+\和\的最大公约数为:\ System.out.println(m+\和\的最小公倍数为:\ } public static int GCD(int a,int b){ int r=0; for(int i=1;i<=a&&i<=b;i++){ if(a%i==0&&b%i==0&&r //System.out.println(r); return r; } } 2. 请编程实现:建立一个4*4的二维整型数组,求对角线元素的和。 package moreEasy; import java.util.Scanner; public class The2th { public static void main(String[] args) { int ewsz[][]=new int[4][4]; Scanner cin=new Scanner(System.in); for(int i=0;i for(int j=0;j /*for(int i=0;i for(int j=0;j System.out.println(\ } } }*/ int sum=0; for(int i=0;i System.out.println(sum); } } 3. 写一个判断素数的函数prime,在主函数中输入10个整数,调用prime,输出这10个整数中的素数的累加和。 package moreEasy; 409--13 import java.util.Scanner; public class The3th { public static void main(String[] args) { int[] shu=new int[10]; int sum=0; Scanner cin=new Scanner(System.in); for(int i=0;i for(int i=0;i System.out.println(sum); } public static boolean prime(int a){ //double b=Math.pow(a, 0.5); for(int i=2;i return true; } } 4.从键盘上输入若干学生的一门课成绩,存入一个数组中,当输入负数时结束输入. 输出最高成绩和最低成绩及相应的序号。 package moreEasy; import java.util.Scanner; public class The4th { public static void main(String[] args) { int n,n1=0,max,min; Scanner cin=new Scanner(System.in); System.out.print(\学生人数\ n=cin.nextInt(); int[] chengJi=new int[n]; for(int i=0;i chengJi[i]=cin.nextInt(); } max=chengJi[0]; min=chengJi[0]; for(int j=0;j 409--14 max=chengJi[j]; n=j; } if(min>chengJi[j]){ min=chengJi[j]; n1=j; } } System.out.println(\ System.out.println(\ } } 5. 编程计算: 1!+2!+3!+…+20!,并将结果输出.输出格式: 1!+2!+3!+…+20!= 表达式的值 package moreEasy; public class The5th { public static void main(String[] args) { long sum=0; for(int i=1;i<=20;i++){ long r=1; for(int j=1;j<=i;j++){ r*=j; } sum=sum+r; //System.out.print(\ if(i<20) System.out.print(i+\ else System.out.print(i+\ } } } 6. 有一个 3 * 4 的矩阵,编程实现: 找出该矩阵中每行元素的最大值,存入一个一维数组中。输出原始矩阵和结果矩阵。 7. 将若干个整数放到一维数组中,找出该数组中的最大值和它的下标。然后将它和数组中的最前面的元素对换。不明白 package moreEasy; import java.util.Scanner; public class The7th { public static void main(String[] args) { int[] array=new int[10]; Scanner cin=new Scanner(System.in); 409--15 System.out.print(\数组长度:\ int n=cin.nextInt(); for(int i=0;i array[i]=cin.nextInt(); } int min=array[0]; int max=array[0]; //System.out.println(min); //System.out.println(max); for(int i=0;i System.out.println(min); System.out.println(max); } } 8. 编写一个函数converse,将一维数组中的数逆序存放,不允许使用辅助数组。主函数输入原始数据,调用converse,实现逆置。并将原数组和逆置后的数组输出 package moreEasy; import java.util.Scanner; public class The8th { public static void main(String[] args) { converse(); } public static void converse(){ int[] ar=new int[10]; Scanner cin=new Scanner(System.in); for(int i=0;i for(int j=0;j System.out.println(\ for(int i=0;i 409--16 } for(int j=0;j 9. 编写函数,将给定的字符串的大写字母转变成小写字母; 其它字符不变。主函数输入一个字符串,调用该函数对其进行转换,分别输出原串和转换之后的串。 package moreEasy; import java.util.Scanner; public class The9th { static String str=\ public static void main(String[] args) { String str=\ Scanner cin=new Scanner(System.in); str=cin.nextLine(); zhuanHuan(str); } public static void zhuanHuan(String str1){ str=str1; str=str.toLowerCase(); System.out.println(str); } } 10. 编写一个函数,将字符数组a中的全部字符复制到字符数组b中. 不要使用strcpy函数. 主函数输入任意一个字符串,调该函数,复制出另一个字符串。将两个串输出。 package moreEasy; import java.util.Scanner; public class The10th { public static void main(String[] args) { Scanner cin=new Scanner(System.in); String str=cin.nextLine(); char[] aa=new char[str.length()]; char[] bb=new char[str.length()]; for(int i=0;i copy(aa,bb); for(int i=0;i 409--17 System.out.println(\ for(int i=0;i public static void copy(char[] a,char[] b){ for(int i=0;i 11. 判断一个N*N的矩阵是否为对称矩阵. 将原矩阵输出,判断结果输出. package moreEasy; import java.util.Scanner; public class The11th { public static void main(String[] args) { Scanner cin=new Scanner(System.in); int n=cin.nextInt(); int count=0; int[][] duiCheng=new int[n][n]; for(int i=0;i for(int j=0;j for(int i=0;i for(int j=0;j System.out.print(duiCheng[i][j]+\ else System.out.print(duiCheng[i][j]+\ } for(int i=0;i for(int j=0;j if(count==n*n) System.out.println(\对称矩阵\ else System.out.println(\非对称矩阵\ } 409--18 } 12. 给出年、月、日, 计算该日是该年的第几天? package moreEasy; import java.util.Scanner; public class The12th { public static void main(String[] args) { int n=0; Scanner cin=new Scanner(System.in); int y=cin.nextInt(); System.out.println(\年\ int m=cin.nextInt(); System.out.println(\月\ int d=cin.nextInt(); System.out.println(\日\ if(y%4==0&&y0!=0||y@0==0){ switch(m){ case 1: n=d; break; case 2: n=d+31; break; case 3: n=d+31+29; break; case 4: n=d+31+29+31; break; case 5: n=d+31+29+31+30; break; case 6: n=d+31+29+31+30+31; break; case 7: n=d+31+29+31+30+31+30; break; case 8: n=d+31+29+31+30+31+30+31; break; case 9: n=d+31+29+31+30+31+30+31+31; break; case 10: n=d+31+29+31+30+31+30+31+31+30; break; 409--19 case 11: n=d+31+29+31+30+31+30+31+31+30+31; break; case 12: n=d+31+29+31+30+31+30+31+31+30+31+30; break; } switch(m){ case 1: n=d; break; case 2: n=d+31; break; case 3: n=d+31+28; break; case 4: n=d+31+28+31; break; case 5: n=d+31+28+31+30; break; case 6: n=d+31+28+31+30+31; break; case 7: n=d+31+28+31+30+31+30; break; case 8: n=d+31+28+31+30+31+30+31; break; case 9: n=d+31+28+31+30+31+30+31+31; break; case 10: n=d+31+28+31+30+31+30+31+31+30; break; case 11: n=d+31+28+31+30+31+30+31+31+30+31; break; case 12: n=d+31+28+31+30+31+30+31+31+30+31+30; break; 409--20 } else{ } } System.out.println(n); } } 13. 编写一个子函数fun ,求两个矩阵的乘积矩阵;主程序中输入两个矩阵的阶数和元素值,调用fun,求出乘积矩阵,在主程序中将原矩阵和乘积矩阵输出。 package moreEasy; import java.util.Scanner; public class The13th { public static void main(String[] args) { Scanner cin=new Scanner(System.in); Scanner cin1=new Scanner(System.in); System.out.print(\阶数:\ int n1=cin.nextInt(); //int n2=cin.nextInt(); int[][] aa=new int[n1][n1]; int[][] bb=new int[n1][n1]; System.out.println(\输入第一个矩阵\ for(int i=0;i 409--21 public static void fun(int[][] a,int[][] b){ for(int i=0;i 14. 打印出如图所示的杨辉三角,要求打印出n行,n由键盘输入. 1 1 1 1 2 1 1 3 3 1 … … package moreEasy; import java.util.Scanner; //有毛病,未解决 public class The14th { /** * @param args */ public static void main(String[] args) { Scanner cin=new Scanner(System.in); int n=cin.nextInt(); int[][] yhsj=new int[n][n]; yhsj[0][0]=1; for(int i=1;i for(int j=1;j yhsj[i][j]=yhsj[i-1][j-1]+yhsj[i-1][j]; } yhsj[i][yhsj[i].length-1]=1; } for(int i=0;i System.out.print(yhsj[i][j]+\ if(j==yhsj[i].length-1) System.out.println(\ } } 409--22 } 15. 编写一个程序,将两个字符串连接起来. 不要使用strcat函数; package moreEasy; //有毛病,未解决 public class The15th { public static void main(String[] args) { String str=\第一个字符串\ String str1=\第二个字符串\ char[] a=new char[str.length()+str1.length()]; for(int i=0;i for(int i=str.length()-1;i str=str.valueOf(a); System.out.println(str); } } C++的特点:1.支持抽象数据类型 2.多态性,一个接口,多重算法,支持早期联编和滞后联编 3.继承性,保证了代码复用,支持分类的概念 一个c++程序由一个或多个函数构成,并且在这些函数中只有一个主函数main,它是程序执行的入口。 C++程序严格区别字母的大小写。 第2章 基本数据类型、运算符与表达式 【内容提要】 数据类型 变量与常量 运算符与表达式 简单输入与输出 【重点与难点】 2.1 数据类型 在C++程序里,每个名字都有一个与之相关联的类型,这个类型决定了可以对这个名字所指代的实体应用什么操作,并决定这些操作将如何做出解释。 409--23 布尔型 bool 整型 int 基本数据类型 字符型 char 单精度型 float 浮点型 双精度型 double 空类型 void 数据类型 指针类型 Type* 数组类型 Type[] 枚举类型 enum 复合数据类型 联合类型 union 结构类型 struct 类类型 class 图2.1 C++的数据类型 图中Type表示 非控数据类型。 2.1.1 基本数据类型 逻辑型:又称布尔型,用关键字bool表示。有两个值true或false。true可以转换成整数1,false可以转换成整数0。与此对应,整数也可以隐式的转换成bool值:非0的整数转换成true,0转换成false。 字符型:用关键字char表示。取值包含具体实现所用的字符集里的一个字符。字符型数据通常占用1个字节的存储空间。 整型:用关键字int表示。取值是计算机所能表示的所有整数。 浮点型:包括单精度型(float)和双精度型(double)。单精度型通常占用4个字节的存储空间,双精度型通常占用8个字节的空间。 空类型:用关键字void表示。用于说明某个函数没有返回值。没有void类型的对象。 在基本的数据类型前可以添加修饰符,以改变基本类型的意义。 signed:有符号。 unsigned:无符号。 unsigned和signed只用于修饰char和int,且signed修饰词可以省略。当用unsigned修饰词时,后面的类型说明符可以省略。对于有符号和无符号的整型数据,它们所占的存储空间的大小相同,但它们的表数范围却不相同(对字符型意义相同)。 short:短型。只用于修饰int,且用short修饰时,int可以省略。 long:长型。只用于修饰int和double。当用long修饰int时,int可以省略。 数据类型的描述确定了其内存所占空间的大小,也确定了其表示范围。用sizeof(数据类型)可以确定某数据类型的字节长度。请读者查看在你所用的机器上,下面类型的最大值和最小值是什么:char、short、int、long、float、double、long double 、unsigned。 409--24 2.1.2 复合数据类型 数组:由具有相同数据类型的元素组成的集合。 结构体:由不同的数据类型构成的一种混合的数据结构,构成结构体的成员的数据类型一般不同,并且在内存中分别占据不同的存储单元。 共用体:是类似于结构体的一种构造类型,与结构体不同的是构成共同体的数据成员共用同一段内存单元。 枚举:将变量的值一一列举出来,每个枚举成员(枚举符)都与一个整数相对应。按默认方式,枚举符所赋的值从0开始递增。枚举的值也可以用整型的表达式赋值进行初始化。如果某个枚举中所有枚 KK 举符的值均非负,该枚举的表示范围是[0: 2 -1],其中2是能使所有枚举符位于此范围内的最小的 KK 2的幂;如果存在负的枚举符值,该枚举的取值范围就是[-2:2 -1]。 指针类型:指针类型变量用于存储另一变量的地址,而不能用来存放基本类型的数据。它在内存中占据一个存储单元。 类类型:类是体现面向对象程序设计的最基本特征,也是体现C++与C最大的不同之处。类是一个数据类型,它定义的是一种对象类型,由数据和方法组成,描述了属于该类型的所有对象的性质。 2.2变量与常量 2.1.1 变量:指在运行期间其值可以改变的量。 变量有三个特征:变量类型、变量名、变量值。 命名:遵循标识符命名规则。 标识符是对实体定义的一种定义符,用来标识用户定义的常量名、变量名、函数名、文件名、数组名、和数据类型名和程序名等。只能由字母、数字和下划线组成,且以字母或下划线开头。命名时注意以下几点: 1. C++的关键字不能用作用户自定义的实体名; 2. 以下划线开头的名字是保留给实现或者运行环境,用于特殊目的,在应用程序里不要采用这样的 名字; 3. 大写与小写字母是区分的; 4. 见名知义。 5. 维持统一的命名风格。 定义: 格式: <类型名><变量名>[[=<表达式>],?] typedef:为某种类型声明一个新名字,而不是定义一种新类型。 格式:typedef <已有类型名> <新类型名> 2.1.2 常量:程序执行期间其值不变的量。主要有下列几类常量。 布尔常量 字符常量 用单引号括起的一个字符。在内存中,字符数据以ASCII码存储,如字符‘a’的ASCII码为97。以转义字符‘\\’开始的字符常量后跟不同的字符表示不同的特殊字符。 字符串常量 由一对双引号括起来的零个或多个字符序列。 字符串可以写在多行上,不过在这种情况下必须用反斜线‘\\’表示下一行字符是这一行字符的延续。 字符串常量实际上是一个字符数组,组成数组的字符除显示给出的外,还包括字符结尾处标识字符串结束的符号‘\\0’,所以字符串“abc”实际上包含4个字符:‘a’、‘b’、‘c’和‘\\0’。 注意字符常量与字符串常量在表示、存储、运算方面的区别。 整型常量 可以用十进制、八进制或十六进制表示。 十进制常量 :一般占一个机器字长,是一个带正负号的常数(默认情况下为正数)。 八进制常量 :由数字0开头,其后由若干0-7的数字组成,如0378,0123等。 十六进制常量:以0x或0X开头,其后由若干0-9的数字及A-F(或小写a-f)的字母组成,如0x123,0x3ab。 浮点型常量 只能以十进制形式表示。共有两种表示形式:小数表示法和指数表示法。 如:11.3、.2、2.3e10、-2.3E-1等。 409--25 枚举常量 枚举声明形式: enum <枚举名>{<枚举符表>}; 枚举符可以有两种形式: <枚举符名>/<枚举符名>=<整形常量> 符号常量 定义形式:const <类型名> <符号常量名>=<表达式>[,?]; []表示可选项,以下都采用这种标记。 定义的符号常量必须初始化。一个符号常量可看作是一个只读变量,由const定义的常量的值不可以改变。const的最常见的用途是作为数组的界和作为分情况标号。 2.3 运算符与表达式 在程序中,表达式是计算求值的基本单位,它是由运算符和运算数组成的式子。运算符是表示进行某种运算的符号。运算数包含常量、变量和函数等。C++语言的运算符按其在表达式中与运算对象的关系(连接运算对象的个数)可分为:单目运算、双目运算、三目运算。 C++运算符一览表 名称 作用域区分符 分量运算符 函数调用运算符 下标运算符 后增量、后减量 前增量、前减量 求字节运算符 正号、负号 指针运算符 :: . -> () [] ++ -- ++ -- sizeof + - * 和 & 运算符 ::x p.next,p->next fac() p[10] p++ --p sizeof(int) -1,+3 *p,&x p=new int; delete p; (int)x 3%5(取模) 8>>3, 8<<3 3<5 3!=5 4 5 6 7 8 9 10 11 12 13 3 14 15 16 左结合性 右结合性 左结合性 2 3 3 右结合性 举例 优先级 1 2 结合性 左结合性 分配、回收空间运算符 New delete 强制类型转换运算符 算术运算符 左移、右移 关系运算符 位运算符 (type) * / % + - << >> <<= > >= == != &(按位“与”) 1&2 ^(按位“异或”) 1^2 |(按位“或”) 1|2 && || ! ? : x&&y x||y !x a>b?x:y 逻辑运算符 条件运算符 赋值运算符 逗号运算符 = 及其扩展(+= a=2 -= *= /= %= 等) a+=2 , a=1,b=2,c=3 表2.1 C++运算符一览表 2.4 简单输入与输出 在C++中,I/O使用了流的概念-字符(或字节)流。每一个I/O 设备传送和接收一系列的字节,称之为流。输入操作可以看成是字节从一个设备流入内存,而输出操作可以看成是字节从内存流出到一个设备。 409--26 要使用C++标准的I/O流库的功能,需要包括两个头文件:iostream.h用于提供基本的输入输出功能,iomanip.h用于提供格式化的功能。 2.4.1 I/O的书写格式(基本数据类型的输入输出) 头文件iostream.h包含有cin和cout对象,对应于标准输入流和标准输出流。流读取运算符“>>”表示流的输入,可以从cin输入流中读取字符;流插入运算符“<<”表示流的输出,可以向cout输出流插入字符。 如:cout<<”hello world.”< cin>>i>>j; //输入i,j的值 2.4.2使用控制符(基本数据类型输入输出的格式控制) C++中提供了大量的用于执行格式化输入输出的格式控制符,具体名称及作用请参看表2.2。 控制符 描述 所在头文 件 置基数为10 dec iostream.h 置基数为16 hex 置基数为8 oct 设填充字符为c setfill(c) 设显示小数精度为n位 setprecision(n) 设域宽为n个字符 setw(n) 固定的浮点显示 setiosflags(ios::fixed) iomanip.h setiosflags(ios::scientific) setiosflags(ios::left) setiosflags(ios::right) setiosflags(ios::skipws) 指数表示 左对齐 右对齐 忽略前导空白 setiosflags(ios::uppercase) 16进制数大写输出 setiosflags(ios::lowercase) 16进制数小写输出 setiosflags(ios::showpoin) 显示小数点 setiosflags(ios::showpos) 显示符号(正负号) setiosflags(ios::showbase) 指定在数值前输出进制(0表示八进制,0x或 0X表示十六进制) 表2.2 I/O流的常用控制符 【典型例题】 例题1:对以下各种数据类型比较所占用存储空间的大小: (1)char、int、short int、long int、double、long double. (2) signed int、unsigned int. 解答: (1) 本题主要考查的知识点是各种类型所占用的存储空间的大小以及相应的表数范围。在32位计算机中,char占1个字节,short int 占2个字节,int占4个字节,long int占4个字节,double占8个字节。sizeof运算符用于求解某种数据类型的大小。short和long在修饰整型时可以省略int。答案为: (2)对于一种确定的数据类型有符号数与无符号数所占的存储空间相同,表数范围不同。修饰符signed和unsigned只能用于修饰字符型和整型。答案为: 例题2:下列哪一项能用作用户自定义的标识符: (a)const (b)2var (c)my name (d)var2 解答: 409--27 本题主要考查标识符命名规则。C++关键字不能用于用户自定义标识符,(a)中const是关键字;第一个字符必须是字母或下划线,(b)中2var是以数字开头;不能含有空格,(c)中my name含有空格。答案为:d。 例题3:指出下列程序中的错误:__________。 int main() { const int x; x=100; return 0; } 解答: 本题主要考查对符号常量的理解。const定义的符号常量必须初始化,由const定义的常量的值不可以改变。所以本题有两处错误:第一、没有对符号常量x进行初始化;第二、给符号常量赋值是错误的。 例题4:给下列表达式加上全部的括号(假设所用变量均已定义): (1) a+b-c--%b (2) a>b?b:c>d?a:c 本题主要考查表达式中运算符的优先级与结合性。请参阅表2.1。为了避免出错,建议读者在书写表达式时完整书写括号。 (1)答案为:(a+b)-((c--)%b) (2)答案为:a>b?b:(c>d?a:(c 例题5:请根据下列题意写出相应的表达式。 (1) 有a、b、c、max四个变量a、b、c中的最大值,并将结果放入max中。 (2) 年龄在1到100之间(包含1和100,年龄用变量age表示)。 (3) 公式。 (4) 判断一年是否为闰年,年用year表示。满足下列两个条件之一即为闰年:①能被4整除但不 能被100整除 ②能被400整除。 解答: (1) 主要考查对条件表达式的理解和书写。答案为:max=a>b?(a>c?a:c):(b>c?b:c)。 (2) 主要考查对逻辑表达式的理解和书写。答案为:1<=age&&age<=100。 (3) 主要考查如何在计算机中表示一个数学公式。答案为:(a+b)*h/2。 (4) 主要考查对逻辑表达式的理解和书写。答案为:(year%4==0&&year0!=0)||(year@0==0)。 例题6:下列选项中两个表达式的运算结果相同的是( )。 (a)3/2和3.0/2.0 (b)3/2和3.0/2 (c) 3/2.0和3.0/2.0 (d) 3/2.0和3/2 解答: 本题考查数据类型及表达式中数据类型的隐式转换。3/2中两个操作数都为整型,运算结果仍为整型即1;3.0/2和3/2.0中一个操作数为整型另一个为浮点型,运算时整型隐式转换为浮点型,运算结果也为浮点型即1.5;3.0/2.0两个操作数均为浮点型,结果也为浮点型即1.5。答案为:(c)。 例题7: 下列程序的运行结果为:______________。 409--28 #include int a=2,b=4,i=0,x; x=a>b&&++i; cout<<\:\ cout<<\:\} 解答: 本题主要考查“短路”表达式的运算。对于表达式中的“与”运算而言,只要有一个操作数为假,结果为假。所以当第一个操作数为假时,不在求解其它操作数。对于表达式中的“或”运算而言,只要有一个操作数为真,则结果为真。所以当第一个操作数为真时,不在求解其它操作数。本题中a>b为假,所以表达式a>b&&++i为假,而++i没有执行。故i为0。答案为:x:0 i:0 例题8:求解下列各表达式的值(其中x的值为100)。 (1) (a=1,b=2,c=3) (2) 1|3<<5 (3) 'a'+3&&!0%1 (4) x%2?“odd”:” even” 解答: (1) 逗号表达式的值是其最后一个表达式的值。答案为:3。 (2) <<运算符的优先级高于|运算符,所以先算3<<5结果为96(二进制1100000),然后与1做按位与运算 则结果为97(二进制1100001)。答案为:97。 (3) 参与本题的运算符,按优先级由高到低依次是:!运算符、算术运算符、逻辑运算符。'a'+3时字符型 首先隐式转换成整型然后相加结果为100,!0%1即1%1结果为0,100&&0结果为0。答案为:0。 (4) 算术表达式的优先级高于条件表达式,所以先算x%2结果为0,0?”odd”:”even”结果为”even”。 本题完成判断一个数是奇数还是偶数,若该数为奇数,则表达式的值为”odd”,为偶数,则表达式的值为”even”。答案为:”odd”。 例题9:下列程序运行结果为:_______________。 #include int a=23;