一、押题考点:
1. if嵌套配对
1.内嵌平衡if语句:
if ()
if()
else
else
if()
else
2.内嵌不平衡if语句
※易错:else 总是与写在它前面的、最靠近的、尚未与其他else配对多的if配对。
if()
{ if () }//注意使用{}将内嵌的不平衡if语句构造成一条符合语句
else
if()
else
3.if语句的缩进写法
if(条件1)
else if(条件2)
else if(条件3)
else
2.逗号表达式
1.格式:
<表达式1>,<表达式2>,…,<表达式n>
※易错:整体表达式的值等于<表达式n>的值
2.常见例子
a=3*5,a*4 //是逗号表达式,运算结束后a=15,整体表达式的值为60
x=(a=3,6*3) //是赋值表达式,运算结束后a=3,x=18, 整体表达式的值为18
x=a=3, 6*3 //是逗号表达式,运算结束后a=3,x=3,整体表达式的值为18
3.sizeof和strlen的区别
sizeof | strlen |
---|---|
格式: sizeof(<类型标识>/<变量名>) | 头文件:<string.h> ; 格式:strlen(要输出的字符串) |
作用:求一个变量或常量所占的字节数 | 作用:求字符串的长度(不包括‘\0’)。 |
sizeof(char)=1; sizeof(int)=4; sizeof(float)=4; sizeof(double)=8; | 该函数的实参可以是字符数组名,也可以是字符串 |
4.直到型循环与当型循环的区别
1.直到型循环 —— do…while()
- 格式
do
<语句>
while(<表达式>);
- 流程图:
3.特点:先执行,再判断;至少执行1次
2.当型循环 —— while( )…和for( )…
①while( )…
1.格式:
while(<表达式>) <语句>
2.流程图
②for()…
1.格式:
for([<初始化表达式>];[<条件表达式>];[<修正表达式>])
<语句>
2流程图
4.头文件的类型
1.<iostream>
2.<iomanip>
a.使用setw()函数时必须导入
3.<cmath> //进行数学运算时,如求sqrt(),三角函数等
4.<string.h> //调用字符串处理函数时使用
5.数组名是常量还是变量
6.判断程序功能:
1.求和
step1:初始化,sum=0;
step2:sum+=.......;
2.求阶乘
方法一:
double fact(int n)
{
if(n<0) return 0;
double f=1;
while (n>1)
f*=n--;
return f;
}
方法二:
//以求n的阶乘为例:
//展示关键代码
double t=1;
for(int i=1;i<=n;i++)
{
t=t*i;
}
3.break语句
//常用在开关中,用于跳出循环
switch(n)
{
case 1 :<操作语句>;break;
default:
※ break 语句和 continue 语句的区别
continue 语句:
作用:跳过循环体中下面未执行的语句,结束本次循环。
continue语句一定要配合if语句写在循环体的中间,将需要跳过的计算过程写在continue语句的后面,这样才能达到预期的效果。
break语句和continue语句的对比实例:
//break 语句
for(i=1;i<=4;i++)
{
x=i*i;
if(x==9) break;
cout<<x<<endl;
}
cout<<"i="<<i<<endl;
/*
输出结果为:
1
4
i=3
*/
//continue 语句
for(i=1;i<=4;i++
{
x=i*i;
if(x==9) continue;
cout<<x<<endl;
}
cout<<"i="<<i<<endl;
/*
输出结果为:
1
4
16
i=5
*/
4.排序
①逆序排序
思想:依次首位对调
//核心代码:
//假设一共有N个数
for(i=0;i<N/2;i++)
{
int t=b[i];
b[i]=b[N-1-i]; //首位对调
b[N-1-i]=t;
}
②冒泡法(从小到大排序)
//核心代码
int i,j,t;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(a[j]>a[j+1])
{ t=a[j]; a[j]=a[j+1]; ba[j+1]=t; }
//每次找出最大的数依次放在最后一个数组元素
③排序法(从小到大排序)
//核心代码
int i,j,p,t;
for(i=0;i<n-1;i++)
{
p=i;
for(j=i+1;j<n;j++)
if(a[j]<a[p]) p=j; //记下每一趟最小值所在的位置
if(p!=i) //A
{ t=a[p]; a[p]=a[i]; a[i]=t;}
/* 程序中若A行的判断为假,
表示第i趟扫描找到的最小数是本次扫描范围内的第1个数,
它应储存在该位置,不需要交换。*/
}
④插入法排序
前提:对已经排好序的序列进行插入
7.学籍管理:
参考课本和曾经做过的习题。
7-3 学生成绩录入及查询 (20分)
常见题型
1. 判断一个数是否为素数:
//额外导入的头文件
#include <cmath>
//判断是否为素数的操作:
for(x=m;x<=n;x++)//从m开始用循环找出m至n之间的素数
{
b=sqrt(x);
for(i=2;i<=b;i++)//判断区间[m,n]内的某一实数x是否为素数
{
if(x%i==0)//如果x为素数,则跳出寻找约数的循环
break;
}
if(i>=b+1)//找不到约数,确定是素数
原理:
设x不是一个素数,那么x就当然有一个不小于2的因子m,即x可以分解为x=(sqrt(x))²=mn,其中m和n为x的两个约数,显然m和n都是大于或等于2的整数。假设m是m与n两个数中比较小的一个整数,可以得出(sqrt(x))²=mn≥m²≥2²,前提条件“x是一个正整数”可得sqrt(x)≥m≥2。
故可以得出一个结论:
若正整数x不是一个素数,那么在2~sqrt(x)之间必有一个约数。
常见用方法总结:
1.四舍五入:
方法一:
用round()函数
#include <cmath>
cout<<round(x)<<endl;//x是要四舍五入输出的数
/*round()是<cmath>头文件下用于对数值进行四舍五入计算的函数*/
方法二:
直接加0.5再取整
例如:
如果是1.4,取整后就是1(int(1.9));
如果是1.6,取整后就是2(int( 2.1))
相关曾经做过的题:
7-2 平面向量加法 (15分)
2.保留n位小数输出:
- 方法一
cout.precision(x):可以同时输出数字和字符串。
在要输出数字的前面加fixed即可。
2.方法二
cout<<setiosflags(ios::fixed)<<setprecision(n)<<
//额外导入头文件
#include<iomanip>
//保留2位小数输出x
cout<<setiosflags(ios::fixed)<<setprecision(2)<<x;
3.输入天数时不带“/”
用cin.get()来吸“/”
例如输入样例为:
2009/03/02
通过以下代码
int year;
cin>>year;
cin.get();
int month;
cin>>month;
cin.get();
int day;
cin>>day;
cin.get();
可得到
year=2009;
month=03;
day=02;
4.正整数的按位分解
//核心代码:
int num,sum=0,k,i=0;
cin>>num;
while(num>0)
{
k=num%10;
cout<<k<<" ";
i++;
num=num/10;
}
5.斐波那契数列
int a=0,b=1,c=1,n;
cin>>n;//输入n
for(int i=1;i<=n;i++)
{
a=b;
b=c;
c=a+b;
}
cout<<c;//输出最终结果
6.大小写转换
大写转小写:
//若ch为大写,满足以下条件
ch>='A'&&ch<='Z'
//转小写则要ch+32
小写转大写:
//若ch为小写,满足以下条件
ch>='a'&&ch<='z'
//转大写则要ch-32
7.关于输入输出的一些坑
1.windows系统回车键包含‘\n’和‘\r’,而cin.get()只能识别‘\n’。
点击查看曾经做过的题目:7-1 统计数字字符和空格 (15分)
2.末尾不能有空格的处理方法:
点击曾经做过的题目:7-2 输出数组元素 (15分)
3.关于时间的输出
一下代码可以输出形如 08:40:56 的时间
printf("%02d:%02d:%02d",hh,mm,ss);
printf()函数中的%02d:
默认情况下,数据数据宽度不够2位是用空格填补的,但是因为2d前面有0,表示,数据宽度不足时用0填补
4.字符数组,定义时留1位放 '\0’。