一个月挑战c++难道最可靠的资料也有错?求检测。如果没错,求讲解
#include <stdio.h>void main(void)
{
void reversal();
static int a = {0,1,2,3,4,5,6,7,8,9}; /* 建立一个数组并初始化 */
int i;
for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");
reversal(a,10); /* 调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x */
for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");
}
void reversal(x,n)
int x[],n; /* 定义形式参数 */
{
int m=(n-1)/2; /* 计算10个数需要循环几次,因为是两两调换第一个数组是x故应该是int(9/2) */
int temp,i,j; /* 建立零时变量temp用于每次交换处理时零时存储x的值 */
for (i=0;i<=m;i++)
{
j=n-1-i; /* 反向计算出被调换的数组下标,例如x 对应的x就是x */
temp=x;
x=x;
x=temp;
}
}
/* 次题需要注意的是:这里由于a和x是共同享内存地址位的所以进行交换后a的实际值也就发生了改变 */
上面的代码我把不懂的地方用红色标记了。然后自己测试了一下 编译器错误,说是不能转换。x=x;
我个人是这么理解的: x是数组名。可以看成是一个指针变量。然后 x是一个普通的int型变量,怎么可以转换呢。
然后这个告诉我苦学好无奈啊。首先,网上没有可信的资料。让人很苦恼啊。(之前,觉得天草的逆向很厉害。那么他的编程
也一定很牛逼。他的VIP教程当时卖5000? 后来,知道他是一个业余的程序员。
然后现在把,很多培训机构都很扯淡。说白了,进去就是骗钱去了。真的不如我自己自学。我当时咨询达内c++的客服!如果我考研没时间去那里学习。抽空去的话能随时开课不? 他直接说:你可以交1w然后我们给你课件。你在学校自学。然后来了我们直接实践项目。
如果课件教程值1w的话。那么百度网盘的2012年的达内c++的教程就值5K了 ~可惜不是!!!!!!!
好苦恼。求高人指导学习。 现在不相信好多好多!!
真的是原版源代码?
光void reversal();这一句就暴露了菜鸟的水平。。。 不懂c++,帮顶 这代码很有问题 确定是C++?扯谈了吧。。。
C++调用C标准库的话<stdio.h>应该为<cstdio>的。。 星之陨 发表于 2013-11-11 22:32 static/image/common/back.gif
确定是C++?扯谈了吧。。。
C++调用C标准库的话应该为的。。
一个月挑战c++.chm网上有书。可以去参考一下。我真的是被现在的资料打败了,真的 灰心啊
错误的代码让我看了不下半个小时。硬是想不明白什么问题!!! 叁er 发表于 2013-11-11 21:48 static/image/common/back.gif
这代码很有问题
是有问题,我100%复制的书上的代码。 QQ官方 发表于 2013-11-11 20:57 static/image/common/back.gif
真的是原版源代码?
光void reversal();这一句就暴露了菜鸟的水平。。。
是的 参数不对。可是书上就是这么写的。表示各种撞鼻子! //C++头文件标准应该使用
//#include<cstdio>
#include <stdio.h>
////////////////////////////////////////////////////////////////////////////////////
/*
* 其实吧,看见您这杂乱的编码风格我是相当没心情帮你的
* 但是我为了论坛经验,还是硬着头皮看了,
* 评价: 您看书太不认真。任何一本书都不可能犯这么多低级错误。
* 还是认认真真踏踏实实的看书,一个例子一个例子的敲.
* 如果您的书真的是这么教的话,换一本吧!我没什么推荐的
* 网上有关新手推荐的书很多,多找基本。总有适合自己的
*
*/
////////////////////////////////////////////////////////////////////////////////////
//这句话是意思应该是函数声明吧!函数声明有往函数体里面放的么?
//下面对这函数的定义有两个参数,但是声明却是没有参数的
//C++默认空括号为无参意即 void reversal(void);
void reversal(int arr[],int nLen);
void main(void)
{
static int a = {0,1,2,3,4,5,6,7,8,9}; /* 建立一个数组并初始化 */
int i;
for (i=0;i<10;i++)
{
printf("%d ",a); //这里应该是需要打出a数组所有类容,你的下标呢?
}
printf("\n");
reversal(a,10); /* 调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x */
for (i=0;i<10;i++)
{
printf("%d ",a); //这个是上面一样的,你数组的下标呢?
}
printf("\n");
getchar();
}
/*
*函数定义:你的参数类型呢?
*形参放的位置有往函数体放的么?
*C++是不能省略返回值,你的函数返回值呢?
*/
void reversal(int arr[],int nLen)
{
int m=(nLen-1)/2; /* 计算10个数需要循环几次,因为是两两调换第一个数组是x故应该是int(9/2) */
int temp,i,j; /* 建立零时变量temp用于每次交换处理时零时存储x的值 */
//我简单说下交换的算法
//1.计算出需要交换的两个数的下标
//2.用一个临时变量存放位置在前的数
//3.将位置在前的数替换为位置在后的数
//4.将临时变量中的数放入位置在后的数中
for (i=0;i<=m;i++)
{
j=nLen-i-1;
temp = arr;
arr = arr;
arr = temp;
}
}
/* 次题需要注意的是:这里由于a和x是共同享内存地址位的所以进行交换后a的实际值也就发生了改变 */
星之陨 发表于 2013-11-11 22:32 static/image/common/back.gif
确定是C++?扯谈了吧。。。
C++调用C标准库的话应该为的。。
C++标准库不应该是<iostream.h>? tmfish 发表于 2013-11-11 23:02 static/image/common/back.gif
这个代码真的是从书上复制的。:sweat:。不过还是谢谢你了。 叁er 发表于 2013-11-12 08:46 static/image/common/back.gif
C++标准库不应该是?
<iostream>用于输入输出,也不一定所有都需要噶,我意思是在C++里用C的标准头应该是<cstdio>而不是<stdio.h>噶,就像你要在C++里用C的<ctype.h>这个头,正确的写法应该是<cctype>这样噶~可以看下C++ Primer这本书噶~! /*
一般来说。C++头文件是在C的原头文件上去掉.h。
前面加上c。把所有函数都放进std命名空间
但是对于旧版编译器来说,可以用C的头文件(考虑到兼容问题),
新版编译器个人认为用最新的C++标准来使用最好,考虑到习惯命名空间这项功能
一般都会为主函数定义一个返回值(returned 0)来作为检测程序。
即
int main()
{
......;
return 0;
}
在函数定义的时候原文是这样写的
void reversal(x,n)
int x[],n; // 定义形式参数
其实这个是C语言中的 K&R 方法
一般我们都会同时定义
void reversal(int x[],int n)
文中出现这函数声明的地方是主函数,
或许你的编译器允许你这么做,
但为了兼容性,还有整体美观
应该在主函数上面声明这个函数。
说给编译器,你有这函数,让编译器去寻找
x并非数组名,而是一个指针常量,不能修改的值。
该值指向数组的开始地址
一般互换都是
t = a;
a = b;
b = t;
所以,这里应该是
j=n-1-i; // 反向计算出被调换的数组下标,例如x 对应的x就是x
temp=x;
x=x;
x=temp;
原文:
printf("%d ",a);
这里输出的是地址
应该是这样
printf("%d ",a);
*/
//修改后的程序
#include <cstdio>
void reversal(int x[],int n);
int main()
{
using std::printf;
int a = {0,1,2,3,4,5,6,7,8,9}; /* 建立一个数组并初始化 */
int i;
for (i=0;i<10;i++)
{
printf("%d ",a);
}
std::printf("\n");
reversal(a,10); /* 调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x */
for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");
return 0;
}
void reversal(int x[],int n) /* 定义形式参数 */
{
int m=(n-1)/2; /* 计算10个数需要循环几次,因为是两两调换第一个数组是x故应该是int(9/2) */
int temp,i,j; /* 建立零时变量temp用于每次交换处理时零时存储x的值 */
for (i=0;i<=m;i++)
{
j=n-1-i; /* 反向计算出被调换的数组下标,例如x 对应的x就是x */
temp=x;
x=x;
x=temp;
}
}
/*
评价:这个程序以本人来是作者经验不够
一般的数组都用宏定义(C语言)
或者用常量const(C++)来作为下标
而且程序带有浓厚的C语言
比如 K&R 定义函数
*/ 出书嘛,难免有不周全的时候。
你不懂的完全可以来论坛嘛,大家都热心的、 星之陨 发表于 2013-11-12 21:56 static/image/common/back.gif
用于输入输出,也不一定所有都需要噶,我意思是在C++里用C的标准头应该是而不是噶,就像你要在C++里用C的 ...
哦,懂你的意思了 C++编译器下的C语言 这不扯呢吗 顿时对自己充满信心~~{:7_168:}
页:
[1]