第1关:输入三个整数,求它们的和及平均值。
任务描述
本关任务:设计一个程序,输入三个整数,求它们的和及平均值。
相关知识
为了完成本关任务,你需要掌握:算术运算、域宽控制。
算术运算
C语言的算术运算符有以下几种: ① +——加法运算符,如3+5。 ② -——减法运算符或负值运算符,如5-2,-3。 ③ ——乘法运算符,如35。 ④ /——除法运算符,如5/3,5.0/3。 ⑤ %——模运算符或求余运算符,如7%4的值为3。 ⑥ ++——自增1。 ⑦ --——自减1。 除了负值运算符是单目运算符外,其它都是双目运算符。
两个数相除,如果这两个数都是整数,所得的结果是商的整数部分;如果有一个是实数,结果的类型为实数型。
域宽控制
对于 printf
函数,域宽是通过在格式化字符串中使用 %Nd 的形式指定的,其中 N
是域宽的数值,而 d
表示输出的数据类型(d
表示整数,f
表示浮点数,s
表示字符串等等)。例如,%5d
表示输出一个 5
位的整数,如果输出的整数不足 5
位,则在前面补足空格。同样的,%05d
表示输出一个 5
位的整数,如果输出的整数不足 5
位,则在前面补足 0
。 对于 scanf
函数,用十进制整数指定输入的宽度(即字符数)。 例如:scanf("%5d",&a); 输入12345678只把12345赋予变量a,其余部分被截去。 又如:scanf("%4d%4d",&a,&b); 输入12345678将把1234赋予a,而把5678赋予b。
编程要求
根据提示,在右侧编辑器 Begin-End 内补充代码,计算并输出三个数的和用平均值,平均值保留 2
位小数。
测试说明
平台会对你编写的代码进行测试:
测试输入:1
2
3
预期输出: sum=6
avg=2.00
开始你的任务吧,祝你成功!
参考代码:
#include<stdio.h>
int main()
{
int a,b,c,sum;
//=======begin=======
float avg;
scanf("%d%d%d",&a,&b,&c);
sum=a+b+c;
avg=sum/3.0;
printf("sum=%d\navg=%.2f",sum,avg);
//========end========
return 0;
}
第2关:求一元二次方程的根,假定存在实根。
任务描述
本关任务:编写求一元二次方程的根的小程序。
相关知识
为了完成本关任务,你需要掌握:
- 表达式的书写;
- 数学函数的使用。
表达式的书写
表达式是使用运算符连接起来的式子,C 语言中的表达式有以下几种:
- 算数运算符
+ - * / %
- 赋值运算符
+= -= *= /= %=
- 自增、自减
++ --
a++
为先使用a
,然后在进行a=a+1
的运算,而++a
为先a=a+1
,然后再使用a
,这个时候a
的值已经不是原来的a了,而是a+1。int a=1;(a++)*(a++)*(a++)*(a++)
的结果是24
,在进行完上式之后a
的值是5
。 - 关系运算符(比较运算符)
< > >= <= == !=
关系运算结果为真(1)
或假(0)
,即成立或不成立,对或者错,开或关
计算机返回表达式成立与否很标准:1(真);0(假)
- 逻辑运算符
&& || !
表达式1
逻辑运算符
表达式2
&&
:表达式1
和表达式2
同时成立,即同时为1
时返回值为1
,否则返回0
,也就是假。||
:表达式1
和表达式2
中有一个成立,则返回值为真,返回1
,否则返回0
,即假。!
:!表达式1
如果表达式成立则返回假也就是0
,如果不成立则返回真即1
。!
的优先级比较高,仅此于()
。 - 位运算符
& | >> <<
a<<n
相当于给一个变量乘2
的n
次方,a>>m
相当于a
除以2
的n
次方。 - 三目运算符
表达式1?表达式2:表达式3 c=a>b?
a:b
意思是如果a>b
,那么c=a
,否则c=b
。相当于cif
c判断。 sizeof
(表达式)用来获取表达式结果的类型在内存中存储所占用的字节数,sizeof()
的结果是unsigned long
,在使用printf
打印时占位符是%lu
。
数学函数的使用
要在 C 语言中使用数学函数,首先需要添加头文件 math.h
。 一、基本的数学运算 C 语言中提供了四个基本的数学运算函数,分别是加法函数、减法函数、乘法函数和除法函数。这些函数的使用方法如下:
- 加法函数使用“+”符号进行加法运算
- 减法函数使用“-”符号进行减法运算
- 乘法函数使用“”符号进行乘法运算
- 除法函数使用“/”符号进行除法运算
二、其他常见的数学运算 C 语言中提供了:
-
幂运算函数
pow
,用于计算一个数的幂。其使用方法如下double pow(double x, double y);
其中,x
表示底数,y
表示指数。函数的返回值为x
的y
次幂。 -
sqrt()
的用法: 计算一个非负实数的平方根 -
取整函数
ceil
double ceil(double x);
该函数用于向上取整,即将一个浮点数向上舍入为接近的整数
编程要求
根据提示,在右侧编辑器 Begin-End 部分补充代码,输出要求值。
测试说明
平台会对你编写的代码进行测试: 输入三个系数 测试输入:1
-3
2
预期输出: x1=2.00
x2=1.00
开始你的任务吧,祝你成功!
参考代码:
#include<stdio.h>
//=======begin=======
#include<math.h>
int main()
{
float a,b,c,d,x1,x2;
scanf("%f%f%f",&a,&b,&c);
d=b*b-4*a*c;
if (d>0){
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
}
printf("x1=%.2f\n",x1);
printf("x2=%.2f\n",x2);
//========end========
return 0;
}
第3关:阅读并运行程序,掌握表达式的用法。
任务描述
本关任务:阅读并运行程序。
开始你的任务吧,祝你成功!
-
1、阅读并运行程序,掌握算术表达式的用法。
运行结果是:▁▁▁▁▁
填空1答案:72.500000
-
2、程序
运行结果是 log(a)=▁▁▁▁▁ log10(100)=▁▁▁▁▁ exp(1)=▁▁▁▁▁ sin(PI/2)=▁▁▁▁▁
填空1答案:0.999999
填空2答案:2.000000
填空3答案:2.718282
填空4答案:1.000000
-
3、完善并运行程序,理解赋值运算。理解程序执行的功能:不借助于中间变量实现交换两个变量的值。 int main() { int a=5, b=3; printf("a=%d, b=%d\n", a, b); a+=b; ▁▁▁▁▁; ▁▁▁▁▁; printf("a=%d, b=%d\n", a, b); return 0; }
填空1答案:b=a-b
填空2答案:a=a-b
-
4、运行程序 #include <stdio.h> #include <math.h> int main(void) {
printf("%f\n",pow(1.01,365)); printf("%f\n",pow(0.99,365)); return 0; } 输出结果是 ▁▁▁▁▁ ▁▁▁▁▁ 从结果中想到什么?请在评论区发言。填空1答案:37.783434
填空2答案:0.025518
第4关:阅读并运行程序,理解输出、输入函数相关特点。
任务描述
本关任务:阅读并运行程序,理解输出、输入函数相关特点。
开始你的任务吧,祝你成功!
-
1、
阅读并运行程序,理解printf()函数输出列表中各输出项的运算顺序是从右到左,进一步理解自增、自减运算,注意VC编译系统的特点。
运行结果是: ▁▁▁▁▁ ▁▁▁▁▁ ▁▁▁▁▁
填空1答案:2,2
填空2答案:3,0
填空3答案:1,3
-
2、
按要求运行程序,理解使用scanf()时,正确输入与错误输入时,返回值代表的含义。
输入12(回车),结果是:▁▁▁▁▁ 再运行一次,输入d(回车),结果是:▁▁▁▁▁
填空1答案:1
填空2答案:0
第5关:阅读并运行程序,理解运算符优先级的结合性及运算顺序。
任务描述
本关任务:阅读并运行下述两个程序,理解运算符优先级的结合性及运算顺序。
相关知识
为了完成本关任务,你需要掌握:
- 优先级;
- 结合性;
- 自增、自减运算符。
优先级
在表达式中,优先级较高的先于优先级较低的进行运算。44
个运算符优先级如下,从上到下优先级降低。 ① 初等 4 个:( )
、[ ]
、->
(指向结构体成员)、.
(后跟结构体成员)。 ② 单目 9 个:!
、~
、++
、--
、-
(表示负号)、(类型)
、*
(表示指针)、&
(表示取地址)、sizeof
(表示长度)。上面的“(类型)”表示强制类型转换。 ③ 算术 5 个:*
、/
、%
、+
、-
(表示减号)。 ④ 位移 2 个:<<
、>>
。 ⑤ 关系 6 个:<
、<=
、>
、>=
、==
(表示等于)、!=
(表示不等于)。 ⑥ 位逻 3 个:&
(表示按位与)、^
(表示按位异或) 、|
(表示按位或)。 ⑦ 逻辑 2 个:&&
(表示逻辑与)、||
(表示逻辑或)。 ⑧ 条件 1 个:? :
。 ⑨ 赋值 11 个:=
、+=
、-=
、*=
、/=
、%=
、>>=
、<<=
、&=
、^=
、|=
。 ⑩ 逗号 1 个:,
。
在编写包含多个运算符的表达式时,应当注意各个运算符的优先级,确保表达式中的运算符能以正确的顺序参与运算。对于复杂表达式,为了清晰起见,可以加圆括号“()”强制规定计算顺序。
结合性
在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理:对于左结合性(结合方向自左向右),运算对象先与左面的运算符结合;对于右结合性(结合方向自右向左),运算对象先与右面的运算符结合。 结合方向自右向左的只有三类:赋值、单目和三目,其他都是自左向右。
自增、自减运算符
作用是使变量的值增 1
或减 1
,如:++i(--i)
的作用是,在使用 i
之前,先使i的值加 1(减1)
;i++(i--)
的作用是,在使用 i
之后,使 i
的值加 1(减1)
。 粗略地看,++i
和 i++
的作用相当于 i=i+1
。但 ++i
和 i++
不同之处在于 ++i
是先执行 i=i+1
后,再使用 i
的值;而 i++
是先使用 i
的值后,再执行 i=i+1
。如果i的原值等于 3
,则执行下面的赋值语句: j1=++i;
j2=i++;
对于前者,i
的值先变成 4
,再赋给 j1
,j1
的值为 4
;对于后者,先将 i
的值 3
赋给 j2
,j2
的值为 3
,然后 i
变为 4
。
开始你的任务吧,祝你成功!
1、
阅读并运行下述两个程序,理解运算符优先级的结合性及运算顺序。
运行结果是: b=▁▁▁▁▁ c=▁▁▁▁▁ d=▁▁▁▁▁
运行结果是: ▁▁▁▁▁ ▁▁▁▁▁ ▁▁▁▁▁ ▁▁▁▁▁
填空1答案:2
填空2答案:10
填空3答案:0
填空4答案:21
填空5答案:20
填空6答案:24
填空7答案:-1