zoukankan      html  css  js  c++  java
  • 2008年 浙工大考研计算机专业课试题C++

    2008年 浙工大考研计算机专业课试题C++

    个人闲暇之余整理,可能会有许多细节问题且题目实现代码不唯一,若有需要可邮件与我交流。


    一,改程序错误

    1-1,计算半径为(a+b)的圆的面积

    // kaoshi.cpp : 定义控制台应用程序的入口点。

    //2008-1-1

    #include "stdafx.h"

    #include <iostream>

    #include <stdio.h>

    #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 <iostream>

    using namespace std;

    int main(int argc, char* argv[])

    {

           inti,k;

           for(i=1;i<=20;i++)

           {

                  cout<<i;

                  if(i%5==0)

                  {

                         cout<<endl;

                  }

           }

    }

    1-3,计算N!

    #include "stdafx.h"

    #include <iostream>

    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<<N<<"!的值是:"<<f(N)<<endl;

    }

    1-4,删除字符串尾部的空格符、制表符和换行符

    // shijuan.cpp : Defines the entry pointfor the console application.

    //

    #include "stdafx.h"

    #include <iostream>

    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<<c[i];

           cout<<endl;

           intk=trim(c);

           cout<<"删除字符串尾部空格符、制表符、换行符后是:";

           for(k=0;c[k]!=0;k++)      //对字符逐个处理,直到遇′/0′为止

           cout<<c[k];

    }

    二,读程序写结果

    // kaoshi.cpp : 定义控制台应用程序的入口点。

    //2008-2-1

    #include "stdafx.h"

    #include <iostream>

    #include <stdio.h>

    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 <iostream>

    #include <stdio.h>

    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 <iostream>

    #include <string>

    #include <iomanip>

    #include <fstream>

    using namespace std;

    //将 in1-3.txt 的内容连接到 cat.txt 的末尾

    int main()

    {

     ifstream ifile1,ifile2,ifile3;

     string s1,s2,s3;

     cout<<"文件1的完整路径:";

     cin>>s1;cout<<endl;

     cout<<"文件2的完整路径:";

     cin>>s2;cout<<endl;

     cout<<"文件3的完整路径:";

     cin>>s3;cout<<endl;

     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<<str<<endl;

     while(ifile2>>str)ofile<<str<<endl;

     while(ifile3>>str)ofile<<str<<endl;

     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<d<=sqrt(n)的一个因子d.

    证明: 如果n不是素数, 则由定义n有一个因子d满足1<d<n.

    如果d大于sqrt(n), 则n/d是满足1<n/d<=sqrt(n)的一个因子.

    代码:

    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 <iostream>

    using namespace std;

    #include<math.h>

    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<sqrt(j)+1;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 <iostream>

    #include <string>

    #include <iomanip>

    #include <fstream>

    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 (


  • 相关阅读:
    fake data
    template 的简单使用
    computed what time passage pushed-
    drag And drop
    threeJs(1)
    使用babel
    PHP海补知识(2)-- 复合赋值操作
    PHP海补知识(1)-- 可变变量
    一个裸的Ubuntu系统,搭建LAMP需要配置这些东西
    Ubuntu Server 12.04 U盘启动盘打包
  • 原文地址:https://www.cnblogs.com/wuyida/p/6301037.html
Copyright © 2011-2022 走看看