c语言(最近遇到的小问题)

一.目录

    

目录

    1.while表达式

   2.scanf返回值

    3.~scanf   while(~scanf("%d",&a)) (含少量原码,反码,补码)

    4.分别求出一堆数中的正负数个数

    5.比较四个数的大小并找出最大值 (三目操作符)

    6.给出一个数并打印出同等数量的‘*’

    7.多个数找出最大值,最小值并求出差值


1.while表达式

  while(条件表达式){}  ()括号中放入条件表达式while语句在执行时要先对表达式进行求值判断

如果表达式值是真(非零),则执行循环,循环一次后再次对表达式进行判断(每循环一次都要对表达式进行判断,是真就继续进入循环如果表达式值是假(零),则终止循环。

2.scanf返回值

  例:scanf("%d%d",&a,&b);

如果a和b都被成功读入,那么scanf的返回值是2

如果a和b只有一个被成功读入,那么scanf的返回值是1

如果a和b都没有被成功读入,那么scanf的返回值是0

如果遇到错误或遇到end of file,返回值为EOF(-1)

3.~scanf   while(~scanf("%d",&a))

‘~’ :按位取反符

while(~scanf("%d",&a)){}

这样的代码,意思是在读到输入结尾时循环也结束(在做题网站做题时,遇到需要多组输入时常用到),一般在读到输入结尾时,scanf返回的是EOF。(EOF在头文件中定义的常量,一般为-1

(-1的原码是10000001,反码是11111110,补码是11111111。)

{ 拓展(原码,反码,补码)

正数的原码,反码,补码都一样。符号位是“0”。

​​​​​负数的原码,反码,补码不一样,

   负数原码符号位是“1”(符号位:第一个数字 例:10000001 红“1”是符号位),其余位(其他数)表示数值大小(正数也是)

   负数反码是对原码符号位不变,其余位按位取反(例:原码 10000001 则对应反码是11111110

   负数补码是对原码符号位不变,其余位取反末位加一(例:原码10000001则补是11111111

}

因为计算机中负数用补码,所以~EOF就是对EOF(-1)的补码(11111111)按位取反得00000000

所以此时while条件不满足,循环结束。

补充:也可以写成while(scanf(“%d", &a)==1){}这样的

4.分别求出一堆数中的正负数个数

#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循环可以用来统计个数,蛮好用的,目前就会这个)

5.比较四个数的大小并找出最大值

#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的结果}

先把四个数分为两组,分别进行比较,得出较大数,再把这两个较大数进行比较,得出最大数。

6.给出一个数并打印出同等数量的‘*’

 
  
#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循环才结束,也就打印出我们想要的*个数。

7.多个数找出最大值,最小值并求出差值

#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的初始值放数值范围的最小值。

完╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯

你可能感兴趣的:(编码,我遇到的坑,c语言,开发语言)