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(); 停留在等待从控制台接受一个字符上,必须多敲击一下,才能输出“此数不是素数”
题目一 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(); 停留在等待从控制台接受一个字符上,必须多敲击一下,才能输出“此数不是素数”
相关文章推荐
- 简单的C语言算法举例
- 简单的C语言算法举例
- 一种利用空间和光谱信息的高光谱遥感多分类器动态集成算法 -- DCS+SSI(简单投票法和MLA+LCA的集合)
- 【算法】散列表及散列函数的java简单实现
- 在遍历C++map中删除元素算法(简单例子)
- 几个简单算法
- 无限级分类的简单算法实现及代码重点讲解(ASP)
- 一些笔试常考简单算法小结
- 严蔚敏版数据结构课本代码——算法2.2
- 基础算法之简单递归
- 解一道简单的算法题
- 一元线性回归入门——自己写简单的回归算法
- 一个简单的扑克牌洗牌算法|无重复
- 二叉树11个简单算法
- 简单算法的常用网站
- 【啊哈!算法】最快最简单的排序——桶排序
- PHP中变量函数和回调函数的定义和简单举例
- 一个简单有效的产生随机数且不重复的小算法--Robert Floyd
- 简单碰撞算法及其demo(屏幕气泡原理)
- 交换两个变量的值的两种简单算法