北京大学计算概论课件2016lesson11-bit-fp
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sscanf(argv[i],"%f",&temp); ave += temp; } printf("The average is:%f",ave/(float)(i-1)); }
具体运行情况如下:
使用字符串检验、转换函数
int atoi( const char *string ); 将一个连续的数字串转换为 整数。
if ( arglist[i][j] < '0' || arglist[i][j] > '9' ){
printf("error input"); num=0; break;
} } arg[i-1] = atoi(arglist[i]); } if (num){ printf("I get %d numbers\n",i-1); for (j=0;j<i-1;j++)
将编译链接后的可执行程序拷贝到一个目录中, 通过命令行方式启动运行并输入不同的参数
利用字符串处理函数获得所需要的参数内容
例子1.2 通过sscanf()来得到所需要的数字内容
#include < stdio.h >
void main(int argc, char *argv[]) {
float ave=0,temp; for ( int i=1; i < argc; i++ ) // start from the second para {
声明函数指针的格式: 类型 (* 指针变量名)(参数列表);
例如: int (*fp) (int i,intj);
声名了一个函数指针。该函数指针可以指向带两个整数 变量且返回一个整数值的函数。
int add(int a,intb) {
return(a+b); }
fp = add;
//fp指向add函数
pf=add; else if (!strcmp(argv[0],"addc"))
pf = addc; else error = 2; }
//声明 fp //检查参数数目
//指向add //指向addc
if (!error){ pf(argv[1], argv[2], buffer); printf("result is:%s\n", buffer);
命令行参数、函数 指针、位运算、宏
Hu Junfeng 2016/10/26
第一部分 命令行参数
主函数一般同时接受一对参数: int argc, char* argv[]
argv[0] argv[1] argv[2] argv[3]
…… argv[argc-1]
程序名 参数1\0 参数2\0 参数3\0
} else
printf("error code:%d", error); }
The preprocessor
overview macros file inclusion conditional compilation
15
Preprocessor OvBaidu Nhomakorabearview
performs:
macro substitution conditional compilation inclusion of named files
void main(int num, char *arglist[]) {
int i,j,len,arg[10]; for (i=1;i<num;i++) //从第二个参数开始 {
// 检查字符串中有没有不是数字的字符出现。这里没有处理负数 len=strlen(arglist[i]); for ( int j=0; j < len; j++ ){
void main(int argc, char *argv[]) {
char buffer[80];
void (*pf)(char s1[],char s2[],char s3[]); if (argc!=3) error = 1; else{
if (!strcmp(argv[0],"add"))
参数 argc-1 \0
例子1.1 直接打印所有命令行参数
#include < stdio.h >
void main(int argc, char *argv[]) {
for ( int i=0; i < argc; i++ ) {
printf("parameter[%d]:%s\n",i,argv[i]); } }
i = atoi(st1);
//这里需要先对输入参数进行检查
j = atoi(st2);
sprintf(str,"%d",i+j);
}
void addc (char st1[],char st2[],char str[]) {
strcpy(str,st1); strcat(str,st2); }
#include < stdio.h > #include < stdlib.h > #include <string.h> void add (char st1[],char st2[],char str[]); void addc (char st1[],char st2[],char str[]); int error = 0;
函数指针的引用格式:
int i=(*fp)(para1,para2 ); //实际调用fp指向的函数
也可以简化为:
int i= fp(para1,para2 );
通过命令行参数来控制程序的执行
void add (char st1[],char st2[],char str[])
{
int i,j;
double atof( const char *string ); 将一个连续的数字串转 换为双精度浮点数。
为了避免使用时碰到错误输入的其他字符的干扰,应当先 对输入的字符串进行检查,也确认是连续的数字串
#include < stdio.h > #include < stdlib.h > #include < string.h >
printf("parameter[%d]:%d\n", j, arg[j]); } }
第二部分 函数指针
函数指针顾名思义就是指向函数的指针。 以同类型函数的地址作为值,可以通过间 接访问运算来访问所指向的函数。
函数指针的声明
在开始函数指针生命之前首先要了解一下函数的类 型。
函数的声明包含: 类型 函数名(参数表);三个部分组成
具体运行情况如下:
使用字符串检验、转换函数
int atoi( const char *string ); 将一个连续的数字串转换为 整数。
if ( arglist[i][j] < '0' || arglist[i][j] > '9' ){
printf("error input"); num=0; break;
} } arg[i-1] = atoi(arglist[i]); } if (num){ printf("I get %d numbers\n",i-1); for (j=0;j<i-1;j++)
将编译链接后的可执行程序拷贝到一个目录中, 通过命令行方式启动运行并输入不同的参数
利用字符串处理函数获得所需要的参数内容
例子1.2 通过sscanf()来得到所需要的数字内容
#include < stdio.h >
void main(int argc, char *argv[]) {
float ave=0,temp; for ( int i=1; i < argc; i++ ) // start from the second para {
声明函数指针的格式: 类型 (* 指针变量名)(参数列表);
例如: int (*fp) (int i,intj);
声名了一个函数指针。该函数指针可以指向带两个整数 变量且返回一个整数值的函数。
int add(int a,intb) {
return(a+b); }
fp = add;
//fp指向add函数
pf=add; else if (!strcmp(argv[0],"addc"))
pf = addc; else error = 2; }
//声明 fp //检查参数数目
//指向add //指向addc
if (!error){ pf(argv[1], argv[2], buffer); printf("result is:%s\n", buffer);
命令行参数、函数 指针、位运算、宏
Hu Junfeng 2016/10/26
第一部分 命令行参数
主函数一般同时接受一对参数: int argc, char* argv[]
argv[0] argv[1] argv[2] argv[3]
…… argv[argc-1]
程序名 参数1\0 参数2\0 参数3\0
} else
printf("error code:%d", error); }
The preprocessor
overview macros file inclusion conditional compilation
15
Preprocessor OvBaidu Nhomakorabearview
performs:
macro substitution conditional compilation inclusion of named files
void main(int num, char *arglist[]) {
int i,j,len,arg[10]; for (i=1;i<num;i++) //从第二个参数开始 {
// 检查字符串中有没有不是数字的字符出现。这里没有处理负数 len=strlen(arglist[i]); for ( int j=0; j < len; j++ ){
void main(int argc, char *argv[]) {
char buffer[80];
void (*pf)(char s1[],char s2[],char s3[]); if (argc!=3) error = 1; else{
if (!strcmp(argv[0],"add"))
参数 argc-1 \0
例子1.1 直接打印所有命令行参数
#include < stdio.h >
void main(int argc, char *argv[]) {
for ( int i=0; i < argc; i++ ) {
printf("parameter[%d]:%s\n",i,argv[i]); } }
i = atoi(st1);
//这里需要先对输入参数进行检查
j = atoi(st2);
sprintf(str,"%d",i+j);
}
void addc (char st1[],char st2[],char str[]) {
strcpy(str,st1); strcat(str,st2); }
#include < stdio.h > #include < stdlib.h > #include <string.h> void add (char st1[],char st2[],char str[]); void addc (char st1[],char st2[],char str[]); int error = 0;
函数指针的引用格式:
int i=(*fp)(para1,para2 ); //实际调用fp指向的函数
也可以简化为:
int i= fp(para1,para2 );
通过命令行参数来控制程序的执行
void add (char st1[],char st2[],char str[])
{
int i,j;
double atof( const char *string ); 将一个连续的数字串转 换为双精度浮点数。
为了避免使用时碰到错误输入的其他字符的干扰,应当先 对输入的字符串进行检查,也确认是连续的数字串
#include < stdio.h > #include < stdlib.h > #include < string.h >
printf("parameter[%d]:%d\n", j, arg[j]); } }
第二部分 函数指针
函数指针顾名思义就是指向函数的指针。 以同类型函数的地址作为值,可以通过间 接访问运算来访问所指向的函数。
函数指针的声明
在开始函数指针生命之前首先要了解一下函数的类 型。
函数的声明包含: 类型 函数名(参数表);三个部分组成