[0039]C语言程序设计西南机考答案
发布时间:2023-09-20 10:09:08浏览次数:67西南大学网络与继续教育学院课程考试试题卷类别:网教 课程名称【编号】: C 语言程序设计 【0039】 B 卷大作业 满分:100 分 一、大作业题目1.简述题(1)“构建程序设计的思想和方法、提升阅读程序能力和编写程序能力”是 C 语言程序设计的课程学习目标。请简要说明你在 C 语言程序设计学习过程中学习了哪些内容?通过 C 语言的学习,你有哪些收获和体会?要求:回答问题真实真情表达(10 分)答:经过一个学期的 C 语言学习,大体算是在这个编程语言上入了门,能够通过一些代码解决特定的问题。感觉 C 原因编程不只是学习知识这么简单,更多给我的感受是它在潜移默化中培养了人的一种能力,用自己的话来讲就是一种”代码能力“。对于同一个问题,让大家去解开答案,可能经过一些纸笔的运算都能得出结果,但是如何把这个问题转化成代码,这就是一种能力,而仅仅是将问题转换成代码,这是较为浅层次的能力,更深层的便是通过优化代码让程序运行时间缩短以及减少可能出现的 bug。如果只是单纯的学习知识,像是背英语语法知识那样去学习一门编程语言、背下代码规则(当然熟识理论知识是必须的),这样可能也可以初步懂得这门语言,但是在深入上却较为困难。我始终觉得学习编程,重点在于培养写代码的能力。就拿写文章来说,对于文字的认识,可能大家都懂,但是给定一个题目,写出来的文章质量就各有差异,有的人文章平淡无奇,而有的人的却是宏篇大论。编程也是如此,懂得了理论知识,就像是认识了文字,但是优秀的作家能将这些文字巧妙地组合在一起形成佳作,优秀的程序员也是如此,能将大家都懂得的理论知识以一种更为巧妙的方法通过代码展示出来并使之可执行。所以,学习编程我始终认为我们每个人都应该注重写代码能力的培养。而这种培养可能需要无数次重复的练习,在获取这种能力的途中,可能有一部分人会觉得枯燥无味,因为始终看到的只是在黑色框框里输出一些数字以及字符串。刚开始的自己也是如此,但是后来那种解决问题的成就感慢慢克服了这种困难。给自己以有难度但又不超过自己能力范围的题目来练习,这样可能能逐步培养起兴趣。当然,因为每个人程度的不同,要找到适合自己能力范围的题目本身就是一种困难。以己之愚见,作为在校学生,老师的题目首先就是不错的选择,因为根据教学进度,老师都会给出不同的题目,而在此题目中必不乏难题存在,此时 google 一下,你可能就懂得了怎么去选择有难度又在自己能力范围的题目了。(2)简述算法、程序设计语言与程序的区别与联系。算法的特征有哪些?算法的描述方法有哪些?答:算法概念: 在数学上,现代意义上的“算法”通常是指可以用计算机来解决的某一类问题是程序或步骤,这些程序或步骤必须是明确和有效的,而且能够在有限步之- 1 -
内完成。算法的特点: (1)有限性:一个算法的步骤序列是有限的,必须在有限操作之后停止,不能是无限的. (2)确定性:算法中的每一步应该是确定的并且能有效地执行且得到确定的结果,而不应当是模棱两可. (3)顺序性与正确性:算法从初始步骤开始,分为若干明确的步骤,每一个步骤只能有一个确定的后继步骤,前一步是后一步的前提,只有执行完前一步才能进行下一步,并且每一步都准确无误,才能完成问题. (4)不唯一性:求解某一个问题的解法不一定是唯一的,对于一个问题可以有不同的算法. (5)普遍性:很多具体的问题,都可以设计合理的算法去解决,如心算、计算器计算都要经过有限、事先设计好的步骤加以解决。描述算法的方法通常有三种:(1)自然语言描述算法(2)流程图描述算法(3)伪代码描述算法算法、程序设计语言与程序的区别与联系:区别:算法(Algorithm)就是对解决某问题所采用的方法和步骤的描述。程序设计语言设计上就是一组符号及规则的集合。它是由语法、语义、语用三个要素组成。一个程序一般包括数据类型和算法两个方面的内容。其中数据类型(即数据结构)是对程序中的数据进行描述,指定数据在程序中的类型和数据的组织形式,它决定了数据的在内存中所占的存储空间和数据在内存中存放形式。而算法是对程序中数据的操作描述,是解决“做什么”和“怎么做”的问题,源程序中的操作语句就是算法的体现。正如著名计算机科学家沃思(Nikiklaus Wirth)所提出的观点:程序=数据结构+算法。联系:程序设计语言是编写程序实现算法的语言工具。(3)在 C 语言中程序中有哪三种基本结构?分别简述这三种基本结构内涵。实现这三种基本结构的主要语句有哪些?答:在 C 语言程序中,一共有三种程序结构:顺序结构、选择结构(分支结构)、循环结构;(1)顺序结构:顺序结构很简单,从头到尾一句接着一句的执行下来,直到执行完最后一句;一般我们遇到的除了选择结构和循环结构外,都是顺序结构;(2)选择结构选择结构就是根据条件来判断执行哪些语句,如果给定的条件成立,就执行相应的语句,如果不成立,就执行另外一些语句。C 语言中常用的选择结构主要有以下两种:if else:引入关键字:if else else if;switch case:引入关键字:switch case break(3)循环结构循环结构有一个循环体,循环体里是一段代码。对于循环结构来说,关键在于根据判断的结果,来决定循环体执行多少次;for 循环使用最多,一般情况可以表示任何循环,和 while 循环均是当型循环,先判断,后执行。do{}while 属于直到型循环,先做循环再判断,程序用应用不多,程序中也没有体现。自增,自减符,++a、–a、a++、a–;符号在前表示的是:先做自增或者自减运算- 2 -
后以运算后的数值进行接下来的程序执行,符号在后表示的是:以当前值进行程序执行,执行结束后做自增自减运算进行下次程序执行。(在程序中可以体现)for 循环中循环语句可以是单个语句、空语句也可以是复合语句;三个表达式可以是任意类型,其中的分号”;”不能省略。2..编程题(1) 编写一个函数计算函数 f(x,y)=x3+y+con(x)的 值,要求有输入输出提示,结果保留小数点后 3 位。(2)输出 100-500 之间的能够被 3 整除的所有数,并求出这些满足条件数的平均值输出。#include<stdio.h>intmain(){inti,sum=0,n=0;doublep;for(i=100;i<500;i++)if(i%3==0){sum+=i;n++; printf("能被 3 整除的数为%d\n",i);}p=(double)sum/n;printf("和为%d,平均值为%lf\n",sum,p);return0;}(3)编写一个函数 fun 求出分数序列21,32,53,85,138,2113, .. .的前 n 项之和,再写一主函数测试其功能。(4) 编一程序找出所有三位数的"水仙花数”并在屏幕上输出。其中"水仙花数”是指一个三 位数 , 其 各 位 数 字 立 方 和 等 于 该 数 本 身 。 例 如 : 153 是 一 " 水 仙 花 数 ” , 因 为153=13+53+33。#include <stdio.h>int main(){int i, j, k, count = 0; //声明计数器变量printf("找到的水仙花数有:\n"); //输出提示信息for (i = 1; i <= 9; i++) //百位从 1~9 中枚举for (j = 0; j <= 9; j++) //十位从 0~9 中枚举for (k = 0; k <= 9; k++) //个位从 0~9 中枚举{if (i * 100 + j * 10 + k == i * i * i + j * j * j + k* k * k) //判断是否为水仙花{printf("%d ", i * 100 + j * 10 + k); //输出一个水仙花数count++; //统计水仙花数个数if (count % 5 == 0) //每五个数一行printf("\n");}}printf("\n 共有%d 个水仙花数\n", count);return 0;}- 3 -
(5)写一个函数将一个字符串中的大写字母转换为小写,再写一个测试函数测试其功能 。不允许使用 strlwr 函数#include stdio.h void convert(char*str){for(int i=0;str[i]!='\0';i++){if(str[i]>='A'&&str[i]<='Z'){str[i]=str[i]-'A'+'a';}}}int main(){charstr[20]=aZcdABxDEF123;convert(str);printf(%s\n,str);return0;}(6)从键盘上任意输入 20 个 2 位或 3 位整数存放在 array 数组中,找出 array 数组中的能够被 2 整除的数存放在数组 b 中,并对 b 数组的值按升序排列。要求:(a)编写一个 sort(int word,inta[])函数实现排序功能。(b)除 sort 函数外,其余在主函数内完成,但主函数必须调用 sort 函数实现排序功能。(c)程序必须有输入输出提示。3. 依据下列提供的程序回答问题#include <stdio.h>int f(int m,int n){ int r; while(r=m%n) { m=n; n=r; } return(n);}int main(){ int int_num1, int_num2; printf("请输入两个正的整数(之间用逗号隔开):\n "); scanf("%d,%d",&int_num1,&int_num2); printf("int_num1= %d,int_num2= %d\n",int_num1,int_num2); printf("The maximun common divisor is %d\n",f(int_num1,int_num2));}(1)上述提供程序中,函数 f 的功能是什么? 答:函数 f 的功能是求两个数的最大公约数。(2)请依据提供的函数 f 代码所表示的算法内涵画出其中的传统流程图或 N-S 图或采用自然语言描述 fun 代码所表示的算法。答:辗转相除法(欧几里德法) C 语言中用于计算两个正整数 a,b 的最大公约数,采用函数嵌套调用形式进行求两个数的最大公约数。其算法过程为:前提:设两数为 a,b 设其中 a 做被除数,b 做除数,temp 为余数Steps:大数放 a 中,小数放 b 中;求 a/b 的余数;若 temp=0 则 b 为最大公约数;如果 temp!=0 则把 b 的值给 a,temp 的值给 a;返回第二步。流程图:- 4 -
(3)在 VC6.0 环境下,运行上述程序时,若输入的数据序列为 36,48 其输出结果是什么?答:输出结果如下int_num1= 36,int_num2= 48The maximun common divisor is 12二、大作业要求大作业共需要完成 3 个大题:第 1 题,满分 30 分;第 2 题(1)-(5)任选两题完成,各 15 分,(6)题必做,10 分,满分 40 分;第 3 题(1)-(3)必做,满分 30 分。- 5 -