问题:对一个整型数组求和
要求:定义一个存储着n个元素的数组要求用C语言完成这个任务
- 用c语言来写
#include <stdio.h>
int addarray( int array[], int n ) ;
int main()
{
int data[]={0,1,2,3,4,5,6,7,8,9};
int size = sizeof(data)/ sizeof(data[ 0]);
printf("data: %d\n", sizeof (data));
printf("结果是:d\n", addarray(data,size));
return 0;
}
int addarray( int array[], int n )
{
int sum=0;
int i ;
printf("array: %d\n", sizeof(array));
for( i=0;i< n;i++)
{sum += array[i];}
return sum;
}
//data:40
//结果是:45
//array:4
用指针来实现
#include <stdio.h>
int addarray( int *array, int n ) ;
int main()
{ int data[]={0,1,2,3,4,5,6,7,8,9};
int size = sizeof(data)/ sizeof(data[ 0]);
printf("data: %d\n", sizeof (data));
printf("结果是:d\n", addarray(data,size)); return 0; }
int addarray( int *array, int n )
{ int sum=0;
int i ;
printf("array: %d\n", sizeof(array));
for( i=0;i< n;i++)
{sum += array[i];}
return sum; }
以上两个程序从本质上来说是相同的,我们得出结论:将函数的参数声明为数组和声明为指针是一样的。
- 现在我们来考虑一个新的问题:将该程序用C++来实现试试
#include <iostream> //c99
using namespace std;
int addarray( int *array, int n )
int main()
{ int data[]={0,1,2,3,4,5,6,7,8,9};
int size = sizeof(data)/ sizeof(data[ 0]);
cout<<"结果是:"<<addarray(data,size)<<endl;
return 0; }
int addarray( int *array, int n )
{ int sum=0;
int i ;
for( i=0;i< n;i++)
{sum += array[i];}
return sum; }
#include <iostream.h>// c92
//using namespace std;
这个小程序展示了C对象的第一次使用。对象在哪里?就是这个”cout“。
cout是一个输出流对象,它是” console out(控制台输出)“的缩写。是属于basic_ostream类的对象。 ostream类在iostream头文件中定义。
什么是输出流?其实也就是一个概念,在C++中引入了很多类似的概念:例如数据可以从键盘流入程序,又可以从程序流向屏幕、打印机等。
注意到“<<”这个符号,这个操作符不是C语言里位运算的左移操作符吗?难道在C++里边改规则了?
事实上不是这样的,它只不过体现了C+的另一个特点:支持重载。重载事实上就是允许我们按照不同的方式使用同一个操作符。
要求:编写一个程序,要求用户输入一串整数和任意数目的空格,这些整数必项位于同行中,但允许出现在该行中的任何位置当用户按下键盘上的“ Enter”键时,数据输入结束。程序自动对所有的整数进行求和并打印出结果。
#include <stdio. h>
#include <stdlib. h>
void main( )
{
int i ;
int sum=0;
char ch ;
printf("请输入一串整数和任意数目的空格:");
while( scanf("%d",&i) == 1 )
sum += i;
whiler((ch= getchar())== ' ') //屏蔽空格
;
if( ch ==' \n')
break;
ungetc( ch, stdin ); //将变量ch中存放的字符退回给stdin输入流
}
printf("结果是:%d",5um);
printf( "\n" );
system(" pause ");
}
#include <iostream>
using namespace std;
int main( )
{
int sum=0;
cout<<"请输入一串整数和任意数目的空格: " ;
int i;
while( cin >>i)
{
sum += i;
while( cin.peek() == ' ')
{ cin.get(); }
if( cin.peek()=='\n ')
{break;}
}
cout《"结果是:"《sum<<endl;
return 0;
}
这个程序使用了流对象cin。这个对象的类型是 istream,它知道如何从用户终端读取数据。
cin》i; cin输入操作符又称为提取操作符,它一次从输入流对象cin提取一个整数。
当用户进行键盘输入时,对应的字符将输入到操作系统的键盘缓冲区中。
这样,当用户点击键盘上的“ Enter”键时操作系统把键盘缓冲区的内容传输到cin流的内部缓冲区,“》”操作符随后从这个缓冲区提取需要的信息。
我们还发觉,如果用户不进行键盘的输入,程序将会阻塞。这是阻塞性( blocking)IO的例子。
" 》”最初定义为右移操作符,它在C++中进行了重载,当它按照这里所示的方式使用时它就用于从输入流对象提取信息。
另外,这个操作符对所有内建的数据类型都进行了重载,所以它可以从输入流对象提取出int,float, double型数据,也可以提取字符串等数据 。
在 while(cin>>i)中,麦达式cin》i返回输入流对象本身,也就是cin。但是,如果到还了文件尾或者提取操作符遇到一个非法值,这个源回值将是 false
- cin是
istream类的对象,那么cin同样具有一些方法,这些方法可以增强对于输入操作的控制,下边我们将通过简单的例子介绍cin的一些方法!
例子一:cin. .ignore()&cin. getline()
例子二:cin.get()&cin.peek( )
例子三:cin. gcount()&cin.read ()
#include <iostream>
using namespace std;
int main( )
{
char buf[20];
cin.ignore(7);
cin.getline( buf,10);
cout <<buf <<endl;
return 0;
}
//结果
// I love Fishc. com!
// Fishc.com
// Press any key to continue
#include <iostream>
using namespace std;
int main( )
{
char p;
cout《"请输入一段文本:\n "
while( cin.peek()!='\n ')
{
p= cin.get();
cout <<p;
}
cout < endl ;
return 0;
}
// 输出结果
// I love Fishc. com!
// Fishc.com Press any key to continue
#include <iostream>
using namespace std;
int main( )
{
const int SIZE=50;
char buf[SIZE];
cout《"请输入一段文本:";
cin.read( buf, 20) ;
cout《“字符串收集到的字符数为:" <<cin.gcount()<<endl;
cout《"输入的文本信息是:";
cout. write( buf, 20 ) ;
cout < endl ;
return 0;
//输入: I love fishc.com!!!!!!!!!
// 字符串收集到的字符数:20
// 的文本信息 : I love fish. com!!!!
下边再介绍几种关于cout对象的方法。同样我们通过实例在让大家快速认识!
实例一:cout. precision()
实例二: cout width()