Summer 6

本文深入探讨了C语言编程中的关键概念,包括递归函数的运行结果预测、静态变量初始化及作用域规则、补码表示及其数值计算、表达式运算符的正确使用、逻辑判断的精确实现、以及不同进制数的转换方法。通过具体代码实例,解析了程序执行流程,揭示了变量声明、函数调用、循环结构和算术运算背后的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 以下程序的运行结果是

//1.
int fun(int a, int b)
{
	if (a>b)
	{
		return(a + b);
	}
	else
	{
		return(a - b);
	}
}

int main()
{
	int x = 3, y = 8, z = 6, r;
	r = fun(fun(x, y), 2 * z);
	printf("%d\n", r); \\-17
	system("pause");
	return 0;
}
//2.
int f(int a)
{
	int b = 0;
	static int c = 3;
	a = c++; b++;
	return (a);
}

int main()
{
	int a = 2, i, k;
	for (i = 0; i < 2; i++)
	{
		k = f(a++);//a++的值为2
	}
	printf("%d\n", k);//4
	system("pause");
	return 0;
}
//3.
int x = 3;
void inc()
{
	static int x= 1;
	x *= (x + 1);
	printf("%d\n", x);//2   6
	return ;
}

int main()
{
	int i;
	for (i = 1; i < x; i++)
	{
		inc();
	}
	system("pause");
	return 0;
}

理解清楚该题需要了解两个知识点
(1)static变量只进行一次初始化
(2)全局变量与局部变量:当局部变量与全局变量同名时,局部变量“屏蔽”全局变量,注意这里说的是“屏蔽”而非修改,其实二者虽然同名但二者系两个不同的变量。
int x=3;//全局变量
inc()

{static int x=1;//inc函数中的局部变量,与上面的全局变量不是一码事儿
   x*=x+1;         //此处计算所用到的变量x系inc函数的局部变量,而非第一行所定义的全局变量
printf("%d\n",x);

int main()
{int i;
for(i=1;i<x;i++)     //此处所用到的x是全局变量的值
inc();

该程序的执行过程为:
(1)i = 1时,i < x (x的值为3,全局变量的数值)成立,执行inc()函数
static int x = 1;//初始化静态局部变量x的值为1(只进行这一次初始化,下次在执行该函数时不再初始化)
x*=x+1 ;  //x = 2
输出inc函数中局部变量x的值为2;
(2)i = 2时,i < x(x的值为3,全局变量的数值)成立,再次执行inc()函数
x*=x+1 ;//x = 2*(2 + 1)
输出x=6.
(3)i = 3,i < x(x的值为3,全局变量的数值)不成立,main函数中循环执行结束。

4. 一个8位的二进制整数,若采用补码表示,且由3个“1”和5个“0”组成,则最小值为-125.

分析:正数的补码与原码、反码相同,负数的补码等于其反码加1,且无论是反码还是补码,其最高位都只用来表示数的正负,所以补码的最高位为1;由于补码和原码的关系,所求的最小数的补码应该最大,5个0和3个1组成的最大负数补码应该是 10000011,其原码为11111101,即-125。

5. int a=4, 则对于表达式++(a++)是错误的。

a++的结果是4,然后进行++4是不对的,++运算只是针对于变量的,不能对常量来进行++运算。

6.已知x >= y and y >= z 为真,那么x > z or y ==z 值为

因为x>=z,是成立的,那么分两种情况,1.x>z,那or前面的条件成立,条件为真,2.x>z不成立,即得出x==z,此时y==z成立,条件依然为真。

7.式子 7*15=133成立,则用的是8进制

设 k进制,则
7(k+5) = k^2+3k+3,
解得 k = 8,
也即 8 进制 。(化为十进制是 7*13 = 91)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值