2008年 浙工大考研计算机专业课试题C++
个人闲暇之余整理,可能会有许多细节问题且题目实现代码不唯一,若有需要可邮件与我交流。
一,改程序错误
1-1,计算半径为(a+b)的圆的面积
// kaoshi.cpp : 定义控制台应用程序的入口点。
//2008-1-1
#include "stdafx.h"
#include
#include
#define PI 3.1415926
double S(double r)
{
doublearea=PI*r*r;
returnarea;
};
//define S(r)PI*r*r
void main() //main()
{
doublea,b,area;
a=3.6,b=4.4;
area=S(a+b);
printf("%f",area);
}
结果:
201.061926
1-2,用循环打印1到20的整数,要求每行只打印5个整数
#include "stdafx.h"
#include
using namespace std;
int main(int argc, char* argv[])
{
inti,k;
for(i=1;i<=20;i++)
{
cout<
if(i%5==0)
{
cout< } } } 1-3,计算N! #include "stdafx.h" #include using namespace std; double f(double i) { if(i==0||i==1) return 1; else return i*f(i-1); } void main() { doubleN; cout<<"请输入一个整数N:"; cin>>N; cout< } 1-4,删除字符串尾部的空格符、制表符和换行符 // shijuan.cpp : Defines the entry pointfor the console application. // #include "stdafx.h" #include using namespace std; int trim(char s[]) { int n; for (n = strlen(s)-1; n >= 0; n--) //从s[0] ...s[strlen(n) - 1] 因为要求删除字符串尾部的空格符、制表符与换行符 //也就是从字符串尾部开始判断若果是 空格符、制表符与换行符中的一个n--否则 跳出循环此时记录了最后一个不是空格符、制表符与换行符的字符的位置 // n 我们只需要在原来的字符串的后面加上一个 '\0'结束符 就可以删除后面的空格符、制表符与换行符了 if (s[n] != ' ' && s[n] != '\t'&& s[n] != '\n') break; s[n+1] = '\0'; return n; } void main() { charc[80]; cout<<"请任意输入一些字符串:"; cin.getline(c,80); //从键盘读入一行字符 cout<<"您输入的字符串是:"; for(inti=0;c[i]!=0;i++) //对字符逐个处理,直到遇′/0′为止 cout< cout< intk=trim(c); cout<<"删除字符串尾部空格符、制表符、换行符后是:"; for(k=0;c[k]!=0;k++) //对字符逐个处理,直到遇′/0′为止 cout< } 二,读程序写结果 // kaoshi.cpp : 定义控制台应用程序的入口点。 //2008-2-1 #include "stdafx.h" #include #include using namespace std; int d=2; int fun2(int a,int b) { staticint c=3; c=a*b%3+c; printf("thec is%d\n",c); returnc; } int fun1(int a,int b) { intc=3; a+=a;b+=b; { intd; d=4; } c=fun2(a,b)+d; d++; printf("thed is%d\n",d); returnc*c; } voidmain() { inti,a,b; a=2;b=6; for(i=1;i<3;i++) printf("%d\n",fun1(a,b)); } 结果: the c is3 the d is3 25 the c is3 the d is4 36 // kaoshi.cpp : 定义控制台应用程序的入口点。 //2008-2-2 #include "stdafx.h" #include #include using namespace std; void main() { intb[2][3]={2,4,6,8,12}; int*a[2][3]={*b,*b+1,*b+2,*(b+1)+2,*(b+1)+1,*(b+1)}; int**q,k; q=a[0]; for(k=1;k<6;k++) { printf("%4d\n",**q); q++; } } 结果: 2 4 6 0 12 三,编程 3-1,编写一个程序,实现将多个文本文件连接成一个指定的文本文件cat.txt。要求使用命令行参数,参数将被解释为需要连接的文件名,并按照顺序逐个进行处理。 #include "StdAfx.h" #include "stdlib.h " #include #include #include #include using namespace std; //将 in1-3.txt 的内容连接到 cat.txt 的末尾 int main() { ifstream ifile1,ifile2,ifile3; string s1,s2,s3; cout<<"文件1的完整路径:"; cin>>s1;cout< cout<<"文件2的完整路径:"; cin>>s2;cout< cout<<"文件3的完整路径:"; cin>>s3;cout< ifile1.open(s1); ifile2.open(s2); ifile3.open(s3); /* ifile1.open("c://in1.txt"); ifile2.open("c://in2.txt"); ifile3.open("c://in3.txt"); */ ofstream ofile; ofile.open("c://cat.txt",ofstream::app); string str; while(ifile1>>str)ofile< while(ifile2>>str)ofile< while(ifile3>>str)ofile< ifile1.close(); ifile2.close(); ifile3.close(); ofile.close(); return 0; } 3-2,编写一个程序,统计从键盘输入的字符串中出现的“auto”“break”“case”三个单词的次数。 3-3, 每行10个,输出1-500之间的所有素数。(20分) 1. 根据概念判断: 如果一个正整数只有两个因子,1和p,则称p为素数. 代码: bool isPrime(int n) { if(n < 2) return false; for(int i = 2; i < n; ++i) if(n%i == 0) return false; return true; } 时间复杂度O(n). 2. 改进, 去掉偶数的判断 代码: bool isPrime(int n) { if(n < 2) return false; if(n == 2) return true; for(int i = 3; i < n; i += 2) if(n%i == 0) return false; return true; } 时间复杂度O(n/2), 速度提高一倍. 3. 进一步减少判断的范围 定理: 如果n不是素数, 则n有满足1 证明: 如果n不是素数, 则由定义n有一个因子d满足1 如果d大于sqrt(n), 则n/d是满足1 代码: bool isPrime(int n) { if(n < 2) return false; if(n == 2) return true; for(int i = 3; i*i <= n; i += 2) if(n%i == 0) return false; return true; } 时间复杂度O(sqrt(n)/2),速度提高O((n-sqrt(n))/2). #include "stdafx.h" #include using namespace std; #include main() { int i,j,k; int a[101]; for(i=1;i<101;i++) { a[i]=i; } for(j=2;j<101;j++) { for(k=2;k { if(a[j]%k==0&&j!=2) { a[j]=0; } } if(a[j]!=0) printf("%d\n",a[j]); } } 3-4,输入50个整数,其中有重复数,输出其中重复次数最多的那个数。(20分) // kaoyan.cpp : Defines the entry point forthe console application. #include "StdAfx.h" #include "stdlib.h " #include #include #include #include using namespace std; #define NUM 50 int main(void) { // 一次过可输入50个数字 intdata[NUM], n = 0; inti, j, k; inttimes[NUM], visited[NUM], max; while (cin.peek() != '\n') { cin>> data[n]; ++n; if(n == NUM) break; } for(i = 0; i < n; ++i) { visited[i] = 0; times[i] = 1; } for(i = 0; i < n; ++i) { if(!visited[i]) { for (j = i + 1; j < n; ++j) { if ((data[i] == data[j]) && !visited[j]) { visited[j] = 1; ++times[i]; } } } visited[i] = 1; } max= times[0]; k =0; for(i = 1; i < n; ++i) { if(times[i] > max) { max = times[i]; k= i; } } cout<< data[k] << endl; return 0; } undoner LSOFT.CN (