南京信息工程大学822C/C++历年考研常考的编程题

目录

 

C语言部分

1、用循环的方式打印出如下图案(菱形)

2、求1+2+3+...+20的和

3、编写一函数,该函数的功能是:计算两个自然数n和m(m<10000)之间所有数的和(n和m从键盘输入)。

4、(2014年)编程实现s(n)=(1-1/2)+(1/3-1/4)+.....+(1/(2n-1)-1/2n)。函数原型为double fun(int n)

5、编程实现S(n)=1+1/(1+2)+1/(1+2+3)+1/(1+2+3+...+n)

6、给定一个正整数,判定是否为素数。

7、如果一个两位正整数是质数,将组成它的两个数字交换位置后,形成的整数仍然是质数,则称这样的数为绝对质数(如13,17),编写一个程序,找出所有的绝对质数。

8、判断一个正整数是否为回文数。回文数是这样的数:一个正整数从左往右读和从右往左读都是一样的数(如121,123321)。

9、求所有的水仙花数(对于一个3位整数,其各位数的立方和等于该数。如153=1^3+5^3+3^3,则153就是水仙花数)

10、取出一个无符号的十进制整数中所有偶数数字,按原来的顺序组成一个新的数。

11、请输入任意数a(1<=a<=9),请输出Sn=a+aa+aaa+aaaa+aaaaa的前五项之和的值。

12、求斐波那契数列的前40项。(拓展)

13、编写一个函数,实现斐波那契数列。

14、求反位数。(拓展)

15、设计一个程序,能让一个数组7849846倒序输出。

16、求最大公约数(拓展)

17、求1000以内的所有完数(例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。)。

18、编写主函数,读取两个数字,交换后打印到屏幕。

19、写出一个程序,输入n,输出n行数字三角形(n不大于10),例如,输入n=7时,输出以下图形。

20、编程实现显示如下形式的数字矩阵:

21、编写主函数,判断输入年号是否是闰年。

22、从母串中查找子串出现的次数。

23、编写函数int fun(int lim,int aa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在数组aa中,该函数返回所求出的素数的个数,如lim为15时有2、3、5、7、11、13共6个。

24、将a[3][3]按顺时针方向旋转90度。

25、求字符串B在A中出现的次数,如A是abcabcabcdababc,B是abc。

26、有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数)。

27、有N个学生,每个学生的信息包括学号、性别、姓名、四门课的成绩,从键盘上输入N个学生信息,要求输出总平均超级最高的学生信息,包括学号、性别、姓名和平均成绩。要求采用结构体表达学生基本信息。

28、输入任意个自然数,其中奇数从大到小输出,偶数从小到大输出,分别输出。

29、请用函数调用编写删除数组中相同的字符,只留下一个函数返回数组的个数(相当于输入数组1112334566删除1136,只留下123456返回个数)

30、请编写函数myfun( ),其功能是:从3个形参a,b,c中找出中间的那个数,作为函数值返回。

31、输入字符,按回车键结束。将其中的小写字母转换成大写字母,而其他字符不变。

32、编写主函数,该函数的功能是:分别统计字符串中大写字母和小写字母的个数。

33、假定输入的字符串中只包含字母和*。请编写函数fun,它的功能是:除了字符串前导的*之外,将串中其他的*全部删除。在编写函数时,不得不去使用C语言提供的字符串函数。例如,若字符串中的内容为****A*BC*DEF*G******,删除*后,字符串中的内容则应当是****ABCDEFG。

34、定义3个整数及指向整数的指针,仅用指针的方法按由小到大的顺序输出。

35、编写个程序,包含main,readin,sort与printf四个函数,该程序的功能是:调用readin函数从键盘输入n个整数(n<=10),调用printf函数输出排序前的数列,再调用sort函数对元素值用选择法,由大到小的排序,最后调用sort函数对元素值选择法由大到小排序,最后调用printf函数输出排序后的数列,各个函数的原型如下,请写出完整的程序代码:

C++部分

1、定义一个长方体类:该类中定义的成员数据包括:长、宽、高,定义的成员函数包括:

2、编辑一个 C++ 设计一个程序,定义一个汽车类 Vehicle,它具有一个需要传递参数的构造函数,

3、设计二维坐标类 Coordinate 和三维坐标类 ThreeDCoord,其中 ThreeDCoord 类由Coordinate 类 public 派生,设计要求如下:

4、游泳池


C语言部分

1、用循环的方式打印出如下图案(菱形)

    *
   ***
  *****
 *******
  *****
   ***
    *

答案:

#include <stdio.h>
int main()
{
    int i;
    for (i = 1; i <=4; i++) 
    {
         for (int j = 1; j <=4-i ; j++) 
            printf(" ");
         for (int k = 1; k <=(2*i)-1; k++)
            printf("*");
         printf("\n");
    }
    for(i = 3; i>=1; i--)
    {
        for (int j = 1; j <=4-i ; j++)  
            printf(" ");
        for (int k = 1; k <=(2*i)-1; k++)   
            printf("*");
        printf("\n");
    }
    return 0;
}


2、求1+2+3+...+20的和

#include <stdio.h>
int main()
{
    int i,sum;
    sum=0;
    for(i=1;i<=20;i++)
        sum=sum+i;
    printf("sum=%d\n",sum);
    return 0;
}

 

3、编写一函数,该函数的功能是:计算两个自然数n和m(m<10000)之间所有数的和(n和m从键盘输入)。

#include <stdio.h>
int fun(int n,int m)
{
	int sum=0,i;
	for(i=n;i<=m;i++)
		sum+=i;
	return sum;
}
int main()
{
	int n,m;
	scanf("%d %d",&n,&m);
	printf("%d\n",fun(n,m));
	return 0;
}

 

4、(2014年)编程实现s(n)=(1-1/2)+(1/3-1/4)+.....+(1/(2n-1)-1/2n)。函数原型为double fun(int n)

#include<stdio.h>
double fun(int n);
int main()
{
	double s;
	int a;
	printf("请输入n的值:\n");
	scanf("%d",&a);
	s=fun(a);
	printf("s(%d)=%lf\n",a,s);
	return 0;
}
double fun(int n)
{
	int i=0;
	double sum=0.0;
	double elem;
	for(i=1;i<=n;i++)
	{
		elem=(double)(1.0/(2*i-1)-1.0/(2*i));
		sum=sum+elem;
	}
	return sum;
}

 

5、编程实现S(n)=1+1/(1+2)+1/(1+2+3)+1/(1+2+3+...+n)

#include<stdio.h>
double fun(int n);
int main()
{
	double s;
	int a;
	printf("请输入n的值:\n");
	scanf("%d",&a);
	s=fun(a);
	printf("s(%d)=%lf\n",a,s);
	return 0;
}
double fun(int n)
{
	int i=0,e=0;
	double sum=0.0;
	double elem;
	for(i=1;i<=n;i++)
	{
		e=e+i;
		elem=(double)(1.0/e);
		sum=sum+elem;
	}
	return sum;
}

 

6、给定一个正整数,判定是否为素数。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
    int i,m,n;
    scanf("%d",&n);
    if(n>0)
        m=sqrt(n);
    for(i=2;i<=m;i++)
        if(n%i==0)
            break;
    if(i>m)
        printf("%d是素数\n",n);
    else
        printf("%d不是素数\n",n);
    return 0;
}

 

7、如果一个两位正整数是质数,将组成它的两个数字交换位置后,形成的整数仍然是质数,则称这样的数为绝对质数(如13,17),编写一个程序,找出所有的绝对质数。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
    int i,m,n;
    int t,j,u,v;
    scanf("%d",&n);
    t=(n%10)*10+(n/10);
    if(n>=10&&n<100)
    {
        m=sqrt(n);
        u=sqrt(t);
    }
    else
        exit(0);
    for(i=2;i<=m;i++)
        if(n%i==0)
            break;
    for(j=2;j<=u;j++)
        if(t%i==0)
            break;
    if(i>m&&j>u)
        printf("%d是绝对素数\n",n);
    else
        printf("%d不是绝对素数\n",n);
    return 0;
}

 

8、判断一个正整数是否为回文数。回文数是这样的数:一个正整数从左往右读和从右往左读都是一样的数(如121,123321)。

#include<stdio.h>
int main()
{
    int n,m=0,k;
    do
    {
        scanf("%d",&n);
        if(n<=0)
            printf("数据输入错误,请重新输入!\n");
    }while(n<=0);
    k=n;
    while(k!=0)
    {
        m=m*10+k%10;
        k=k/10;
    }
    if(n==m)
        printf("%d是回文数!\n",n);
    else
        printf("%d不是回文数!\n",n);
    return 0;
}

 

9、求所有的水仙花数(对于一个3位整数,其各位数的立方和等于该数。如153=1^3+5^3+3^3,则153就是水仙花数)

#include<stdio.h>
int main()
{
    int n,k,a,b,c;
    printf("请输入一个三位正整数:\n");
    do
    {
        scanf("%d",&n);
        if(n<100||n>999)
            printf("数据输入错误,请重新输入:\n");
    }while(n<100||n>999);
    a=n/100;
    b=(n-a*100)/10;
    c=n%10;
    k=a*a*a+b*b*b+c*c*c;
    if(k==n)
        printf("%d为水仙花数!\n",n);
    else
        printf("%d不是水仙花数!\n",n);
    return 0;
}

 

10、取出一个无符号的十进制整数中所有偶数数字,按原来的顺序组成一个新的数。

#include<stdio.h>
int main()
{
	int num,t,u1,u2,i;
	u1=0;
	u2=0;
	printf("Please enter one number:\n");
	scanf("%d",&num);
	while(num!=0)
	{
		t=num%10;
		num=num/10;
		if(t%2==0)
			u1=10*u1+t;
	}
	while(u1!=0)
	{
		i=u1%10;
		u1=u1/10;
		u2=u2*10+i;
	}
	printf("\nNew number is %d\n",u2);
	return 0;
}

 

11、请输入任意数a(1<=a<=9),请输出Sn=a+aa+aaa+aaaa+aaaaa的前五项之和的值。

#include<stdio.h>
int main()
{
	int a;
	int sum = 0;
	int tmp = 0;
	printf("输入一个数:");
	scanf("%d", &a);
	for (int i = 0; i<5; i++)
	{
		tmp = tmp * 10 + a;
		sum += tmp;
	}
	printf("Sn=%d", sum);
	return 0;
}

 

12、求斐波那契数列的前40项。(拓展)

#include<stdio.h>
int main()
{
    int i,f1=1,f2=1;
    for(i=1;i<=20;i++)
    {
        printf("%12d %12d",f1,f2);
        if(i%2==0)
            printf("\n");
        f1=f1+f2;
        f2=f2+f1;
    }
    return 0;
}

13、编写一个函数,实现斐波那契数列。

//递归方法
int Fib(int n)
{
    int fac;
    if(n==0||n==1)
        fac=1;
    else
        fac=n*Fib(n-1);
    return fac;
}
//非递归方法
int Fib(int n)
{
    int fac=1;
    for(int i=1;i<=n;i++)
        fac=fac*i;
    return fac;
}

 

14、求反位数。(拓展)

#include<stdio.h>
int main()
{
    int n,m=0,k;
    printf("请输入一个整数:\n");
    scanf("%d",&n);
    k=n;
    while(k!=0)
    {
        m=m*10+k%10;
        k=k/10;
    }
    printf("反位数是%d\n",m);
    return 0;
}

 

15、设计一个程序,能让一个数组7849846倒序输出。

#include<stdio.h>
int main()
{
    int i,j;
    j=6;
    int a[7]={7,8,4,9,8,4,6};
    int b[7];
    printf("a[7]的倒序输出是:\n");
    for(i=0;i<7;i++)
    {
        b[i]=a[j];
        printf("%d",b[i]);
        j--;    
    }
    return 0;
}

 

16、求最大公约数(拓展)

#include <stdio.h>
int main()
{
    int a,b,r;
    scanf("%d %d",&a,&b);
    do
    {
        r=a%b;
        a=b;
        b=r;
    }while(r!=0);
    printf("最大公约数是:%d\n",a);
    return 0;
}

 

17、求1000以内的所有完数(例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。)。

#include <stdio.h>
void main()
{
	int i,j;
	printf("1000之内的所有完数:\n");
	for(i=6;i<1000;i++)
	{
		int sum=0;
		for(j=1;j<i;j++)
		{
			if(i%j==0)
				sum = sum+j;
		}
		if(sum==i)
			printf("%d,",i);
	}
}

 

18、编写主函数,读取两个数字,交换后打印到屏幕。

#include <stdio.h>
int main()
{
    int x,y,z;
    printf("Enter 2 numbers : x,y\n");
    scanf("%d%d",&x,&y);
    z=x;
    x=y;
    y=z;
    printf("x=%d,y=%d",x,y);
    return 0;
}

 

19、写出一个程序,输入n,输出n行数字三角形(n不大于10),例如,输入n=7时,输出以下图形。

0 1 2 3 4 5 6
7 8 9 0 1 2 
3 4 5 6 7
8 9 0 1
2 3 4
5 6
7
#include <stdio.h>
int main()
{
    int n,i,j;
    int cur;
    printf("input n:");
    scanf("%d",&n);
    cur=0;
    for(i=n;i>=1;--i)
    {
        for(j=1;j<=i;++j)
        {
            printf("%d",cur);
            cur++;
            if(cur>9)
                cur=0;
        }
        printf("\n");
    }
    return 0;
}

 

  • 45
    点赞
  • 269
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
考研c语言复试面试题主要涉及基本知识点和算法思想。 首先,考官可能会询问C语言的基础知识,如变量的定义、常量和运算符的使用等。在回答中,我会着重强调C语言的数据类型、变量的存储和作用域、内存管理等重点内容。 其次,考官可能会针对C语言的特性和应用进行提问。例如,对指针的理解和使用、内存动态分配的方法和原理、结构体和联合体的巧用等。对于这些问题,我会结合实际应用场景,说明在C语言中如何高效地进行编程和问题解决。 另外,考官还可能会考察C语言的算法思想和常见的算法题。例如,对于排序算法,我会简单介绍几种常见的排序方法,如快速排序、归并排序等,并指出它们的时间复杂度和适用场景。如果遇到其他算法问题,我会尽力给出解题思路和步骤,以展示我在算法方面的理解和应用能力。 最后,我会总结回答,强调对C语言的理解程度和自己学习过程中的收获。我会强调在平时的学习和实践中,我通过阅读相关文献资料、参与编程竞赛等方式持续提升自己的C语言编程技能和算法思想,并且对于未来研究方向中与C语言相关的问题有着浓厚的兴趣。 通过对上述内容的准备和回答,我相信能够给考官留下深入学习和研究C语言的印象,展示自己在这方面的能力和潜力,从而在考研C语言复试中取得良好的成绩。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值