c语言程序之魂——算法(练习题,流程图,程序源码)

1. 请用算法描述生活中的例子-----看电影

买票---> 选场次 ---> 选座位 ---> 付钱 ---> 入场观影

2.设计基本结构要满足以下几点:

只有一个入口

只有一个( 出口 )

结构内的每一部分都有机会执行到

结构内不存在( 死循环 )

3.程序的三种基本结构是顺序结构、选择结构、( 循环结构 )

4.( 结构化 )的算法由一些基本结构顺序组成的;在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本结构范围之内(如循环中流程的跳转)。它便于编写,可读性高,修改和维护起来简单,可以减少程序出错的机会,提高了程序的可靠性,保证了程序的质量,因此非常提倡。

5.一个算法应该具有五个重要的特征:有穷性、确定性、可行性、输入项、( 输出项 )

6.广义的( 算法 )为解决一个问题而采取的方法和步骤,可分为两大类别:数值运算法和( 非数值算法 )

7.用流程图和N-S图表示求解问题的算法,并最终用代码实现:求方程ax^2+bx+c=0的跟,分别考虑:1.有两个不等实根;2有两个相等实根。

该题主要需要了解一元二次方程的根算式:

流程图如下:

程序代码如下:

c 复制代码
#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图表示求解问题的算法,并最终用代码实现:求两个数的最大公约数。

此题主要需要使用辗转相除法:

流程图:

程序源码:

c 复制代码
#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和它本身以外不再有其他因数的自然数,素数与质数是同一概念的不同表述。

流程图:

程序源码:

c 复制代码
#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

流程图:

程序源码:

c 复制代码
#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 个数输人,要求输出其中最大的数 。

流程图:

程序代码:

c 复制代码
#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);
}
相关推荐
2的n次方_3 分钟前
CANN Ascend C 编程语言深度解析:异构并行架构、显式存储层级与指令级精细化控制机制
c语言·开发语言·架构
iAkuya19 分钟前
(leetcode)力扣100 62N皇后问题 (普通回溯(使用set存储),位运算回溯)
算法·leetcode·职场和发展
近津薪荼19 分钟前
dfs专题5——(二叉搜索树中第 K 小的元素)
c++·学习·算法·深度优先
xiaoye-duck21 分钟前
吃透 C++ STL list:从基础使用到特性对比,解锁链表容器高效用法
c++·算法·stl
松☆24 分钟前
CANN与大模型推理:在边缘端高效运行7B参数语言模型的实践指南
人工智能·算法·语言模型
java干货35 分钟前
为什么 “File 10“ 排在 “File 2“ 前面?解决文件名排序的终极算法:自然排序
开发语言·python·算法
_F_y35 分钟前
C语言重点知识总结(含KMP详细讲解)
c语言·开发语言
皮皮哎哟43 分钟前
数据结构:嵌入式常用排序与查找算法精讲
数据结构·算法·排序算法·二分查找·快速排序
程序员清洒1 小时前
CANN模型剪枝:从敏感度感知到硬件稀疏加速的全链路压缩实战
算法·机器学习·剪枝
vortex51 小时前
几种 dump hash 方式对比分析
算法·哈希算法