知识
循环(C)
接上篇
3.无明显循环次数——拆分迭代循环
可利用拆分判断整数位数(数字反转)
以十进制整数(x)为例:
int k,a=0;
count(计数器)=0;
while(x){
k=x%10;
a=a*10+k;
x=x/10;
count++;
}
函数(C)
输出值类型 函数名(参数声明表)
{
函数体;
return 输出变量;
}
(省略返回值类型,默认int型)
(可执行分离式开发)
scanf()带返回值,成功读入多少个数据,返回多少,可以用while(scanf(“% ”,& ))检测是否读入。
拆分字符串函数:gets();strcat(变量,“ ”);
关键字(C)
const(constant)
可修饰变量,数组,指针,函数参数等。
-
变量
对变量声明为只读特性,保护变量值以防被修改。节约空间,编译器不给普通const只读变量分配空间,将其保存到符号表中,无需读取内存操作。
-
数组
同变量,只具只读特性,更改报错。 -
指针
- 限定指向空间的值不能修改。
- 限定指针不能修改。
int i=5,j=6,k=7;
const int *p1=&i;
*p1=19 //错误
p1=&k //正确
int i=5,j=6,k=7;
int *const p2=&j;
*p2=19 //正确
p2=&k //错误
- 函数参数
对参数起限定作用,防止其在函数内部被修改
- 普通变量
- 指针变量
刷题感悟(C)
1.两数交换(续)( int x=3,y=5)
- 利用运算(上篇提到)
#include<stdio.h>
int main(void)
{
int x=3,y=5;
x=x+y;
y=x-y;
x=x-y;
printf("%d%d",x,y);
return 0;
}
这周突然发现了这个方法的大问题,,,因为定义了int型,所以累加计算是有可能导致溢出的,,大意了
- 利用异或运算
所以又发现了这个方法,异或处理的是数据的二进制码,对计算机来说直接在电路上操作,高效。
#include<stdio.h>
int main(void)
{
int x=3,y=5;
x=x^y;
y=x^y;
x=x^y;
printf("%d%d",x,y);
return 0;
}
2.左移&右移 运算符
对正整数而言,对其进行左移n位操作等于乘以2的n次方倍
对其进行右移n位操作等于除以2的n次方
3.判断100的阶乘尾部有多少个0
分析:出现10就加一个0,10=2*5,2的倍数的个数多于5的倍数的 个数,所以5的个数可以决定100的阶乘内会有多少个‘10’.
#include<stdio.h>
int main(void)
{
int cnt=0,x=1;
while(x<101){
if(!(x%5)){
cnt++;
}
if(!(x%25)){
cnt++;
}
x++;
}
printf("%d",cnt);
return 0;
}
以下是一种巨精简的写法
#include<stdio.h>
int main(void)
{
int x=100;
printf("%d",x/5+x/25);
return 0;
}
总结
敲代码好快乐,我爱敲代码
以后要把代码写的高效又好看!!
恳请各位斧正错误,提出不足
谢谢各位看官!!