文档章节

Tech One

ucliaohh
 ucliaohh
发布于 2015/08/18 08:44
字数 1370
阅读 7
收藏 0

 

typedef 和 define 有什么区别

(1)用法不同:typedef 用来定义一种数据类型的别名,增强程序的可读性。define 主要用来定义

常量,以及书写复杂使用频繁的宏。

(2)执行时间不同:typedef 是编译过程的一部分,有类型检查的功能。define 是宏定义,是预编

译的部分,其发生在编译之前,只是简单的进行字符串的替换,不进行类型的检查。

(3)作用域不同:typedef 有作用域限定。define 不受作用域约束,只要是在 define 声明后的引用

都是正确的。

(4)对指针的操作不同:t ypedef 和 define 定义的指针时有很大的区别。

注意:typedef 定义是语句,因为句尾要加上分号。而 define 不是语句,千万不能在句尾加分号。


简述 strcpy、sprintf 与 memcpy 的区别

三者主要有以下不同之处:

(1) 操作对象不同, strcpy 的两个操作对象均为字符串, sprintf 的操作源对象可以是多种数据类型,

目的操作对象是字符串, memcpy  的两个对象就是两个任意可操作的内存地址,并不限于何种数据类型。

(2)执行效率不同,memcpy 最高,strcpy 次之,sprintf 的效率最低。

(3)实现功能不同,strcpy 主要实现字符串变量间的拷贝,sprintf 主要实现其他数据类型格式到字

符串的转化,memcpy 主要是内存块间的拷贝。

说明:strcpy、sprintf 与 memcpy 都可以实现拷贝的功能,但是针对的对象不同,根据实际需求,来

选择合适的函数实现拷贝功能。


数组和链表有以下几点不同:

(1)存储形式:数组是一块连续的空间,声明时就要确定长度。链表是一块可不连续的动态空间,

长度可变,每个结点要保存相邻结点指针。

(2)数据查找:数组的线性查找速度快,查找操作直接使用偏移地址。链表需要按顺序检索结点,

效率低。

(3)数据插入或删除:链表可以快速插入和删除结点,而数组则可能需要大量数据移动。

(4)越界问题:链表不存在越界问题,数组有越界问题。

说明:在选择数组或链表数据结构时,一定要根据实际需要进行选择。数组便于查询,链表便于插

入删除。数组节省空间但是长度固定,链表虽然变长但是占了更多的存储空间。


变量的声明和定义有什么区别

为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,

但是只在一个地方定义。加入 extern 修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分

定义。

说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,

如外部变量。

 //输入二个64位的十进制数,计算相乘之后的乘积

#include <iostream>
using namespace std;

#define MAX 100
int str_num(char str[]) //计算字符串的长度,等效于strlen(str);
{
    int i=0,num_str=0;
    while(str[i]!=0)
    {num_str++;
    i++;
    }
    return(num_str);
}
void place(int num_str,char str[]) //将字符串高低颠倒。
{
    int temp=0,i=0,j=0;
    for(i=0,j=num_str-1;i<j;i++,j--)
    {temp=str[j];
    str[j]=str[i];
    str[i]=temp;
    }
}
void transition(unsigned int a[],char str1[]) //数字字符转化为数字。
{
    int i=0;
    while(str1[i]!=0)
    {a[i]=str1[i]-'0';
    i++;
    }
}
void multiply_int(unsigned int a[],unsigned int b[],unsigned int c[]) //大数相乘算法,入口为整形数组。
{
    int i=0,j=0;
    for(i=0;i<MAX;i++)
        for(j=0;j<MAX;j++)
        {
            c[i+j]+=a[i]*b[j];
            c[i+j+1]+=c[i+j]/10;
            c[i+j]%=10;
        }
}
void output(int sign,unsigned int c[],int quan) //数据输出。
{
    int sign_temp=0,i=0;
    cout<<"The result is: ";
    if(sign==1)
        cout<<"-";
    for(i=MAX-1;i>-1;i--)
    {
        if(sign_temp==0)
        {if(c[i]!=0)
        sign_temp=1;
        }
        if(sign_temp==1)
        {
            if(i==quan-1)
                cout<<".";
            cout<<c[i];
            c[i]=0;
        }
    }
    cout<<endl;
}
void multiply_string(char str1[],char str2[],unsigned int c[]) //大数相乘,入口为字符串。
{
    unsigned int a[MAX]={0},b[MAX]={0};
    int sign=0;
    transition(a,str1);
    transition(b,str2);
    multiply_int(a,b,c);
}
int sign_comp(char str1[],char str2[]) //符号判断,如果为负数将作相应处理。
{
    int i=0,sign_num=0;
    if(str1[0]==45)
    {sign_num=!sign_num;
    for(i=0;i<MAX-1;i++)
        str1[i]=str1[i+1];
    }
    if(str2[0]==45)
    {sign_num=!sign_num;
    for(i=0;i<MAX-1;i++)
        str2[i]=str2[i+1];
    }
    return (sign_num);
}
int format(char str[]) //将输入的字符串进行格式化。以得到字符的一些标志信息和相应格式的新数据串。
{
    int point=0,quan=0,i=0,j,k=0,sign_point=0,num_str=0;
    num_str=str_num(str);
    while(str[i]!=0)
    {
        if(str[i]<'0'||str[i]>'9')
            if(str[i]!='.')
            {cout<<"data error"<<endl;
        return(-1);
        }
            else
            {point++;
        sign_point=i;
        }
        if(point>1)
        {cout<<"data error"<<endl;
        return(-1);
        }
        i++;
    }
    if(point==1)
    {
        for(j=sign_point;j<num_str;j++)
            str[j]=str[j+1];
        num_str--;
        quan=num_str-sign_point;
    }
    place(num_str,str);
    return(quan);
}
void clear(char str[]) //清空函数。
{
    int i;
    for(i=0;i<MAX;i++)
    {
        str[i]=0;
    }
}

void main(void) //主函数。
{
    char str1[MAX]={0},str2[MAX]={0};
    int quan1=0,quan2=0,sign=0;
    unsigned int c[MAX*2+1]={0};
    do
    {
        cout<<"Please input the first number:";
        cin>>str1;
        cout<<"Please input the second number:";
        cin>>str2;
        sign=sign_comp(str1,str2);
        quan1=format(str1);
        quan2=format(str2);
        if(quan1==-1||quan2==-1)
        {
            clear(str1);
            clear(str2);
        }
    }while(quan1==-1||quan2==-1||str1[0]==0||str2[0]==0);
    multiply_string(str1,str2,c);
    output(sign,c,quan1+quan2);
    system("pause");
}

© 著作权归作者所有

ucliaohh
粉丝 4
博文 121
码字总数 61946
作品 0
其它
高级程序员
私信 提问
用户和文件权限管理

实验环境: 公司的Linux主机即将提供给技术部作为开发服务器使用,根据部门内项目组的构成情况,首先需要建立相应的组账号、用户账号,并为相关目录设置权限;还需要设置一个共用的数据存储目...

常亚亚
2016/10/19
0
0
Win server 2012 R2 文件服务器--(二)权限设置

本次测试帐户信息如下: AD帐户:tech01(管理员)tech02tech03 AD安全组:IT-Group,成本包括:tech01tech02tech03 文件服务器安装完成后,根据用户的需求,我们进行以下操作: 打开服务器管...

技术小胖子
2017/11/06
0
0
Siege:压力模拟/测试工具

下载: wget ftp://sid.joedog.org/pub/siege/siege-latest.tar.gz 安装: %./configure ; make #make install siege包含了一组压力测试工具: SIEGE (1) Siege是一个HTTP压力测试和评测工具...

oschina
2008/09/15
3.7K
1
DNS服务-详解

DNS(Domain Name System)域名系统,在TCP/IP网络中有非常重要的地位,能够提供域名与IP地址的解析服务。 DNS域名解析工作原理 <1> 客户机提交域名解析请求,并将该请求发送给本地的域名服务...

wbf961127
2017/11/12
0
0
学习笔记-翻译资料:Android 2.3.3 近场通信NFC介绍

NFC(近场通信) NFC是一套短距离的无线通信,通常距离是4厘米或更短。NFC工作频率是13.56M Hz,传输速率是106kbit/s 到848kbit/s. NFC总是在一个发起者和一个被动目标之间发生。发起者发出近场...

王凡
2011/11/30
5.3K
2

没有更多内容

加载失败,请刷新页面

加载更多

新建作业20191011121223

2.编写一个程序,发出一声警报,然后打印下面的文本: Startled by the sudden sound,Sally shouted,"By the Great Pumpkin,what was that!" #include<stdio.h>int main(){printf("\a");......

电子197朱妍
18分钟前
2
0
家庭作业——苗钰婷

2 编写一个程序,发出一声警报,然后打印下面的文本: Startled by the sudden sound, Sally shouted, "By the Great Pumpkin, what was that! #include<stdio.h>int main(){......

OSC_Okruuv
39分钟前
6
0
经典系统设计面试题解析:如何设计TinyURL(一)

原文链接: https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
40分钟前
5
0
2.面向对象设计原则(7条)

开闭原则 开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。 实现方法 可以通过“抽象约束、封装变化”来实...

Eappo_Geng
42分钟前
8
0
8086汇编基础 debug P命令 一步完成loop循环

    IDE : Masm for Windows 集成实验环境 2015     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   ......

志成就
46分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部