1.什么是算吗?试从日常生活中找3个例子,描述它们的算法。
算法:广义地说,为解决一个问题而采取的方法和步骤,称为算法
例子:
比如你要喝茶就要先找到茶叶,烧一壶开水,然后将茶叶放到杯子里,然后将开水倒入杯中,然后等一段时间
再比如你要从a地到b地,中间可能有多种汽车换乘方案,是选速度最快的,还是选最省钱的,
2.什么叫结构化的算法?为什么要提倡结构化的算法?
结构化的算法:一个结构化程序就是用计算机语言表示的结构化算法。用3中基本结构组成的程序必然是结构化的程序。(有三种基本结构构成的算法结构是结构化的算法)
提倡:以为结构化的算法不存在无规律的转向,只在基本结构内才允许存在分支和向前或向后的跳转。不会出现死循环,是算法的质量得到保证和提高,所以提倡。
3.试述3种基本结构的特点,请另外设计两种基本结构。
顺序结构:执行完A后执行B,是最简单的一种结构。
选择结构:又称选取结构或分支结构,根据给定的条件P是否成立而执行A或B
循环结构:又称重复结构,即反复执行某一部分的操作。
a。当型(while)循环结构:当满足条件是进入循环。
b.直到型(until)循环结构:直到满足条件是跳出循环。
4.编程题。
1)有两个瓶子A和B,分别盛放醋和酱油,要求将它们互换(即A瓶原来盛醋,现改盛酱油,B瓶则相反)。
#include
int main()
{
int a=5,b=6,c;
c=a;
a=b;
b=c;
printf("%d\t%d",a,b);
return 0;
}
2)依次将10个数输入,要求输出其中最大的数。
#include
int main(){
int a[10];
int i,max;
max=0;
for(i=0;i<10;i++){
scanf("请输入第%d个数:%d",i,&a[i]);
if(i>=1){
if(a[i-1]
3)有3个数a,b,c,要求按大小顺序把它们输出。
#include
int main(){
int a[3];
int i,j,temp;
printf("请输入a,b,c三个数:");
for(i=0;i<3;i++){
scanf("%d",&a[i]);
}
for(i=0;i<3;i++){
for(j=0;j<3-i;j++)
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
printf("这三个数由小到大的排列序为:");
for(i=0;i<3;i++){
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
4)求1+2+3+··+100;
#include
int main(){
int i=1,total=0;
for(i;i<=100;i++){
total+=i;
}
printf("%d",total);
return 0;
}
5)判断一个数N能够与同时被3和5整除、
#include
int main(){
int n;
printf("请输入一个数n:\n");
scanf("%d",&n);
if((n%3==0)&&(n%5==0)){
printf("%d可以同时被3和5整除\n",n);
}else{
printf("%d不可以同时被3和5整除\n",n);
}
return 0;
}
6)将100-200之间的素数输出
#include
int main(){
int i=0,count=0;
for(i=100;i<=200;i++){
int j=0;
for(j=2;j<=i;j++){
if(i%j==0){
break;
}
}
if(i==j){
count++;
printf("%d ",i);
}
}
printf("\ncount=%d\n",count);
return 0;
}
7)求两个数m和n的最大公约数。
#include
int main(){
int m,n,a=0;
scanf("%d %d",&n,&m);
if(m0;i--){
if((m%i==0)&&(n%i==0)){
printf("%d",i);
break;
}
}
return 0;
}
7)求两个数m和n的最小公倍数
#include
int main(){
int m,n,a=0;
scanf("%d %d",&m,&n);
if(m0;i++){
if((i%m==0)&&(i%n==0)){
printf("%d",i);
break;
}
}
return 0;
}
方法二: #include
int main(){
int m,n,a=0,num;
scanf("%d %d",&m,&n);
if(m0;i--){
if((m%i==0)&&(n%i==0)){
num=i;
break;
}
}
printf("%d",m*n/num);
return 0;
}
8)求方程式ax2+bx+c=0的根,分别考虑:
a.有两个不等的实根。
b.有两个相等的实根。
#include
#include
int main()
{
int a,b,c,d,q,x1,x2;
scanf("%d%d%d",&a,&b,&c);
d = bb-4a*c;
q = sqrt(d);
if(d>0)
{
x1 = ((-1)b+q)/2a;
x2 = ((-1)b-q)/2a;
printf(“x1=%d\tx2=%d”,x1,x2);
}else if(d == 0)
{
x1 = ((-1)b+q)/2a;
printf(“x1=x2=%d”,x1);
}else
{
printf(“没有实数根!”);
}
return 0;
}
5.用N-S图表示第4题中各题的算法。
6.用伪代码表示第4题中各题的算法。
7.什么叫结构化程序设计?它的主要内容是什么?
用计算机语言表示的结构化算法
内容:强调程序设计风格和程序结构的规范化,提倡清晰的结构。
8.用自定向下、逐步细化的方法进行一下算法的设计:
1)输出1900-2000年中是闰年的年份,符合下面两个条件之一的年份是闰年;
a.能被4整除但不能被100整除;
b.能被100整除且能被400整除;
#include
int main()
{
int i=1900;
for(i;i<=2000;i++)
{
if((i%4==0)&&(i%100!=0)||(i%100==0)&&(i%400==0))
{
printf("%d\n",i);
}
}
return 0;
}
2)求ax2+bx+c=0的根,分别考虑d=b2-4ac大于0,等于0和小于0这3种情况。
#include
#include
/*
有两个不等的实根即▲=b*b-4*a*c > 0
有两个相等的实根即▲=b*b-4*a*c = 0
*/
int main()
{
int a,b,c,d,q,x1,x2;
scanf("%d%d%d",&a,&b,&c);
d = b*b-4*a*c;
q = sqrt(d);
if(d>0)
{
x1 = ((-1)*b+q)/2*a;
x2 = ((-1)*b-q)/2*a;
printf("x1=%d\tx2=%d",x1,x2);
}else if(d == 0)
{
x1 = ((-1)*b+q)/2*a;
printf("x1=x2=%d",x1);
}else
{
printf("没有实数根!");
}
return 0;
}
3)输入10个数,输出其中最大的一个数。
#include
int main()
{
int a[10];
int i,max=0;
for(i=0;i<10;i++){
scanf("%d",&a[i]);
if(i==0){
max = a[i];
}
if(i>0){
if(max max=a[i];
}
}
}
printf("%d",max);
return 0;
}