再介绍新的主题之前,我们先介绍一些额外的话题
随机函数(rand())的使用方法:
原理:rand()函数是按指定顺序来产生整数。(伪随机数)
1.需加头文件#include
2.可用 int i=rand()
3.if想生成指定范围内的随机数需要%:
0~10的随机数 rand()%11
0~100 rand()%101
C中/* */会被编译器替换为什么?一个空格?还是不留痕迹?
int/*test*/a;//编译成功
in/*test*/t a;//error
所以在C99中/*test*/被编译器替换为一个空格
一.程序设计七块理解法:
1.注释部分
2.预处理块,全局变量说明,函数声明.....
3.函数定义部分
4.变量说明部分
5.数据输入部分
6.执行部分
7.信息输出部分
关于选择与循环的语法省略不讲
注:
1.ifx为float的实型变量,则与0比较的标准语句如下:
if(fabs(x)<=1e-6) //领域 记得加头文件#include
2.写条件嵌套语句时注意条件的不重合性
3.switch_多分支选择语句:
default(缺省情况)放在所有的case之后,可不加break;如果default后面还有case语句,如果不加break,会继续执行case语句,此时必须加break(不推荐这种用法)
switch()中的()表达式结果必须为整数,也可为字符,case的判断值要求是整型变量。
4.for(;;)<=====>for(;1;)
5.通过九九乘法表介绍多重循环:
核心代码:
for(i=1;i<=9;i++)
{for(k=1;k<=i;k++)
{
j=i*k;
printf("%d*%d=%d",i,k,j);
}
printf("\n");
}
6. some tips for loops:
~if有固定的次数=>for
~if必须执行一次=> do-while
~其他用while
7.典型例题:
a.多项式累计法:
计算sinx的泰勒展开,并使最后一项的绝对值小于1e-6为止;
#include
intmain()
{inti;float sum,x,a,b;//a为分子,b为分母;
char s=1;
sum=0;
scanf("%f",&x);
a=x;
b=1;for(i=1;a/b>=1e-6;i++)
{
sum+=s*a/b;
a*=x*x;
b=b*2*i*(2*i+1);
s*=-1;
}
printf("sum=%f",sum);return 0;
}
b.试数法:
用于求水仙花数,最大公约数,最小公倍数,百鸡百钱问题
只写出一个求最大公约数的核心代码:
for(i=a0;i++)
{if(a%i==0&&b%i==0)
{
printf("the max = %d",i);break;
}
}
c.简单的人机交互
1.简单的计算器,如输入3+5=8;输入错误就退出(不是加减乘除)
#include#include
intmain()
{floata,b;charop;while(1)
{
scanf("%f%c%f",&a,&op,&b);if(op!='+'&&op!='-'&&op!='*'&&op!='/')
{
printf("error");break;
}switch(op)
{case '+':
printf("%f+%f=%f",a,b,a+b);break;case '-':
printf("%f-%f=%f",a,b,a-b);break;case '*':
printf("%f*%f=%f",a,b,a*b);break;case '/':if(fabs(b)>=1e-6)
{
printf("%f/%f=%f",a,b,a/b);
}elseprintf("the number of b is wrong!\n");break;
}
}return 0;
}
2.编程序为小学生出一套最简单的整数(<=100)加减乘的运算的试题,一共十题,每题十分,且随机产生,产生后立即给出学生答案(计算机判断错误),做完立即给出分数。
#include#include#include#include
intmain()
{inta,b,i,s;charop;int score=0;for(i=0;i<10;i++)
{
a=rand()%101;
b=rand()%101;
op=rand()%3;if(op==0)//0代表加号
{
printf("%d+%d=?\n",a,b);
scanf("%d",&s);if(s==a+b)
{
printf("ture\n");
score+=10;
}elseprintf("false\n");
}else if(op==1)
{
printf("%d-%d=?\n",a,b);
scanf("%d",&s);if(s==a-b)
{
printf("ture\n");
score+=10;
}elseprintf("false\n");
}else{
printf("%d*%d=?\n",a,b);
scanf("%d",&s);if(s==a*b)
{
printf("ture\n");
score+=10;
}elseprintf("false\n");
}
}
printf("score=%d\n",score);return 0;
}