初衷
写这篇文章旨在分享学习成果记录学习过程,如有知识性错误望各位大佬斧正。
目录
当输入scanf的值不存在比如连续ctrl+z三次,再终止循环。
基础知识介绍
C语言关系运算符
C语言中用于比较的表达式称为为关系表达式,里面的运算符就是关系运算符有如下六个:
1.>
2.<
3.!=
4.==
5.<=
6.>=
其中特别注意“==”,初学者应为还没习惯经常和赋值符“=”混淆,可以采用把要用的值写在等号左边如:“3==a”这样如果写错编译器会报警,真的可以减少很多不必要的麻烦。
C语言条件操作符(C中唯一的三目操作符)
书写形式:exp1 ? exp2 : exp3 ;
如果exp1为真,整个表达式返回exp2的计算值 ,如果为exp1假则返回exp3的计算值。
//改造前
# include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d", &a);
if (a > 5)
b = 3;
else
b = -3;
printf("%d\n", b);
return 0;
}
//改造后
# include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d", &a);
b = a > 5 ? 3 : -3;
printf("%d\n", b);
return 0;
}
C语言逻辑操作符
逻辑运算符用于表达更复的关系式一共三种,代表了计算机语言中三种最经典的关系
!:逻辑取反运算符,改变单个表达式的真假
&&:与运算符,只有左右两边的表达式都为真的时候整体才为真(同真为真,一假为假)
||:或运算符,左右两边的表达式有一个为真,整体返回真(一真为真,同假为假)
特别注意“if(12<a<100)”的写法是错误的应该写成“if(12<a&&a<100)”,用第一种程序只要a>12就会返回true达不到效果
C语言的三种基本结构
顺序结构
选择结构
if语句
# include<stdio.h>
int main()
{
if(...)
printf.....
return 0;
}
if, else之后都只控制一个语句,如想控制多个语句可用大括号括起,大括号部分称为复合语句。
如下
//编写程序数一下 1到 100 的所有整数中出现多少个数字9
# include<stdio.h>
int main()
{
int i = 0;
int count = 0;
for (i = 1; i <= 100; i++)
{
if (i % 10 == 9)
count++;
if (i / 10 == 9)
count++;
}
printf("%d", count);
return 0;
}
多个if语句的嵌套
在 if else语句中,else可以与另一个if语句连用构成多重判断
如下
//从大到小输出三个的数字
# include<stdio.h>
int main()
{
printf("请输入三个数字将为你比较大小:");
int a = 0;
int b = 0;
int c = 0;
scanf("%d%*c%d%*c%d", &a, &b, &c);
if(a>b && b>c)
{
printf("%d>%d>%d", a, b, c);
}
else {
if (a > c && c > b)
{
printf("%d>%d>%d", a, c, b);
}
else
{
if (b > a && a > c)
{
printf("%d>%d>%d", b, a, c);
}
else
{
if (b > c && c > a)
{
printf("%d>%d>%d", b, c, a);
}
else
{
if (c > b && b > a)
{
printf("%d>%d>%d", c, b, a);
}
else
{
if (c > a && a > b)
{
printf("%d>%d>%d", c, a, b);
}
}
}
}
}
}
return 0;
}
悬空else
如果有多个if配一个else,else只与最近的if构成关系。
如下
此时程序目标输出为“equilateral triangle!”而实际输出多了“ordinary triangle!”。因为else与最近的if连用,第一个if被孤立,但第一个if判断完后执行第二个if,显然不满足第二个if的条件,执行else,所以有了该结果。
更正如下
方法为在第二个if前加else,当第一个if判断结束后不会进行第二个if的判断,也就不会有“ordinary triangle”了。
switch语句
# include<stdio.h>
int main()
{
switch(expression){
case value1:statement
case value2:statement
case value3:statement
default: statement
return 0;
}
switch相当于if语句的一种简写形式如下
//输入任意一个数得该数除以三的的余数
# include<stdio.h>
int main()//if 语句的写法
{
int a = 0;
scanf("%d", &a);
if (a % 3 == 0)
printf("余数为0\n");
if (a % 3 == 1)
printf("余数为1\n");
if (a % 3 ==2)
printf("余数为2\n");
return 0;
}
转化为switch后
//输入任意一个数得该数除以三的的余数
# include<stdio.h>
int main()//用switch语句
{
int a = 0;
scanf("%d", &a);
switch (a%3)
{
case 0:printf("余数为0");
break;
case 1:printf("余数为1");
break;
case 2:printf("余数为2");
break;
default:
printf("你输入的数字有误");
break;
}
return 0;
}
当expression==value时就会返回该value之后的内容
default当value里面没有expression时返回default后的内容
case后接的语句只能是整型常量表达式
expression后接的语句只能是整型表达式
case语句后不加break程序 会从上到下依次执行
case和后面的数字必须空一格。
循环结构
while循环
while(条件)
{
语句
}
通过while循环实现多组输入,这种情况在很多编程题目中都会体现如下
//判断两数大小(使用while循环)
# include<stdio.h>
int main()
{
int a = 0; int b = 0;
while (scanf("%d%*c%d", &a, &b)!=EOF)
{
if (a > b)
printf("a>b");
else if (a < b)
printf("a<b");
else if (a == b)
printf("a=b");
}
return 0;
}
当输入scanf的值不存在比如连续ctrl+z三次,再终止循环。
for循环
for循环的一个实例
//打印1000年到2000年之间的闰年
# include<stdio.h>
int main()
{
int a = 1000;
for (a = 1000; a <= 2000; a++)
{
if (a % 4 == 0&& a % 100 != 0)
{
printf("%d\n",a);
}
else
{
if (a % 400 == 0)
{
printf("%d\n", a);
}
}
} return 0;
}
for循环执行的顺序,for后括号内第一个表达式(判断语句)-》括号内第二个表达式(结束语句)-》for语句后大括号内的内容(实现逻辑)-》a++(实现调试)
for循环也相当于一种特殊的while循环
比较如下