2012程序设计考试题1

更新时间:2024-01-11 01:30:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

━━━━━━━━━━━━━━━━━━ 一、程序设计 共12题 (共计100分) ━━━━━━━━━━━━━━━━━━

第1题 (10.0分) 题号:527

/*------------------------------------------------ 【程序设计】

-------------------------------------------------- 题目:编写递归函数Acm(m,n)实现如下图所示的Acm函 数,其中m、n为正整数。例如:Acm(2,1)=5, Acm(3,2)=29。

/ n+1 (m=0) |

Acm(m,n)=| Acm(m-1,1) (n=0) |

\\ Acm(m-1,Acm(m,n-1)) (m>0,n>0)

-------------------------------------------------- 注意:仅在标有\和\的注释行之间补充填 写代码。请勿改动主函数main和其它任何已有内 容。

------------------------------------------------*/ #include #include using namespace std; void grading();

/*********Program*********/ int Acm(int m,int n)

{ }

if(m==0) return n+1; if(n==0) return Acm(m-1,1); return Acm(m-1,Acm(m,n-1));

/********* End *********/

int main() {

cout<<\ cout<<\

//以下忽略阅读 grading(); //忽略阅读结束 return 0; }

//以下忽略阅读 void grading() {

int m,n,i,j;

fstream infile, outfile;

infile.open (\ outfile.open(\ for (i=0;i<10;i++) {

infile>>m>>n;

outfile<

infile.close(); outfile.close(); }

答案:int Acm(int m,int n) { }

第2题 (10.0分) 题号:524

/*----------------------------------------------- 【程序设计】

-------------------------------------------------

if(m==0) return n+1; if(n==0) return Acm(m-1,1); return Acm(m-1,Acm(m,n-1));

题目:设计函数int digit(int num,int k);返回整数 num从右边开始的第k位数字的值。 注:如果k大于num的位数,则返回0。 要求:num位数小于10位。 例如:digit(4647,3)=6 digit(23523,7)=0

------------------------------------------------- 注意:部分源程序给出如下。请勿改动主函数main和 其它函数中的任何内容,仅在*Program*和*End* 所标记的区域内完成题干要求的函数功能。 -------------------------------------------------*/

#include #include using namespace std; int grading();

/*********Program*********/

int digit(int num,int k) for(i=0;i

num=num/10;

return num

/********* End *********/

int main() {

cout<<\ cout<<\ //忽略阅读 grading(); //忽略阅读结束

return 0; }

//以下忽略阅读 int grading() {

int m,n;

fstream infile, outfile;

infile.open (\ outfile.open(\

for (int i=0;i<3;i++) {

infile>>m; infile>>n;

outfile<

infile.close(); outfile.close(); return 0; } 答案:

int digit(int num, int k) { }

第3题 (10.0分) 题号:515

/*------------------------------------------------ 【程序设计】

--------------------------------------------------

题目:编写函数fun,将字符串s中所有小写字母改写成 大写字母,其它字符保持不变。

-------------------------------------------------- 注意:部分源程序给出如下。请勿改动主函数main和其它 函数中的任何内容,仅在函数的花括号中填入所编 写的若干语句。

for (int i=0;i

num = num/10;

return num;

------------------------------------------------*/

#include #include using namespace std;

void fun(char s[]) {

/**********Program**********/

for (int i=0; i

int grading(); int main() {

char t[20]=\

fun(t); cout<

//忽略阅读

grading(); //忽略阅读结束

return 0; }

//以下忽略阅读 int grading() {

int i; char s[800];

ifstream ifile;

if (s[i]>='a' && s[i]<='z')

s[i]=s[i]-'a'+'A';

/********** End **********/

ofstream ofile;

ifile.open (\ ofile.open (\

for (i=0;i<5;i++) {

ifile>>s; fun(s);

ofile<

ifile.close(); ofile.close(); return 0; }

答案: for (int i=0; i

第4题 (10.0分) 题号:260

/*------------------------------------------------ 【程序设计】

--------------------------------------------------

题目:程序中的函数inv对数组m中的数据进行翻转转换, 即将数组中第一个数和最后一个数交换、第二个数 和倒数第二个数交换,依此类推。

-------------------------------------------------- 注意:部分源程序给出如下。请勿改动主函数main和其它 函数中的任何内容,仅在函数的花括号中填入所编 写的若干语句。

------------------------------------------------*/

#include #include

if (s[i]>='a' && s[i]<='z')

s[i]=s[i]-'a'+'A';

using namespace std; int grading();

//len传递数组m的元素个数: void inv(int m[], int len) {

/**********Program**********/

/********** End **********/ }

int main() {

int x[10] = {1, 2, 3 ,4, 5, 6, 7, 8, 9, 10};

inv(x, 10);

for(int k=0;k<10;k++) cout<

//忽略阅读

grading(); //忽略阅读结束

return 0; }

//以下忽略阅读 int grading() {

int n[100];

fstream infile,outfile; int k;

infile.open(\ outfile.open(\ for(k=0;k<10;k++) infile>>n[k]; inv(n,10); for(k=0;k<10;k++)

outfile<>n[k]; inv(n,8); for(k=0;k<8;k++)

outfile<

答案: for (int i=0;i

第5题 (10.0分) 题号:532

/*------------------------------------------------ 【程序设计】

--------------------------------------------------

题目:完成两个area函数的编写,一个函数根据半径r计算 圆的面积并返回,一个根据边长a和b计算矩形的面 积并返回。

{ }

int tmp = m[i]; m[i] = m[len-1-i]; m[len-1-i] = tmp;

-------------------------------------------------- 注意:仅在标有\和\的注释行之间补充填写 代码。请勿改动主函数main和其它任何已有内容。 ------------------------------------------------*/

#include #include using namespace std; int grading(); #define PI 3.1415926

double area(double r); //圆面积的计算函数声明

double area(double a, double b); //矩形面积的计算函数声明 int main() {

double a,b,r;

cout<<\ cin>>r;

cout<<\ cin>>a>>b;

cout<<\

cout<<\ //忽略阅读 grading(); //忽略阅读结束 return 0; }

/*********Program*********/

/********* End *********/

//忽略阅读 int grading() {

double a,b,c;

fstream infile, outfile;

infile.open (\ outfile.open(\ for (int i=0;i<8;i++) {

infile>>a>>b>>c;

outfile<

infile.close(); outfile.close(); return 0; }

//忽略阅读结束

答案:double area(double r) { }

double area(double a, double b) { }

第6题 (8.0分) 题号:15

/*------------------------------------------------ 【程序设计】

--------------------------------------------------

题目:完成函数cal的编写,该函数计算数组array中len个 整数的正数个数、负数个数和平均值。并分别存储 到全局变量pos、neg和ave中。

-------------------------------------------------- 注意:仅在标有\和\的注释行之间补充填写 代码。请勿改动主函数main和其它任何已有内容。 ------------------------------------------------*/ #include

return a*b; return PI*r*r;

#include using namespace std; int pos,neg; double ave;

void cal(int array[], int len); int grading(); int main() {

int a[12] = {1,2,3,4,-5,-2,-1,-4,0,3,2,1}; cal(a,12);

cout<<\ cout<<\ cout<<\ //忽略阅读 grading(); //忽略阅读结束 return 0; }

void cal(int array[], int len) {

/**********Program**********/

/********** End **********/ }

//以下忽略阅读 int grading() {

int a[100],i,j=0; fstream infile, outfile;

infile.open (\ outfile.open(\

for (i=0;i<100;i++) {

infile>>a[i]; }

for (i=0;i<9;i++) {

cal(a+j, j+10);

outfile< infile.close(); outfile.close(); return 0; }

答案: pos = 0;

第7题 (8.0分) 题号:647

/*------------------------------------------------ 【程序设计】

--------------------------------------------------

题目:完成函数char *delc(char *s, char c);的编写, 该函数去掉字符串s中的字符c,并将新得到的字符 串返回。

neg = 0; ave = 0;

for(int i=0;i

ave = ave/len;

if(array[i]>0)

pos++; neg++;

if(array[i]<0) ave += array[i];

-------------------------------------------------- 注意:仅在标有\和\的注释行之间补充填 写代码。请勿改动主函数main和其它任何已有内 容。

------------------------------------------------*/ #include #include #include using namespace std; char *delc(char *s, char c); void grading();

char *delc(char *s, char c) {

/**********Program**********/

/********** End **********/ }

int main() {

char s[100] = \ cout<

//以下忽略阅读 void grading() {

int i;

char s[100],c = 'a'; fstream infile,outfile;

infile.open(\ outfile.open(\ for (i=0;i<10;i++) {

infile>>s>>c;

outfile<

infile.close(); outfile.close(); }

答案: char *p;

第8题 (8.0分) 题号:640

/*------------------------------------------------ 【程序设计】

--------------------------------------------------

题目:下面的函数ave求三个数的平均值并返回,完成该 函数的编写。

-------------------------------------------------- 注意:部分源程序给出如下。请勿改动主函数main和其它 函数中的任何内容,仅在函数的花括号中填入所编 写的若干语句。

------------------------------------------------*/

#include #include using namespace std;

while (p = strchr(s,c)) { }

return s;

strcpy(p,p+1);

void grading();

float ave(int a, int b, int c) {

/**********Program**********/

/********** End **********/ }

int main() {

cout<<\的平均值是:\

//忽略阅读

grading(); //忽略阅读结束

return 0; }

//以下忽略阅读 void grading() {

int a,b,c,i;

fstream infile,outfile;

infile.open(\ outfile.open(\ for (i=0;i<10;i++) {

infile>>a>>b>>c;

outfile<<(int)(ave(a,b,c)*100)<

infile.close(); outfile.close(); }

答案://注意结果需要是浮点数,防止整除效果的发生:

第9题 (7.0分) 题号:12

/*------------------------------------------------ 【程序设计】

--------------------------------------------------

题目:完成函数sum_fac的编写,该函数求1!+2!+3!+…+n!。 其参数n为正整数。

-------------------------------------------------- 注意:仅在标有\和\的注释行之间补充填写 代码。请勿改动主函数main和其它任何已有内容。 ------------------------------------------------*/ #include #include using namespace std; void grading();

double sum_fac(int n) {

/**********Program**********/

/********** End **********/ return result; }

int main()

float m = (a+b+c)/3.0; return m;

{

int n; double result;

cout<<\输入整数n:\ cin>>n;

result = sum_fac(n);

cout<<\结果为:\ //忽略阅读 grading(); //忽略阅读结束 return 0; }

//以下忽略阅读 void grading() {

int n; double result; fstream ifile, ofile;

ifile.open (\ ofile.open (\ for (int i=0;i<8;i++) {

ifile>>n;

result=sum_fac(n); ofile<

ifile.close(); ofile.close(); }

答案: int jch=1;

double result=1; for(int i=2;i<=n;i++) {

jch*=i; result+=jch;

}

第10题 (7.0分) 题号:652

/*------------------------------------------------ 【程序设计】

--------------------------------------------------

题目:某个公司采用公用电话传递数据,数据是四位的整 数,在传递过程中是加密的。加密规则如下:每位 数字都加上5,然后用和除以10的余数代替该数字, 再将第一位和第四位交换,第二位和第三位交换 。 写一个函数实现这个算法,函数原型是 int changeinfo(int info)

--------------------------------------------------

注意:部分源程序给出如下。请勿改动主函数main和其它 函数中的任何内容,仅在注释形式标识Program和 End之间填入所编写的若干语句。

---------------------------------------------------*/

#include #include using namespace std; void grading();

/**********Program**********/

/********** End **********/ int main() {

cout<<\原数为2348,加密后为:\

//忽略阅读 grading(); //忽略阅读结束 return 0; }

//忽略阅读 void grading() {

int i;

ifstream rf(\ ofstream wf(\ int info; for (i=0;i<8;i++) {

rf>>info;

wf<

rf.close(); wf.close(); }

//忽略阅读结束

答案:int changeinfo(int info) {

int a[4]; a[0]=info; a[1]=info0/10; a[2]=info00/100; a[3]=info/1000; for(int i=0;i<=3;i++) { a[i]+=5;a[i]%=10;}

for( i=0;i<=3/2;i++) {

int t=a[i];

a[i]=a[3-i]; a[3-i]=t; }

第11题 (6.0分) 题号:655

/*------------------------------------------------ 【程序设计】

--------------------------------------------------

题目:写一个函数,其返回值类型为如下定义的MyTime, 该函数将以秒为单位输入的一个时间值,转化成 时、分、秒(即转换为\几小时几分几秒\的形式), 其结果以结构体形式返回。结构体MyTime定义如下, struct MyTime {

int hh; int mm; int ss; }

成员变量hh,mm,ss分别表示时、分、秒。

--------------------------------------------------

注意:部分源程序给出如下。请勿改动主函数main和其它 函数中的任何内容,仅在注释形式标识Program和 End之间填入所编写的若干语句。

---------------------------------------------------*/

#include #include

}

return a[0]+a[1]*10+a[2]*100+a[3]*1000;

using namespace std; void grading();

/**********Program**********/

/********** End **********/

int main() {

cout<<\秒转化后为:\

cout<

//忽略阅读开始 grading(); //忽略阅读结束

return 0; }

//以下忽略阅读 void grading() {

ifstream rf(\ ofstream wf(\ int n;

for (int i =1; i<=10; i++){ rf>>n;

wf<

}

rf.close(); wf.close(); }

答案:struct MyTime { };

MyTime myfun( int second) { }

第12题 (6.0分) 题号:550

/*------------------------------------------------ 【程序设计】

--------------------------------------------------

题目:完成函数listSort的编写,该函数对单向链表进行 从小到大排序并返回。

-------------------------------------------------- 注意:仅在标有\和\的注释行之间补充填写 代码。请勿改动主函数main和其它任何已有内容。 ------------------------------------------------*/

#include #include

MyTime mytime ; mytime.hh= second/3600;

mytime.mm=( second-mytime.hh*3600)/60;

mytime.ss= second-mytime.hh*3600-mytime.mm*60; return mytime; int hh; int mm; int ss;

#include using namespace std; void grading();

struct Node { int num; Node *next; };

Node * listSort(Node *head) {

/*********Program*********/

/********* End *********/ }

void deleteList(Node *head) {

Node *tmp; while (head) {

tmp = head->next; delete head; head = tmp; } }

void printList(Node *head) {

while(head) {

cout<num<<\ head = head->next; }

cout<

Node * createList(int a[], int len) {

Node *head = NULL; if(len<1)

return head; for(int i=0;i

Node *tmp = new Node; tmp->num = a[i]; tmp->next = head; head = tmp; }

return head; }

int main() {

int s[8] = {2,6,4,2,7,9,5,12}; Node * head = createList(s,8); head = listSort(head); printList(head); //忽略阅读 grading(); //忽略阅读结束 deleteList(head); return 0; }

//忽略阅读

void whiteFile(fstream &outfile, Node *head) {

while(head) {

outfile<num<<\ head = head->next; }

outfile<

void grading() {

int a[200],i;

fstream infile, outfile;

infile.open (\ outfile.open(\ for (i=0;i<200;i++) infile>>a[i]; for (i=0;i<8;i++) {

Node * head = createList(a+i*2,6+i); head = listSort(head); whiteFile(outfile, head); }

infile.close(); outfile.close(); }

//忽略阅读结束

答案: Node *tmp = head, *h = NULL;

while (tmp) {

head = tmp->next;

Node *pre = NULL, *cur = h; while(cur && tmp->num > cur->num) { }

if(pre == NULL) { } else

tmp->next = h; h = tmp; pre = cur; cur = cur->next;

}

{ }

tmp = head;

tmp->next = cur; pre->next = tmp;

return h;

本文来源:https://www.bwwdw.com/article/ffso.html

Top