【期末复习】C++程序设计基础 易错题整理

发布时间:2023年12月26日

这些都是我第一遍做时感到有些特点的题目,临近期末赶紧再复习一遍吧!

编程题?

1、按要求移动数字?

【问题描述】有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,如下图所示。写一个函数实现以上功能,在主函数中输入n个整数,并输出调整后的n个数。(提示:可以用递归函数实现)

【输入形式】根据系统提示,输入整数个数以及对应的数值,再输入该数列需要向后移的位数。

【输出形式】输出调整后的数列。

【样例输入】

6

1 2 3 4 5 6

2

【样例输出】

how many numbers?

input 6 numbers:

how many places do you want move?

Now,they are:

5 6 1 2 3 4

【样例说明】根据系统提示,输入整数个数以及对应的数值,再输入该数列需要向后移的位数。输出调整后的数列。

【评分标准】 结果完全正确得15分,每个测试点5分。提交程序名为:XT6-4.c或XT6-4.c

题目推荐用递归函数,奈何我对于递归一直没有什么思路,所以用deque尝试了一下,成功了,不过里面有一些点要注意!

#include<iostream>
#include<deque>
using namespace std;
int main()
{
	 deque<int>d1;
	 int n,m;
	 cin>>n;
	 for(int i=0;i<n;i++)
	 {
	 	int x;
	 	cin>>x;
	 	d1.push_back(x);
	 }
	 cin>>m;
	 int j=0;
	 while(j<m)
	 {
	 	int t;
	 	t=d1[n-1];
	 	d1.pop_back();
	 	d1.push_front(t);
	 	j=j+1;
	 }
	 for(int k=0;k<n;k++)
	 {
	 	cout<<d1[k]<<" ";
	 }
	return 0;
 } 

?最易出错的是t的赋值,因为每一循环都会对d1进行更改,原本的d4在d5y移动到

d1后变成了新的d5,所以t=d1[n-1]就没有错啦

?2、对换最大最小值

【问题描述】输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:

(1)输入10个数,函数首部为:?void input(int *number) ;(2)进行处理,函数首部为:?void max_min_value(int *number) ;(3)输出10个数,函数首部为:void output(int *number) 。

【输入形式】根据系统提示,输入10个数。

【输出形式】输出对换后的数字。

【样例输入】

56 2 4 -6 8 98 12 34 24 66

【样例输出】

input 10 numbers:

now,they are: -6 2 4 56 8 66 12 34 24 98

【样例说明】根据系统提示,输入10个数。输出对换后的数字。

【评分标准】 结果完全正确得15分,每个测试点5分。提交程序名为:XT6-3.c或XT6-3.c

#include<iostream>
using namespace std;
int main()
{
	int arr[10];
	int min=0;
	int max=0;
	for(int i=0;i<10;i++)
	{
		int x;
		cin>>x;
		arr[i]=x;
	}
	for(int j=0;j<10;j++)
	{
		if(arr[min]>arr[j])
		min=j;
		if(arr[max]<arr[j])
		max=j;
	}
	//cout<<"min="<<min<<endl;
	//cout<<"max="<<max<<endl;
	int temp;
	temp=arr[0];
	arr[0]=arr[min];
	arr[min]=temp;
	temp=arr[9];
	arr[9]=arr[max];
	arr[max]=temp;
	for(int i=0;i<10;i++)
	{
		cout<<arr[i]<<" ";
	}
	return 0;
}

3、猴子选大王?

整理了一种简单做法作为补充,能省很多的时间

//公式法
#include<iostream>
using namespace std;
int king1(int n)
{
	int t;
	if(n==1)
	{
		return 0;
	}
	else
	{
	t=(king1(n-1)+3)%n;
	return t;
    }
}
int main()
{
	int m=3;
	int n;
	cin>>n;
	int t=king1(n)+1;
    cout<<t; 
	return 0;
 } 

选择题?

1、已知int a, *p=&a; 则下列函数调用中错误的是???【?正确答案: d】????????
(A)? scanf("%d", &a);
(B)? scanf("%d", p);
(C)? printf("%d", a);
(D)? printf("%d", p);?

2、说明语句 int *(*p)();的含义是??【?正确答案: D??????
(A)?p是一个指向int型数组的指针
(B)?p是指针变量,它构成了指针数组
(C)?p是一个指向函数的指针,该函数的返回值是一个整型
(D)? p是一个指向函数的指针,该函数的返回值是一个指向整型的指针

3、假设已定义double (*sin)();有一个函数的定义如下:
void newprint(double (*f)(), double x)
{
printf("%f", (*f)(x));
}
则正确的调用语句是?【?正确答案: A
(A)newprint(sin, 0.5);
(B)newprint(sin(0.5));
(C)newprint(&sin, 0.5);
(D)newprint((&sin)(0.5));

4、已知:int a[]={1,2,3,4},y,*p = &a[1];则执行语句“y=(*--p)++;”之后,变量y的值为?【?正确答案: A
A.1
B.2
C.3
D.4

5、若有函数 max(a, b), 并且已使函数指针变量p指向函数max,当使用指针调用该函数时,正确的调用方法是?【?正确答案: C】.
(A)(*p)max(a, b);
(B)*pmax(a, b);
(C)(*p)(a, b);
(D)*p(a, b);

文章来源:https://blog.csdn.net/yf743909/article/details/135192364
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。