计算与人工智能概论-问题求解、科学计算与AI应用方法 习题及答案汇 蔡宇辉 第1-12章_第1页
计算与人工智能概论-问题求解、科学计算与AI应用方法 习题及答案汇 蔡宇辉 第1-12章_第2页
计算与人工智能概论-问题求解、科学计算与AI应用方法 习题及答案汇 蔡宇辉 第1-12章_第3页
计算与人工智能概论-问题求解、科学计算与AI应用方法 习题及答案汇 蔡宇辉 第1-12章_第4页
计算与人工智能概论-问题求解、科学计算与AI应用方法 习题及答案汇 蔡宇辉 第1-12章_第5页
已阅读5页,还剩198页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、选择题1.以下哪些属于计算机硬件?()哪些属于计算机软件?()A.中央处理器 B.网络摄像头 C.显卡 D.麦克风E.Windows F.MySQL G.腾讯QQ H.网易云音乐参考答案:ABCD、EFGH2.以下哪些属于与计算机相关的产品?()A.自动提款机 B.智能手机C.智能网关 D.无人驾驶汽车E.数码相机 F.打印机 G.平板电脑 H.扫地机器人 参考答案:ABCDEFGH3.下列不属于计算机语言的是哪个?()A.机器语言 B.汇编语言 C.Python D.Office参考答案:D二、简答题1.请简述从1956年至今,人工智能的发展经历了哪几个关键的阶段。答:人工智能基础技术和研究的形成时间是在1956年到1970年之间;1971年至1980年间,人工智能技术开始步入发展和实用化阶段;1980年至今,知识工程与专家系统步入迅速发展阶段;2.人工智能技术的研究涉及哪些方面?请试着举例说明天问一号火星探测器使用了哪些人工智能技术。答:人工智能技术研究涵盖机器学习、计算机视觉、自然语言处理、自主决策等。天问一号应用了AI自主导航、地形识别与避障、智能任务调度等技术,实现火星表面安全着陆与巡视探测。3.请简述图灵机的工作原理。答:图灵机是图灵于1936年提出的抽象计算模型,用于界定可计算问题的边界。其核心由三部分组成:一条无限长的纸带(用作存储)、一个可左右移动的读写头(用于读取、写入和擦除符号),以及一个有限状态控制器(模拟“大脑”决策)。机器从初始状态开始,根据当前状态和读写头所读符号,按照预设规则改变状态、改写符号并移动读写头,直至进入停机状态输出结果。例如,执行“1+2=3”时,读写头识别“+”后读取后续数字,经内部规则计算后将结果“3”写入指定位置。尽管结构简单,图灵机具备通用计算能力,能模拟任何算法过程,为现代计算机奠定了理论基础。4.世界上第一台通用电子数字计算机诞生于什么时间?请描述一下它的主要特点。答:1946年2月15日发生了人类历史上一件划时代的大事:世界上第一台通用电子数字计算机(见图1.5)——埃尼阿克计算机诞生了。它实现了计算工具由机械计算机到电子计算机的过渡,在计算机发展史上具有划时代的意义。5.什么是计算机?学习了本章后,请设想一下未来计算机的样子,描述一下它将会给人们的生活提供哪些便利的服务。答:计算机是一种基于冯·诺依曼体系结构、能自动执行程序以处理信息的通用设备,其核心是将问题转化为可计算形式并通过算法求解。未来计算机将深度融合人工智能与物联网,具备更强的感知、学习与决策能力。它可能以柔性芯片、量子或生物形态存在,嵌入衣物、家居甚至人体,实时监测健康、优化生活节奏;通过自然语言无缝交互,主动提供个性化教育、医疗、出行建议;在无人干预下完成复杂任务,如自动驾驶、灾害预警、智能生产等,真正成为人类智能的延伸与生活伙伴。6.冯·诺依曼体系结构包括几大部分?分别是什么?答:冯·诺依曼体系结构是现代计算机的基础架构,由运算器、控制器、存储器、输入设备和输出设备五大部分组成。其中,运算器负责执行算术与逻辑运算,控制器协调各部件并控制指令的执行流程,存储器用于统一存放程序和数据,输入设备将外部信息送入计算机,输出设备则将处理结果呈现给用户。该体系的核心思想是“存储程序、顺序执行”,即程序和数据以二进制形式共同存储在内存中,由中央处理器逐条读取并执行,从而实现通用计算功能。7.硬件是什么?软件是什么?它们的关系如何?答:硬件是计算机的物理组成部分,包括中央处理器、存储器、输入/输出设备等看得见、摸得着的实体部件;软件则是运行在硬件上的程序和数据,包括系统软件(如操作系统)和应用软件(如办公工具、游戏等),是无形的指令集合。硬件为软件提供运行平台和执行基础,软件则指挥硬件完成具体任务,二者相互依存、协同工作——没有硬件,软件无法运行;没有软件,硬件只是一堆无用的电子元件。8.什么是计算机程序?答:计算机程序是一系列用计算机语言编写的、按照特定逻辑顺序组织的指令集合,用于告诉计算机如何执行某项任务或解决某个问题。程序以算法为核心,将人类的求解思路转化为机器可理解并自动执行的操作步骤,是连接人类意图与计算机硬件之间的桥梁。9.请简述算法、语言与程序之间的关系,并简要说明如何评价一个算法的优劣。答:算法是解决问题的逻辑步骤或方法,是程序的核心;计算机语言是表达算法的工具,用于将算法转化为机器可理解的形式;程序则是用特定计算机语言编写、实现算法的具体代码。三者关系为:算法通过计算机语言被编写成程序,程序在计算机上运行以实现算法的功能。评价一个算法的优劣主要看其时间复杂度(执行效率)和空间复杂度(占用内存),同时兼顾正确性、可读性与可扩展性,尤其关注在最坏情况下的性能表现。10.请简述计算机语言发展的三个阶段。答:计算机语言的发展经历了三个阶段:第一代是机器语言,由0和1组成的二进制代码,可被计算机直接执行,但难以阅读和编写;第二代是汇编语言,用助记符(如ADD、MOV)代替二进制指令,提高了可读性,但仍依赖特定硬件,可移植性差;第三代是高级语言(如C、Python、Java),更接近人类自然语言,语法简洁、易于理解和维护,且与硬件无关,具有良好的可移植性,需通过编译或解释转换为机器语言才能执行。11.什么是计算思维?请简述利用计算思维进行问题求解的过程。答:计算思维是运用计算机科学的基础概念进行问题求解、系统设计和理解人类行为的一种思维方式,是信息时代人人应具备的基本能力。它不是让人像计算机一样思考,而是借鉴计算机处理问题的逻辑来高效解决现实问题。利用计算思维求解问题通常包括四个步骤:一是分解,将复杂问题拆解为若干小问题;二是模式识别,找出子问题之间的共性或规律;三是抽象,忽略无关细节,提炼核心要素;四是算法设计,制定清晰、可执行的步骤来解决问题。例如,在智能机器人寻路任务中,先分解为“感知环境”和“决策移动”,再识别避障规律,抽象出地图与动作模型,最后设计走墙边的算法流程。这一过程体现了计算思维在实践中的应用价值。12.人工智能的三大基石是什么?答:人工智能的三大基石是数据、算法和算力。数据是AI学习的基础,高质量、大规模的数据为模型提供“经验”;算法是核心方法,决定如何从数据中提取规律、做出预测或决策,如深度学习、强化学习等;算力则是支撑,指计算机的运算能力,尤其是GPU、TPU等硬件提供的强大并行计算资源,使复杂模型得以高效训练和运行。三者相辅相成:没有数据,算法无法学习;没有算法,数据无法转化为智能;没有算力,先进算法难以落地。当前AI的突破,正是这三大要素协同发展的结果。13.人工智能涉及哪些常见算法?答:人工智能常见的算法主要包括:监督学习算法(如线性回归、决策树、支持向量机、神经网络),用于有标签数据的预测或分类,例如识别零件是否合格;无监督学习算法(如K-Means聚类、主成分分析),用于发现未标记数据中的结构或模式,如客户分群或异常检测;强化学习算法(如Q-learning、深度Q网络),通过试错与环境交互来优化决策,应用于机器人控制或游戏AI;此外,深度学习算法(如卷积神经网络CNN、循环神经网络RNN、Transformer)在图像识别、语音处理和自然语言理解中表现突出。这些算法各有适用场景,常结合使用以解决实际问题。14.人工智能有哪些应用领域?请举例说明人工智能技术在智慧城市中的应用。答:人工智能已广泛应用于智能制造、智能医疗、智慧农业、自动驾驶、金融服务、教育和家居等领域。在智慧城市中,AI技术发挥着关键作用:例如,智能交通系统利用摄像头和AI算法实时分析车流,动态调整红绿灯时长,缓解拥堵;智能安防通过人脸识别和行为分析,提升社区与公共场所的安全预警能力;智慧能源管理借助AI预测用电负荷,优化电网调度;城市治理中,AI可自动识别道路破损、垃圾堆积等图像信息,辅助市政快速响应。此外,智能客服、无人配送车、环境监测传感器网络等也依托AI实现高效、精准的城市服务,让城市更安全、绿色、便捷。一、简答题1.列举C语言中的五种基本数据类型,分别介绍它们的作用和表示范围。答:C语言中的五种基本数据类型及其作用和表示范围如下:char(字符型):用于存储单个字符或小整数,占1字节。有符号范围为-128到127,无符号为0到255。short(短整型):用于存储较小整数,通常占2字节,范围为-32,768到32,767。int(整型):最常用整数类型,通常占4字节,范围约-21亿到21亿。float(单精度浮点型):用于存储带小数的数值,占4字节,有效精度约6~7位,范围约±3.4×10³⁸。double(双精度浮点型):用于高精度小数运算,占8字节,有效精度约15~16位,范围约±1.7×10³⁰⁸。这些类型为程序处理整数、小数和字符提供了基础支持,是编写如坐标计算、传感器数据处理等实训任务的关键。2.符号常量如何定义,作用是什么?答:在C语言中,符号常量可通过两种方式定义:一是使用预处理指令#define,如#definePI3.14159;二是使用const关键字,如constdoublePI=3.14159;。前者在编译前进行文本替换,后者定义的是具有类型和作用域的只读变量。符号常量的作用主要有三:一是提高程序可读性,用有意义的名称(如MAX_SPEED)代替神秘数字;二是便于维护,若需修改值,只需改动一处定义;三是增强安全性,防止程序意外修改关键数值。例如在数控编程或物理计算中,重力加速度、最大转速等固定参数宜定义为符号常量,使代码更清晰、可靠、易调试。3.在C语言中,变量名的命名规则有哪些限制?答:在C语言中,变量名的命名需遵循以下规则:只能由字母(a–z,A–Z)、数字(0–9)和下划线(_)组成;首字符不能是数字,必须是字母或下划线;区分大小写,如count与Count是两个不同的变量;不能使用C语言关键字(如int、if、return等)作为变量名;变量名应具有明确含义,避免使用无意义的单字母(如x、a),推荐使用studentScore(小驼峰)或max_value(下划线)等清晰命名方式。这些规则确保了代码的合法性、可读性和可维护性。4.定义变量时一定要赋初值吗?不赋初值的变量一定不能用吗?答:如果不赋初值,变量的值是未定义的,其内容取决于该内存位置之前存储的数据。在Dev-C++等环境中,全局变量或静态变量会被自动初始化为0,但局部变量不会,直接使用可能导致程序运行结果错误甚至崩溃。因此,虽然技术上可以定义后不立即赋值,但在实际编程(尤其是解决炮弹坐标、传感器读数等实训问题)中,应养成定义时就初始化的习惯,以确保程序稳定可靠。未初始化的局部变量不能安全使用,除非后续明确赋值后再引用。5.条件运算符的基本语法形式是什么?答:条件运算符(又称三目运算符)的基本语法形式是:表达式1?表达式2:表达式3其含义是:先计算表达式1,如果结果为真(非0),则整个表达式的值为表达式2的值;否则为表达式3的值。例如:intmax=(a>b)?a:b;表示若a大于b,则max取a,否则取b。该运算符常用于简单的条件赋值,使代码更简洁,但不宜嵌套过深,以免降低可读性。2.编程题1.温度转换输入华氏温度h,输出摄氏温度c,结果精确到小数点后2位。提示:摄氏温度转华氏温度的计算公式见式2.3。摄氏温度=#include<stdio.h>intmain(){floath;//华氏温度floatc;//摄氏温度printf("请输入华氏温度:");scanf("%f",&h);//注意:5/9在C语言中若为整数除法结果为0,应写成5.0/9.0或5/9.0c=5.0/9.0*(h-32);printf("摄氏温度为:%.2f\n",c);return0;}2.计算三角形的面积输入三角形的三条边长,计算并输出三角形的面积,结果精确到小数点后4位。提示:已知三角形的三条边长分别为a、b、c,三角形的面积area可利用式2.4所示海伦公式求得:p=(a+b+c)/2#include<stdio.h>#include<math.h>//需要包含数学库以使用sqrt函数intmain(){doublea,b,c;//三角形三边doubles,area;//半周长和面积printf("请输入三角形的三条边长(用空格分隔):");scanf("%lf%lf%lf",&a,&b,&c);//判断是否能构成三角形(可选,但推荐)if(a+b>c&&a+c>b&&b+c>a){s=(a+b+c)/2.0;//计算半周长area=sqrt(s*(s-a)*(s-b)*(s-c));//海伦公式printf("三角形的面积为:%.4f\n",area);}else{printf("输入的三边无法构成三角形!\n");}return0;}3.求每位上的数字输入一个正整数,从高位到低位依次输出该整数每位上的数字,每行输出一位。#include<stdio.h>intmain(){intn,temp,divisor=1;printf("请输入一个正整数:");scanf("%d",&n);if(n==0){printf("0\n");return0;}temp=n;while(temp>=10){temp/=10;divisor*=10;}temp=n;while(divisor>0){printf("%d\n",temp/divisor);temp%=divisor;divisor/=10;}return0;}4.汇率兑换按照1美元=6.451人民币汇率,编写美元兑换成人民币的小程序。(结果保留2位小数)#include<stdio.h>intmain(){doubleusd,cny;printf("请输入美元金额:");scanf("%lf",&usd);cny=usd*6.451;printf("兑换人民币为:%.2f\n",cny);return0;}5.计算小球的高度设以初速度v₀(米/秒)垂直向上抛出小球,则小球在运动过程中离抛出点的高度见式2.5,其中t(秒)是时间,g(米/秒²)是重力加速度(值为9.8)。在给定初速度和时间下,计算小球的高度y(米),结果保留4位小数。y#include<stdio.h>intmain(){doublev0,t,y;constdoubleg=9.8;printf("请输入初速度v0(米/秒)和时间t(秒):");scanf("%lf%lf",&v0,&t);y=v0*t-0.5*g*t*t;printf("小球的高度为:%.4f\n",y);return0;}6.计算存款某账户有本金若干元,计划存五年,采取两种不同的存款方式:方式一为一年定期转存,每年初存入一年定期存款,年利率为1.75%。每年到期后,将本金和利息一起转存为下一年的一年定期存款(复利计算)。方式二为五年定期,一次性存入五年定期存款,年利率为2.75%,到期后一次性还本付息(单利计算)。输入本金金额(单位:元),计算并输出五年后两种存款方式分别获得的得款总额(结果保留2位小数)。#include<stdio.h>intmain(){doubleprincipal,amount1,amount2;printf("请输入本金金额(元):");scanf("%lf",&principal);amount1=principal*(1+0.0175)*(1+0.0175)*(1+0.0175)*(1+0.0175)*(1+0.0175);amount2=principal*(1+0.0275*5);printf("方式一五年后总额:%.2f\n",amount1);printf("方式二五年后总额:%.2f\n",amount2);return0;}7.数学函数的计算 计算式2.6所示表达式的结果,保留2位小数。其中x为输入的浮点数。y#include<stdio.h>#include<math.h>intmain(){doublex,y;printf("请输入x的值:");scanf("%lf",&x);y=(exp(x)+exp(-x))/2.0;printf("y=%.2f\n",y);return0;}8.计算圆锥体的底面积和体积。 输入圆锥体的半径r和高度h,计算并输出其底面积和体积。(结果保留2位小数)提示:圆锥体积公式见式2.7,其中s为圆锥底面积,h为圆锥的高。V#include<stdio.h>#definePI3.14159265358979323846intmain(){doubler,h,s,v;printf("请输入圆锥的底面半径r和高h:");scanf("%lf%lf",&r,&h);s=PI*r*r;v=(1.0/3.0)*s*h;printf("底面积为:%.2f\n",s);printf("体积为:%.2f\n",v);return0;}9.求两点之间的距离 设两个点A、B以及坐标分别为A(x1,y1)和B(x2,y2),计算AB两点之间的距离。提示:两点间距离公式见式2.8。d=#include<stdio.h>#include<math.h>intmain(){doublex1,y1,x2,y2,distance;printf("请输入点A的坐标(x1,y1):");scanf("%lf%lf",&x1,&y1);printf("请输入点B的坐标(x2,y2):");scanf("%lf%lf",&x2,&y2);distance=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));printf("两点之间的距离为:%.2f\n",distance);return0;}10.求一元二次方程的两个根 一元二次方程经过整理都可化成一般形式ax²+bx+c=0,输入a、b、c的值,求出方程的两个根。(结果保留2位小数)提示:一元二次方程求根公式见式2.9。x=#include<stdio.h>#include<math.h>intmain(){doublea,b,c,delta,x1,x2;printf("请输入a、b、c的值:");scanf("%lf%lf%lf",&a,&b,&c);if(a==0){printf("a不能为0,这不是一元二次方程。\n");return0;}delta=b*b-4*a*c;if(delta<0){printf("方程无实数根。\n");return0;}x1=(-b+sqrt(delta))/(2*a);x2=(-b-sqrt(delta))/(2*a);printf("x1=%.2f\n",x1);printf("x2=%.2f\n",x2);return0;}11.字符转换 输入3个数字字符,将其转换成相应的整数后,求它们的平均值并输出。#include<stdio.h>intmain(){charc1,c2,c3;intn1,n2,n3;doubleavg;printf("请输入3个数字字符(如123):");scanf("%c%c%c",&c1,&c2,&c3);n1=c1-'0';n2=c2-'0';n3=c3-'0';avg=(n1+n2+n3)/3.0;printf("平均值为:%.2f\n",avg);return0;}一、简答题1.C语言的分支语句有几种?请分别描述它们的基本形式。答:C语言的分支语句主要有三种:if语句:基本形式为if(条件)语句;,当条件为真时执行语句。也可带else子句:if(条件)语句1;else语句2;,条件为真执行语句1,否则执行语句2。if-elseif-else多分支结构:形式为if(条件1)语句1;elseif(条件2)语句2;…else语句n;,依次判断各条件,执行第一个为真的分支,若都不成立则执行else部分(可选)。switch语句:基本形式为switch(表达式){case常量1:语句1;break;…default:语句n;},根据表达式的值匹配对应的case标签执行,若无匹配且有default则执行default分支。各case后通常加break防止“贯穿”。2.什么是if语句中的条件表达式?它的作用是什么?答:if语句中的条件表达式是紧跟在if后面的括号内的表达式,用于判断真假。它的作用是控制程序是否执行后续的语句:当条件表达式的值为非0(真)时,执行if后面的语句;若值为0(假),则跳过该语句(或转而执行else部分)。条件表达式通常由关系运算符(如>、==)或逻辑运算符(如&&、||)构成,是实现程序分支逻辑的核心。3.if语句有哪些常见的嵌套使用方式?请给出几个例子。答:if语句常见的嵌套方式是在一个if(或else)的执行块中再包含另一个if语句,用于处理多层条件判断。例如:(1)判断成绩等级:if(score>=60){if(score>=80){printf("良好");}else{printf("及格");}}else{printf("不及格");}(2)判断年份是否为闰年(简化逻辑):if(year%4==0){if(year%100==0){if(year%400==0)printf("是闰年");elseprintf("不是闰年");}else{printf("是闰年");}}else{printf("不是闰年");}(2)判断点是否在矩形区域内:if(x>=0){if(x<=100){if(y>=0&&y<=50){printf("在区域内");}}}4.switch语句在什么情况下会比if-else语句更有效?答:switch语句在以下情况下通常比if-else更有效:当需要对同一个整型或字符型表达式的多个确定常量值进行等值判断时(如菜单选择、状态码处理)。例如,根据用户输入的1~5执行不同操作。此时switch结构清晰、执行效率高(编译器可能优化为跳转表),而if-else需逐个条件判断。但若条件涉及范围判断(如x>10)、浮点数或复杂逻辑,则必须使用if-else,switch不适用。5.在switch语句中,case和default标记的作用是什么?答:在switch语句中,case标记用于列出表达式可能取的常量值,每个case后跟一个常量和冒号,当switch表达式的值与某个case常量相等时,程序从该处开始执行;default标记是可选的,用于处理所有case都不匹配的情况,相当于“其他情况”的兜底分支。若没有匹配的case且无default,则switch语句不执行任何操作。通常每个case末尾加break以防止执行贯穿到下一个case。6.什么是break语句?它在switch语句中的作用是什么?答:break语句是C语言中的一种流程控制语句,用于立即终止所在循环或switch结构的执行,并跳转到该结构之后的下一条语句。在switch语句中,break的作用是防止“贯穿”(fall-through):当某个case分支执行完毕后,若没有break,程序会继续执行后续case或default中的代码,直到遇到break或switch结束。加入break可确保只执行匹配的case分支,保证逻辑正确。例如,在菜单选择中,选1只执行功能1,不会继续执行功能2、3等。2.编程题1.猜数游戏设计一个猜数游戏,由计算机产生一个随机数magic,从键盘输入一个数guess,若输入的数guess等于随机数magic,则输出“你猜对了!”。否则,输出“你猜错了!”。提示:用库函数rand()产生随机数,为避免每次产生相同的随机数序列,需要使用srand(unsignedseed)来设置随机数种子,一般使用time()函数获取当前时间作为随机数种子,传入srand函数作为参数。#include<stdio.h>#include<stdlib.h>#include<time.h>intmain(){intmagic,guess;srand((unsigned)time(NULL));magic=rand()%100+1;printf("请输入你猜的数字(1~100):");scanf("%d",&guess);if(guess==magic)printf("你猜对了!\n");elseprintf("你猜错了!正确答案是%d。\n",magic);return0;}2.整除判断输入一个整数,判断它能否同时被3、5、7整除。提示:判别一个整数能否被另一个整数整除,可以使用模运算(%),若余数为0则表示能整除,否则不能整除。#include<stdio.h>intmain(){intn;printf("请输入一个整数:");scanf("%d",&n);if(n%3==0&&n%5==0&&n%7==0)printf("该数能同时被3、5、7整除。\n");elseprintf("该数不能同时被3、5、7整除。\n");return0;}3.求最大值输入三个浮点数,找出并输出其中的最大值。提示:设三个数分别为a、b、c,先比较a和b找出较大者存入变量max_val,然后比较max_val和c,较大的的再存入max_val,max_val的值即为最大值。#include<stdio.h>intmain(){doublea,b,c,max_val;printf("请输入三个浮点数:");scanf("%lf%lf%lf",&a,&b,&c);if(a>b)max_val=a;elsemax_val=b;if(c>max_val)max_val=c;printf("最大值为:%.2f\n",max_val);return0;}4.三个数排序输入3个任意整数,然后按从小到大的顺序依次输出。提示:输入3个任意整数分别存在变量a、b和c中。然后对这三个数进行两两比较:使用if语句进行条件判断,如果a大于b,则借助中间变量t交换a和b的值,同理可以比较a和c、b和c,最终a、b、c的值按从小到大排列。#include<stdio.h>intmain(){inta,b,c,t;printf("请输入三个整数:");scanf("%d%d%d",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%d%d%d\n",a,b,c);return0;}5.闰年判断输入四位数字的年份,判断是否是闰年,如果是输出“闰年”,否则输出“平年”。提示:若年份数字能被4整除但不能被100整除或者能被400整除,则为闰年。#include<stdio.h>intmain(){intyear;printf("请输入四位年份:");scanf("%d",&year);if((year%4==0&&year%100!=0)||(year%400==0))printf("闰年\n");elseprintf("平年\n");return0;}6.月份的天数输入年份数字和月份数字,输出该月的天数。提示:月份1、3、5、7、8、10、12为大月,每月31天;月份4、6、9、11为小月,每月30天;月份为2月时,闰年29天,否则28天。#include<stdio.h>intmain(){intyear,month,days;printf("请输入年份和月份:");scanf("%d%d",&year,&month);if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)days=31;elseif(month==4||month==6||month==9||month==11)days=30;elseif(month==2){if((year%4==0&&year%100!=0)||(year%400==0))days=29;elsedays=28;}else{printf("无效月份\n");return0;}printf("%d年%d月有%d天\n",year,month,days);return0;}7.一元二次方程求解对于一元二次方程ax2+bx+c=0,输入系数a、b、c,求方程的根。提示:输入3个系数a、b、c,求根公式为x=−b±b2#include<stdio.h>#include<math.h>intmain(){doublea,b,c,delta,x1,x2;printf("请输入系数a、b、c:");scanf("%lf%lf%lf",&a,&b,&c);if(a==0){printf("不是一元二次方程。\n");return0;}delta=b*b-4*a*c;if(delta>0){x1=(-b+sqrt(delta))/(2*a);x2=(-b-sqrt(delta))/(2*a);printf("方程有两个实根:x1=%.2f,x2=%.2f\n",x1,x2);}elseif(delta==0){x1=-b/(2*a);printf("方程有一个实根:x=%.2f\n",x1);}else{printf("方程无实根。\n");}return0;}8.判别输入字符的类别根据输入字符的ASCII码所在范围判别其类型,分别给出不同的输出。若ASCII码值小于32输出“控制字符”,"0"和"9"之间的字符输出“数字”,"A"和"Z"之间的字符输出“大写字母”,"a"和"z"之间的字符输出“小写字母”,其余字符输出“其他字符”。例如输入字符"e",输出"小写字母"。#include<stdio.h>intmain(){charch;printf("请输入一个字符:");scanf("%c",&ch);if(ch<32)printf("控制字符\n");elseif(ch>='0'&&ch<='9')printf("数字\n");elseif(ch>='A'&&ch<='Z')printf("大写字母\n");elseif(ch>='a'&&ch<='z')printf("小写字母\n");elseprintf("其他字符\n");return0;}9.年龄段的划分年龄段划分标准是根据联合国世界卫生组织,对全球人体素质和平均寿命进行检测,并对年龄的划分标准给出了新的规定。我国年龄划分标准是:童年<5周岁;幼年5-9周岁;少年10-19周岁;青年20-34周岁;壮年35-49周岁;中年50-64周岁;老年>=65周岁。编写程序,输入年龄,显示其所在年龄段。#include<stdio.h>intmain(){intage;printf("请输入年龄:");scanf("%d",&age);if(age<5)printf("童年\n");elseif(age>=5&&age<=9)printf("幼年\n");elseif(age>=10&&age<=19)printf("少年\n");elseif(age>=20&&age<=34)printf("青年\n");elseif(age>=35&&age<=49)printf("壮年\n");elseif(age>=50&&age<=64)printf("中年\n");elseprintf("老年\n");return0;}10.分段计程票价乘坐地铁时,一般按照乘坐的站点数计算票价,表3.4给出了站点数与票价的对应关系。表3.4地铁票价站点数1~6站7~11站12~16站17~21站22站及以上票价23456编写程序,根据乘坐的站点数,输出对应的票价。#include<stdio.h>intmain(){intstations,fare;printf("请输入乘坐的站点数:");scanf("%d",&stations);if(stations>=1&&stations<=6)fare=2;elseif(stations<=11)fare=3;elseif(stations<=16)fare=4;elseif(stations<=21)fare=5;elsefare=6;printf("票价为:%d元\n",fare);return0;}11.分段函数对于式3.5所示数学公式y=编程实现输入x值,输出满足函数关系的y值。#include<stdio.h>intmain(){doublex,y;printf("请输入x的值:");scanf("%lf",&x);if(x<1)y=x;elseif(x<10)y=2*x-1;elsey=3*x-1;printf("y=%.2f\n",y);return0;}12.学分绩点转百分制 使用switch分支结构,设计一个将学分绩点转换成百分制分数的程序,程序输入为绩点,输出为百分制成绩。学分绩点和百分制成绩的对应关系如表3.5所示:表3.5绩点与成绩学分绩点43210百分制成绩100~9089~8079~7069~6059~0#include<stdio.h>intmain(){intgrade_point;printf("请输入学分绩点(0~4):");scanf("%d",&grade_point);switch(grade_point){case4:printf("百分制成绩:100~90\n");break;case3:printf("百分制成绩:89~80\n");break;case2:printf("百分制成绩:79~70\n");break;case1:printf("百分制成绩:69~60\n");break;case0:printf("百分制成绩:59~0\n");break;default:printf("无效的绩点输入。\n");}return0;}13.自动贩卖机自动贩卖机是根据用户的选择和投入的钱币自动付货的机器,在日常生活中几乎随处可见。请设计程序模拟一个简单的饮料自动贩卖机。贩卖机内有三种饮料,分别是咖啡、茶、可口可乐。在屏幕上以列表的形式显示出饮料列表(例如1-咖啡、2-茶、3-可口可乐),然后提示用户输入对应的数字做出选择,当用户输入完毕后,在屏幕上输出用户选择的结果。要求用switch编写。#include<stdio.h>intmain(){intchoice;printf("1-咖啡\n2-茶\n3-可口可乐\n");printf("请选择饮料(输入对应数字):");scanf("%d",&choice);switch(choice){case1:printf("您选择了咖啡\n");break;case2:printf("您选择了茶\n");break;case3:printf("您选择了可口可乐\n");break;default:printf("无效选择\n");}return0;}14.判断三角形类型 输入三角形的三条边长,判定是何种三角形。根据输入三角形的三条边,1)首先判定能否构成三角形:任意两边之和大于第三边;2)满足1)的前提下,输出各种三角形的类型:若三边相等,输出“正三角形”;若两边相等,输出“等腰三角形”;若两边的平方和等于第三边的平方和,输出“直角三角形”;否则输出“一般三角形”。3)不满足1),则输出”不构成三角形”。#include<stdio.h>intmain(){doublea,b,c;printf("请输入三角形的三条边长:");scanf("%lf%lf%lf",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a){if(a==b&&b==c)printf("正三角形\n");elseif(a==b||b==c||a==c)printf("等腰三角形\n");elseif(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)printf("直角三角形\n");elseprintf("一般三角形\n");}else{printf("不构成三角形\n");}return0;}15.计算每月水费。 某市水费价格实施阶梯式水价制度,其规则如下所示:1)凡四口之家及以下,按户均用水量计价。第一阶梯:每户每月15吨以下(含15吨)为2.88元/吨;第二阶梯:每户每月15~22吨(含22吨)为3.64元/吨;第三阶梯:每户每月22吨上为4.39元/吨。2)凡五口之家及以上,按人均用水量计价。第一阶梯:每人每月4吨(含4吨)为2.88元/吨;第二阶梯:每人每月4~5吨(含5吨)为3.64元/吨;第三阶梯:每人每月5吨以上为4.39元/吨。3)对于低保居民,每月每户减免6吨用水量(若本月实际用水量不足6吨,余留量不可累积至下月使用)。编写程序输入上月水表读数、本月水表读数、家庭人数和是否低保(y/n),计算并输出用水吨数和水费。#include<stdio.h>intmain(){doublelast,current,usage,fee=0.0;intpeople;charisLowIncome;printf("请输入上月水表读数、本月水表读数、家庭人数和是否低保(y/n):");scanf("%lf%lf%d%c",&last,¤t,&people,&isLowIncome);usage=current-last;if(isLowIncome=='y'||isLowIncome=='Y'){usage-=6.0;if(usage<0)usage=0;}if(people<=4){if(usage<=15)fee=usage*2.88;elseif(usage<=22)fee=15*2.88+(usage-15)*3.64;elsefee=15*2.88+7*3.64+(usage-22)*4.39;}else{doubleperCapita=usage/people;doubletier1=4*people;doubletier2=5*people;if(usage<=tier1)fee=usage*2.88;elseif(usage<=tier2)fee=tier1*2.88+(usage-tier1)*3.64;elsefee=tier1*2.88+(tier2-tier1)*3.64+(usage-tier2)*4.39;}printf("用水吨数:%.2f\n",current-last);printf("应缴水费:%.2f元\n",fee);return0;}一、简答题1.C语言的循环语句有几种?请分别描述它们的基本形式。答:C语言的循环语句有三种:while语句:基本形式为while(条件){循环体;}。先判断条件,若为真(非0)则执行循环体,执行完后再次判断条件,直到条件为假时退出循环。do-while语句:基本形式为do{循环体;}while(条件);。先执行一次循环体,再判断条件,若为真则继续循环。特点是至少执行一次循环体。for语句:基本形式为for(表达式1;表达式2;表达式3){循环体;}。表达式1:初始化循环变量(只执行一次);表达式2:循环条件,为真则继续循环;表达式3:每轮循环结束后更新循环变量。三种循环可互相转换,应根据具体问题选择最清晰的写法。2.while循环和do-while循环的区别是什么?答:while循环和do-while循环的主要区别在于判断条件的时机不同:while循环是“先判断后执行”:在每次循环开始前先检查条件,若条件为假(0),则循环体一次也不执行。do-while循环是“先执行后判断”:无论条件是否成立,循环体至少执行一次,然后在循环末尾判断条件,若为真则继续下一轮。例如,当需要用户输入直到合法时,do-while可确保提示至少出现一次;而while可能因初始条件不满足直接跳过。3.什么是死循环?如何避免它?答:死循环是指循环条件始终为真,导致程序无法正常退出、无限重复执行的循环。例如:while(1){...}或for(;;){...}若无跳出机制即为死循环。避免死循环的方法有:确保循环条件能在某次迭代后变为假,如在循环体内更新控制变量(如i++);避免在循环中遗漏修改循环控制变量的语句;使用调试手段检查循环逻辑,特别是嵌套循环或复杂条件;必要时可在循环内设置安全退出条件(如计数上限或用户中断)。合理设计循环结构和变量更新是防止死循环的关键。4.什么是循环的迭代次数?如何计算循环的迭代次数?答:循环的迭代次数是指循环体被执行的次数。计算方法取决于循环类型和控制条件:for循环:若形式为for(i=初值;i<=终值;i+=步长),且步长为正,则迭代次数为(终值-初值)/步长+1(需确保整除且条件成立)。例如for(i=1;i<=5;i++)迭代5次。while/do-while循环:需根据循环体内控制变量的变化和终止条件人工分析。例如:i=0;while(i<3){i++;}执行3次,因i从0增至3时退出。关键:找出循环变量的初始值、更新方式和终止条件,推导其变化过程,即可确定迭代次数。注意边界是否包含(如<与<=)。5.循环语句中,break和continue的区别是什么?答:在循环语句中,break和continue的作用不同:break:立即终止整个循环,跳出循环体,执行循环之后的下一条语句。常用于满足特定条件时提前结束循环。continue:跳过本次循环中剩余的语句,直接进入下一次循环的条件判断(for循环还会执行更新表达式)。它不结束循环,只是提前结束当前这一次迭代。二、编程题1.金箍棒长度 孙悟空金箍棒长度2m,每次可以缩短到原来1/2的长度,求多少次后长度小于1cm即0.01m。#include<stdio.h>intmain(){doublelength=2.0;intcount=0;while(length>=0.01){length=length/2.0;count++;}printf("%d\n",count);return0;}2.乌龟旅行乌龟决心去做环球旅行,第1小时爬行了10米,第2小时爬行了5米,第3小时爬行2.5米,速度不断减半,请问多少小时后可以爬行19.99M。#include<stdio.h>intmain(){doubledistance=0.0;doublespeed=10.0;inthour=0;while(distance<19.99){distance+=speed;hour++;speed/=2.0;}printf("%d\n",hour);return0;}3.计算银行存款输入本金b和年利率r,计算多少年后银行存款可以翻倍。#include<stdio.h>intmain(){doubleb,r,amount;intyears=0;printf("请输入本金和年利率:");scanf("%lf%lf",&b,&r);amount=b;while(amount<2*b){amount=amount*(1+r);years++;}printf("%d\n",years);return0;}4.求正弦值完成程序,从键盘输入x的值,利用式4.7将所有大于等于le−7的项累加,求sin(x)的近似值(x为弧度值),结果保留10位小数。sinx=提示:为提高执行效率,不要每次都重新计算每一项,而是根据当前项Tn推导出后一项Tn+1的值,递推式为:Tn+1=(-1)x2/[(2n)*(2n+1)]*Tn(n=1,2,3,4…..)#include<stdio.h>#include<math.h>intmain(){doublex,term,sinx;intn=1;printf("请输入x的值(弧度):");scanf("%lf",&x);term=x;sinx=term;while(fabs(term)>=1e-7){term=(-1)*x*x/((2*n)*(2*n+1))*term;sinx+=term;n++;}printf("%.10f\n",sinx);return0;}5.求水仙花数水仙花数是一个3位整数,且各位数字立方之和等于该数本身,例如153=13+53+33,所以153是水仙花数。编写程序,计算并输出所有的水仙花数。#include<stdio.h>intmain(){intnum,a,b,c;for(num=100;num<=999;num++){a=num/100;b=(num/10)%10;c=num%10;if(a*a*a+b*b*b+c*c*c==num)printf("%d\n",num);}return0;}6.求前n项之和输入两个整数a和n,求式4.8的结果,最后一项中a的个数为n,其中a是一个1~9的数字,例如:当a=2,n=5时,s=2+22+222+2222+22222。s=a+aa+aaa+…+aa…a.........................式4.8#include<stdio.h>intmain(){inta,n,i;longlongterm=0,sum=0;printf("请输入a和n:");scanf("%d%d",&a,&n);for(i=1;i<=n;i++){term=term*10+a;sum+=term;}printf("%lld\n",sum);return0;}7.学生成绩统计输入若干学生成绩,当成绩小于0时输入结束。计算并输出总分、总人数、平均分、最高分和最低分。#include<stdio.h>intmain(){doublescore,total=0,average,max,min;intcount=0;printf("请输入学生成绩(输入负数结束):");while(1){scanf("%lf",&score);if(score<0)break;total+=score;count++;if(count==1){max=score;min=score;}else{if(score>max)max=score;if(score<min)min=score;}}if(count==0){printf("没有有效成绩。\n");return0;}average=total/count;printf("总分:%.2f\n",total);printf("总人数:%d\n",count);printf("平均分:%.2f\n",average);printf("最高分:%.2f\n",max);printf("最低分:%.2f\n",min);return0;}8.输出100~200之间的所有素数输出100~200的所有素数。输出时,每行显示10个数。#include<stdio.h>#include<math.h>intmain(){intnum,i,isPrime,count=0;for(num=100;num<=200;num++){isPrime=1;if(num<2)isPrime=0;else{for(i=2;i<=sqrt(num);i++){if(num%i==0){isPrime=0;break;}}}if(isPrime){printf("%d",num);count++;if(count%10==0)printf("\n");}}if(count%10!=0)printf("\n");return0;}9.求表达式n项之和输入整数n,求式4.9的结果,保留3位小数。1+#include<stdio.h>intmain(){intn,i;doublesum=0.0,denominator=0.0;printf("请输入整数n:");scanf("%d",&n);for(i=1;i<=n;i++){denominator+=i;sum+=1.0/denominator;}printf("%.3f\n",sum);return0;}10.打印图案输入高度,打印如图4.11所示字母金字塔图案。AABAABCBAABCDCBA图4.11字母金字塔提示:C语言中字符的本质是整数(ASCII编码),因此可以直接使用字符变量作为循环变量,例如,从A循环到G可以写成for(charc='A';c<='G';c++)。#include<stdio.h>intmain(){intheight,i,j;printf("请输入高度:");scanf("%d",&height);for(i=0;i<height;i++){for(j=0;j<height-i-1;j++)printf("");for(j=0;j<=i;j++)printf("%c",'A'+j);for(j=i-1;j>=0;j--)printf("%c",'A'+j);printf("\n");}return0;}11.百钱百鸡问题每只公鸡价值5元,每只母鸡价值3元,每3只小鸡价值1元。现有100钱想买100只鸡,问公鸡、母鸡、小鸡各买几只。输出所有可能的组合。#include<stdio.h>intmain(){intcock,hen,chick;for(cock=0;cock<=20;cock++){for(hen=0;hen<=33;hen++){chick=100-cock-hen;if(chick>=0&&chick%3==0&&5*cock+3*hen+chick/3==100)printf("公鸡:%d母鸡:%d小鸡:%d\n",cock,hen,chick);}}return0;}12.求完数完数是指一个数恰好等于除自身外的因子之和。例如,6的因子是1、2和3,而6=1+2=3,因此6是完数。编写程序,输出1000以内的所有完数,并按以下格式输出:6=1+2+3#include<stdio.h>intmain(){intnum,i,sum,first;for(num=2;num<=1000;num++){sum=0;for(i=1;i<num;i++){if(num%i==0)sum+=i;}if(sum==num){printf("%d=",num);first=1;for(i=1;i<num;i++){if(num%i==0){if(!first)printf("+");printf("%d",i);first=0;}}printf("\n");}}return0;}13.求最大公约数和最小公倍数输入两个整数a和b,求最大公约数和最小公倍数。提示:最大公约数指两个或多个整数共有约数中最大的一个。最小公倍数是两整数公有的最小倍数。可以采用穷举法或辗转相除法计算两数的最大公约数,通过两数乘积除以最大公约数得到最小倍数。#include<stdio.h>intmain(){inta,b,original_a,original_b,temp;printf("请输入两个整数:");scanf("%d%d",&a,&b);original_a=a;original_b=b;if(a<0)a=-a;if(b<0)b=-b;while(b!=0){temp=b;b=a%b;a=temp;}intgcd=a;longlonglcm=(longlong)original_a*original_b/gcd;printf("最大公约数:%d\n",gcd);printf("最小公倍数:%lld\n",lcm);return0;}

一、分析题1.分析下列程序,写出运行结果。#include<iostream>usingnamespacestd;voidfun(inta){do{cout<<a%2;a=a/2;}while(a!=0);cout<<endl;}intmain(){inta=42486;fun(a);return0;}答:01101111101001012.分析下列程序,写出运行结果。#include<io

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论