C语言复习
2014-03-20 21:34
211 查看
程序通常以文件的方式存放在磁盘上,运行程序需要将程序装入内存,可执行文件中的主要部分是二进制编码的机器指令和数据,C语言需要通过编译器的编译成obj文件,然后通过链接程序链接库文件生成可执行程序。
编程:从键盘输入两个整数,输出最大者
注意scanf("%d%d",&a,&b),输入23 34,输出34。程序正确,但是输入23,34.输出错误,将函数改为scanf("%d,%d",&a,&b);程序正确,但输入23 34输出错误,下面解释其原因
在scanf("%d%d",&a,&b)中输入以空格,tab,space,为结束符,当遇到逗号时,会出现错误,所以输入23,34只能正确读入23,b不能正确读入。scanf("%d,%d",&a,&b)同理。
在用"%c"输入时空格和转义字符均作为有效字符
scanf的读取较为复杂,建议使用cin,下面解释cin的基本用法
输入原理:
程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入
cin.getline();
功能是:一次读取多个字符(包括空白字符),直到读满N-1个,或者遇到指定的结束符为止(默认的是以'\n'结束)。
例:
#include <iostream>
using namespace std;
int main()
{
char a[10];
cin.getline(a,10);
for(int i=0;i<10;i++)
cout<<a[i]<<" ";
}
输入:1234567890123
输出:1 2 3 4 5 6 7 8 9 _ (第10位存放字符串结束符'\0')
该函数有一个问题,当输入过多,超过读取的大小时,会将std::cin.fail()设置为1,失效,后面的输入都会出错,这时需要std::cin.clear()将输入回复,后面的输入会从上次输入后面读取。
另一种getline()
getline(istream,string),读取string中的内容
get()函数的用法如上。
程序:读入double数据,三角形的三条边计算面积
在读入和输出double数据时需要再f前加l,否则出现截位,输入输出错误
sizeof的几种用法:
在计算类型的字节时需要加上括号,否则出错
编程:从键盘输入两个整数,输出最大者
#include <iostream> int main() { int max(int,int); int a,b,m; scanf("%d%d",&a,&b); m=max(a,b); printf("the max of a and b is: %d",m); } int max(int a,int b) { if(a>b) return a; else return b; }
注意scanf("%d%d",&a,&b),输入23 34,输出34。程序正确,但是输入23,34.输出错误,将函数改为scanf("%d,%d",&a,&b);程序正确,但输入23 34输出错误,下面解释其原因
在scanf("%d%d",&a,&b)中输入以空格,tab,space,为结束符,当遇到逗号时,会出现错误,所以输入23,34只能正确读入23,b不能正确读入。scanf("%d,%d",&a,&b)同理。
在用"%c"输入时空格和转义字符均作为有效字符
scanf的读取较为复杂,建议使用cin,下面解释cin的基本用法
输入原理:
程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入
cin.getline();
istream& getline (char* s, streamsize n ); istream& getline (char* s, streamsize n, char delim );
功能是:一次读取多个字符(包括空白字符),直到读满N-1个,或者遇到指定的结束符为止(默认的是以'\n'结束)。
例:
#include <iostream>
using namespace std;
int main()
{
char a[10];
cin.getline(a,10);
for(int i=0;i<10;i++)
cout<<a[i]<<" ";
}
输入:1234567890123
输出:1 2 3 4 5 6 7 8 9 _ (第10位存放字符串结束符'\0')
该函数有一个问题,当输入过多,超过读取的大小时,会将std::cin.fail()设置为1,失效,后面的输入都会出错,这时需要std::cin.clear()将输入回复,后面的输入会从上次输入后面读取。
另一种getline()
getline(istream,string),读取string中的内容
single character (1) | int get(); istream& get (char& c); |
---|---|
c-string (2) | istream& get (char* s, streamsize n); istream& get (char* s, streamsize n, char delim); |
stream buffer (3) | istream& get (streambuf& sb); istream& get (streambuf& sb, char delim); |
程序:读入double数据,三角形的三条边计算面积
#include <iostream> #include "math.h" int main() { double a,b,c,s,area; scanf("%lf%lf%lf",&a,&b,&c); printf("%lf %lf %lf",a,b,c); s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("a=%7.2f,b=%7.2f,c=%7.2f",a,b,c); printf("\narea=%7.2f\n",area); }
在读入和输出double数据时需要再f前加l,否则出现截位,输入输出错误
sizeof的几种用法:
#include <stdio.h> int main() { int i=0; printf("length of int is: %d",sizeof(int)); //printf("length of int is: %d",sizeof int); printf("length of int is: %d",sizeof i); printf("length of int is: %d",sizeof(i)); }
在计算类型的字节时需要加上括号,否则出错