您的位置:首页 > 其它

2.2 简单的算法举例

2013-07-09 23:58 120 查看
说实话,我感觉这小节没什么可以看的,于是我准备把书中的例子描述 具体代码化 (- -!)

题目一 1*2*3*4*5 求结果

程序代码开始————————————————————————————————————————————————————————————————

#include <stdio.h>

int main (void)

{

int a=1,b=2;

while(b<=5)

//当b<=5时,条件为真,执行花括号里的步骤,当条件为假,跳出,执行下一步,即是 printf函数。

{

a=a*b;

b=++b;

/*++b 为自增,b自己加1,然后赋值给对象。与b++不同,b++是 将b赋值给对象,然后自己加1,所以无论b++还是++b,最后b的数值是一样的,但是赋值对象的数值是不一样的*/

}

printf("1*2*3*4*5=%d\n",a);

printf("%d",b);

getch();

return 0;

}

程序代码结束———————————————————————————————————————————————————————————————————

PS:其实我第一遍打代码,后我用Code::Blocks编译了一遍,发现语意错误。。我连while怎么用忘了,看来以后真的每天打代码。这东西忘得太快。。。

题目二 1*3*5*7*9*11

——————————————————————————————————————————————————————————————————————————

#include<stdio.h>

int main (void)

{

int a=1,b=3;

while(b<=11)

{

a=a*b;

b=b+2;

}

printf ("1*3*5*7*9*11=%d\n",a);

return 0;

}

————————————————————————————————————————————————————————————————————————

PS;shit,竟然又没有一次打成,这回是语意思考不严谨,我直接将b设成 : int b=a+2;while(b<=){a=a*b}然后错误。。。

得到的教训是:b=a+2;只执行一次,while中的循环体{a=a*b}里的b在循环体里与上面的b=a+2;无关,永远保存数值为3.形成死循环。

具体怎么说我也不明白,但是死记住这一个勉强理解为规则好了,循环体里的变量只有循环体里的变化

————————————————————————————————————————————————————————————————————————————————

50个学生,输出他们之中80分以上的学号和成绩

#include<stdio.h>
int main()
{
int i,g[50],n[50];
i=0;//下标要从0开始的

while(i<50)//最大值到49,不然会越界的
{
scanf("%d,%d",&g[i],&n[i]);//输入放在里面
if(g[i]>=80)
printf("%d,%d\n",n[i],g[i]);//这里少了分号,输出不用取地址了
i=i+1;
}
return 0;
}

这个是百度了的,我也想了,但是我不知道怎么将学号和成绩关联,一一对应,于是百度了,发现也只能靠人工对应输入。fuck!!

---------------------------------------------------------------------------------------------------------————————————————————————————————————————————————

判定2000-2500年中的闰年

闰年条件,能被四整除,但不能被100整除,或者能被100整除,又能被400整除。

#include<stdio.h>

int main (void)

{

int a=2000;

while(a<=2500)

{

if(

(a%4==0&&a%100!=0)

||

(a%100==0&&a%400==0)

)

printf("闰年是%d\n",a);

a++;

}

return 0;

}

________________________________________________________________________________________________

#include<stdio.h> int main (void)

{

//求1-1/2+1/3-1/4.....-1/100

float a=1;

float b=2;

while (b<=100)

{

a=a-1/b;

b++;

a=a+1/b;

b++;

}

a=a-1.0/101.0;

printf ("最终结果为%f\n",a);

return 0;

}

_________________________________________________________________________________________________________________

感悟:两个int 进行计算 结果类型必然似乎 int 1/2=0.5 整数直接为0了 ,没有小数,当计算出现浮点数值,记得要该声明类型,和对应的表示类型,并且到最后多加了一个1/101所以要减去一个1/101才行

同样 要打1.0/101.0 否则同样整数为0 不能执行

因为同样类型的操作数与运算符 返回结果的类型必须一致 所以2/1和1/2应该返回同样类型的结果 而编译器根本不知道应该返回的真实结果是什么 只知道返回类型
这是思考得出的 因为编译器只知道操作数的类型 不知道操作数的具体值 所以无法返回不同类型

顺便说一下U盘容量为什么2 4 8 16 32增长的

U盘是对晶圆的切割 随着工艺的进步 切割越来越精细 但是一刀下去总是分两分的

__________________________________________________________________________________________________________

有人帮我简化了程序

#include<stdi.h>

int main (void)

{

float a=0,b=1;

while(b<=100)

{

a=a+1/b;

b++;

a=a-1/b;

b++;

}

printf("最后结果是%d\n",a);

return 0;

}

__________________________________________________________________________________________________________
判断一个数是否是素数
素数的条件:除了1和自身 外,其他任何整数都不能被整出

#include<stdio.h>

int main (void)

{

int i=2,n;

float y;

scanf("%d",&n);

while(i<n-1)

{

y=n%i;

if(y==0) printf("此数不是素数\n");

else i++;

y=n%i;

if(y!=0) printf("此数是素数");

getch();

}

}

这是C语言吧 :乌鸦bu黑 回复的 感谢它

____________________________________________________________________________________________________其实也可以,在家加入一个变量,利用求余 设条件是否等于0,输出 \n,将原本的\n去掉,不让其每一次输出。

具体代码

#include<stdio.h>
int main (void)
{
int a=2000,i=0;
while(a<=2500)
{
if(
a%4==0&&a%100!=0
||
a%100==0&&a%400==0
)
printf("闰年是%d ",a);
else printf("%d不是闰年 ",a);
i++;
if(i%4==0) printf("\n");
a++;
}
return 0;
}
再加上点就好了,if(i%4==0) printf("\n");4个显示一次,就能显示全了

_____________________________________________________________________________________________

这个程序编的真不是一般的烂 为什么?明明可以达到目的的?
因为如果是真素数,如果没有加结尾的 getch(); 会进行循环,直到while(i<n-1)条件为假时才能跳出循环,当跳出时可能已经循环了若干次,屏幕输出多个 “此数是素数”,影响观看。
当输入数字为不能被2整除,又不是素数,例如9,则会进行到i自加1,判断不是素数,然后进行 getch(); 停留在等待从控制台接受一个字符上,必须多敲击一下,才能输出“此数不是素数”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: