(NGU)100分求解简单C语言题
1)
int main()
{
……………………
}
每次执行完以后就提示please enter the path of crt0.c
这是怎么回事?
2)面试题: 求一个正整数的个位数(最后的条件才是重点),比如173得3,25得5,要求程序的效率要比 跟10求模 效率高
3)n为正整数, 假设(n % 100) / 10 和 (n / 10) % 10都能实现程序的功能,试分析下哪条语句效率更高?并说明理由!
4)自己的问题:
函数可以提高程序运行效率吗?还只是只有使代码不重复的功能?比如下面两个程序,都是打印1到100,哪个程序效率高?还是一样?
程序一:
#include <stdio.h>
int main(void)
{
int i;
for (i = 1; i <= 100; ++i)
{
printf("%-4d", i);
}
printf("\n");
for (i = 1; i <= 100; ++i)
{
printf("%-4d", i);
}
printf("\n");
return 0;
}
程序二:
#include <stdio.h>
void Print1_100(void)
{
int i;
for (i = 1; i <= 100; ++i)
{
printf("%-4d", i);
}
printf("\n");
}
int main(void)
{
Print1_100();
Print1_100();
return 0;
}
[解决办法]
4>
重复的代码比函数效率高,因为调用函数还有压栈出栈的操作
[解决办法]
1)
你main的返回类型是int,你return了没有啊?
还有,你用是甚么编译器啊?
3)
原则上说,应该是(n / 10) % 10效率更高
因为一个数在做除法运算的时候,过程是这样的:
比如:A / B
mov 寄存器A, A
mov 寄存器B, B
div 寄存器A, 寄存器B
这个时候寄存器A中存的是结果的整数部分,在寄存器C中保存的是余数。
回到我们的例子中,(n % 100) / 10 中的余数是中间计算,余数是需要保留的
所以会多一次MOV把余数保存起来
而(n / 10) % 10第一次除法的保留的中间结果是整数,而最后一个运算就是取余数运算
这时编译器会直接把保存余数的寄存器的里面的值存到你的结果变量地址里面
这这样(n / 10) % 10就节省了一个MOV操作,所以更快!
4)
重复代码是提高效率的方法之一
函数调用是需要时间