C++学习

1.1 计算机的问题求解方法

1 算法的描述方法有自然语言,伪代码,流程图 AC
2 结构化程序设计方法包含三种基本结构:顺序,循环,选择 ABC
3 goto语句很方便,应该随意使用 错
4 程序设计包括以下五个步骤: (1)确定问题可计算; (2)建立问题的数学模型; (3)设计算法和数据结构; (4)选择合适的计算机语言编写程序; (5)调试运行程序分析结果。 这种说法正确吗?对
5 算法的特征包括:有穷性,确定性,有效性,有零或多个输入,有一或多个输出。这种说法正确吗?对
运算符表

基本数据类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
上表中,优先级同为1 的几种运算符如果同时出现,那怎么确定表达式的优先级呢?如下
在这里插入图片描述
自增自减符
i++:先将变量i的值以表达式的值确定下来,再将i加一
++i:先将i加一,再将增过1的变量i以表达式的值确定下来
i=3, ①printf("%d",i++);输出3②printf("%d",++i);输出4


关于&和|
&: 在C语言中有两种意思,一种是取地址符,是单目运算符;另一种是位运算符,表示“按位与”,是双目运算符。|: 是位运算符,表示“按位或”
符号 & 和 | 这两个运算符都是二进制的按位操作符。
&: 二进制“与”(都为1时,结果是1,否则是0。),比如:1010 & 1011 = 1010,1010 & 1000 = 1000。
|: 二进制“或”(有1时,结果是1,都是0时,结果为0。),比如:1010 | 1011 = 1011,1010 | 1000 = 1010。
补充:
^:二进制按位异或(相同时,结果是0,否则是1。)比如:1010 ^ 1011 = 0001,
1010 & 1000 = 0010。
~:按位取反(a=0101)则 b=~a=1010
移位运算
C++ cout格式化输出(输出格式)完全攻略:

http://c.biancheng.net/view/275.html

在这里插入图片描述
<<可以理解为往左拉n位
注:任意一个非0数都是真!
C语言printf输出控制符详解
https://blog.csdn.net/wl724120268/article/details/102658826
printf 用法详解
http://c.biancheng.net/view/159.html

2.1 算术运算的C程序实现


以下程序的输出结果是【 】

#include <stdio.h>
main( )
{ int x=10, y=10;
printf("%d %d\n", x--, --y);
}

10,9


2.2 关系运算的C程序实现


x=10,y=2; 表达式x-5<=x+y的值是____1
8<12,真


第二周作业


1已知:int x,y;double z;则以下语句中错误的函数调用是scanf("%x%o%6.2f",&x,&y,&z);
%6.2f 错了
已知” int a=5,b=5,c;”,则执行表达式” c=a=a>b”后变量 a 的值为____0

3 已知:char a;int b;float c;double d;执行语句 c=a+b+c+d;后,变量c的数据类型是____float
c的类型不会变,仍然是float,只是在运算过程中的中间结会是double型,然后转化为float,赋给c。 变量的类型经过定义后是不会变的。
4已知 int i=5;执行语句 i+=++i;i的值是____12
5已知int x=5,y=5,z=5;执行语句x%=y+z;后,x的值是__5__
6下列可以表示字符型常数的是 A.“a” B.’\t’ C."\n" D.297 B
7字符串"\\065a,\n"的长度是____5
8把算术表达式 -(31.6a * 8 +1/7) * 12 表示为一个C语言表达式,正确的写法是____-(31.6*a *8 +1.0/7) * 12
9温度华氏和摄氏的关系是: C=5(F-32)/9。已知:float C,F;由华氏求摄氏的正确的赋值表达式是____c=5
(F-32)/9
10 已知int i=10;表达式“20-0<=i<=9”的值是____1

练习:判断一个素数
在这里插入图片描述 ***

2.3 逻辑运算的C程序实现

表示算术关系12<=x<=y的C语言表达式为
(12<=x)&&(x<=y)



2.5 几种很个别的运算

已知int i,a; 执行语句"i=(a=2 * 3,a * 5),a+6;"后,变量i的值是30
这里考察的是C语言中运算符的优先级,先执行括号的程序,然后执行逗号运算符,先执行a=2 *3,再执行a * 5,取右操作数,然后赋值给i,就是30

2.7 顺序结构程序实例

求一元二次方程x^2+x-2=0的根。

#include <math.h>
int main()
{ float a, b, c, x1, x2, q;
printf("Please input a, b, c\n");
scanf("%f,%f,%f",&a,&b, &c );
q=sqrt( b*b-4*a*c);
x1=(-b+q)/(2*a);
x2= (-b-q)/(2*a) ;
printf("x1=%.0f, x2=%.0f\n", x1, x2 );
}

3.1 程序中的路径选择实现

执行下列程序段后,x、y和z的值分别是 【】

int x=10,y=20,z=30;

if(x>y) z=x;x=y;y=z;
x,y,z=20,30,30: 因为x>y判断不成立,故只执行x=y;y=z

3.2 路径中的再选择——嵌套判断

if语句的控制条件可以用任何表达式

3.4 多分支问题的C程序设计

在这里插入图片描述
B case后面要有表达式 A case后面不能为实型 C switch a 和下面案列不能匹配

3.6 选择结构的程序实例

以下程序的输出结果是【 1】

main( )
{ int w=4,x=3,y=2,z=1;
if(x>y&&!(z==w))printf(%d\n”,(w<x?w:z<y?z:x));
else printf(%d\n”, (w>x?w:z>y?z:x));
}

1,因为if(x>y&&!(z==w))成立,则执行 printf(”%d\n”,(w<x?w:z<y?z:x));
,(w<x?w:z<y?z:x)即4<3假,继续判断z<y真 输出x

第四周作业

1 以下程序的输出结果是【】

main( )

{ float x=2,y;
if (x<0) y=0;
else if (x<5&&!x) y=1/(x+2);
else if (x<10) y=1/x;
else y=10;
printf(%f\n”,y);
}

0.500000,注意x,y类型为float

下面程序的输出是【】

#include <stdio.h>
main ( )
{ int x=1, y=0, a=0, b=0;
switch ( x )
{ case 1: switch ( y )
{ case 0: a++; break;

case 1: b++; break;
}
case 2: a++; b++;
break;
}
printf ("a=%d,b=%d\n", a, b );
}

a=2,b=1
因为:x=1,从外层switch的case 1入口,到达内层的switch;由于y=0,从内层switch的case 0入口,执行a++;,执行break语句,跳出内层switch结构;“case常量表达式”只能起语句标号作用,并不是在该处进行条件判断。本题程序在执行完内层switch结构后,继续执行了外部switch结构的case 2分支。最后a和b的值分别为2和1。

4.1 需要重复执行的程序

下列程序执行的结果是【】

a=1;b=2;c=3;
while(a<b<c) {t=a;a=b;b=t;c--;}
printf(%d,%d,%d”,a,b,c);

1 2 1
第一次真,则a,b交换,c减一,2 1 2
第二次真,则a,b交换,c减一,1 2 1
第三次假退出循环

4.2 至少要执行一次的循环

1 指出程序结束之时,j、i、k的值分别是【】

main( )

{ int a=10,b=5,c=5,d=5,i=0,j=0,k=0;
for (;a>b;++b) i++;
while (a>++c) j++;
do k++; while (a>d++);
}

i=5,j=4,k=6
for (;a>b;++b) i++; 10>5 执行5次故i =5
while (a>++c) j++; 10>6 ++c是加一后再比较,故j=4
do k++; while (a>d++); 多循环一次,故k=6
2下列程序段【】

x=3;
do{ y = x--;
if ( !y ) { printf(”x”); continue; }
printf(”#”);
} while(1<=x<=2);

} while(1<=x<=2);中1<=x<=2逻辑值一直为真,所以此程序为死循环

4.3 已知循环次数用for语句

下面程序的功能是计算1-3+5-7+ …… -99+101的值。【①】

main()

{ int i,t=1,s=0for(i=1;i<=101;i+=2)
{ ① ;
s=s+t;
② ;
}
printf(%d\n”,s}}

① t=i*t
②t=s>0?-1:1
注:for语句的初始表达式不是必须的

循环结构的程序设计(一)–4.4 循环控制——简单循环应用

下面程序的功能是从键盘上输入若干学生的学习成绩,统计并输出最高成绩和最低成绩,当输入为负数时结束输入。【①】

main()
{ float x,amax,amin;
scanf(%f”,&x);
amax=x;
amin=x;
while()
{ if(x>amax) amax=x;
if() amin=x;
scanf(%f”,&x)}
printf(”\namax=%f\namin=%f\n”,amax,amin)}

①x>=0
②x<amin

4.5 循环的嵌套

#include<stdio.h>
int main( )
{ int i,j;
float s;
for(i=6;i>4;i--)
{s=0.0;
for(j=i;j>3;j--)s=s+i*j;
}
printf(%f\n”,s);
}

注意到s=0.0在for语句内,所以每次s从零开始,当i=5时,s=55+54,此后i减1,退出循环,所以s=45.000000

4.6 break与continue

下列说法正确的是
在这里插入图片描述
D continue的功能是结束本次循环,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定

第六周作业

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
i先用再加

int main()
{ int i,j,x=0for(i=0;i<2;i++)
{ x++for(j=0;j<-3;j++)
{ if(j%2)
continue;
x++}
x++}
printf(”x=%d\n”,x)}

4.上面程序的输出结果是:x=4

#include <math.h>
main()
{ float x,y,z;
scanf(%f,%f”,&x,&y);
z=x/y;
while(1)
{ if(fabs(z)>1.0)
{ x=y;
y=z;
z=x/y;
}
else break}
printf(%f\n”,y)}

注:fabs()是浮点数绝对值函数。

5.假定从键盘上输入“3.6,2.4<回车>”,下面程序的输出是:1.6000000
**

数组篇

**
数组名字是数组首地址常量
字符串的末尾必须有’\0’字符,且字符串只能存放在字符数组中
在这里插入图片描述
常用字符串处理函数,都在库文件#include<string.h>
在这里插入图片描述
用一维数组方式引用二维数组元素
在这里插入图片描述

5.2 一维数组的定义和引用–作业

在这里插入图片描述
注:第1个循环对数组a进行赋值:第2个循环对数组p进行赋值;第3个循环对k进行累加,k的初值等于5,第1次循环,k=k+p[0] * 2=5+0*2=5,第2次循环,k=k+p[1]*2= 5+2 * 2=9,第3次循环,k=k+p[2]*2=9+6 * 2=21并输出。
在这里插入图片描述
在这里插入图片描述

5.6 二维数组的输入输出–作业

在这里插入图片描述
B 改为float x[][3]={{1},{2},{3}};第一维长度可以省略而第二维不行
C改为long s[2][3]={{1},{1,2}};,因为第一维是2
D 编译可以通过,但会产生垃圾数据
若有说明: int a[][4];则a[i][j]前有____个元素。i*4+j

5.8 二维字符数组–作业

在这里插入图片描述
注:p是指向字符的指针数组。执行第1个循环后,p[0]指向字符数组ch的第1行"6937", p[1]指向字符数组ch的第2行"8254",那么p[0][0]其实就对应着ch[0][0],表示第1行的第1个元素“6”。第2个循环中,外层i循环是控制指针数组p的,内层j循环则是对每一行内的各个元素进行处理,特别注意循环变量j的改变"j+=2"。这样就可以看出是对ch[0][0]、ch[0][2]、ch[1][0]和ch[1][2]进行处理。

综合测试

BBAAA
ADBCA
CABCB
BDABD
BCBBA
ABDBA
BACDB
BDBAD

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值