
c++的3道题
1.使用指向行的指针变量对数组inta[2][3];输入输出。2.输入一个月份数,输出对应的英文月份名称(前3个字)。提示:函数体:{定义每个月英文名称(前3个字)构成的...
1.使用指向行的指针变量对数组int a[2][3];输入输出。
2.输入一个月份数,输出对应的英文月份名称(前3个字)。
提示:函数体:
{ 定义每个月英文名称 (前3个字)构成的数组,如:
char str[13][4]={" ", "Jan",· · · · · · ,"Dec"};
定义并输入一个月份数n:
输出*(str +n); }
3.对二维整型数组int a[][3];定义并初始化为{3,8,6,2,4,9},使用指针变量分别输出前三个元素、后三个元素和中间两个元素之和。
用c++语言写出
最好把程序说明也写上,谢谢! 展开
2.输入一个月份数,输出对应的英文月份名称(前3个字)。
提示:函数体:
{ 定义每个月英文名称 (前3个字)构成的数组,如:
char str[13][4]={" ", "Jan",· · · · · · ,"Dec"};
定义并输入一个月份数n:
输出*(str +n); }
3.对二维整型数组int a[][3];定义并初始化为{3,8,6,2,4,9},使用指针变量分别输出前三个元素、后三个元素和中间两个元素之和。
用c++语言写出
最好把程序说明也写上,谢谢! 展开
2个回答
展开全部
多维数组的元素在内存中的地址是连续的,比如:
int a[2][3] = {{1,2,3},{4,5,6}};
则该数组在内存中的位置为:
1 2 3 4 5 6
sizeof a/sizeof (int)就是数组的全部元素数量;
sizeof a/sizeof (a[0])就是数组的第一维的数量,这里的结果是2,因为a的第一维的数量为2。
/*************************一*****************************/
#include <iostream>
using namespace std;
int main()
{
int a[2][3];
// 定义一个指向数组第一个元素的常指针beg,由于编译器的类型
// 检查不会让你将普通一维指针(如下,多维指针比如int** a)
// 指向多维数组,而多维数组的数据结构其实和一维数组相同(如
// 上介绍),所以你需要将其重新解释为一维数组,然后再将其首
// 地址赋给beg。
int* const beg = reinterpret_cast<int*>(a);
// sizeof a/sizeof (int)就是所有元素的个数,所以end指向数组
// 中的最后一个元素之后的位置
int* const end = beg + sizeof a/sizeof (int);
cout << "第一行: ";
// 当作一维数组依次赋值
for(int *p = beg; p != end; ++p)
{
// 当beg到达beg + 2*3/2的位置时第一行(或列)结束
if(p == beg + sizeof a[0]/sizeof a[0][0])
cout << "第二行: ";
// 依次输入
cin >> *p;
}
// 依次打印
for(int *p = beg; p != end; ++p)
{
// 解释同上,其实是一维数组的数据结构但我们为了让它易于理解
// 一些所以将其打印为横纵二维排列
if(p == beg + sizeof a[0]/sizeof a[0][0])
cout.put('\n');
// 依次打印
cout << *p << ' ';
}
}
/*************************二*****************************/
#include <iostream>
using namespace std;
const char* month(int n)
{
// 12个月是不变的,声明为静态免去每次调用的重复声明带来额外开销
static char months[13][4] =
{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
// months + n就是第n个月的char[4],其他原理同代码一,需要重新解释
return reinterpret_cast<char*>(months + n);
}
int main()
{
for(int i = 0; i < 12; ++i)
{
// 格式而已,为了看着整齐点......
cout.width(2);
cout << i + 1 << "月: " << month(i) << '\n';
}
}
/*************************三*****************************/
#include <iostream>
using namespace std;
int main()
{
// 全部原理同代码一
int a[][3] = {3, 8, 6, 2, 4, 9};
int* const beg = reinterpret_cast<int*>(a);
int* const end = beg + sizeof a/sizeof (int);
int* p = beg, sum = 0;
// 当作一维数组理解
cout << "前三元素: ";
while(p != beg + 3)
{
sum += *p;
// *p++等价于*(p++)
cout << *p++ << ' ';
}
cout << "和: " << sum << '\n';
// 记住end指向的是数组最后一个元素的后一个位置
p = end;
sum = 0;
cout << "后三元素: ";
while(p != end - 3)
{
// *--p等价于*(--p)
cout << *--p << ' ';
sum += *p;
}
cout << "和: " << sum << '\n';
// 当作一维数组处理
p = beg + 2;
sum = 0;
cout << "中间俩元素: ";
while(p != end - 2)
{
sum += *p;
cout << *p++ << ' ';
}
cout << "和: " << sum << '\n';
}
楼下的你把我的给改糟蹋了,
#include <iostream>
using namespace std;
int main()
{
int *p; // 1
int a[2][3];
int* const beg = reinterpret_cast<int*>(a);
int* const end = beg + sizeof a/sizeof (int);
cout << "第一行: ";
for(p = beg; p != end; ++p) // 1
{
if(p == beg + sizeof a/sizeof a[0])
cout << "第二行: ";
cin >> *p;
}
for(p = beg; p != end; ++p) // 1
{
if(p == beg + sizeof a/sizeof a[0] + 1) // 这里我改掉了,原来我写的代码有问题
cout<<endl; // 2
cout << *p << ' ';
}
cout<<endl; // 2
return 0; // 3
}
1、C++为什么允许你在任意位置而不是代码开头声明变量呢?请你思考一下。
参看《Effective C++》Item 26: Postpone variable definitions as long as possible.
2、在你不需要刷新缓冲区的时候,请使用'\n'来换行而不是endl,否则过多的endl会严重影响你程序的执行效率,虽然代码不长但细节值得注意!
参看《The Standard C++ Library》13.14 Performance Issues.
3、main的返回值可选,我是懒人所以就略去......
参看《The Standard C++ Library》2.2 New Language Features
int a[2][3] = {{1,2,3},{4,5,6}};
则该数组在内存中的位置为:
1 2 3 4 5 6
sizeof a/sizeof (int)就是数组的全部元素数量;
sizeof a/sizeof (a[0])就是数组的第一维的数量,这里的结果是2,因为a的第一维的数量为2。
/*************************一*****************************/
#include <iostream>
using namespace std;
int main()
{
int a[2][3];
// 定义一个指向数组第一个元素的常指针beg,由于编译器的类型
// 检查不会让你将普通一维指针(如下,多维指针比如int** a)
// 指向多维数组,而多维数组的数据结构其实和一维数组相同(如
// 上介绍),所以你需要将其重新解释为一维数组,然后再将其首
// 地址赋给beg。
int* const beg = reinterpret_cast<int*>(a);
// sizeof a/sizeof (int)就是所有元素的个数,所以end指向数组
// 中的最后一个元素之后的位置
int* const end = beg + sizeof a/sizeof (int);
cout << "第一行: ";
// 当作一维数组依次赋值
for(int *p = beg; p != end; ++p)
{
// 当beg到达beg + 2*3/2的位置时第一行(或列)结束
if(p == beg + sizeof a[0]/sizeof a[0][0])
cout << "第二行: ";
// 依次输入
cin >> *p;
}
// 依次打印
for(int *p = beg; p != end; ++p)
{
// 解释同上,其实是一维数组的数据结构但我们为了让它易于理解
// 一些所以将其打印为横纵二维排列
if(p == beg + sizeof a[0]/sizeof a[0][0])
cout.put('\n');
// 依次打印
cout << *p << ' ';
}
}
/*************************二*****************************/
#include <iostream>
using namespace std;
const char* month(int n)
{
// 12个月是不变的,声明为静态免去每次调用的重复声明带来额外开销
static char months[13][4] =
{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
// months + n就是第n个月的char[4],其他原理同代码一,需要重新解释
return reinterpret_cast<char*>(months + n);
}
int main()
{
for(int i = 0; i < 12; ++i)
{
// 格式而已,为了看着整齐点......
cout.width(2);
cout << i + 1 << "月: " << month(i) << '\n';
}
}
/*************************三*****************************/
#include <iostream>
using namespace std;
int main()
{
// 全部原理同代码一
int a[][3] = {3, 8, 6, 2, 4, 9};
int* const beg = reinterpret_cast<int*>(a);
int* const end = beg + sizeof a/sizeof (int);
int* p = beg, sum = 0;
// 当作一维数组理解
cout << "前三元素: ";
while(p != beg + 3)
{
sum += *p;
// *p++等价于*(p++)
cout << *p++ << ' ';
}
cout << "和: " << sum << '\n';
// 记住end指向的是数组最后一个元素的后一个位置
p = end;
sum = 0;
cout << "后三元素: ";
while(p != end - 3)
{
// *--p等价于*(--p)
cout << *--p << ' ';
sum += *p;
}
cout << "和: " << sum << '\n';
// 当作一维数组处理
p = beg + 2;
sum = 0;
cout << "中间俩元素: ";
while(p != end - 2)
{
sum += *p;
cout << *p++ << ' ';
}
cout << "和: " << sum << '\n';
}
楼下的你把我的给改糟蹋了,
#include <iostream>
using namespace std;
int main()
{
int *p; // 1
int a[2][3];
int* const beg = reinterpret_cast<int*>(a);
int* const end = beg + sizeof a/sizeof (int);
cout << "第一行: ";
for(p = beg; p != end; ++p) // 1
{
if(p == beg + sizeof a/sizeof a[0])
cout << "第二行: ";
cin >> *p;
}
for(p = beg; p != end; ++p) // 1
{
if(p == beg + sizeof a/sizeof a[0] + 1) // 这里我改掉了,原来我写的代码有问题
cout<<endl; // 2
cout << *p << ' ';
}
cout<<endl; // 2
return 0; // 3
}
1、C++为什么允许你在任意位置而不是代码开头声明变量呢?请你思考一下。
参看《Effective C++》Item 26: Postpone variable definitions as long as possible.
2、在你不需要刷新缓冲区的时候,请使用'\n'来换行而不是endl,否则过多的endl会严重影响你程序的执行效率,虽然代码不长但细节值得注意!
参看《The Standard C++ Library》13.14 Performance Issues.
3、main的返回值可选,我是懒人所以就略去......
参看《The Standard C++ Library》2.2 New Language Features
展开全部
第一题和第三题我与楼上的差不多,仅把他/她的做了稍稍的改正(格式上的改动),只是第二题和楼上的不太一样。
//No1===============================================
#include <iostream>
using namespace std;
int main()
{
int *p;
int a[2][3];
int* const beg = reinterpret_cast<int*>(a);
int* const end = beg + sizeof a/sizeof (int);
cout << "第一行: ";
for(p = beg; p != end; ++p)
{
if(p == beg + sizeof a/sizeof a[0])
cout << "第二行: ";
cin >> *p;
}
for(p = beg; p != end; ++p)
{
if(p == beg + sizeof a/sizeof a[0] + 1)
cout<<endl;
cout << *p << ' ';
}
cout<<endl;
return 0;
}
//No2===================================================
#include <iostream>
using namespace std;
void En_month(int n)
{
int i;
static char months[13][4] =
{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
for(i=0;i<13;i++)
{
if(i+1==n)
cout<<months[i]<<endl;
}
}
void main()
{
int month;
char flag='y';
while(flag=='y'||flag=='Y')
{
cout<<"请输入一个月份数:";
cin>>month;
En_month(month);
cout<<"Do you want to continue?(y/n):";
cin>>flag;
cout<<endl;
}
}
//No3===========================================================================
#include <iostream>
using namespace std;
int main()
{
int a[][3] = {3, 8, 6, 2, 4, 9};
int* const beg = reinterpret_cast<int*>(a);
int* const end = beg + sizeof a/sizeof (int);
int *p = beg, sum = 0;
cout << "前三元素: ";
while(p != beg + 3)
{
sum += *p;
cout << *p++ << ' ';
}
cout << "和: " << sum << '\n';
p = end;
sum = 0;
cout << "后三元素: ";
while(p != end - 3)
{
cout << *--p << ' ';
sum += *p;
}
cout << "和: " << sum << '\n';
p = beg + 2;
sum = 0;
cout << "中间俩元素: ";
while(p != end - 2)
{
sum += *p;
cout << *p++ << ' ';
}
cout << "和: " << sum << '\n';
return 0;
}
//No1===============================================
#include <iostream>
using namespace std;
int main()
{
int *p;
int a[2][3];
int* const beg = reinterpret_cast<int*>(a);
int* const end = beg + sizeof a/sizeof (int);
cout << "第一行: ";
for(p = beg; p != end; ++p)
{
if(p == beg + sizeof a/sizeof a[0])
cout << "第二行: ";
cin >> *p;
}
for(p = beg; p != end; ++p)
{
if(p == beg + sizeof a/sizeof a[0] + 1)
cout<<endl;
cout << *p << ' ';
}
cout<<endl;
return 0;
}
//No2===================================================
#include <iostream>
using namespace std;
void En_month(int n)
{
int i;
static char months[13][4] =
{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
for(i=0;i<13;i++)
{
if(i+1==n)
cout<<months[i]<<endl;
}
}
void main()
{
int month;
char flag='y';
while(flag=='y'||flag=='Y')
{
cout<<"请输入一个月份数:";
cin>>month;
En_month(month);
cout<<"Do you want to continue?(y/n):";
cin>>flag;
cout<<endl;
}
}
//No3===========================================================================
#include <iostream>
using namespace std;
int main()
{
int a[][3] = {3, 8, 6, 2, 4, 9};
int* const beg = reinterpret_cast<int*>(a);
int* const end = beg + sizeof a/sizeof (int);
int *p = beg, sum = 0;
cout << "前三元素: ";
while(p != beg + 3)
{
sum += *p;
cout << *p++ << ' ';
}
cout << "和: " << sum << '\n';
p = end;
sum = 0;
cout << "后三元素: ";
while(p != end - 3)
{
cout << *--p << ' ';
sum += *p;
}
cout << "和: " << sum << '\n';
p = beg + 2;
sum = 0;
cout << "中间俩元素: ";
while(p != end - 2)
{
sum += *p;
cout << *p++ << ' ';
}
cout << "和: " << sum << '\n';
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询