【期末复习】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进行投诉反馈,一经查实,立即删除!