1. 请用算法描述生活中的例子-----看电影
买票—> 选场次 —> 选座位 —> 付钱 —> 入场观影
2.设计基本结构要满足以下几点:
只有一个入口
只有一个( 出口 )
结构内的每一部分都有机会执行到
结构内不存在( 死循环 )
3.程序的三种基本结构是顺序结构、选择结构、( 循环结构 )
4.( 结构化 )的算法由一些基本结构顺序组成的;在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本结构范围之内(如循环中流程的跳转)。它便于编写,可读性高,修改和维护起来简单,可以减少程序出错的机会,提高了程序的可靠性,保证了程序的质量,因此非常提倡。
5.一个算法应该具有五个重要的特征:有穷性、确定性、可行性、输入项、( 输出项 )
6.广义的( 算法 )为解决一个问题而采取的方法和步骤,可分为两大类别:数值运算法和( 非数值算法 )
7.用流程图和N-S图表示求解问题的算法,并最终用代码实现:求方程ax^2+bx+c=0的跟,分别考虑:1.有两个不等实根;2有两个相等实根。
该题主要需要了解一元二次方程的根算式:
流程图如下:
程序代码如下:
#include <stdio.h>
#include <math.h>
int main() {
double a, b, c;
double discriminant, root1, root2;
printf("求解二次方程 ax^2 + bx + c = 0\n");
printf("请输入系数 a: ");
scanf("%lf", &a);
printf("请输入系数 b: ");
scanf("%lf", &b);
printf("请输入系数 c: ");
scanf("%lf", &c);
// 判断是否为二次方程
if (a == 0) {
printf("错误:a 不能为0,这不是二次方程!\n");
return 1;
}
// 计算判别式
discriminant = b * b - 4 * a * c;
// 根据判别式的值判断根的情况
if (discriminant > 0) {
// 情况1:有两个不等实根
root1 = (-b + sqrt(discriminant)) / (2 * a);
root2 = (-b - sqrt(discriminant)) / (2 * a);
printf("方程有两个不等实根:\n");
printf("根1 = %.2lf\n", root1);
printf("根2 = %.2lf\n", root2);
}
else if (discriminant == 0) {
// 情况2:有两个相等实根(重根)
root1 = root2 = -b / (2 * a);
printf("方程有两个相等实根:\n");
printf("根1 = 根2 = %.2lf\n", root1);
}
else {
printf("无实根")
}
return 0;
}
8.用流程图和N-S图表示求解问题的算法,并最终用代码实现:求两个数的最大公约数。
此题主要需要使用辗转相除法:
流程图:
程序源码:
#include <stdio.h>
#include <stdlib.h>
int main() {
int a, b, c, d;
printf("请输入第一个数a:\n");
scanf("%d", &a);
printf("请输入第二个数b:\n");
scanf("%d", &b);
// 原来的值
int A = a;
int B = b;
// 确保a是较大的数
if (a < b) {
int temp = a;
a = b;
b = temp;
}
c = a % b;
// 使用辗转相除法
while (c) {
d = b % c;
b = c;
c = d;
}
printf("%d与%d的最大公约数为%d", A, B, b);
return 0;
}
9.将100-200之间的素数输出。
此题要明白素数(质数的定义):素数的定义是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数,素数与质数是同一概念的不同表述。
流程图:
程序源码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int judgePrimeNumber() {
int num = 100,i = 2,isPrime = 0;
for(;num<200;num++){
for(int i = 2 ;i<=sqrt(num);i++){
if(num%i !=0){
isPrime = 1;
}else{
isPrime = 0;
break;
}
}
if(isPrime){
printf("%d是质数\n", num);
}
}
return 0;
}
int main() {
judgePrimeNumber();
return 0;
}
10.有 3 个数a,b ,c,要求按大小顺序把它们输出。
此题解法用的是交换值法,将最小的值交换给a
流程图:
程序源码:
#include <stdio.h>
#include <stdlib.h>
int main(){int a,b,c,d;
printf("请输入3个数:\n");
scanf("%d %d %d",&a,&b,&c);
if(a>b){
d=a;
a=b;
b=d;
}if(a>c){
d=a;
a=c;
c=d;
}if(b>c){
d=b;
b=c;
c=d;
}
printf("三个数从小到大依次是:%d,%d,%d",a,b,c);
}
11.依次将 10 个数输人,要求输出其中最大的数 。
流程图:
程序代码:
#include <stdio.h>
#include <stdlib.h>
int main(){
int numbers[10]; // 定义一个数组来存储10个数
printf("接下来你需要输入10个数\n");
// 输入10个数
for(int i = 0; i < 10; i++) {
printf("请输入第%d个数:", i + 1);
scanf("%d", &numbers[i]);
}
// 3. 找出最大值和最小值
int max = numbers[0];
for(int x = 1; x < 10; x++) {
if(numbers[x] > max) {
max = numbers[x];
}
}
printf("这10个数最大值为:%d", max);
}