学习笔记1:条件运算符和条件表达式
编程1:
#pragma warning(disable:4996)
#include <stdio.h>
void main()
{
int a, b, max;
printf("input two numbers\n");
scanf("%d%d", &a, &b);
printf("max=%d", a > b ? a : b);
}
运行结果:
条件运算符为?和: 它们是一对,不能拆开使用
使用形式为:表达式1?表达式2:表达式3
如果表达式1的值为真,则以表达式2的值作为条件表达式的值
否则以表达式3的值作为条件表达式的值
条件表达式通常运用在赋值语句中
如条件语句:
if(a>b)max=a;
else max=b;
可用条件表达式写为:
max=(a>b)?a:b;
如果a>b为真,则把a赋予max,否则把b赋予max
条件运算符的优先级低于关系运算符和算术运算符,但高于赋值符,因此可以去掉括号写为:
max=a>b?a:b;
条件运算符的结合方向是自右向左,例如a>b?a:c>d?c:d
应理解为a>b?a:(c>d?c:d) 这是一种嵌套情形
题目:
输入一个字符,判断它是否是大写字母,如果是,将它转换为小写字母,若不是,不转换。然后输出最后得到的字符。
老师给的答案:
#pragma warning(disable:4996)
#include <stdio.h>
void main()
{
char ch;
scanf("%c", &ch); //%c表示字符型
ch = (ch >= 'A'&& ch <= 'Z') ? (ch + 32) : ch;
printf("%c\n", ch);
}
运行结果:
网上找的答案:
#pragma warning(disable:4996)
#include <stdio.h>
void main()
{
char ch;
printf("请输入一个字符:");
scanf("%c", &ch);
if (ch >= 'A' && ch <= 'Z')
ch = ch + 32;
printf("转换成小写字母是:%c\n", ch);
}
学习笔记2:switch语句
形式:
switch(表达式)
{
case常量表达式1:语句1;
case常量表达式2:语句2;
......
case常量表达式n:语句n;
default:语句n+1;
}
编程:
#pragma warning(disable:4996)
#include <stdio.h>
void main()
{
int a;
printf("input integer number: \n"); //integer是整型的意思
scanf("%d", &a);
switch (a) //注意此处不能放;
{
case 1:printf("Monday\n");
case 2:printf("Tuseday\n");
case 3:printf("Wednesday\n");
case 4:printf("Thursday\n");
case 5:printf("Friday\n");
case 6:printf("Saturday\n");
case 7:printf("Sunday\n");
default:printf("error\n");
}
}
运行结果:
输入5以后,下面所有结果全都出来了,这显然不是我想要的结果
为了避免这一情况,需要使用break语句来跳出switch语句
如下:
#pragma warning(disable:4996)
#include <stdio.h>
void main()
{
int a;
printf("input integer number: \n");
scanf("%d", &a);
switch (a)
{
case 1:printf("Monday\n"); break;
case 2:printf("Tuseday\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");
}
}
运行结果: