C程序设计题库(182道含答案).doc
试卷编号:8172所属语言:C+试卷方案:题库182道设计题试卷总分:1820分共有题型:1种一、程序设计 共182题 (共计1820分)第1题 (10.0分) 题号:664/*-【程序设计】- 题目:已知有结构体类型定义: struct node int data; struct node *nextPtr; ; 请编写函数void computingList(node * head),对head 指向的单向链表,分别统计结点的data成员值为负数、0、 正数的结点个数分别存入变量negtive、zero、positive中。 - 注意:部分源程序给出如下。请勿改动主函数main和其它函数中 的任何内容,仅在函数的花括号中填入所编写的若干语句。 -*/#include <iostream>#include <fstream>using namespace std;void grading(int,int,int);struct node int data; struct node *nextPtr;void computingList(node * head) int positive=0,negtive=0,zero=0; /*Program*/ /* End */ /忽略阅读 grading(positive,zero,negtive); /忽略阅读结束struct node *createList(void) node *head=NULL, *p1, *p2; int i; int a10 = -1,3,4,0,9,4,11,-6,2,-10; head=p2=p1= new node; p1->data = a0; for (i=1; i<10; i+) p1= new node; p1->data = ai; p2->nextPtr=p1; p2=p1; p2->nextPtr=NULL; return (head);int main() struct node *head; head = createList(); computingList(head); return 0;/以下忽略阅读void grading(int a,int b,int c) fstream myfile; myfile.open("out.txt",ios:out); myfile<<a<<" "<<b<<" "<<c<<endl; myfile.close(); 答案:struct node *p;p=head;while(p!=NULL)if(p->data > 0)positive+; else if (p->data < 0)negtive+; else if (p->data = 0)zero+; p=p->nextPtr;第2题 (10.0分) 题号:522/*-【程序设计】-题目:设计函数char capitalize(char);将小写英文字符变为对应的大写字符。- 注意: 1.部分源程序给出如下。请勿改动主函数main和其它函数中的任何内容,仅在*program* 和*end*所标记的区域内完成题干要求的函数功能。 2./标记开始与/标记结束内的程序可以忽略阅读。-*/#include<iostream>#include<fstream>using namespace std;void wwjt();/*Program*/char capitalize(char ch)if(ch>='a'&&ch<='z')return ch-'a'+'A'else return ch;/* End */int main() int i=0; char cp30; cout<<"请输入包含小写字母的句子:"<<endl; cin.getline(cp,30); while(cpi!='0') cout<<capitalize(cpi+); cout<<endl; /忽略阅读 wwjt(); /忽略阅读结束 return 0;/忽略阅读void wwjt() char ins250; int i=0; fstream infile, outfile; infile.open ("in.txt",ios:in); outfile.open("out.txt",ios:out); infile.getline (ins,250); while(insi!='0') outfile<<capitalize(insi); i+; infile.close(); outfile.close();/忽略阅读结束答案:char capitalize(char ch)if(ch>='a'&&ch<='z')return ch-'a'+'A'else return ch;第3题 (10.0分) 题号:672/*-【程序设计】-题目:函数mySum(int a , int m, int n)返回二维 整数数组a中所有元素的和,m、n分别为数组a的行 数、列数。填写适当的代码,使得mySum()完成正确 的功能。-注意:部分源程序给出如下。请勿改动主函数main和其它 函数中的任何内容,仅在函数的花括号中填入所编 写的若干语句。-*/#include<iostream>#include <fstream>using namespace std;int mySum(int a23, int m, int n);void gfkd();void main() int a23=1,2,3, 4,5,6; cout << mySum(a, 2, 3) << endl; / - main()函数此后部分可以不阅读 - gfkd();int mySum(int a23, int m, int n)/* Program */ /* End */void gfkd() fstream myF; int a23; myF.open("in.dat",ios:in); myF.read(char *)a, sizeof(int)*2*3); myF.close(); myF.open("out.dat",ios:out); myF << mySum(a, 2, 3); myF.close();答案:int i, j, s=0;for (i=0; i<m; i+)for (j=0; j<n; j+)s = s + aij;return s;第4题 (10.0分) 题号:588/*-【程序设计】-题目: 求1-1000之间同构数的个数n。同构数是: "某数与其自身的平方数的后几位相同"。 例如:25×25625,25是同构数。-注意:部分源程序给出如下。请勿改动主函数main和其它 函数中的任何内容,仅在函数的花括号中填入所编 写的若干语句。-*/#include<fstream>#include<iostream>using namespace std;void writeinfile(int n);void main() int m,k,j,n=0; for(m=1;m<=1000;m+) /*Program*/ int i=1;k=m;j=m*m;while(k!=0)k/=10;i*=10;if(j%i=m)n+; /* End */ writeinfile(n);void writeinfile(int n) fstream myfile; myfile.open("f.txt",ios:out); myfile<<n<<endl; myfile.close();答案: int i=1;k=m;j=m*m;while(k!=0)k/=10;i*=10;if(j%i=m)n+;第5题 (10.0分) 题号:725/*-【程序设计】-题目:补充函数aver的代码,该函数计算n个学生成绩(通 过参数cj传入)的平均分数。-注意:部分源程序给出如下。仅在标有"Program"和"End" 的注释行之间补充代码,请勿改动其它内容。-*/#include <iostream>#include <fstream>using namespace std;void grading();float aver(int cj,int n)/*Program*/* End */int main() grading(); return 0;void grading() fstream infile,myfile; int b50; int i; infile.open("in.txt",ios:in); myfile.open("out.txt",ios:out); for(i=0;i<50;i+) infile>>bi; myfile<<(int)aver(b,50)<<endl; infile.close(); myfile.close();答案: int sum = 0;int i;for( i=0;i<n;i+)sum += cji;return (float)sum/n; 第6题 (10.0分) 题号:709/*-【程序设计】-题目:输入两个正整数m和n,求其最大公约数和最小公倍数。-注意:部分源程序给出如下。请勿改动主函数main和其它 函数中的任何内容,仅在函数的花括号中填入所编 写的若干语句。-*/#include <iostream>#include <fstream>using namespace std;int grading();int gcd(int m,int n) int r; r=m%n; /*Program*/ /* End */ return n;int main() int m,n; cout<<"请输入两个数:n" cin>>m>>n; if(m<n) int temp; temp=m; m=n; n=temp; cout<<m<<"和"<<n<<"的最大公约数是"<<gcd(m,n)<<endl; cout<<m<<"和"<<n<<"的最小公倍数是"<<m*n/gcd(m,n)<<endl;/忽略阅读 grading();/忽略阅读结束 return 0;/以下忽略阅读int grading() int m, n; ifstream infile("in.txt", ios:in); ofstream outfile("out.txt",ios:out); if(!infile.is_open() | !outfile.is_open() cout<<"File Open Error!"<<endl; return -1; for (int i=0; i<8; i+) infile >> m >> n; outfile<<gcd(m,n)<<" "<<m*n/gcd(m,n)<<endl; infile.close(); outfile.close(); return 0;答案:while(r!=0)m=n;n=r;r=m%n;第7题 (10.0分) 题号:667/*-【程序设计】-题目:编程计算,计算公式如右图所示。-注意:部分源程序给出如下。请勿改动主函数main和其它 函数中的任何内容,仅在函数的花括号中填入所编 写的若干语句。-*/#include <iostream>#include <fstream>using namespace std;int calc()/*Program*/* End */void main(void) int value; value = calc(); cout << "累计和s为:" << value << endl; fstream outfile; outfile.open("out.txt", ios:out); outfile << "累计和s为:" << value << endl; outfile.close();答案:int i, k, s;s=0;for (i=1; i<=20; i+)for (k=1; k<=3; k+)s = s + (i+1)*(i+1)*(k+2)*(k+2);return s;第8题 (10.0分) 题号:265/*-【程序设计】-题目: 完成函数cal,该函数计算数组a中的所有数据的 最大值及最小值以及它们的差,并存入到全局变 量max、min、ca中。例如数组a中包含8,43,7, 18,2,56,37,123,25,26则max=123,min=2, ca=121。 -注意:部分源程序给出如下。请勿改动主函数main和其它 函数中的任何内容,仅在函数的花括号中填入所编 写的若干语句。-*/#include <iostream>#include <fstream>using namespace std;int grading();int max, min, ca;void cal(int a, int size) /*Program*/ /* End */int main() int a100 = 8,43,7,18,2,56,37,123,25,26; cal(a,10); cout<<"max="<<max<<endl; cout<<"min="<<min<<endl; cout<<"ca="<<ca<<endl;/忽略阅读 grading();/忽略阅读结束 return 0;/以下忽略阅读int grading() fstream infile,outfile; int a100, i; infile.open("in.txt",ios:in); outfile.open("out.txt",ios:out); for(i=0;i<20;i+) infile>>ai; cal(a,20); outfile<<max<<" "<<min<<" "<<ca<<endl; for(i=0;i<15;i+) infile>>ai; cal(a,15); outfile<<max<<" "<<min<<" "<<ca<<endl; infile.close(); outfile.close(); return 0;答案:int i;max=min=a0;for(i=0; i<size; i+)if(ai>max)max=ai;if(ai<min)min=ai;ca=max-min;第9题 (10.0分) 题号:707/*-【程序设计】-题目:从文件中读入n个字符串,将其中以字母A开头的字符串复制 到二维字符数组str1中。-注意:部分源程序给出如下。请勿改动主函数main和其它 函数中的任何内容,仅在函数的花括号中填入所编 写的若干语句。-*/# include <iostream># include <fstream># include <string>using namespace std;# define n 5# define M 20void wwjt(int len);char str1nM;void main() int i; char strnM; ifstream infile("in.txt",ios:in); if(!infile.is_open() cout<<"File Open Error!"<<endl; return; for(i=0;i<n;i+) infile>>stri; infile.close(); int j=0; /*Program*/ /* End */ wwjt(j);void wwjt(int len) ofstream outfile("out.txt",ios:out); if(!outfile.is_open() cout<<"File Open Error"<<endl; return; for(int i=0;i<len;i+) outfile<<str1i<<"n" outfile.close();答案:for(i=0;i<n;i+) if(strcmp(stri,"A")>=0)&&(strcmp(stri,"B")<0) strcpy(str1j,stri); j+; 第10题 (10.0分) 题号:673/*-【程序设计】-题目:函数myStrCat(char *dst, char *src)将字符串src 连接到字符串dst的后面。填写适当的代码,使得 mySum()完成正确的功能。-注意:部分源程序给出如下。请勿改动主函数main和其它 函数中的任何内容,仅在函数的花括号中填入所编 写的若干语句。-*/#include<iostream>#include <fstream>using namespace std;void myStrCat(char *dst, char *src);void gfkd();void main() char dst100="Hello, " char src100="Good luck!" myStrCat(dst, src); cout << dst << endl; / - main()函数此后部分可以不阅读 - gfkd();void myStrCat(char *dst, char *src)/* Program */ /* End */void gfkd() fstream myF; char dst100, src100; myF.open("in.dat",ios:in); myF.read(dst, 100); myF.read(src, 100); myF.close(); myF.open("out.dat",ios:out); myStrCat(dst, src); myF << dst; myF.close();答案:int i=0, len;len = strlen(dst);while (srci)dstlen+ = srci+;dstlen = '0'第11题 (10.0分) 题号:723/*-【程序设计】-题目:编写函数eachPrime,判断两个正整数m和n是否为 互质数。若是,返回1;否则,返回-1。 互质数:最大公约数为1的两个数称为互质数。-注意:部分源程序给出如下。请勿改动主函数main和其它 函数中的任何内容,仅在函数的花括号中填入所编 写的若干语句。-*/#include <iostream>#include <fstream>#include <cstring>using namespace std;int eachPrime( int m, int n) /*Program*/ /* End */void grading();int main() int num1, num2, result; cout << "Please enter two integer(>0):n" cin >> num1 >> num2; if ( num1<=0 | num2<=0 ) cout << "Input error!n" result = eachPrime(num1, num2); if(result = 1) cout << num1 << " 和 " << num2 <<" 是互质数!n" else cout << num1 << " 和 " << num2 <<" 不是互质数!n"/忽略阅读 grading();/忽略阅读结束 return 0;/以下忽略阅读void