ch演算法
1. c語言中,如果ch='c',則ch的值是 1 0 真還是假
我知道有一個人寫了一些文章然後有人整理了下來。
他寫的東西都是代碼, 而且是非常詳細的注釋那種的。
這個人叫管寧
你可以到網上搜搜。
我這里有給你貼出來一點,你可以看看是否合你的意:
在c/c++中利用數組名作為函數參數傳遞排序和用指針進行排序的例子。
以下兩個例子要非常注意,函數傳遞的不是數組中數組元素的真實值而是數組在內存中的實際地址。
#include <stdio.h>
void main(void)
{
void reversal();
static int a[10] = ; /* 建立一個數組並初始化 */
int i;
for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");
reversal(a,10); /* 調用自定義涵數進行反向顯示排序,並把數組a的起始地址傳送給形式參數x */
for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");
}
void reversal(x,n)
int x[],n; /* 定義形式參數 */
{
int m=(n-1)/2; /* 計算10個數需要循環幾次,因為是兩兩調換第一個數組是x[0]故應該是int(9/2) */
int temp,i,j; /* 建立零時變數temp用於每次交換處理時零時存儲x的值 */
for (i=0;i<=m;i++)
{
j=n-1-i; /* 反向計算出被調換的數組下標,例如x[0] 對應的x[n-1-i]就是x[9] */
temp=x;
x=x[j];
x[j]=temp;
}
}
/* 次題需要注意的是:這里由於a[10]和x[10]是共同享內存地址位的所以進行交換後a[10]的實際值也就發生了改變 */
#include <stdio.h>
void main(void)
{
void reversal();
static int a[10] = ; /* 建立一個數組並初始化 */
int i;
for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");
reversal(a,10); /* 調用自定義涵數進行反向顯示排序,並把數組a的起始地址傳送給形式參數x */
for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");
}
void reversal(x,n)
int *x,n; /* 定義x為指針變數 */
{
int temp,*p,*i,*j; /* 這里需要注意的是temp用與交換的時候臨時存儲數據的 */
i = x; /* 利用指針變數i存儲數組a的起始地址 */
p = x + ((n-1)/2); /* 計算最後一次循環的時候數組a的地址 */
j = x + n - 1; /* 計算數組a也就是a[9]的結束地址好用於交換 */
for (;i<=p;i++,j--) /* 利用循環和指針進行數組元素值的交換 */
{
temp=*i; /* 用temp臨時存儲*i也就是循環中a實際的值 */
*i=*j;
*j=temp;
}
}
/* 此例同樣要注意到利用指針進行數組的操作同樣改變了實際數組各元素的值 */
==============================
c/c++中指針學習的兩個絕好例子
對於眾多人提出的c/c++中指針難學的問題做個總結:
指針學習不好關鍵是概念不清造成的,說的簡單點就是書沒有認真看,指針的學習猶如人在學習饒口令不多看多學多練是不行的,下面是兩個很經典的例子,很多書上都有,對於學習的重點在於理解*x和x的理解,他們並不相同,*x所表示的其實就是變數a本身,x表示的是變數a在內存中的地址,如果想明白可以輸出觀察cout<<*x"|"x;,當定義了int *x;後對x=&a的理解的問題。仔細閱讀和聯系下面的兩個例子我想指針問題就不是難點了!
#include <stdio.h>
main()
{
int a,b; /* 定義a,b兩個整形變數用於輸入兩個整數 */
int *point_1,*point_2,*temp_point; /* 定義三個指針變數 */
scanf("%d,%d",&a,&b); /* 格式化輸入a,b的值 */
point_1=&a; /* 把指針變數point_1的值指向變數a的地址 */
point_2=&b; /* 把指針變數point_2的值指向變數b的地址 */
if (a<b)
{
temp_point=point_1; /* 這里的temp_point是用於臨時存儲point_1的值也就是變數a的地址的 */
point_1=point_2; /* 把point_2的值賦予point_1 */
point_2=temp_point;
/* 由於point_1的值已經改變無法找到,利用前面臨時存儲的也就是temp_point找回原point_1的值賦予point_2,打到把point_1和point_2值對換的目的*/
}
printf("%d,%d",*point_1,*point_2); /* 利用*point_1和*point_2也就是分辨指向b和a的方法把值顯示自愛屏幕上 */
}
/* 此題需要注意和了解是的此法並沒有改變變數a,b的值只是利用指針變數分別存儲a和b的地址,然後再把那兩個指針變數的值對換一下其實就是存儲在
指針變數裡面a與b的地址對換,在利用*point_1和*point_2的方式把調換後的值顯示出來這里的*point_1實際就是a,此中演算法並非真的改變a,b的值,而是
利用指針進行地址交換達到大小排序的目的.
*/
#include <stdio.h>
main()
{
int a,b; /* 定義a,b兩個整形變數用於輸入兩個整數 */
int *point_1,*point_2; /* 定義三個指針變數 */
scanf("%d,%d",&a,&b); /* 格式化輸入a,b的值 */
point_1 = &a; /* 把指針變數point_1的值指向變數a的地址 */
point_2 = &b; /* 把指針變數point_2的值指向變數b的地址 */
compositor(point_1,point_2); /* 調用自定義的排序涵數,把a,b的地址傳遞給point_1和point_2 */
printf("%d,%d",a,b); /* 列印出a,b的值 */
}
static compositor(p1,p2)
int *p1,*p2; /* 定義形式參數p1,p2為指針變數 */
{
int temp; /* 建立臨時存儲變數 */
if (*p1<*p2) /* 如果*p1<p2,注意這里的*p1和*p2其實就是a和b */
{
temp = *p1; /* 利用變數temp用於臨時存儲*p1和就是a的值 */
*p1 = *p2; /* 將*p1的值也就是a的值換成*p2的值也就是b的值,等價於a=b */
*p2 = temp; /* 將*p2的值也就是temp的值等價於b=temp */
}
}
/* 注意:此題與上題不同的是,直接改變了a於b的值達到真實改變的目的 */
另外,團IDC網上有許多產品團購,便宜有口碑
2. ch是什麼函數呢
ch是雙曲函數。
在數學中,雙曲函數是一類與常見的三角函數(也叫圓函數)類似的函數。最基本的雙曲函數是雙曲正弦函數sinh和雙曲餘弦函數cosh,從它們可以導出雙曲正切函數tanh等,其推導也類似於三角函數的推導。雙曲函數的反函數稱為反雙曲函數。
注意:
許多曲線函數在對象建模、動畫軌跡的描述、數據和函數的圖形化以及其他圖形應用中是十分有用的。常見的曲線包括圓錐曲線、三角和指數函數、概率分布、通用多項式和樣條函數。
這些曲線的顯示可採用類似於前面討論的圓和橢圓函數來生成。沿曲線軌跡的位置可直接從表達式y =f (x)或參數方程中得到。此外,還可以使用增量中點演算法繪制用隱式函數f(x,y) = 0描述的曲線。
顯示一指定的曲線函數的簡單方法是使用直線段來逼近曲線。這時,對於要得到沿曲線軌跡的等距線段的端點位置,則可以使用參數表達式。也可以按曲線的斜率選擇獨立變數,而從顯式表達式中生成等距位置。假如y = f(x)斜率的絕對值小於1,就選擇x作為自變數並對相等的x增量計算y值;當斜率絕對值大於1時,要使用反函數x = f-1(Y)並在相同的y步長中計算x的值。
使用直線或曲線逼近法可以圖示離散坐標點的數據集,我們可以使用直線段來將離散點連結在一起,或採用線性回歸(最小二乘法),從而通過單個直線來擬合數據集。非線性最小二乘法用來顯示具有某些擬合函數(通常是多項式)的數據組。
像圓和橢圓一樣,許多函數具有對稱性,從而可以減少曲線軌跡上坐標位置的計算量。例如,正態分布函數關於中心位置(均值)是對稱的,沿正弦曲線一個循環的所有點可以從90°區間內的點生成。
3. 化學大π鍵的演算法大招是什麼
化學大π鍵的演算法大招是H2C=CH-CH=CH2。在多原子分子中如有相互平行的p軌道,它們連貫重疊在一起構成一個整體,p電子在多個原子間運動形成π型化學鍵,這種不局限在兩個原子之間的π鍵稱為離域π鍵,或共軛大π鍵,簡稱大π鍵,大π鍵是3個或3個以上原子彼此平行的p軌道從側面相互重疊形成的π鍵。
化學大π鍵的內容
在多原子分子中如有相互平行的p軌道,它們連貫重疊在一起構成一個整體,p電子在多個原子間運動形成π型化學鍵,這種不局限在兩個原子之間的π鍵稱為離域π鍵,或共軛大π鍵,簡稱大π鍵,在這類分子中,參與共軛體系的所有π電子的游動不局限在兩個碳原子之間,而是擴展到組成共軛體系的所有碳原子之間,這種現象叫做離域。
共軛π鍵也叫離域鍵或非定域鍵,由於共軛π鍵的離域作用,當分子中任何一個組成共軛體系的原子受外界試劑作用時,它會立即影響到體系的其它部分,共軛分子的共軛π鍵或離域鍵是化學反應的核心部位。
定域π鍵,有機分子中只包含 σ 鍵和孤立π 鍵的分子稱為非共軛分子,這些σ 鍵和孤立π 鍵,習慣地被看成是定域鍵,即組成σ 鍵的一對σ 電子和孤立π 鍵中一對π 電子近似於成對地固定在成鍵原子之間,這樣的鍵叫做定域鍵。
4. BF演算法中 s.ch[1] i=i-j+2怎麼理解
如圖。假設從pos位開始匹配,經過j(圖片錯了,是j不是i)次循環後遇到一個主串與子串不同的位置,匹配失敗。
那麼[-j]就是回到pos前的一個位置,再[+2]就是到pos的後一個位置。即從pos的後一個位置開始匹配。也可以這么理解,[i=i-(j-1)+1]。[j-(j-1)]就是回到pos,[+1]就是從pos的後一個位置開始匹配。
5. leadch演算法中融合率可以隨便設嗎
完整程序
#include<stdio.h>
void main(){
char ch,ch1,ch2,ch3; //字元變數
printf("input 3 characters:\n");
scanf("%c%c%c",ch1,ch2,ch3);
printf("%c%c%c\n",ch1,ch2,ch3);
ch=ch1>ch2?ch1:ch2;
ch=ch>ch3?ch:ch3;
printf("the result is: %c\n",ch);
}
其中ch,ch1,ch2,ch3均為字元變數
6. 請問匯編語言中001AH加0026H是多少怎麼算的A和H分別代表什麼呀還有CH什麼意思
H表示16進制,0-9,A-F表示10到15,計算就自己來吧
7. 8226H+8226H=1044CH 的過程是什麼算的為什麼相加後會得出一個CH又為什麼80086PC機會溢出,其結果為044CH
8226H+8226H=1044CH
意思是16進制的8226+16進制的8226=16進制的1044C
不是CH
H的意思是16進制
80086溢出可能是因為他只有4位吧 溢出之後1044C H 的1就顯示不了了
變成了044C H
8. c語言加密解密演算法
這里使用的是按位加密,按ASCII碼進行加密的演算法自己寫個,很容易的。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
void
dofile(char
*in_fname,char
*pwd,char
*out_fname);/*對文件進行加密的具體函數*/
void
usage(char
*name);
void
main(int
argc,char
*argv[])/*定義main()函數的命令行參數*/
{
char
in_fname[30];/*用戶輸入的要加密的文件名*/
char
out_fname[30];
char
pwd[10];/*用來保存密碼*/
if(argc!=4)
{/*容錯處理*/
usage(argv[0]);
printf("\nIn-fname:\n");
gets(in_fname);/*得到要加密的文件名*/
while(*in_fname==NULL)
{
printf("\nIn-fname:\n");
gets(in_fname);
}
printf("Password
6-8:\n");
gets(pwd);/*得到密碼*/
while(*pwd==NULL
||
strlen(pwd)>8
||
strlen(pwd)<6)
{
printf("Password
6-8:\n");
gets(pwd);
}
printf("Out-file:\n");
gets(out_fname);/*得到加密後你要的文件名*/
while(*in_fname==NULL)
{
printf("Out-file:\n");
gets(out_fname);
}
while(!strcmp(in_fname,out_fname))
{
printf("文件名不能和源文件相同\n");
printf("Out-file:\n");
gets(out_fname);
}
dofile(in_fname,pwd,out_fname);
printf("加密成功,解密請再次運行程序\n");
}
else
{/*如果命令行參數正確,便直接運行程序*/
strcpy(in_fname,argv[1]);
strcpy(pwd,argv[2]);
strcpy(out_fname,argv[3]);
while(*pwd==NULL
||
strlen(pwd)>8
||
strlen(pwd)<6)
{
printf("Password
faied!\n");
printf("Password
6-8:\n");
gets(pwd);
}
while(!strcmp(in_fname,out_fname))
{
printf("文件名不能和源文件相同\n");
printf("Out-file:\n");
gets(out_fname);
while(*in_fname==NULL)
{
printf("Out-file:\n");
gets(out_fname);
}
}
dofile(in_fname,pwd,out_fname);
printf("加密成功,解密請再次運行程序\n");
}
}
/*加密子函數開始*/
void
dofile(char
*in_fname,char
*pwd,char
*out_file)
{
FILE
*fp1,*fp2;
register
char
ch;
int
j=0;
int
j0=strlen(pwd);
fp1=fopen(in_fname,"rb");
if(fp1==NULL)
{
printf("cannot
open
in-file.\n");
exit(1);/*如果不能打開要加密的文件,便退出程序*/
}
fp2=fopen(out_file,"wb");
if(fp2==NULL)
{
printf("cannot
open
or
create
out-file.\n");
exit(1);/*如果不能建立加密後的文件,便退出*/
}
/*加密演算法開始*/
while(j0>=0)
{
ch=fgetc(fp1);
while(!feof(fp1))
{
fputc(ch^pwd[j>=j0?j=0:j++],fp2);/*異或後寫入fp2文件*/
ch=fgetc(fp1);
}
j0--;
}
fclose(fp1);/*關閉源文件*/
fclose(fp2);/*關閉目標文件*/
}
void
usage(char
*name)
{
printf("\t=======================File
encryption======================\n");
printf("\tusage:
%s
In-fname
password
out_fname\n",name);
printf("\tExample:
%s
file1.txt
12345678
file2.txt\n",name);
}
9. 1.編寫演算法刪除字元串s中值等於ch的一個字元 2.編寫演算法刪除字元串s中值等於ch的所有字元
//從s中刪除一個字元ch
void delchar(char *s, char ch)
{
while(*s)
{
if(*s == ch) //找到第一個ch
break;
s++;
}
while(*s) //開始刪除
{
*s = *(s+1);
s++;
}
}
//從s中刪除全部ch
void del_chars(char *s, char ch)
{
char *p_read = s;
char *p_write = s;
while(*p_read)
{
if(*p_read != ch) //不為ch的寫入(為ch的跳過)
{
*p_write = *p_read;
p_write++;
}
p_read++;
}
*p_write = 0; //最後補\0
}