【杂记】之语法学习第一课输入输出与数据类型与选择结构

发布于:2024-10-17 ⋅ 阅读:(17) ⋅ 点赞:(0)

首先学会新建源文件

1.打开DEV C++

2.文件—>新建—>源代码

在这里插入图片描述

3.编写程序

4.编译并运行(F11)

在这里插入图片描述

第一个程序《Hello,World!》

题目描述

编写一个能够输出 Hello,World! 的程序。

提示:

  • 使用英文标点符号;
  • Hello,World! 逗号后面没有空格。
  • HW大写字母。

样例输出

Hello,World!

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	printf("Hello,World!");
	return 0 ;
}

其中

#include<bits/stdc++.h>//万能库
using namespace std;//表示使用命名空间
int main()//主函数
{
    
	return 0 ;//结束程序运行
}

只是使用 C语言 的话,主函数 外只需要写所调用的库即可。

主函数 内才是程序所要运行的,比如这个题只需要输出一个 Hello,World! ,所以只有一个 printf 是有用的,在这里 printf输出 的意思,而题中给的 Hello,World! 是个固定的一段字符,所以用 双引号 引起来一个输出即可。

C语言 中的代码实现大概是:

#include<stdio.h>
int main()
{
	printf("Hello,World!");
	return 0 ;
}

什么是库

我们在使用类似 printf 这样的操作时,都需要先调用其所对应的 ,否则无法正常使用。

而在该代码中使用的是 万能库 ,注意 ,这个 C语言 中无法使用。

输出字符菱形

题目描述

* 构造一个对角线长 5 5 5 个字符,倾斜放置的菱形。

样例输入 (无输入)


样例输出 #1

  *
 ***
*****
 ***
  *

不可以直接写为:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	printf("  *") ;
	printf(" ***") ;
	printf("*****") ;
	printf(" ***") ;
	printf("  *") ;
	return 0 ;
}

即使写了很多个 printf 也不能实现 换行 的操作,而是要在双引号之间另外写 KaTeX parse error: Undefined control sequence: \n at position 1: \̲n̲ ,如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	printf("  *\n") ;
	printf(" ***\n") ;
	printf("*****\n") ;
	printf(" ***\n") ;
	printf("  *") ;
	return 0 ;
}

第二个程序 《A+B Problem》

题目描述

输入两个整数 a , b a, b a,b,输出它们的和( ∣ a ∣ , ∣ b ∣ ≤ 10 9 |a|,|b| \le {10}^9 a,b109)。

任何一个伟大的思想,都有一个微不足道的开始。

输入格式

两个以空格分开的整数。

输出格式

一个整数。

样例输入

20 30

样例输出

50

代码如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a , b ;
	scanf("%d%d", &a, &b);
	printf("%d",a + b);
	return 0 ;
}

也可以把 a + b 的值先存到一个 c 上:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a , b , c;
	scanf("%d%d", &a, &b);
	c = a + b ;
	printf("%d", c);
	return 0 ;
}

我们每个要使用的 变量 都需要提前声明才能使用,而 int 就是声明 整数型变量 时使用的。

变量的赋值是 从右向左 的,不能写作 a + b = c a + b = c a+b=c ,而是要写成 c = a + b c = a + b c=a+b

思考题中为什么a,b的取值范围小于等于1e9

i n t int int 类型声明变量的取值范围是 − 2147483648 ~ 2147483647 -2147483648~2147483647 21474836482147483647 , 即 − 2 31 ~ 2 31 − 1 -2^{31} ~ 2^{31}-1 2312311

因为 i n t int int 声明的变量是 二进制 下的 32 32 32 位,第一位是符号位,考虑剩余每一位都为 1 1 1 ,第 i i i 位表示 十进制 下的 1 ∗ 2 i − 1 1 * 2^{i-1} 12i1 ,则用等比数列求和公式全部相加后得到答案为 2 31 − 1 2^{31} - 1 2311

超过此范围则被识别为其他奇怪的数。

对变量的理解

交换两个未知变量

给一个整数型变量 a a a b b b ,交换两个数并输出:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a , b ;
	scanf("%d%d", &a, &b) ;
	int c = a ;
	a = b ;
	b = c ;
	printf("%d %d",a , b) ;
	return 0 ;
}

考虑理解为两饮料, A A A 杯里是可乐 B B B 杯里是雪碧,这时候你拿个空杯子,把 A A A 杯里的可乐先倒 C C C 杯里,然后 B B B 杯的雪碧倒入 A A A 空杯中,此时 A A A 杯是雪碧 C C C 杯是可乐 B B B 杯为,最后把 C C C 杯中的可乐倒入 B B B 杯中,此时 A A A 杯是雪碧 B B B 杯是可乐

不声明新的变量:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a , b ;
	scanf("%d%d", &a, &b) ;
	a = a + b ;
	b = a - b ; 
	a = a - b ;
	printf("%d %d",a , b) ;
	return 0 ;
}

这个就纯数学,在纸上手推一下即可。

我们把这两个答案用空格隔开 % d \%d %d 用来给 a a a b b b 占位。

浮点型小数

题目描述

一个三角形的三边长分别是 a a a b b b c c c,那么它的面积为 p ( p − a ) ( p − b ) ( p − c ) \sqrt{p(p-a)(p-b)(p-c)} p(pa)(pb)(pc) ,其中 p = 1 2 ( a + b + c ) p=\frac{1}{2}(a+b+c) p=21(a+b+c)。输入这三个数字,计算三角形的面积,四舍五入精确到 1 1 1 位小数。

输入格式

第一行输入三个实数 a , b , c a,b,c a,b,c,以空格隔开。

输出格式

输出一个实数,表示三角形面积。精确到小数点后 1 1 1 位。

样例输入

3 4 5

样例输出

6.0

需要用到小数时我们用 d o u b l e double double 声明浮点型变量,占位用 % l f \%lf %lf 注意是小写的 L L L 而不是数字 1 1 1 ,输出时需要保留 x x x 位小数就写成 p r i n t f ( " % . x l f " , s ) ; printf("\%.xlf" ,s); printf("%.xlf",s);

#include <bits/stdc++.h>
using namespace std;
int main()
{
	double a,b,c,p,s;
	scanf("%lf%lf%lf" ,&a ,&b ,&c) ;
	p = ( a + b + c ) / 2.0 ;
	s = sqrt(p * (p - a) * (p - b) * (p - c));
	printf("%.1lf" ,s);
	return 0;
}

提示

数据保证能构成三角形, 0 ≤ a , b , c ≤ 1000 0\leq a,b,c\leq 1000 0a,b,c1000,每个边长输入时不超过 2 2 2 位小数。

字符类型与ASCII码

题目描述

给定一个字符,用它构造一个底边长 5 5 5 个字符,高 3 3 3 个字符的等腰字符三角形。

输入格式

输入只有一行,包含一个字符。

输出格式

该字符构成的等腰三角形,底边长 5 5 5 个字符,高 3 3 3 个字符。

样例输入

*

样例输出

  *
 ***
*****

提示

对于 100 % 100 \% 100% 的数据,输入的字符是 ASCII 中的可见字符。

这里这个题不像前面那个直接输出 * 的,而是要看人家给你什么字符,输出对应的字符。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	char c ;
	scanf("%c", &c) ;
	printf("  %c\n", c) ;
	printf(" %c%c%c\n", c, c, c) ;
	printf("%c%c%c%c%c\n", c, c, c, c, c) ;
	return 0 ;
}

字符类型变量声明时用 c h a r char char ,占位时用 % c \%c %c

题目描述

输入一个小写字母,输出其对应的大写字母。例如输入 q q q 时,会输出 Q Q Q

样例输入

q

样例输出

Q

什么是ASCII码? - ASCII码

#include <bits/stdc++.h>
using namespace std;
int main()
{
	char a;
	scanf("%c", &a) ;
	a = a - 32 ;
	printf("%c", a) ;
	return 0 ;
}

理解这个 32 32 32 的由来

#include <bits/stdc++.h>
using namespace std;
int main()
{
	char a;
	scanf("%c", &a) ;
	a = a - ('a' - 'A');
	printf("%c", a) ;
	return 0 ;
}

选择结构

if(判断条件) //优先判断是否成立
{
	执行操作1 ;
	操作2 ; 
}
else if(其他分支) 执行操作 ;//如果前面的if没有成立,则判断该条件是否能成立
else 执行操作 ;//上面的if和若干else if都没有成立,执行else里的操作

其中每个小括号里面的判断条件中,如果需要判断相等,例如判断 a a a 是否等于 b b b ,需要写成 i f ( a = = b ) if(a == b) if(a==b) 这样的两个连续的等号,若满足条件则返回 true ,否则返回 false ,可以理解为分别是 0 0 0 1 1 1

当需要判断多个条件同时成立或成立其一即可时,用 ∣ ∣ || ∣∣ & & \&\& && 连接条件,如当我们需要判断是否 a > = b a>=b a>=b b > = c b>=c b>=c 时不可以写成连等的 i f ( a > = b > = c ) if(a >= b >= c) if(a>=b>=c),而是要写成 i f ( a > = b & & b > = c ) if(a >= b \&\& b >= c) if(a>=b&&b>=c)

题目描述

给定一个整数,判断该数是奇数还是偶数。如果 n n n 是奇数,输出 odd;如果 n n n 是偶数,输出 even

输入格式

输入仅一行,一个整数 n n n

输出格式

输出仅一行,如果 n n n 是奇数,输出 odd;如果 n n n 是偶数,输出 even

样例输入 1

5

样例输出 1

odd

样例输入2

10

样例输出2

even
提示

− 100 ≤ n ≤ 100 -100\le n\le 100 100n100

注意记得考虑负数。

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n ; 
	scanf("%d",&n);
	if(n % 2) printf("odd") ;
	else printf("even") ;
	return 0 ;
}

题目描述

任意输入一个字符,判断其 ASCII 是否是奇数,若是,输出 YES,否则,输出 NO

例如,字符 A 的 ASCII 值是 65,则输出 YES,若输入字符 B(ASCII 值是 66 66 66),则输出 NO

输入格式

输入一个字符。

输出格式

如果其 ASCII 值为奇数,则输出 YES,否则,输出 NO

样例输入1

A

样例输出1

YES

样例输入2

B

样例输出2

NO

这里用 c h a r char char 来声明字符型变量,在运算时自动理解为其对应的 A S C I I ASCII ASCII 码值

#include <bits/stdc++.h>
using namespace std;
int main()
{
	char n ; 
	scanf("%c",&n);
	if(n % 2 == 1) printf("YES") ;
	else printf("NO") ;
	return 0 ;
}

题目描述

输入一个年份,判断这一年是否是闰年,如果是输出 1 1 1,否则输出 0 0 0

1582 1582 1582 年以来,闰年的定义:

普通闰年:公历年份是 4 4 4 的倍数,且不是 100 100 100 的倍数的,为闰年(如 2004 2004 2004 年、 2020 2020 2020 年等就是闰年)。

世纪闰年:公历年份是整百数的,必须是 400 400 400 的倍数才是闰年(如 1900 1900 1900 年不是闰年, 2000 2000 2000 年是闰年)。

输入格式

输入一个正整数 n n n,表示年份。

输出格式

输出一行。如果输入的年份是闰年则输出 1 1 1,否则输出 0 0 0

样例输入1

1926

样例输出1

0

样例输入2

1900

样例输出2

0

样例输入3

2000

样例输出3

1

样例输入4

1996

样例输出4

1

数据保证, 1582 ≤ n ≤ 2020 1582 \leq n \leq 2020 1582n2020 且年份为自然数。

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int a;
	scanf("%d",&a);
	if(((a % 4 == 0) && (a % 100 != 0)) || (a %400==0)) printf("1");
	else printf("0") ;
	return 0;
}

数的,必须是 400 400 400 的倍数才是闰年(如 1900 1900 1900 年不是闰年, 2000 2000 2000 年是闰年)。

输入格式

输入一个正整数 n n n,表示年份。

输出格式

输出一行。如果输入的年份是闰年则输出 1 1 1,否则输出 0 0 0

样例输入1

1926

样例输出1

0

样例输入2

1900

样例输出2

0

样例输入3

2000

样例输出3

1

样例输入4

1996

样例输出4

1

数据保证, 1582 ≤ n ≤ 2020 1582 \leq n \leq 2020 1582n2020 且年份为自然数。

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int a;
	scanf("%d",&a);
	if(((a % 4 == 0) && (a % 100 != 0)) || (a %400==0)) printf("1");
	else printf("0") ;
	return 0;
}