① c語言 讀取一個中文文本文件中的一行,和另一個中文文本文件對比看裡面有沒有這行的這個詞
#include<cstdio>
#include<cstring>
#include<iostream>
usingnamespacestd;
chara[10000],b[10000];
intpre[10000];
voidprepare(char*t){
intj=pre[1]=0;
intm=strlen(t+1);
for(inti=2;i<=m;i++){
while(j&&t[j+1]!=t[i])j=pre[j];
pre[i]=(t[j+1]==t[i])?++j:j;
}
}
intKMP(char*a,char*b){
intj=0;
intcnt=0;
intn=strlen(a+1);
intm=strlen(b+1);
for(inti=1;i<=n;i++){
while(j&&b[j+1]!=a[i])j=pre[j];
if(b[j+1]==a[i])j++;
if(j==m){
cnt++;
j=pre[j];
}
}
returncnt;
}
intmain(){
freopen("text1.txt","r",stdin);
freopen("result.txt","w",stdout);
scanf("%s",b+1);
prepare(b);
intans=0;
freopen("text2.txt","r",stdin);
while(scanf("%s",a+1)!=EOF)ans+=KMP(a,b);
if(ans)printf("Wordsexistedintext2%dtimes ",ans);
elseputs("Notfound!");
fclose(stdout);
system("notepad.exeresult.txt");
fclose(stdin);
return0;
}
建議用KMP演算法,具體演算法可以看matrix67的blog。
http://www.matrix67.com/blog/archives/115
② c語言matrix怎麼用矩陣相乘
void arymul(int a[4][5], int b[5][3], int c[4][3])
{
int i, j, k;
int temp;
for(i = 0; i < 4; i++){
for(j = 0; j < 3; j++){
temp = 0;
for(k = 0; k < 5; k++){
temp += a[i][k] * b[k][j];
}
c[i][j] = temp;
printf("%d/t", c[i][j]);
}
printf("%d/n");
}
}
③ C語言為什麼要提供位運算用什麼功能
位運算有很多用處,比如說在搜索的時候壓縮狀態之類的,再比如說博弈論裡面的SG函數,給程序加速也經常使用,因為位運算更快,比如乘2如果寫成>>1就會快一些,整數除法也可以同理。具體的技巧還是要在演算法和題目中體會。
如果想了解更多你可以看一看信息學競賽Matrix67大牛的blog,上面有一系列文章:
位運算簡介及實用技巧(一):基礎篇
http://www.matrix67.com/blog/archives/263
位運算簡介及實用技巧(二):進階篇(1)
http://www.matrix67.com/blog/archives/264
位運算簡介及實用技巧(三):進階篇(2)
http://www.matrix67.com/blog/archives/266
位運算簡介及實用技巧(四):實戰篇
http://www.matrix67.com/blog/archives/268
④ 如何學習C語言
這個是代碼能力的問題,建議還是多寫寫代碼,寫多了就會了。建議到一些Online Judge上做做題,比較好的有poj(北大),zoj(浙大),usaco,Topcoder,等等。題做多了就會了。然後推薦下幾個網站吧,對學習有幫助的,csdn 裡面有個學生大本營,對你的學習會有很大幫助。還有就是matrix67的博客,上面關於c語言的東西也有一些,趣味性比較強的,學累了看一下。
⑤ 關於編程的入門的問題
建議先看這本如入門
清華大學出版社 譚浩強《C程序設計》
學好語言基礎
然後可以學學數據結構
清華大學出版社 《數據結構》
之後看演算法,推薦 機械工業出版社 《演算法導論》
可以看看Matrix67的博客
http://www.matrix67.com/blog/archives/118
有些東西自學很難理解的,最好有老師輔導。
⑥ 求n皇後c語言代碼啊,能在GUIDE上運行的。謝謝!
建議你看一下matrix67寫的二進制解n皇後,你一定會嘆為觀止。
http://www.matrix67.com/blog/archives/266
⑦ 如何實現位運算 表示0~63(C語言編程)真心一點也不會,頭疼~位運算怎麼用(萬謝)
for(inti=0;i<64;++i){
for(intj=32;j;j>>=1)
putchar(i&j?'1':'0');
putchar(' ');
}
手打的
C的話i j在外面定義= =
位運算的正確用法w
不懂可以去看看其他人的博客啊論文啊什麼的
隨便拉一篇來
http://www.matrix67.com/blog/archives/263
以上基礎
Orz Matrix67神犇
http://www.matrix67.com/blog/archives/264
http://www.matrix67.com/blog/archives/266
http://www.matrix67.com/blog/archives/268
這是更高端的用法【我猜你用不到】
⑧ c語言矩陣運算
#include<vector>
#include<iostream>
intmain()
{
usingnamespacestd;
intm,n,p;
vector<vector<int>>A,B,C;
cout<<"pleaseinputm,n,p"<<endl;
cin>>m>>n>>p;
vector<int>tmp;
intttp;
for(inti=0;i<m;i++)
{
for(intj=0;j<n;j++)
{
cin>>ttp;
tmp.push_back(ttp);
}
A.push_back(tmp);
tmp.clear();
}
for(inti=0;i<n;i++)
{
for(intj=0;j<p;j++)
{
cin>>ttp;
tmp.push_back(ttp);
}
B.push_back(tmp);
tmp.clear();
}
for(inti=0;i<m;i++)
{
for(intj=0;j<p;j++)
{
ttp=0;
for(intk=0;k<n;k++)
ttp=ttp+A[i][k]*B[k][j];
tmp.push_back(ttp);
}
C.push_back(tmp);
tmp.clear();
}
for(inti=0;i<m;i++)
{
for(intj=0;j<p;j++)
{
cout<<C[i][j]<<'';
}
cout<<endl;
}
system("pause");
}
現在是2017年10月15日,無意中回答了一道2011年12月09日的題,留念。
⑨ C語言問題(用指針來做)
#include <stdio.h>
#include <stdlib.h>
#define M 4
#define N 3
#define SIZE (M * N)
void transpose(int (*matrix)[],int (*trans_matrix)[]) //轉置矩陣
{
int i,j;
int *p;
p = *matrix;
for(i = 0;i < N;i++)
{
for(j = 0;j < M;j++) //把要轉置的矩陣的每一行的元素放到轉置後矩陣的每一列上
*(*trans_matrix + j * N + i) = *(p + i * M + j);
}
}
int max_value(int (*matrix)[]) //獲得最大值
{
int max;
int i,j;
int *p;
p = *matrix;
max = *p;
for(i = 0;i < SIZE - 1;i++)
if(max < *(p + i) )
max = *(p + i);
return max;
}
void input_matrix(int (*matrix)[]) //輸入矩陣元素
{
int i;
int *p;
p = *matrix;
printf("Enter the element of matrix:\n");
for(i = 0;i < SIZE;i++)
{
scanf("%d",p + i);
}
}
void print_matrix(int (*matrix)[],int m) //列印矩陣,m是一行有多少個數
{
int i;
int *p;
p = *matrix;
for(i = 0;i < SIZE;i++)
{
printf("%d\t",*(p + i));
if((i + 1) % m == 0)
printf("\n");
}
}
int main()
{
int matrix[M][N];
int trans_matrix[N][M];
input_matrix(matrix);
print_matrix(matrix,M);
transpose(matrix,trans_matrix);
printf("After transpose():\n");
print_matrix(trans_matrix,N);
printf("Max value is %d.\n",max_value(trans_matrix));
return 0;
}
注意的問題是二維數組名的意義是第一個元素也就是一個一維數組的地址,所以函數參數傳遞的是一位數組指針
運行結果:
Enter the element of matrix:
12
23
45
67
65
54
43
32
21
10
2
3
12 23 45 67
65 54 43 32
21 10 2 3
After transpose():
12 65 21
23 54 10
45 43 2
67 32 3
Max value is 67.
⑩ C語言中,二維數組matrix,*(matrix+1)+5為什麼是指向第二行第六個元素
因為它是二維數組不是一維數組!二維數組定義了:int a[m][n],腳標從0開始,那麼a[m]也就是第m-1行的第一個元素,相當於a[m][0],但是你不能直接*a[m]來輸出那個值,你必須要*a[m][0],才能輸出那個值!因為C語言語法規定了,對於二維數組,*a[m]這種寫法表示指針指向第m-1行,而不是取值,然後*a[m]+5 是代表在第m-1行中,取第5列的數值,這時,
*(*(matrix+1)+5)就是取值的意思
對於一維數組的話,*a[m]就是取a[m]值的意思!