【期末复习】C++程序设计基础 易错题整理
这些都是我第一遍做时感到有些特点的题目,临近期末赶紧再复习一遍吧!

编程题?
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);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!