一.目录
目录
1.while表达式
2.scanf返回值
3.~scanf while(~scanf("%d",&a)) (含少量原码,反码,补码)
4.分别求出一堆数中的正负数个数
5.比较四个数的大小并找出最大值 (三目操作符)
6.给出一个数并打印出同等数量的‘*’
7.多个数找出最大值,最小值并求出差值
while(条件表达式){} ()括号中放入条件表达式,while语句在执行时要先对表达式进行求值判断
如果表达式值是真(非零),则执行循环,循环一次后再次对表达式进行判断(每循环一次都要对表达式进行判断,是真就继续进入循环);如果表达式值是假(零),则终止循环。
例:scanf("%d%d",&a,&b);
如果a和b都被成功读入,那么scanf的返回值是2
如果a和b只有一个被成功读入,那么scanf的返回值是1
如果a和b都没有被成功读入,那么scanf的返回值是0
如果遇到错误或遇到end of file,返回值为EOF(-1)
‘~’ :按位取反符
这样的代码,意思是在读到输入结尾时循环也结束(在做题网站做题时,遇到需要多组输入时常用到),一般在读到输入结尾时,scanf返回的是EOF。(EOF在头文件
(-1的原码是10000001,反码是11111110,补码是11111111。)
{ 拓展(原码,反码,补码)
正数的原码,反码,补码都一样。符号位是“0”。
负数的原码,反码,补码不一样,
负数原码的符号位是“1”(符号位:第一个数字 例:10000001 红“1”是符号位),其余位(其他数)表示数值大小(正数也是)
负数反码是对原码符号位不变,其余位按位取反(例:原码 10000001 则对应反码是11111110)
负数补码是对原码符号位不变,其余位取反,末位加一(例:原码10000001则补是11111111)
}
因为计算机中负数用补码,所以~EOF就是对EOF(-1)的补码(11111111)按位取反得00000000
所以此时while条件不满足,循环结束。
补充:也可以写成while(scanf(“%d", &a)==1){}这样的
#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
int ai = 0;
int i = 0;
int positive = 0;
int negative = 0;
for (i = 0; i < 10; i++)
{
scanf("%d", &ai);
if (ai > 0)
positive++;
if (ai < 0)
negative++;
}
printf("positive:%d\nnegative:%d", positive, negative);
return 0;
}
利用了for循环(for循环可以用来统计个数,蛮好用的,目前就会这个)
#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
int a, b, c, d, x, y = 0;
scanf("%d %d %d %d", &a, &b, &c, &d);
x = (a > b ? a : b);
y = (c > d ? c : d);
printf("%d\n", x > y ? x : y);
return 0;
}
用到了三目操作符 {(a>b?a:b) 条件1成立时,条件2进行计算,整个表达式的结果就是条件2的结果;条件1不成立时,条件3进行计算,整个表达式的结果就是条件3的结果}
先把四个数分为两组,分别进行比较,得出较大数,再把这两个较大数进行比较,得出最大数。
#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
int i = 1;
while (~scanf("%d", &i))
{
while (i--)//从第一个while进来到第二个while先打印一个*,第二个while循环未结束(因为i--不等于0)再次循环,再打印一个*,以此类推,直到i--等于0后第二个while循环才结束,也就打印出我们想要的*个数
{
printf("*");
}
printf("\n");
}
return 0;
}
从第一个while进来到第二个while先打印一个*,第二个while循环未结束(因为i--不等于0)再次循环,再打印一个*,以此类推,直到i--等于0后第二个while循环才结束,也就打印出我们想要的*个数。
#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
int a = 0;
int i = 0;
int max = 0;
int min = 100;
int mark = 0;
scanf("%d\n", &a);
//for(i=0;i<10;i++)
while(i<10)
{
scanf("%d", &mark);
if (mark > max)
max = mark;
if (mark < min)
min = mark;
i++;
}
printf("%d\n", max - min);
return 0;
}
利用了替换原理
两种循环都可以 { while(i<10){ ......... i++;}
for(i=0;i<10;i++){.........}
}
注意:
min的初始值放数值范围的最大值。
max的初始值放数值范围的最小值。
完╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯