1.逻辑短路问题
- A&&B若A为假,表达式值必为假,B将不会求值。
- A||B若A为真,表达式值必为真,B将不会求值。
#include <stdio.h>
int main()
{
int a=5,b=6,c=7,d=8,m=2,n=2,i;
i=((m=a>b)&&(n=c<d));
printf("%d\t%d\t%d\n",m,n,i);
i=((m=a<b)||(n=c>d));
printf("%d\t%d\t%d\n",m,n,i);
return 0;
}
运行:
2.显示安装进度
#include <stdio.h>
#include <windows.h> //使用Sleep()函数必须包含windows.h,这种方法只适用于windows
int main()
{
int i;
printf("安装进度:0%%"); //格式控制串中用%%表示输出一个%
for(i=1;i<100;i++)
{
Sleep(200);//等待200毫秒
if(i<=10)
printf("\b\b");//转义字符\b表示退格,将当前光标移到前一列
else
printf("\b\b\b");
printf("%d%%",i);
}
printf("\b\b\bdone!\n");
return 0;
}
运行:
3.Bessel函数
源代码:
#include <stdio.h>
#include <math.h>
int main( )
{
double pre,ppre,x,result;
int n,i;
printf("请输入n和x:");
scanf("%d %lf",&n,&x);
ppre=sin(x)/x;
pre=sin(x)/x/x-cos(x)/x;
if(n==0){
result=ppre;
}
if(n==1){
result=pre;
}
for(i=2;i<=n;i++)
{
result=(2*i-1)*pre/x-ppre;//注意实际公式中的下标
ppre=pre;
pre=result;
}
printf("%.4lf\n",result);
return 0;
}
4.消除多余的空格
从键盘上的输入一句话,直到按回车键为止,这些字符被原样输出,但若有连续的一个以上的空格时只输出一个空格。
例如,输入:I am a teacher.,输出I am a teacher.
#include <stdio.h>
int main( )
{
char c, frontIsSpace=0; //frontIsSpace用于记忆前面的符号是否为空格,是空格,值为1,不为空格,为0
while ((c=getchar())!='\n')
{
if (c!=' ')
{
frontIsSpace=0; //在读入下一个字符后,当前的字符,就是下一次所谓前一个,其值不是空格,故赋值为0
putchar(c) ;
}
else if (!frontIsSpace) //如果前一个不是空格,当前的这个空格是要输出的
{
putchar(c); //输出的是空格
frontIsSpace=1; //在读入下一个字符后,就需要知道,当前的字符,也就是下一次所谓前一个,其值是空格,故赋值为1
}
}
return 0;
}
运行: