Tech One

cedel:c declare(c调用约定)的缩写,是c和c++程序的缺省调用方式,规则是,从又向左的顺序压参数入,
由调用者把参数弹出栈,对于传入参数的内存栈是由调用者来维护的,正因为如此,
只有这种调用方式可以实现个数不定的入口参数(可变参数)。

stdcall:是pascal程序的缺省调用方式,规则是,按从右向左的顺序入栈,被调用的函数在返回前清理传送参数的内存栈。
上两者的主要区别是前者由调用者清理栈,后者由被调用的函数清理栈。当然函数名的修饰部分也是不同的。

fastcall:采用寄存器传递参数,特点就是快了。


1. 实模式,又叫实地址模式,CPU完全按照8086的实际寻址方法访问从00000h--FFFFFh(1MB大小)的地址范围的内存,
在这种模式下, CPU只能做单任务运行;
寻址公式为:物理地址=左移4位的段地址+偏移地址,
即:物理地址是由16位的段地址和16位的段内偏移地址组成的。
2. 保护模式,又叫内存保护模式,寻址采用32位段和偏移量,最大寻址空间4GB,
在这种模式下,系统运行于多任务,
设计这种模式的原因和好处是:保护模式增加了寻址空间,增加了对多任务的支持,
增加了段页式寻址机制的内存管理(分段机制使得段具有访问权限和特权级,
各应用程序和操作系统的代码和核心是被保护的,这也是多任务支持的实现关键和保护这个名字的由来)。
寻址过程为:物理地址=由段地址查询全局描述符表中给出的段基址+偏移地址,
即:物理地址由影像寄存器中的基址加上16位或者32位的偏移组成。


//统计字符串字母个数
int bIsWord=0;
int nCount=0;
for(int i=0;i<sizeof(str);i++)
{
   if((str[i]>='A' && str[i]<='Z') || (str[i]>='a' && str[i]<='z'))
   {
       if(!bIsWord) nCount++;
       bIsWord=1;
   }
   else
   {
       bIsWord=0;
   }
}
printf("%d",nCount);

---strcpy函数
#include <assert.h>
#include <stdio.h>
char*strcpy(char*strDest, constchar*strSrc)
{
assert((strDest!=NULL) && (strSrc !=NULL)); // 2分
char* address = strDest;   // 2分
while( (*strDest++=*strSrc++) !='\0' )       // 2分
NULL;
return address ;    // 2分
}

---strlen函数
#include<stdio.h>
#include<assert.h>
int strlen( constchar*str ) // 输入参数const
{
assert( str != NULL ); // 断言字符串地址非0
int len = 0;
while( (*str++) !='\0' )
{
len++;
}
return len;
}


//冒泡排序
void BubbleSort( int *arr, int n )
{
     int i, j, flag = 1;                // i,j控制循环,flag是个标志
     int temp(0);
     for( i=1; i<n && flag==1; i++ )    // 进行n-1次循环
     {
          flag = 0;                      // 每次开始flag置零
          for( j=0; j<n-i; j++ )
          {                              // 如果前一个数比后一个数大,交换位置
               if ( arr[j] > arr[j+1] )
               {
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                    flag = 1;  //如果有数据交换,则flag为1
               }
          }
     }
}

-------------------------------------八皇后---------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#define N 8

int column[N+1]; // 同栏是否有皇后,1表示有
int rup[2*N+1]; // 右上至左下是否有皇后
int lup[2*N+1]; // 左上至右下是否有皇后
int queen[N+1] = {0};
int num; // 解答编号

void backtrack(int); // 递回求解

int main(void) {
    int i;
    num = 0;

    for(i = 1; i <= N; i++)
        column[i] = 1;

    for(i = 1; i <= 2*N; i++)
        rup[i] = lup[i] = 1;

    backtrack(1);

    system("pause");
    return 0;
}

void showAnswer() {
    int x, y;
    printf("\n解答 %d\n", ++num);
    for(y = 1; y <= N; y++) {
        for(x = 1; x <= N; x++) {
            if(queen[y] == x) {
                printf(" Q");
            }
            else {
                printf(" .");
            }
        }
        printf("\n");
    }
}

void backtrack(int i) {
    int j;

    if(i > N) {
        showAnswer();
    }
    else {
        for(j = 1; j <= N; j++) {
            if(column[j] == 1 &&
                rup[i+j] == 1 && lup[i-j+N] == 1) {
                    queen[i] = j;
                    // 设定为占用
                    column[j] = rup[i+j] = lup[i-j+N] = 0;
                    backtrack(i+1);
                    column[j] = rup[i+j] = lup[i-j+N] = 1;
            }
        }
    }
}
--------------------------------------------------------------------------------------------------------

你可能感兴趣的:(Tech One)