ImageVerifierCode 换一换
格式:DOCX , 页数:134 ,大小:216.10KB ,
资源ID:9769481      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-9769481.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(西北农林科技大学历年C语言上机考试题.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

西北农林科技大学历年C语言上机考试题.docx

1、西北农林科技大学历年C语言上机考试题西北农林科技大学本科课程考试试题(卷)20142015学年C语言程序设计期末考试编程题专业班级: 命题教师:集体命题 审题教师:学生姓名: 学号: 考试成绩: 一、计算n个数倒数之和描述:编写程序计算(1+1/2+1/3+1/4+1/n)的结果,其中变量n从键盘输入,要求n是大于0的整数。输入:n输出:公式(1+1/2+1/3+1/4+1/n)的计算结果。输入样例:10输出样例:sum=2.928968提示:结果输出,请使用代码:printf(sum=%lf,sum);示例代码:#include int main( ) int i=1, n; do scan

2、f(%d,&n); while(n0); double sum=0; while (i y的值,要求函数原型为:int greater(int x, int y)。2、实现“小于”函数,该函数比较两个整型数的大小,并返回x y的值,要求函数原其函数原型为:int lessthan(int x, int y)。3、实现排序函数,排序函数依据传入的函数不同,实现整型数组的降序或者升序排序,要求函数原型为:void sort(int a, int n, int (*comp)(int, int)。注意:指定的3个函数原型不能有任何改动,包括其函数名称及形参列表等。4、本题目不限制排序算法,常用的选择

3、排序和冒泡排序流程图如下: 图(a)选择排序 图(b)冒泡排序 5、在main函数中,首先从键盘中输入6个整型数,然后利用函数指针指向不同的比较函数(大于或者小于函数),调用sort(a, N, comp)子函数实现升序以及降序功能,其中int (*comp )(int, int);用于声明函数指针comp 。6、结果输出,请使用代码:for (i=0; iN; i+) printf(%d , ); /请注意添加需要的代码printf(n); 输入:6个整型数输出:以降序和升序的形式输出6个整型数输入样例:14 17 100 23 89 45输出样例:100 89 45 23 17 1414

4、17 23 45 89 100示例代码:#include #define N 6int greater(int x, int y) return xy;int lessthan(int x, int y) return xy;void selection_sort(int a, int n, int (*comp)(int, int) int i, j; int temp, k; for (i = 0; i n-1; i+) k = i; for ( j = i+1; j n; j+) if (comp(aj, ak) k = j; if ( k != i ) temp = ai; ai =

5、ak; ak = temp; int main() int aN; int i; int (*fun)(int, int); for (i=0; iN; i+) scanf(%d, &ai); fun = greater; selection_sort(a, N, fun); for (i=0; iN; i+) printf(%d , ai); printf(n); fun = lessthan; selection_sort(a, N, fun); for (i=0; iN; i+) printf(%d , ai); printf(n); return 0;测试用例:用例输出结果-19 29

6、 28 0 28 1629 28 28 16 0 -19-19 0 16 28 28 2978 -12 -45 79 123 1123 79 78 1 -12 -45-45 -12 1 78 79 1231828 90 76 90 232 -101828 232 90 90 76 -10-10 76 90 90 232 182878 54 33 -18 07 7378 73 54 33 7 -18-18 7 33 54 73 78三、计算矩阵卷积描述:编程计算整型矩阵A和整型卷积核H的卷积(卷积核是大小为h_size的方阵,且行列数均为奇数,即h_sizeh_size的方阵),并输出结果。若计

7、算机内存不足,则直接终止程序并输出Not Enough Memory!。提示:卷积是一种用途很广的算法,其物理含义是:输出对输入的响应不仅与当前输入有关,往往还与以前的输入(邻域)有关,输出是这些输入的加权和。例如对于矩阵A中的某一点,用33卷积核进行卷积运算的过程如下图所示:(1)取出当前点P5的33邻域(必须与卷积核大小相同)的各个位置的值(左上、上、右上、左、当前值、右、左下、下、右下)。(2)分别与卷积核中的对应元素相乘,再求和,将计算结果为P5的新值,替换原位置的数据。(3)在卷积运算过程中,若当前点位于矩阵A的边缘时,将无法取得其邻域数据(二维数组超界),本题目要求不处理边缘数据,

8、保持原数据不变。(4)在卷积运算过程中,由于当前点的输出不仅与当前点的值有关,还与其邻域的值有关,因此不能将计算结果直接写回原矩阵,应该再申请一个与原矩阵大小一样的矩阵T,复制原数据到矩阵T,从A中取出数据并处理,处理结果写入T对应位置,运算结束后,矩阵T的内容即为卷积计算的结果。在程序设计中:1、矩阵A和卷积核H可用二维数组实现,其大小可变,需要使用动态内存分配,同时注意内存释放的问题(注意不能用C99变长数组)。2、二维数组的动态内存分配可采用两种方式实现:(1)先分配m个空间存储行地址,再为每一行分配n个空间存储整型数,二维数组第 i 行第 j 列元素对应为aij,此时内存空间不一定连续

9、。如:int *a, m = 3, n = 4, i;/先分配m个空间存储行地址a = (int *)malloc(m * sizeof(int *);/再为每一行分配n个空间存储整型数 for (i = 0; i m; i+) ai = (int *)malloc(n * sizeof(int);(2)采用大小为m * n的一维数组模拟二维数组,二维数组第 i 行第 j 列元素对应为ai * n + j,此时内存空间是连续的。如:int *a, m = 3, n = 4;a = (int *)malloc(m * n * sizeof(int);/二维数组第 i 行第 j 列元素对应为ai

10、* n + j3、设当前点的位置为P(x,y),则其33邻域为P (x-1,y-1)、P (x,y-1)、P (x+1,y-1)、P(x-1,y)、P(x,y)、P(x+1,y)、P(x-1,y+1)、P(x,y+1)、P(x+1,y+1),对于其它尺寸的卷积核,其令域定义以此类推, 得到各邻域元素的值的参考代码如下:/ 设卷积核的大小为h_sizefor(i = 0; i h_size; i+) for(j = 0; j h_size; j+) x_offset = i - h_size / 2; y_offset = j - h_size / 2; / 用P(x + x_offset, y

11、 + y_offset)便可以得到各邻域元素的值 4、内存不足提示信息的输出,请使用代码:printf(Not Enough Memory!n);结果输出,请使用代码:for(i = 0; I m; i+) for(j = 0; j n; j+) printf(%d , );/请注意添加需要的代码 printf(n); 输入:第1行输入2个整数,表示第1个矩阵的行数m1和列数n1。第2行到第m1+1行顺次输入m1*n1个整数,每行n1个整型元素,表示矩阵A的数据。第m1+2行输入1个整数,表示卷积核H的行数和列数m2(奇数)。第m1+3行到第m1+m2+2行顺次输入m2*m2个整数,每行m2个

12、整型元素,表示卷积核H的数据。 输出:卷积结果输入样例:4 4 -矩阵A的行数和列数1 1 1 1 -矩阵A的数据1 1 1 11 1 1 11 1 1 13 -卷积核H的大小1 1 1 -卷积核H的数据1 1 11 1 1输出样例:1 1 1 11 9 9 11 9 9 11 1 1 1示例代码:/*-* Copyright (c) 2010,西北农林科技大学信息学院计算机科学系* All rights reserved.* 文件名称:convolution.c* 文件标识:2014-1015学年度期末考试题3* 摘要: 实现void read_matrix(int *, int , int

13、); void output_matrix(int *, int , int); void convolution(int *, int *, int *, int , int, int); void destroy(int *, int); 函数。* 当前版本:1.0* 作者:耿楠* 完成日期:2015年1月9日* 取代版本:无* 原作者:无* 完成日期:无-*/#include #include #include / 读取矩阵void read_matrix(int *, int , int);/ 显示矩阵void output_matrix(int *, int , int);/ 计算卷

14、积void convolution(int *, int *, int *, int , int, int);/ 销毁矩阵void destroy(int *, int);int main() int m,n; int i, j; int h_size; int *a, *h, *t; / 读入矩阵行、列大小 scanf(%d%d, &m, &n); / 测试数据 / 分配原矩阵内存空间 /先分配m个空间存储行地址 a = (int *)malloc(m * sizeof(int *); if(a=NULL) printf(Not Enough Memory!n); return 2; /再为

15、每一行分配n个空间存储整型数 for (i = 0; i m; i+) ai = (int *)malloc(n * sizeof(int); if(ai=NULL) printf(Not Enough Memory!n); return 2; / 测试数据 for (i = 0; i m; i+) for(j = 0; j n; j+) scanf(%d, &aij); / 分配目的矩阵内存空间 /先分配m个空间存储行地址 t = (int *)malloc(m * sizeof(int *); /再为每一行分配n个空间存储整型数 for (i = 0; i m; i+) ti = (int

16、 *)malloc(n * sizeof(int); / 输出原数据 /output_matrix(a, m, n); / 读入卷积核尺寸 scanf(%d, &h_size); / 分配卷积核内存空间 /先分配m个空间存储行地址 h = (int *)malloc(h_size * sizeof(int *); /再为每一行分配n个空间存储整型数 for (i = 0; i h_size; i+) hi = (int *)malloc(h_size * sizeof(int); / 测试数据 for (i = 0; i h_size; i+) for(j = 0; j h_size; j+)

17、 scanf(%d, &hij); / 读入卷积核数据 /read_matrix(h, m, m); / 输出卷积核数据 /output_matrix(h, h_size, h_size); / 计算卷积 convolution(a, t, h, m, n, h_size); / 输出计算结果 output_matrix(t, m, n); / 销毁各矩阵 destroy(a, m); destroy(t, m); destroy(h, h_size); return 0;/-/ 原型:void destroy(int *matrix, int m)/ 功能:销毁通过二级指针申请的内存/ 参数

18、:/ int *matrix - 矩阵首地址(二级指针)/ int m - 矩阵行数/ 返回:无/ 作者:耿楠/ 日期:2015年1月9日/-void destroy(int *matrix, int m) int i; / 先销毁各行数据 for(i = 0; i m; i+) free(matrixi); / 销毁指针数组 free(matrix); / 指针赋空 matrix = NULL;/-/ 原型:void read_matrix(int *matrix, int m, int n)/ 功能:读入矩阵数据/ 参数:/ int *matrix - 矩阵首地址(二级指针)/ int m

19、 - 矩阵行数/ int m - 矩阵列数/ 返回:无/ 作者:耿楠/ 日期:2015年1月9日/-void read_matrix(int *matrix, int m, int n) int i, j; for(i = 0; i m; i+) for(j = 0; j n; j+) scanf(%d, &matrixij); /-/ 原型:output_matrix(int *matrix, int m, int n)/ 功能:输出矩阵数据/ 参数:/ int *matrix - 矩阵首地址(二级指针)/ int m - 矩阵行数/ int m - 矩阵列数/ 返回:无/ 作者:耿楠/ 日

20、期:2015年1月9日/-void output_matrix(int *matrix, int m, int n) int i, j; for(i = 0; i m; i+) for(j = 0; j n; j+) printf(%d , matrixij); printf(n); /-/ 原型:void convolution(int *matrix, int *result, int *kernel, int m, int n, int h_size)/ 功能:输出矩阵数据/ 参数:/ int *matrix - 源矩阵首地址(二级指针)/ int *result - 结果矩阵首地址(二

21、级指针)/ int *kernel - 卷积核矩阵首地址(二级指针)/ int m - 矩阵行数/ int m - 矩阵列数/ int h_size - 卷积核大小(h_sizeh_size的矩阵)/ 返回:无/ 作者:耿楠/ 日期:2015年1月9日/-void convolution(int *matrix, int *result, int *kernel, int m, int n, int h_size) / 控制矩阵循环 int x, y; / 控制卷积核循环 int i, j; / 取邻域数据时的位置偏移量 int x_offset, y_offset; / 计算卷积和 int

22、sum; / 复制矩阵 for(i = 0; i m; i+) / 利用memcpy()函数复制每行的整行数据 memcpy(void*)resulti, (void*)matrixi, n * sizeof(int); / 计算卷积(h_size / 2为无法处理的边缘数据行数和列数) for(x = h_size / 2; x m - h_size / 2; x+) for(y = h_size / 2; y n - h_size / 2; y+) / 卷积结果赋0 sum = 0; for(i = 0; i h_size; i+) for(j = 0; j h_size; j+) / 计

23、算取邻域数据时的位置偏移量 x_offset = i - h_size / 2; y_offset = j - h_size / 2; / 计算卷积 sum = sum + matrixx + x_offsety + y_offset * kernelij; / 将计算结果写入目标矩阵 resultxy = sum; 测试用例:用例输出结果4 41 1 1 11 1 1 11 1 1 11 1 1 131 1 11 1 11 1 11 1 1 11 9 9 11 9 9 11 1 1 14 4 3 4 5 65 6 7 87 8 9 109 10 11 123 1 2 34 5 67 8 93

24、 4 5 65 312 357 87 402 447 109 10 11 125 52 2 2 2 22 2 2 2 22 2 2 2 22 2 2 2 22 2 2 2 231 1 11 1 11 1 12 2 2 2 22 18 18 18 22 18 18 18 22 18 18 18 22 2 2 2 28 82 2 2 2 2 2 2 22 2 2 2 2 2 2 22 2 2 2 2 2 2 22 2 2 2 2 2 2 22 2 2 2 2 2 2 22 2 2 2 2 2 2 22 2 2 2 2 2 2 22 2 2 2 2 2 2 251 1 1 1 11 1 1 1 11

25、 1 1 1 11 1 1 1 11 1 1 1 12 2 2 2 2 2 2 22 2 2 2 2 2 2 22 2 50 50 50 50 2 22 2 50 50 50 50 2 22 2 50 50 50 50 2 22 2 50 50 50 50 2 22 2 2 2 2 2 2 22 2 2 2 2 2 2 2210000000 210000000Not Enough Memory!西北农林科技大学本科课程考试试题(卷)20142015学年C语言程序设计期末考试编程题(补考)专业班级: 命题教师:集体命题 审题教师:学生姓名: 学号: 考试成绩: 一、计算数列的和描述:数列的定义如下,数列的第一

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2