西南[0039]《C语言程序设计》答案
发布时间:2023-09-29 08:09:12浏览次数:45西南大学网络与继续教育学院课程考试试题卷类别:网教 专业:算机科学与技术 课程名称【编号】: C 语言程序设计 【0039】 A 卷大作业 满分:100 分 一、 大作业题目1. 简要回答问题(30 分)(1)构建程序设计思想和方法是学习 C 语言程序设计的重要内容,也是提升阅读程序能力和编写程序能力的保障。请简要说明你在 C 语言学习过程中做了哪些工作(譬如采用了哪些方法和途径来学习?学习了哪些内容?)?通过 C 语言的学习,你有何感受和体会?要求回答问题时必须真实真情表达(10 分)答:经过一个学期的 C 语言学习,大体算是在这个编程语言上入了门,能够通过一些代码解决特定的问题。感觉 C 原因编程不只是学习知识这么简单,更多给我的感受是它在潜移默化中培养了人的一种能力,用自己的话来讲就是一种”代码能力“。对于同一个问题,让大家去解开答案,可能经过一些纸笔的运算都能得出结果,但是如何把这个问题转化成代码,这就是一种能力,而仅仅是将问题转换成代码,这是较为浅层次的能力,更深层的便是通过优化代码让程序运行时间缩短以及减少可能出现的 bug。如果只是单纯的学习知识,像是背英语语法知识那样去学习一门编程语言、背下代码规则(当然熟识理论知识是必须的),这样可能也可以初步懂得这门语言,但是在深入上却较为困难。我始终觉得学习编程,重点在于培养写代码的能力。就拿写文章来说,对于文字的认识,可能大家都懂,但是给定一个题目,写出来的文章质量就各有差异,有的人文章平淡无奇,而有的人的却是宏篇大论。编程也是如此,懂得了理论知识,就像是认识了文字,但是优秀的作家能将这些文字巧妙地组合在一起形成佳作,优秀的程序员也是如此,能将大家都懂得的理论知识以一种更为巧妙的方法通过代码展示出来并使之可执行。所以,学习编程我始终认为我们每个人都应该注重写代码能力的培养。而这种培养可能需要无数次重复的练习,在获取这种能力的途中,可能有一部分人会觉得枯燥无味,因为始终看到的只是在黑色框框里输出一些数字以及字符串。刚开始的自己也是如此,但是后来那种解决问题的成就感慢慢克服了这种困难。给自己以有难度但又不超过自己能力范围的题目来练习,这样可能能逐步培养起兴趣。当然,因为每个人程度的不同,要找到适合自己能力范围的题目本身就是一种困难。以己之愚见,作为在校学生,老师的题目首先就是不错的选择,因为根据教学进度,老师都会给出不同的题目,而在此题目中必不乏难题存在,此时 google 一下,你可能就懂得了怎么去选择有难度又在自己能力范围的题目了。(2)构建算法是编写代码的重要环节,请问什么是算法?算法有哪些主要特征?算法的描述方法有哪些?(12 分)答:算法概念: 在数学上,现代意义上的“算法”通常是指可以用计算机来解决的某一类问题是程序或步骤,这些程序或步骤必须是明确和有效的,而且能够在有限步之内完成。算法的特点: (1)有限性:一个算法的步骤序列是有限的,必须在有限操作之后停止,- 1 -
不能是无限的. (2)确定性:算法中的每一步应该是确定的并且能有效地执行且得到确定的结果,而不应当是模棱两可. (3)顺序性与正确性:算法从初始步骤开始,分为若干明确的步骤,每一个步骤只能有一个确定的后继步骤,前一步是后一步的前提,只有执行完前一步才能进行下一步,并且每一步都准确无误,才能完成问题. (4)不唯一性:求解某一个问题的解法不一定是唯一的,对于一个问题可以有不同的算法. (5)普遍性:很多具体的问题,都可以设计合理的算法去解决,如心算、计算器计算都要经过有限、事先设计好的步骤加以解决。描述算法的方法通常有三种:(1)自然语言描述算法(2)流程图描述算法(3)伪代码描述算法(3)请简述程序设计语言与程序的区别与联系。在 C 语言中数据类型丰富,请你至少给出4 种以上的数据类型实例。(8 分)答:区别:算法(Algorithm)就是对解决某问题所采用的方法和步骤的描述。程序设计语言设计上就是一组符号及规则的集合。它是由语法、语义、语用三个要素组成。一个程序一般包括数据类型和算法两个方面的内容。其中数据类型(即数据结构)是对程序中的数据进行描述,指定数据在程序中的类型和数据的组织形式,它决定了数据的在内存中所占的存储空间和数据在内存中存放形式。而算法是对程序中数据的操作描述,是解决“做什么”和“怎么做”的问题,源程序中的操作语句就是算法的体现。正如著名计算机科学家沃思(Nikiklaus Wirth)所提出的观点:程序=数据结构+算法。联系:程序设计语言是编写程序实现算法的语言工具。主要数据类型有:C 语言包括基本类型(整型、字符型、浮点型(单、双精度型)枚举类型)、构造类型(数组、结构体、共用体类型)、指针类型、空类型。2.编程题(40 分)(1) 编写一个函数计算函数 f(x,y)=x3+y2+sin(x)的值,要求有输入输出提示,结果保留小数点后 3 位。答:#include <stdio.h> #include <math.h> void main() {double x, y,result;printf("请分别输入 x,y 的值:"); scanf("%lf%lf",&x,&y);result = x*x*x + y*y + sin(x); printf("函数 f(%.0lf,%.0lf)=%.3lf\n", x, y, result); }(2)编写一个程序计算下列公式的前 n 项的和。s=1∗322+3∗542+5∗762+. . .+(2∗n+1 )∗(2∗n − 1)(2∗n)2答:#include <stdio.h>void fun(int n){int a, b, c, k; double s;s = 0.0; a = (2*n+1)*(2*n-1); b = (2*n)* (2*n);for ( k = 1; k <= n; k++ ) {s = s + (Double)a / b;c = a; a = a + b; b = c;}return s;}main( ){- 2 -
int n = 5;printf( "\nThe value of function is: %lf\n", fun ( n ) );}(3)写一个函数统计一个字符串中数字字符的个数,再写一个测试主函数测试其功能。答:#include<stdio.h>#include<string.h>void count(char *s, int *a, int *b, int *c, int *d){*a = *b = *c = *d = 0;while(*s){if('A' <= *s && *s <= 'Z' || 'a' <= *s && *s <= 'z')(*a)++;else if('0' <= *s && *s <= '9')(*b)++;else if(*s == ' ')(*c)++;else(*d)++;s++;}} main(){char s[100];int lc, dc, sc, oc;printf("输入字符串:\n");gets(s);count(s, &lc, &dc, &sc, &oc);printf("字母:%d\n", lc);printf("数字:%d\n", dc);printf("空格:%d\n", sc);printf("其它:%d\n", oc);return 0;}(4)输出 200-700 之间能够被 5 或 7 整除的所有整数,并计算满足条件的所有整数的平均值输出。long sum(viod){ long i,temp=0; for(i=200;i<501;i++) if(i%7==0) temp=temp+i; return temp;}(5) 利用随机函数产生 30 个 200-300 的随机整数存放在数组 a 中,找出其中的偶数放在数组 b 中,并对 b 数组的值按降序排列。提示:随机函数为 rand(),随机数发生器的初始化函数为 srand();要求:(1)程序中分别输出所有随机整数、所有求出的偶数以及排序前后的值。(2)要求用模块化方法实现。(3)程序必须有输入输出提示。答:#include<stdio.h> #include <stdlib.h> #include<time.h> void main() { int a[100]; int b[100]; int i=0,j=0,k,temp; srand(time(0)); - 3 -
for(i=0;i<100;i++) { a[i]=rand()%89+10; if(a[i]%2==0) b[j++]=a[i]; k=j; } for(i=0;i<k;i++) for(j=i+1;j<k;j++) if(b[i]<b[j]) { temp=b[i]; b[i]=b[j]; b[j]=temp; } i=0; for(j=0;j<k;j++) { printf("%d ",b[j]); i++; if(i%10==0) printf("\n"); } printf("\n"); }3.依据下列提供的程序回答问题(30 分)#include "stdio.h"double fun(int a[],int m){int i;double sum=0; for(i=0;i<m;i++)sum+=a[i]; return(sum/m);}void main(){int x, count = 0,a[300];for (x = 1;x <= 20;x++)if (x%2==0) {a[count]=x;count++;}printf("\n 这些偶数的平均值是:%6.0lf\n", aver(a,count));}(1)上述提供程序中,函数 fun 的功能是什么? (2)请依据上述程序思想,画出其中的传统流程图或 N-S 图。(3)在 VC6.0 环境下,运行上述程序时,其输出结果是什么?答案:(1)计算数列 a[]中,前 m 个数的平均数(2)(3)结果为:11- 4 -
二、大作业要求大作业共需要完成 3 个大题:第 1 题必做,满分 30 分;第 2 题(1)-(4)小题任选两题完成,各 15 分,(5)小题必做, 10 分,满分40 分;第 3 题(1)-(3)必做,满分 30 分。三、大作业提交方式(注:1、网络课程由网继院考务办在试题卷和管理系统中填写;2、面授课程由命题教师在试题卷上填写)- 5 -