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

下载本文档

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

文档简介

一、简答题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

温馨提示

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

最新文档

评论

0/150

提交评论