① 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]值的意思!