#include //input & output
#include //pause
关系运算符和表达式
(a>0)
>= 不小于
&& (变量)与运算
|| (变量)或运算
! 非运算【右结合性,从右往左算】
== 等于
!= 不等于
a+b>c+d 先算加法再比较不等号左右
允许嵌套:
a>(b>c);
a!=(b=c);
关系表达式的值是“真”则返回值是1;
i=(5>0) 则i=1
void main()
{
char c = 'k';
int i = 1, j = 2, k = 3;
float x = 3e+5, y = 0.85;
printf("%d,%d\n", 'a' + 5 < c, -i - 2 * j >= k + 1);
printf("%d,%d,\n", 1 < j < 5, x - 5.25 <= x + y);
printf("%d,%d\n", i + j + k == -2 * j, k == j == i + 5);
//先算k==j,返回值0;再算0==i+5,返回值0
system("pause");
}
与或非运算
int i;
i = 3 && 5; 则返回i = 1 //非零的值就返回1
i = 3 && 0; 则返回i = 0
i = 3 || 0; 则返回i = 1
i = 0 || 0; 则返回i = 1
int i, a = 3, b = 5;
i = 0 || (b > a); 则返回i = 1
int i = 0;
!i; 则返回i = 1
- 优先次序
a > b && c > d 等价于 (a > b) && (c > d);
!b == c || d < a 等价于 ((!b) == c) || (d < a);
a + b > c && x + y < b 等价于 ((a + b) > c) && ((x + y) < b);
void main()
{
char c = 'k';
int i = 1, j = 2, k = 3;
float x = 3e+5, y = 0.85;
printf("%d,%d\n", !x * !y, !!!x);
printf("%d,%d,\n", x || i && j - 3, 1 < j&&x < y);
printf("%d,%d\n", i == 5 && c && (j = 8), x + y || i + j + k);
system("pause");
}
if
if(5==a)
和
if(a)都是可以run的
if(a=5)是把5赋值给a,即赋了一个“真”,其后语句一定可以跑
- if的三种形式:
void main()
{
int a, b, max;
printf("\n input two num:");
scanf_s("%d,%d", &a, &b);
max = a;
if (max < b)
{
max = b;
}
printf("\nmax=%d", max);
system("pause");
}
void main()
{
int a, b, max;
printf("\n input two num:");
scanf_s("%d,%d", &a, &b);
if (a > b)
{
printf("max=%d\n", a);
}
else
{
printf("max=%d\n", b);
}
system("pause");
}
/*
if()
xxx;
else if()
xxx;
else if()
xxx;
else
xxx;
*/
void main()
{
char c;
printf("\n input a char:");
c = getchar();
if (c < 32) printf("this is a control char\n");
else if (c >= '0'&&c <= '9') printf("this is a digit\n");
else if (c >= 'A'&&c <= 'Z') printf("this id a capital letter\n");
else if (c >= 'a'&&c <= 'z') printf("this is a small letter\n");
else
{
printf("this is another char\n");
}
system("pause");
}
- 输入三个数abc,由小到大输出
//输入三个数abc,由小到大输出
float swap(float *a, float *b);
void main()
{
float a, b, c;
printf("input numbers a,b,c:\n");
scanf_s("%f,%f,%f", &a, &b, &c);
if (a > b) swap(&a, &b);
if (a > c) swap(&a, &c);
if (b > c) swap(&b, &c);
printf("a=%f,b=%f,c=%f\n", a, b, c);
system("pause");
}
float swap(float *a, float *b)
{
float t;
t = *a;
*a = *b;
*b = t;
}
if语句的嵌套
if ()
{
if ()
{
……;
}
}
else与哪个if近就与哪个配对
//eg1
void main()
{
int a, b;
printf("please input A,B:");
scanf_s("%d,%d", &a, &b);
if (a != b)
if (a > b) printf("A>B\n");
else printf("A b) printf("A>B\n");
else printf("A
条件运算符和条件表达式:三目运算
a ? b : c
若a为真则整个式子值为b,否则为c。
if (a > b) max = a;
else max = b;
//可用条件表达式写为
max = (a > b) ? a : b;
条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符
所以
max = (a > b) ? a : b;
等价于
max = a > b ? a : b;
条件运算符的结合方向是自右向左
a > b ? a : c > d ? c : d
等价于
a > b ? a :( c > d ? c : d )
- 例子
void main()
{
int a, b;
printf("\n input two numbers:");
scanf_s("%d,%d", &a, &b);
printf("max=%d", a > b ? a : b);
system("pause");
}
- 输入一个字符,判断是否是大写字母。如果是,转换为小写字母;否则不转换。输出最后得到的字符。
void main()
{
char ch;
scanf_s("%c", &ch);
ch = (ch >= 'A'&&ch <= 'Z') ? (ch + 32) : ch;
printf("%c\n", ch);
system("pause");
}
switch语句:多分支选择
计算表达式的值,并逐个与其后的常量表达式值相比较,
switch (表达式){
case 常量表达式1 :语句1;
...
case 常量表达式n :语句n;
default :语句n + 1;
}
remark:
- 不同case的常量不能相同
- case后允许有多个语句,可以不用{}括起来
- default顺序可以变动
- default子句可以省略不用
可以多个case执行同一个操作,比如让c = 1或2时d赋值1
switch (c) {
case 1:
case 2:
d = 1;
break;
case ...:
........
}
例子:
void main()
{
int a;
printf("input integer number:");
scanf_s("%d", &a);
switch (a)
{
case 1: printf("monday\n");
break;
//break达到目的就跳出程序块。否则输入3,就会输出星期三以后所有星期。
case 2:printf("tuesday\n"); break;
case 3:printf("wednesday\n"); break;
case 4:printf("thursday\n"); break;
case 5:printf("friday\n"); break;
case 6:printf("saturday\n"); break;
case 7:printf("sunday\n"); break;
default:printf("error\n");
}
system("pause");
}
- 输入三个整数,输出最大数和最小数。
//解法1
void main()
{
int a, b, c, min, max;
printf("input three integer numbers:");
scanf_s("%d,%d,%d", &a, &b, &c); //scanf里最好不要加格式控制\n
if (a > b)
{
max = a; min = b;
}
else
{
max = b; min = a;
}
if (max < c) max = c;
if (min > c) min = c;
printf("min=%d\nmax=%d", min, max);
system("pause");
}
//解法2
void main()
{
int a, b, c, min, max;
printf("input three integer numbers:");
scanf_s("%d,%d,%d", &a, &b, &c); //scanf里最好不要加格式控制\n
max = a > (b > c ? b : c) ? a : (b > c ? b : c);
min = a < (b < c ? b : c) ? a : (b < c ? b : c);
printf("min=%d\nmax=%d", min, max);
system("pause");
}
- 计算机程序:用户输入运算数和四字运算符,输出计算结果
void main()
{
long float a, b;
char c;
printf("input expression: a+(-,*,/)b\n");
scanf("%lf%c%lf", &a, &c, &b);
switch (c) {
case '+':printf("%f\n", a + b); break;
case '-':printf("%f\n", a - b); break;
case '*':printf("%f\n", a * b); break;
case '/':printf("%f\n", a / b); break;
default:printf("error\n");
}
system("pause");
}
- 输入一个年份,判断是否为润年
void main()
{
int a;
printf("input a Year=");
scanf("%d", &a);
if (!(a % 4) && (a % 100))
printf("这是普通闰年\n");
else
if (!(a % 400))
printf("这是世纪闰年\n");
else
printf("这不是闰年\n");
system("pause");
}
- 一个整数加上100后是完全平方数,再加上168又是一个完全平方数,请问该数是多少?
void main()
{
long int a, y, z;
printf("一个整数加上100后是完全平方数,再加上168又是一个完全平方数,\
请问该数是多少?\n");
a = -100;
while (a <= 1000000000) {
y = sqrt(a + 100);
z = sqrt(a + 268);
if (y == sqrt(a + 100) && z == sqrt(a + 268))
printf("%ld\n", a);
a = a + 1;
}
system("pause");
}
- 输入年 月 日,判断这一天是这一年的第几天
int runnian(int a);
void main()
{
int a, b, c, ryear;
long int num;
printf("输入年 月 日,\
判断这一天是这一年的第几天\n");
printf("年=");
scanf("%d", &a);
printf("\n月=");
scanf("%d", &b);
printf("\n日=");
scanf("%d", &c);
ryear = runnian(a);
if (b == 1)
num = c;
else
if (b == 2)
num = 31 + c;
else
if (b > 2)
num = 31 + 28 + 30 * (b - 3) + (b - b % 2) / 2 - 1 + c + ryear;
printf("\n这一天是今年的第%ld天 \n", num);
system("pause");
}
int runnian(int a)
{
int c;
printf("\nthis is Year %d\n", a);
if (!(a % 4) && (a % 100))
{
printf("\n这是普通闰年\n"); c = 1;
}
else
if (!(a % 400))
{
printf("\n这是世纪闰年\n"); c = 1;
}
else
{
printf("\n这不是闰年\n"); c = 0;
}
return c;
}