西南大学[0039]《C语言》答案
发布时间:2023-09-07 14:09:33浏览次数:55西南大学培训与继续教育学院课程考试试题卷课程名称【编号】: 语言程序设计 【】 A 卷考试类别:大作业 满分:100 分 一、大作业题目1. 简述题(1)“构建程序设计的思想和方法、提升阅读程序能力和编写程序能力”是 C 语言程序设计主要的课程学习目标。请简要说明你在本学期的课程学习过程中学习了哪些内容?主要通过哪些途径进行学习?通过 C 语言的学习,你有哪些收获和体会?要求:回答问题真实真情表达。答:经过一个学期的 语言学习,大体算是在这个编程语言上入了门,能够通过一些代码解决特定的问题。感觉 原因编程不只是学习知识这么简单,更多给我的感受是它在潜移默化中培养了人的一种能力,用自己的话来讲就是一种”代码能力“。对于同一个问题,让大家去解开答案,可能经过一些纸笔的运算都能得出结果,但是如何把这个问题转化成代码,这就是一种能力,而仅仅是将问题转换成代码,这是较为浅层次的能力,更深层的便是通过优化代码让程序运行时间缩短以及减少可能出现的 。如果只是单纯的学习知识,像是背英语语法知识那样去学习一门编程语言、背下代码规则当然熟识理论知识是必须的,这样可能也可以初步懂得这门语言,但是在深入上却较为困难。我始终觉得学习编程重点在于培养写代码的能力。就拿写文章来说,对于文字的认识,可能大家都懂,但是给定一个题目,写出来的文章质量就各有差异,有的人文章平淡无奇,而有的人的却是宏篇大论。编程也是如此,懂得了理论知识,就像是认识了文字,但是优秀的作家能将这些文字巧妙地组合在一起形成佳作,优秀的程序员也是如此,能将大家都懂得的理论知识以一种更为巧妙的方法通过代码展示出来并使之可执行。所以,学习编程我始终认为我们每个人都应该注重写代码能力的培养。而这种培养可能需要无数次重复的练习,在获取这种能力的途中,可能有一部分人会觉得枯燥无味,因为始终看到的只是在黑色框框里输出一些数字以及字符串。刚开始的自己也是如此,但是后来那种解决问题的成就感慢慢克服了这种困难。给自己以有难度但又不超过自己能力范围的题目来练习,这样可能能逐步培养起兴趣。当然,因为每个人程度的不同,要找到适合自己能力范围的题目本身就是一种困难。以己之愚见,作为在校学生,老师的题目首先就是不错的选择,因为根据教学进度,老师都会给出不同的题目,而在此题目中必不乏难题存在,此时 一下,你可能就懂得了怎么去选择有难度又在自己能力范围的题目了。(2)简述算法、程序设计语言与程序的异同。在 C 语言中程序中有哪三种基本结构?分别简述这三种基本结构内涵。答:算法、程序设计语言与程序的区别与联系区别:算法()就是对解决某问题所采用的方法和步骤的描述。程序设计语言设计上就是一组符号及规则的集合。它是由语法、语义、语用三个要素组成。一个程序一般包括数据类型和算法两个方面的内容。其中数据类型(即数据结构)是对程序中的数据进行描述,指定数据在程序中的类型和数据的组织形式,它决定了数据的在内存中所占的存储空间和数据在内存中存放形式。而算法是对程序中数据的操作描述,是解决“做什么”和“怎么做”的问题,源程序中的操作语句就是算法的体现。正如著名计算机科学家沃思()所提出的观点:程序数据结构算法。- 1 -
联系:程序设计语言是编写程序实现算法的语言工具。 语言中程序中三种基本结构:在 语言程序中,一共有三种程序结构:顺序结构、选择结构分支结构、循环结构;()顺序结构:顺序结构很简单,从头到尾一句接着一句的执行下来,直到执行完最后一句;一般我们遇到的除了选择结构和循环结构外,都是顺序结构;()选择结构选择结构就是根据条件来判断执行哪些语句,如果给定的条件成立,就执行相应的语句,如果不成立,就执行另外一些语句。 语言中常用的选择结构主要有以下两种::引入关键字:; !!:引入关键字: !!()循环结构循环结构有一个循环体,循环体里是一段代码。对于循环结构来说,关键在于根据判断的结果,来决定循环体执行多少次; 循环使用最多,一般情况可以表示任何循环,和 循环均是当型循环,先判断,后执行。"#$ 属于直到型循环,先做循环再判断,程序用应用不多,程序中也没有体现。自增,自减符,、–、、%;符号在前表示的是:先做自增或者自减运算后以运算后的数值进行接下来的程序执行,符号在后表示的是:以当前值进行程序执行,执行结束后做自增自减运算进行下次程序执行。(在程序中可以体现) 循环中循环语句可以是单个语句、空语句也可以是复合语句;三个表达式可以是任意类型,其中的分号”&'不能省略。 (3) 请你简述 C 语言中的数据类型主要包括哪些?请给出至少 4 种数据类型关键字或定义形式。在 C语言中,为什么要定义变量的数据类型?在 语言中仅有 ( 种基本数据类型))整型、浮点型、指针和聚合类型(如数组、结构体等),其他类型由基本类型派生而来。()整型整型这一大类包括字符型、短整型、整型和长整型,均有有符号(*")和无符号(**")之分。类型 取值范围! +,*"! ),+,**"! +--* ),.,+,.,**"* +.---* ),.,+,.,**"* +.---**)(,(/.(,+(,(/.(,**"** +((.,-* 至少 . 位,** 至少 位。至于缺省的 * 究竟是 . 位还是 位,或者是其他值,则由编译器设计决定。通常这个选择的缺省值是这种机器最为自然(高效)的位数。同时你还应该注意到标准也没有规定这 个值必须不一样,如果某种机器的环境的字长是 位,而且没有什么指令能够更有效地处理更短的整型值,它可能把这- 2 -
个整型值都设定为 位。另外在定义 ! 型变量时,应尽量将数值控制在 **"! 与 *"!的交集,这样可以确保程序有更好的可移植性。()浮点型浮点家族包括 0," 和 *" 类型。12 标准规定 *"至少至少和 " 一样长,而 " 至少和 0 一样长。标准同时规定了一个最小范围,所有浮点类型至少能够容纳从 ), 到 , 之间的任何值。浮点数字面值在缺省情况下都是 " 类型的,除非它的后面跟一个 3 或 表示它是一个 *" 类型的值,或者跟一个 4 或 表示它是一个 0 类型的值。()指针数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量。在 语言中,允许用一个变量来存放指针,这种变量称为指针变量。指针变量的值就是某份数据的地址,这样的一份数据可以是数组、字符串、函数,也可以是另外的一个普通变量或指针变量。现在假设有一个 !类型的变量 !,它存储了字符565(122 码为十进制数 ,-),并占用了地址为 7的内存(地址通常用十六进制表示)。另外有一个指针变量 8,它的值为 7,正好等于变量 !的地址,这种情况我们就称 8指向了 !,或者说 8是指向变量 !的指针。定义指针变量与定义普通变量非常类似,不过要在变量名前面加星号 999,格式为:":89*&(聚合类型聚合数据类型能够同时存储超过一个的单独数据,! 语言提供了两种类型的聚合数据类型数组和结构。数组数组是相同类型的元素的集合,它的每个元素是通过下标引用来访问的。一维数组*;<&==声明可存储十个变量的一维数组;<&多维数组*;<;<&==声明一个 9 的二维数组*!;.<;/<;<&指针数组*98;<&99结构 99结构也是一些值的集合,这些值称为它的成员,但是一个结构的各个成员可能具有不同的类型。2.编程题(1)从键盘输入三个整数 a、b 和 c,按照由小到大的顺序输出#include<stdio.h>void main(){ int a,b,c,t; printf("请输入三个整数:a b c\n"); 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);- 3 -
}(2)编写一个程序实现从键盘输入三条边 a、b 和 c,若能构成三角形则输出其面积,否则输出不能构成三角形的提示信息“No triangle”。 三角形面积计算公式: area=√s( s−a )(s−b )( s−c),其中 s=a+b+c2#include<stdio.h>include<math.h>main(){ float a,b,c,area; printf("inputa,b,c:"); scanf("%f,%f,%f",&a,&b,&c); if(a+b>c&&a+c>b&&b+c>a) { s=(a+b+c)/2; area=(float)sqrt(s*(s-a)*(s-b)*(s-c)); printf("area=%f\n",area); } else { printf("No triangle"); }}(3) 程序的功能是:输入 n(n≥1),计算 1+(1+2)+ (1+2+3)+...+(1+2+3+…+n)的值,要求有输入输出提示。(4) 任意输入一个三位正整数,十位上的数字不动,将个位和百位上的数字交换,构成一个 新的正整数后输出。(例如:523 变为 325)(5) 编写程序计算函数f (x , y )=2 x+x + y√x + y(其中 x + y≠0)的 值,要求有输入输出提示,结果保留小数点后 3 位(6)写一个函数 * 用于计算字符串的长度,再写一个测试函数测试其功能。不允许使用 * 函数(7) 先编写一个函数 int fun(int m,int n)用于求两个正整数 m,n 的最大公约数。再编写一个测试程序从键盘上任意输入 2 个正的整数求出其最大公约数并输出。要求:程序中必须有相应的输入输出提示。>*!"?"@A*****#*& B*#*&*&$**&$**#**C**C*&8*D请输入两个正的整数之间用逗号隔开E*D&!*DB"B"DF*C*F*C*&8*D*C*B",*C*B"E*D*C**C*&8*DGH*!*"IB"E*D**C**C*&$3.阅读下列程序,按照要求回答下列问题>include <stdio.h>int fun(int n){int s=0,i; for(i=1;i<=n;i++)s=s+i; return s;}int main( ){ int i,n;int sum=0; printf("请输入一个正整数(n≥5):\n"); scanf("%d", &n); for(i=1;i<=n;i++) sum=sum+fun(i); printf("1+(1+2)+(1+2+3)+ ......+(1+2+3+...+%d)=%d\n",n,sum);}(1)上述程序中函数 fun 的功能是什么?函数 * 的功能是实现对 到 *之和的累加。即 @@@@@*(2)依据函数 fun 的功能画出其流程图。- 4 -
(3) 当输入 n 的值为 5 时,其输出结果是什么?输入 * 值为 - 时,输出结果为......@@@--- 5 -