【冲击4.0】大一上C++程序设计复习

一、押题考点:

1. if嵌套配对

1.内嵌平衡if语句:

if ()
	if()
	else
else 
	if()
	else

2.内嵌不平衡if语句
※易错:else 总是与写在它前面的、最靠近的、尚未与其他else配对多的if配对。

if()
{	if () 		}//注意使用{}将内嵌的不平衡if语句构造成一条符合语句
else
	if()
	else

3.if语句的缩进写法

if(条件1else 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的区别

sizeofstrlen
格式: sizeof(<类型标识>/<变量名>)头文件:<string.h> ; 格式:strlen(要输出的字符串)
作用:求一个变量或常量所占的字节数作用:求字符串的长度(不包括‘\0’)。
sizeof(char)=1; sizeof(int)=4; sizeof(float)=4; sizeof(double)=8;该函数的实参可以是字符数组名,也可以是字符串

4.直到型循环与当型循环的区别

1.直到型循环 —— do…while()

  1. 格式
do 
	<语句>
while(<表达式>);
  1. 流程图:
    在这里插入图片描述
    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位小数输出:

  1. 方法一
    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’。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值