A. c语言必背代码有哪些
1、/*输出9*9口诀。共9行9列,i控制行,j控制列。*/
#include "stdio.h"
main()
{int i,j,result;
for (i=1;i<10;i++)
{ for(j=1;j<10;j++)
{
result=i*j;
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
}
printf(" ");/*每一行后换行*/
}
}
5、/*下面程序的功能是将一个4×4的数组进行逆时针旋转90度后输出,要求原始数组的数据随机输入,新数组以4行4列的方式输出,
请在空白处完善程序。*/
main()
{ int a[4][4],b[4][4],i,j; /*a存放原始数组数据,b存放旋转后数组数据*/
printf("input 16 numbers: ");
/*输入一组数据存放到数组a中,然后旋转存放到b数组中*/
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{ scanf("%d",&a[i][j]);
b[3-j][i]=a[i][j];
}
printf("array b: ");
for(i=0;i<4;i++)
{ for(j=0;j<4;j++)
printf("%6d",b[i][j]);
printf(" ");
}
}
6、/*编程打印直角杨辉三角形*/
main()
{int i,j,a[6][6];
for(i=0;i<=5;i++)
{a[i][i]=1;a[i][0]=1;}
for(i=2;i<=5;i++)
for(j=1;j<=i-1;j++)
a[i][j]=a[i-1][j]+a[i-1][j-1];
for(i=0;i<=5;i++)
{for(j=0;j<=i;j++)
printf("%4d",a[i][j]);
printf(" ");}
}
7、/*通过键盘输入3名学生4门课程的成绩,
分别求每个学生的平均成绩和每门课程的平均成绩。
要求所有成绩均放入一个4行5列的数组中,输入时同一人数据间用空格,不同人用回车
其中最后一列和最后一行分别放每个学生的平均成绩、每门课程的平均成绩及班级总平均分。*/
#include <stdio.h>
#include <stdlib.h>
main()
{ float a[4][5],sum1,sum2;
int i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%f",&a[i][j]);
for(i=0;i<3;i++)
{ sum1=0;
for(j=0;j<4;j++)
sum1+=a[i][j];
a[i][4]=sum1/4;
}
B. 请问哪里有C语言程序源代码要比较长一点的。
#include<stdio.h>
#include<stdlib.h>
int next[50]; //存储next值的数组
int nextval[50];
typedef struct
{
char *ch;
int length; //串长度
}HString;
void StrAssign(HString *T,char *chars) //生成一个值等于串常量chars的串T
{
int i,j;
char *c;
if(T->ch)
free(T->ch); //释放T原有空间
for(i=0,c=chars; *c; ++i,++c) //求chars长度
;
if(!i)
{
T->ch = NULL;
T->length = 0;
}
else
{
if(!(T->ch=(char*)malloc((i+1)*sizeof(char))))
exit(1);
for(j=0;j<i;++j)
T->ch[j] = chars[j];
T->ch[i] = '\0';
T->length = i;
}
}
int StrLength(HString s) //返回S的元素个数,称串的长度
{
return s.length;
}
int StrCompare(HString S,HString T) //串比较
{
//若S>T,则返回值>0;若S=T,则返回值=0,若S<T,则返回值<0;
int i;
for(i=0; i<S.length && i<T.length; ++i)
if(S.ch[i]!=T.ch[i])
return S.ch[i] - T.ch[i];
return S.length - T.length;
}
void ClearString(HString *S) //将S清为空串
{
if(S->ch)
{
free(S->ch);
S->ch = NULL;
}
S->length = 0;
}
void Concat(HString *T,HString s1,HString s2)
{
//用T返回由s1,s2联接而成的新串
int i,j;
if(T->ch) free(T->ch); //释放旧空间
if(!(T->ch=(char*)malloc((s1.length+s2.length)*sizeof(char))))
exit(1);
T->length = s1.length + s2.length;
for(i=0;i<s1.length;++i)
T->ch[i] = s1.ch[i];
for(j=0;j<s2.length;++j,++i)
T->ch[i] = s2.ch[j];
}
void SubString(HString *sub,HString s,int pos,int len)
{
//用sub返回串s的第pos个字符起长度为len的子串
//其中,1<=pos<=strlenth(s)且0<=len<=strlength(s)-pos + 1.
int i,j;
if(pos<1 || pos>s.length || len<0 || len>s.length-pos+1)
{
printf("SubString's Location error!\n");
exit(1);
}
if(sub->ch) free(sub->ch); //释放旧空间
if(!len)
{
sub->ch = NULL; sub->length = 0;
}
else
{
sub->ch = (char*)malloc((len+1)*sizeof(char));
for(i=0,j=pos-1;j<=pos+len-2;++i,++j)
sub->ch[i] = s.ch[j];
sub->length = len;
sub->ch[sub->length] = '\0';
}
}
void get_next(char *chars,int next[]) //生成next值的函数
{
int i,j,temp;
i = 1;
j = 0;
next[1] = 0;
while(chars[i])
{
if(j==0 && i==1) //第二位的next应该都为1
{
++i;++j;
next[i] = j;
}
else if(chars[i-1]!=chars[next[i]-1])//当测试next值上的数据与当前数据不等时进行
{
j = next[i]; //取得next值
while(chars[j-1]!=chars[i-1]) //如当前的值,与下一next值也不同,j值继续后退
{
temp = j; //取得前一next值
j = next[j]; //前一next值
if(j<=0)
{
next[i+1] = 1;
++i;
break;
}
else if(chars[j-1]==chars[i-1])
{
next[i+1] = next[temp] + 1;//这里temp与J总是相隔一个位,所以是next[temp]
++i;
break;
}
}
}
else if(chars[i-1]==chars[next[i]-1]) //当测试next值上的数据与当前数据相等时进行
{
next[i+1] = next[i] + 1;
++i;
}
printf("next[%d]=%d\n",i,next[i]);
}
}
void next_change(char *chars,int nextval[])
{
int i,j,temp;
i = 1;
nextval[1] = 0;
for(j=1;chars[j];++j)
{
temp = next[j+1]; //取得当前的next[X]值
if(chars[j]==chars[temp-1]) //比较J位置上与相对于J位置的NEXT位上的元素值是否相等
{
nextval[j+1] = nextval[temp]; //如相等则将前面的nextval值赋给当前nextval的值
}
else nextval[j+1] = temp; //不相等则保留原next[]中的值
}
}
int Index(HString S,HString T,int pos)
{
int i,j;
i = pos-1;
j = 0;
get_next(T.ch,next);
next_change(T.ch,nextval);
while(i<=S.length && T.ch[j]) //字符串没到结尾不结束查找
{
if(S.ch[i]==T.ch[j])//相等则一起后移
{
i++;j++;
}
else if(S.ch[i]!=T.ch[j])
{
j = nextval[j+1]-1;//不相等时取得next值-1因为
//next是按1,2,3...算所以要-1
if(j<=0 && S.ch[i]!=T.ch[j])
{
i++;//J移到next值上如值是<0则i向前移
j = 0;//因为j可以变成小于0
}
}
}
if(j>=T.length) return i-T.length+1;
else return 0;
}
void StrInsert(HString *s,int pos,HString T) //在pos位置插入字符串T
{
int i,j;
if(pos<1 || pos>(s->length+1))
{
printf("strInsert's Location error!\n");
exit(1);
}
if(T.length)
s->ch = (char*)realloc(s->ch,(s->length+T.length+1)*sizeof(char)); //增加S的空间
for(j=s->length;j>=pos-1;--j) //POS位置到最后的字符往后移
s->ch[j+T.length] = s->ch[j];
for(i=0;i<T.length;++i) //T复制到S
{
s->ch[i+pos-1] = T.ch[i];
}
s->length = s->length + T.length;
}
void StrDelete(HString *s,int pos,int len)//S存在,从S中删除第POS个字符起长度为LEN的子串
{
int i,j;
if(pos<1 || pos>s->length-len) //判断删除位置是否合理
printf("delete Location error!\n");
else
{
for(i=pos+len-1,j=0;i<s->length;++i,++j) //删除中间元素,后面的元素往前移
s->ch[pos-1+j] = s->ch[i];
s->length = s->length - len;
s->ch[s->length] = '\0';
}
}
void Replace(HString *s,HString t,HString v) //将V替换掉S中的T
{
int i;
i = Index(*s,t,1);
while(i>0)
{
StrDelete(s,i,t.length);
StrInsert(s,i,v);
i = Index(*s,t,1);
}
}
void display(HString s)
{
printf("the string is :%s\n",s.ch);
}
int main(void)
{
HString obj,obj2,obj3,obj4;
obj.ch = NULL;//(char*)malloc(sizeof(char));
obj2.ch = NULL;
obj3.ch = NULL;
obj4.ch = NULL;
StrAssign(&obj,"august");
StrAssign(&obj2,"yx");
StrAssign(&obj4,"ax");
display(obj);
display(obj2);
SubString(&obj3,obj,3,3);
display(obj3);
StrInsert(&obj3,1,obj2);
display(obj3);
Replace(&obj3,obj2,obj4);
display(obj3);
StrDelete(&obj3,1,3);
display(obj3);
return 0;
}
C. 较复杂的c语言程序设计源代码
一个“歼灭敌机”的小游戏,DEVc++通过编译:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#define zlx 10 //增量坐标(x)让游戏框不靠边
#define zly 3 //增量坐标(y)让游戏框不靠边
#define W 26 //游戏框的宽度
#define H 24 //游戏框的高度
int jiem[22][22]={0}, wj=10; //界面数组, 我机位置(初值为10)
int speed=4,density=30, score=0,death=0; //敌机速度, 敌机密度, 玩家成绩,死亡次数
int m=0,n=0; // m,n是控制敌机的变量
void gtxy (int x, int y) //控制光标位置的函数
{ COORD pos;
pos.X = x; pos.Y = y;
SetConsoleCursorPosition ( GetStdHandle (STD_OUTPUT_HANDLE), pos );
}
voidColor(inta) //设定颜色的函数(a应为1-15)
{ SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE), a ); }
void yinc(int x=1,int y=0) //隐藏光标的函数
{ CONSOLE_CURSOR_INFO gb={x,y}; //y设为0即隐藏
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &gb);
}
void csh( ) //初始化函数
{ int i;
Color(7);
gtxy(zlx,zly); printf("╔"); gtxy(zlx+W-2,zly); printf("╗"); //左上角和右上角的框角
gtxy(zlx,zly+H-1); printf("╚"); gtxy(zlx+W-2,zly+H-1); printf("╝"); //下边两框角
for(i=2;i<W-2;i+=2) {gtxy(zlx+i,zly); printf("═"); } //打印上横框
for(i=2;i<W-2;i+=2) {gtxy(zlx+i,zly+H-1); printf("═"); } //打印下横框
for(i=1;i<H-1;i++) { gtxy(zlx,zly+i); printf("║"); } //打印左竖框
for(i=1;i<H-1;i++) {gtxy(zlx+W-2,zly+i); printf("║"); } //打印右竖框
Color(14); gtxy(19,2); printf("歼灭敌机"); Color(10);
gtxy(37,5); printf("设置:Esc ");
gtxy(37,7); printf("发射:↑ ");
gtxy(37,9); printf("控制:← → ");
gtxy(37,11);printf("得分:%d",score);
gtxy(37,13); printf("死亡:%d",death);
yinc(1,0);
}
void qcjm( ) //清除界面函数
{int i,j;
for(i=0;i<H-2;i++)
for(j=0;j<W-4;j++){gtxy(zlx+2+j,zly+1+i);printf(" ");}
}
void feiji( ) //飞机移动函数
{int i,j;
for(i=21;i>=0;i--) //从底行往上是为了避免敌机直接冲出数组
for(j=0;j<22;j++)
{if(i==21&&jiem[i][j]==3)jiem[i][j]=0; //底行赋值0 以免越界
if(jiem[i][j]==3)jiem[i][j]=0, jiem[i+1][j]=3;
}
if(jiem[20][wj]==3&&jiem[21][wj]==1) death++;
}
void zidan( ) //子弹移动函数
{ int i,j;
for(i=0;i<22;i++)
for(j=0;j<22;j++)
{if(i==0&&jiem[i][j]==2) jiem[i][j]=0;
if(jiem[i][j]==2) {if(jiem[i-1][j]==3) score+=100,printf("7");
jiem[i][j]=0,jiem[i-1][j]=2; }
}
}
void print( ) //输出界面函数
{int i,j;
qcjm( );
for(i=0;i<22;i++)
for(j=0;j<22;j++)
{ gtxy(12+j,4+i);
if(jiem[i][j]==3) {Color(13);printf("□");}
if(jiem[i][j]==2) {Color(10);printf(".");}
if(jiem[i][j]==1) {Color(10);printf("■");}
}
gtxy(37,11); Color(10);printf("得分:%d",score);
gtxy(37,13); printf("死亡:%d",death);
}
void setting( ) //游戏设置函数
{ qcjm( );
gtxy(12,4);printf("选择敌机速度:");
gtxy(12,5);printf(" 1.快 2.中 3.慢>>");
switch(getche( ))
{case '1': speed=2; break;
case '2': speed=4; break;
case '3': speed=5; break;
default: gtxy(12,6);printf(" 错误!默认值");
}
gtxy(12,7);printf("选择敌机密度:");
gtxy(12,8);printf(" 1.大 2.中 3.小>>");
switch(getche( ))
{case '1': density=20; break;
case '2': density=30;break;
case '3': density=40; break;
default: gtxy(12,9);printf(" 错误!默认值");
}
for(int i=0;i<22;i++)
for(int j=0;j<22;j++) jiem[i][j]=0;
jiem[21][wj=10]=1; jiem[0][5]=3;
gtxy(12,10);printf(" 按任意键保存...");
getch( );
qcjm( );
}
void run( ) //游戏运行函数
{ jiem[21][wj]=1; //值为1代表我机(2则为子弹)
jiem[0][5]=3; //值为3代表敌机
SetConsoleTitle("歼灭敌机"); //设置窗口标题
while(1)
{if (kbhit( )) //如有键按下,控制我机左右移动、发射或进行设定
{int key;
if((key=getch( ))==224) key=getch( );
switch(key)
{case 75: if(wj>0) jiem[21][wj]=0,jiem[21][--wj]=1; break;
case 77: if(wj<20)jiem[21][wj]=0,jiem[21][++wj]=1;break;
case 72: jiem[20][wj]=2; break;
case 27: setting( );
}
}
if(++n%density==0) //控制产生敌机的速度
{ n=0;srand((unsigned)time(NULL));
jiem[0][rand( )%20+1]=3;
}
if(++m%speed==0) { feiji( ); m=0; } //控制敌机移动速度(相对子弹而言)
zidan( ); //子弹移动
print( ); //输出界面
Sleep(120); //延时120毫秒
}
}
int main( )
{csh( );
run( );
return 0;
}
D. 求一个c语言代码,要就是长
//C++轻重链剖分代码有指针
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
usingnamespacestd;
constintdebug_mode=false;
//intMax(inta,intb){returna>b?a:b;}
//intMin(inta,intb){returna>b?b:a;}
//
constintN=300012;
intn,m;
inta[N+N],delta[N+N],b[N+N];
voipdate(intx){
a[x]=a[x<<1]+a[x*2+1];
b[x]=max(b[x<<1],b[x*2+1]);
}
voidbuild(intx,ints,intt){
if(s==t){a[x]=0;b[x]=0;return;}
intmid=(s+t)>>1;
build(x<<1,s,mid);
build(x*2+1,mid+1,t);
update(x);
}
voidchange(intx,ints,intt,intpos,intkey){
if(s==t&&s==pos){a[x]=key;b[x]=key;return;}
intmid=(s+t)>>1;
if(pos<=mid)change(x<<1,s,mid,pos,key);elsechange(x*2+1,mid+1,t,pos,key);
update(x);
}
intquery(intx,ints,intt,intl,intr){
if(l<=s&&t<=r)returnb[x];
intmid=s+t>>1;intans=-0x7fffffff;
if(l<=mid)ans=max(ans,query(x<<1,s,mid,l,r));
if(r>mid)ans=max(ans,query(x*2+1,mid+1,t,l,r));
returnans;
}
intquerysum(intx,ints,intt,intl,intr)
{
if(l<=s&&t<=r) returna[x];
intmid=s+t>>1;intans=0;
if(l<=mid) ans+=querysum(x<<1,s,mid,l,r);
if(r>mid) ans+=querysum(x*2+1,mid+1,t,l,r);
returnans;
}
//
structedge{intu,v,;edge*next;boolinuse;}e[N],*P=e,*point[N];
inlinevoidadd_edge(intx,inty){
edge*Q=++P;++P;
P->u=x;P->v=y;P->next=point[x];point[x]=P;Q->u=y;Q->v=x;Q->next=point[y];point[y]=Q;P->inuse=Q->inuse=true;
}
introot,size[N],dep[N],top[N],fa[N],son[N],w[N],va[N];
voiddfs1(intfather,intx,intdepth)
{
fa[x]=father;
dep[x]=depth;
size[x]=1;
intsum=0,max=-1,maxi=son[x]=0;
for(edge*j=point[x];j;j=j->next)
{
if(j->v==fa[x]) continue;
dfs1(x,j->v,depth+1);
sum+=size[j->v];
if(size[j->v]>max)maxi=j->v,max=size[j->v];
}
size[x]+=sum;
if(maxi) son[x]=maxi;
}
inttotw=0;
voiddfs2(intv,intTop)
{
w[v]=++totw;top[v]=Top;
if(son[v]) dfs2(son[v],top[v]);
for(edge*j=point[v];j;j=j->next)
if(j->v!=fa[v]&&j->v!=son[v])
dfs2(j->v,j->v);
}
intQmax(intu,intv)
{
intret=-0x7fffffff;
while(1)
{
intf1=top[u],f2=top[v];
if(f1==f2)
{
if(u==v) returnmax(ret,query(1,1,n,w[u],w[u]));
if(dep[u]>dep[v]) swap(u,v);
ret=max(ret,query(1,1,n,w[u],w[v]));
returnret;
}else
{
if(dep[f1]<dep[f2])swap(f1,f2),swap(u,v);
ret=max(ret,query(1,1,n,min(w[u],w[f1]),max(w[u],w[f1])));
u=fa[f1];
continue;
}
}
}
intQsum(intu,intv)
{
intret=0;
while(1)
{
intf1=top[u],f2=top[v];
if(f1==f2)
{
if(u==v) returnret+va[u];
ret+=querysum(1,1,n,min(w[u],w[v]),max(w[u],w[v]));
returnret;
}else
{
if(dep[f1]<dep[f2])swap(f1,f2),swap(u,v);
//uf1
ret+=querysum(1,1,n,w[f1],w[u]);
u=fa[f1];f1=top[u];
continue;
}
}
}
voiddebug(inti)
{
if(!debug_mode) return;
cout<<i<<"-----------"<<endl;
cout<<"fa[x]:"<<fa[i]<<endl;
cout<<"size[x]:"<<size[i]<<endl;
cout<<"dep[x]:"<<dep[i]<<endl;
cout<<"son[x]:"<<son[i]<<endl;
cout<<"top[x]:"<<top[i]<<endl;
cout<<"w[x]:"<<w[i]<<endl;
}
intmain()
{
//freopen("bz1036.in","r",stdin);freopen("bz1036.out","w",stdout);
scanf("%d",&n);
for(inti=1;i<n;i++)
{
intx,y;
scanf("%d%d",&x,&y);
add_edge(x,y);
if(i==1) root=x;
}
for(inti=1;i<=n;i++) scanf("%d",&va[i]);
dfs1(0,root,1);
dfs2(root,root);
for(inti=1;i<=n;i++) change(1,1,n,w[i],va[i]);
//for(inti=1;i<=n;i++) debug(i);
intt;
scanf("%d",&t);
while(t--)
{
charcom[7];scanf("%s",com);
inta,b;scanf("%d%d",&a,&b);
switch(com[1])
{
case'M':
printf("%d ",Qmax(a,b));
break;
case'S':
printf("%d ",Qsum(a,b));
break;
case'H':
va[a]=b;
change(1,1,n,w[a],b);
break;
}
}
}
//一个资源管理器模拟的代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<vector>
usingnamespacestd;
intidtop=0;
structfile
{
intid;
stringname;
boolis_folder;
intfather;
}files[2001],*root=files;
vector<int>ct[2001];//content
inthistory[10005],htop=0,hcur=0;
intcurrent;
stringrem[2001];
stringprefix(intdepth)
{
if(rem[depth]!="") returnrem[depth];
stringret;
for(intd=1;d<=depth;d++) ret+="..";
returnrem[depth]=ret;
}
voidprint(intid,intdepth)
{
//cout<<depth<<endl;
cout<<prefix(depth)<<"\"<<files[id].name<<endl;//../folder
for(inti=0;i<ct[id].size();i++)
{
if(files[ct[id][i]].is_folder)print(ct[id][i],depth+1);
else cout<<prefix(depth+1)<<files[ct[id][i]].name<<endl;
}
}
intnewFile(boolisf,stringname)
{
for(inti=0;i<ct[current].size();i++)
if(files[ct[current][i]].name==name&&files[ct[current][i]].is_folder==isf) return-1;
files[++idtop].id=idtop;
files[idtop].name=name;
files[idtop].father=current;
files[idtop].is_folder=isf;
ct[current].push_back(idtop);
if(isf)
{
current=idtop;
history[htop=++hcur]=idtop;
}
return1;
}
intenter(stringpath)
{
intposi=0,cur_bk=current;
if(path[0]=='\'||path[path.length()-1]!='\')
{
return-1;
}
else
{
//分离pathenter
while(posi<path.length())
{
stringsplit="";intcurlen=0;
while(posi<path.length())
{
chars=path[posi];
if(path[posi]!='\') split+=path[posi],posi++,curlen++;
else
{
posi++;
if(curlen==0) {current=cur_bk;return-1;}
boolfound=false;
for(inti=0;i<ct[current].size();i++)
if(files[ct[current][i]].name==split)
{
if(files[ct[current][i]].is_folder==false) continue;
found=true;
current=ct[current][i];
break;
}
if(!found) {current=cur_bk;return-1;}
break;
}
}
history[htop=++hcur]=current;
}
return1;
}
}
intback()
{
if(hcur)
{
current=history[--hcur];
return1;
}else
{
return-1;
}
}
intfore()
{
if(hcur>=htop)
{
return-1;
}else
{
current=history[++hcur];
return1;
}
}
intup()
{
if(files[current].father==-1) return-1;
else
{
current=files[current].father;
history[htop=++hcur]=current;
}
}
voidinit()
{
for(inti=0;i<35;i++) rem[i]="";
root->id=0;root->name="exp";root->father=-1;root->is_folder=true;
history[0]=0;
current=0;
}
#defineWrongprintf("%s ","WRONGCOMMAND.");
intmain()
{
//freopen("explorer.in","r",stdin);
//freopen("explorer.out","w",stdout);
init();
intn;
scanf("%d",&n);
while(n--)
{
stringcom;
cin>>com;
if(com=="back")
{
if(back()==-1) Wrong;
continue;
}
if(com=="fore")
{
if(fore()==-1) Wrong;
continue;
}
if(com=="up")
{
if(up()==-1) Wrong;
continue;
}
if(com=="print")
{
print(0,0);
continue;
}
if(com=="new")
{
getchar();
charcomd[51];boolisf=false;stringfname="";
gets(comd);
for(inti=0;i<strlen(comd);i++)
{
if(comd[i]=='')
{
isf=true;
continue;
}
if(isf)
{
fname+=comd[i];
}
}
if(isf)
{
switch(comd[0])
{
case'0':
if(comd[1]!='')
{
Wrong;
continue;
}
isf=false;
break;
case'1':
if(comd[1]!='')
{
Wrong;
continue;
}
break;
default:
Wrong;
continue;
}
}else
{
for(inti=0;i<strlen(comd);i++)
fname+=comd[i];
}
if(newFile(isf,fname)==-1) Wrong;
continue;
}
if(com=="enter")
{
stringpath;
cin>>path;
if(enter(path)==-1) Wrong;
continue;
}
}
}
E. 简单的C语言120行左右代码
注释部分你可以不要,这样算下来也就120左右了,给你不删掉的原因是你可以理解它的作用,如果可以请采纳!!
#include<stdio.h>
#include<stdlib.h>
typedefstructListNode
{//单链表存储结构
intdata;//数据域
structListNode*next;//指针域
}LNode,*pNode;//LNode等价于structListNode
//pNode等价于structListNode*
/*--------------------创建链表-----------------------*/
pNodeCreateList()
{
pNodehead,p,q;//head为头结点,p为新结点,q连接所有的结点
head=q=(pNode)malloc(sizeof(LNode));//为头结点申请空间
head->next=NULL;//头结点的数据域为空,它的数据域一般没实际意义
intx;
printf("请输入数据,以0结束 ");
scanf("%d",&x);
while(x!=0)
{
p=(pNode)malloc(sizeof(LNode));//满足条件申请空间生成新的结点
p->data=x;//x的值赋值给新结点
p->next=NULL;//x的下一个结点未知,置空
q->next=p;//q连接下一个结点p
q=p;//q后移到新结点,准备连接下一个新的结点
scanf("%d",&x);
}
returnhead;//返回头结点
}
/*------------------输出链表---------------------*/
voidPrintList(pNodepHead)
{
pNodenode=pHead->next;//定义一个结点保存头结点的下一个结点
if(NULL==node)//判断链表是否为空
{
printf("链表为空 ");
}
while(node!=NULL)//输出链表的数据域
{
printf("%-3d",node->data);
node=node->next;//输出一个结点node后移,准备输出下一个结点
}
printf(" ");
}
/*-------------------链表的长度-------------------*/
intLenthlist(pNodepHead)
{
pNodenode=pHead->next;//定义一个结点保存头结点的下一个结点
intlen=0;//len计算表长
if(NULL==node)//判断链表是否为空
{
printf("链表长度为0 ");
returnlen;
}
while(node!=NULL)
{
++len;//结点存在,len自加
node=node->next;//输出一个结点node后移
}
returnlen;
}
/*------------------查询数据-----------------*/
intFindVal(pNodepHead,intval)//说明:查到了就返回1,并没有说明查到数据的位置
{
pNodenode=pHead->next;
while(node!=NULL)
{
if(val==node->data)
return1;//数据存在返回1
node=node->next;
}
return0;//数据不存在返回0
}
/*-------------------位置查询-------------------*/
intFindpos(pNodepHead,intposnode,int*val)
{
intlen=Lenthlist(pHead);//先求表长,判断查询的位置是否合法
pNodenode=pHead->next;
ints=0;//计算第几个结点
if(posnode<1&&posnode>len)//查询位置不合法返回0
return0;
else
{
while(node!=NULL)
{
s++;
if(s==posnode)//查询位置
{
*val=node->data;//位置合法,所对应的的数据通过指针返回给主函数
break;
}
node=node->next;
}
}
return1;
}
/*------------------按位置删除结点-----------------*/
pNodeDeletNode(pNodepHead,intpos)
{
pNodenode=pHead;//保存头结点
intlen=Lenthlist(pHead)+1;//头结点也算入链表长
ints=0;
if(pos<1||pos>=len)//删除的结点的位置不合法
{
printf("你要删除的位置不存在 ");
returnpHead;
}
else
{
s++;
while(node->next!=NULL&&s<pos)//先找到要删除结点前面的那一个结点
{
node=node->next;
s++;
}
pNodeq=node->next;//保存删除的结点
node->next=q->next;//删除结点的前一个结点链接删除结点的下一个结点
free(q);//释放删除结点的空间
returnpHead;
}
}
/*----------------插入结点-----------------*/
pNodeInsertNode(pNodepHead,intinserval,intpos)
{
pNodenode=pHead;
intlen=Lenthlist(pHead)+1;//加上了头结点的链表的长度
ints=0;
if(pos<1||pos>len)//判断插入的位置是否合法
{
printf("你要插入的位置不合法 ");
returnpHead;
}
while(node!=NULL&&s<pos-1)//找到插入结点的前一个位置
{//这也就是为什么要把头结点算入链表的长度
node=node->next;
s++;
}
pNodenewnode=(pNode)malloc(sizeof(LNode));//申请一个结点的空间
newnode->data=inserval;//把插入的数据赋值给新结点的数据域
newnode->next=node->next; //新结点的指针域指向插入位置的结点
node->next=newnode;//插入位置的前一个结点的指针域指向新结点
returnpHead;//返回头结点
}
/*-----------------链表的逆置------------------*/
pNodeReverseList(pNodephead)
{
pNodeq,p=phead->next;
phead->next=NULL;
while(p!=NULL)
{
q=p->next;
p->next=phead->next;
phead->next=p;
p=q;
}
returnphead;
}
/*------------------销毁链表-----------------*/
pNodeDeleteList(pNodephead)
{
pNodeq,p=phead;
while(p!=NULL)
{
q=p;
p=p->next;
free(q);
}
returnphead;
}
intmain()
{
pNodeHeadNode;//头结点
intlength=0;//链表长度
intvalnode=0;//查询的数据
intvalfinal=0;//查询数据后的结果
intposnode=0;//位置查询
intposfinal=0; //位置查询后的结果
intposval=0;//位置查询到的数据
intdelpos=0;//删除结点的位置
intinval=0;//插入的数据
intinpos=0;//插入的位置
HeadNode=CreateList();//创建链表后的头结点
length=Lenthlist(HeadNode);//统计链表结点
/*--------------输出链表的长度----------------*/
// printf("链表长度为:%d ",length);//输出表长
// PrintList(HeadNode);//输出链表
/*-----------------查询数据-------------------*/
/* printf("请输入你要查找的数据 ");
scanf("%d",&valnode);
valfinal=FindVal(HeadNode,valnode);
if(valfinal==1)
printf("你要查找的数据存在 ");
else
printf("你要查找的数据不存在 ");
*/
/*-----------------位置查询-------------------*/
/* printf("请输入你要查询第几个结点:");
scanf("%d",&posnode);
posfinal=Findpos(HeadNode,posnode,&posval);
if(posfinal==0)
printf("你要查询的位置不合法 ");
else
printf("第%d个结点的数据为:%d ",posnode,posval);
*/
/*------------------删除结点-----------------*/
/* printf("请输入要删除结点的位置: ");
scanf("%d",&delpos);
HeadNode=DeletNode(HeadNode,delpos);
printf("删除结点后的链表: ");
PrintList(HeadNode);
*/
/*------------------插入结点-----------------*/
/* printf("请输入要插入的数据:");
scanf("%d",&inval);
printf("请输入要插入的位置:");
scanf("%d",&inpos);
HeadNode=InsertNode(HeadNode,inval,inpos);
PrintList(HeadNode);
*/
/*-----------------链表的逆置------------------*/
/* HeadNode=ReverseList(HeadNode);
PrintList(HeadNode);*/
/*------------------销毁链表-----------------*/
HeadNode=DeleteList(HeadNode);
if(HeadNode)
printf("链表空!");
return0;
}
F. C语言基本代码,求详细解释,越详细越好。
解释如下:
#include"stdio.h"//头文件
#include"math.h"//数学库函数
double pcos(double a);//声明子函数
main()//主函数
{
double x,y;//定义x,y这两个双精度数据
printf("please input one number:");
//输出please input one number:
scanf("%lf",&x);//出入一个数据并赋值给x
y=pcos(x);//把x传入pcos函数,返回值赋值给y
printf("cos of %lf is %lf ",x,y);//输出cos of x is y
}
double pcos(double a)//定义子函数名,形式参数
{
double b;//定义双精度数据b
b=cos(a);//计算cos(a),并赋值给b
return b;//返回b的值
}
(6)超长代码大全c语言扩展阅读:
注释就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码。注释是编写程序时,写程序的人给一个语句、程序段、函数等的解释或提示,能提高程序代码的可读性。
注释就是对代码的解释和说明。目的是为了让别人和自己很容易看懂。为了让别人一看就知道这段代码是做什么用的。
正确的程序注释一般包括序言性注释和功能性注释。序言性注释的主要内容包括模块的接口、数据的描述和模块的功能。模块的功能性注释的主要内容包括程序段的功能、语句的功能和数据的状态。
G. C语言代码 有向无环图最长路径的算法 图用领接表存储
无向无环图就是树,
从根出发:
如果是计算最多的路径,就用广度优先(层次遍历)就可以了,最后访问的顶点一定是最多的路径的
如果是计算最长的路径长度,直接将上面的算法改一下,每个顶点时记下前面的来路的值加上现在的,就可以求出最大值
或者直接用Dijkstra 算法就可以了
H. C语言中所有的代码及其代表的意思,有谁知道
这个问题问的太。。。。了,给你找了个操作符(operator)用于操作数据。操作符进行计算、检查等式、进行赋值、操作变量和进行其它更奇怪的工作。C++中有许多操作符,这里不想列出全部,只列出最常用的操作符,如下表所示。表1.2常用C++操作符操作符说明举例
算术运算符
+ 加 x=y+z;
- 减 x=y-z;
* 乘 x=y*z;
/ 除 x=y/z;
赋值运算符
= 赋值 x=10;
+= 赋值与和 x+=10;(等于x=x+10;)
-= 赋值与减 x-=10;
*= 赋值与乘 x*=10;
\= 赋值与除 x\=10;
&= 赋值位与 x&=0x02;
|= 赋值位或 x|=0x02;
逻辑操作符
&& 逻辑与 if(x && 0xFF) {...}
|| 逻辑或 if(x || 0xFF) {...}
等式操作符
== 等于 if(x == 10) {...}
!= 不等于 if(x != 10) {...}
< 小于 if(x < 10) {...}
> 大于 if(x > 10) {...}
<= 小于或等于 if(x <= 10) {...}
>= 大于或等于 if(x >= 10) {...}
一元操作符
* 间接操作符 int x=*y;
& 地址操作符 int* x=&y;
~ 位非 x &=~0x02;
! 逻辑非 if(!valid) {...}
++ 递增操作符 x++(等于x=x+1;)
-- 递减操作符 x--;
类和结构操作符
:: 范围解析 MyClass :: SomeFunction();
-> 间接成员 MyClass-> SomeFunction();
· 直接成员 MyClass . SomeFunction();
可以看出,这个清单长了些,没法一下子记住。使用C++时,你会慢慢熟悉这些操作符的。必须指出,递增操作符既可用作前递增(++x),也可用作后递增(x++)。前递增操作符告诉编译器先递增再使用变量,而后递增操作符则让编译器先使用变量值再递增。例如下列代码:
int x = 10;
cout << "x = " << x++ << end1;
cout << "x = " << x << end1;
cout << "x = " x << end1;
cout << "x = " << ++x << end1;
输出结果如下:
x=10
x=11
x=12
x=12
递减操作符也是这样,这里不想将这些内容讲得太深,但读者可以耐心阅读下去,正如彭兹对奥古斯特所说,“奥古,耐心点,罗马不是一天建成的”。说明 在C++中操作符可以过载(overload)。编程人员可以通过过载标准操作符让它在特定类中进行特定运行。例如,可以在一个类中过载递增操作符,让它将变量递增10而不是递增1。操作符过载是个高级C++技术,本书不准备详细介绍。你也许会发现,有些操作符使用了相同的符号。符号的意义随情境的不同而不同。例如,星号(*)可以作为乘号、声明指针或取消指针引用。这初看起来有点乱,事实上,C++编程老手有时也觉得有点乱。多实践,你会慢慢适应的。本书有许多例子介绍这些操作符。读者不必死记每个操作符的作用,而可以在学习中通过程序和码段去理解其作用。 C++中的函数
函数是与主程序分开的码段。这些码段在程序中需要进行特定动作时调用(执行)。例如,函数可能取两个值并对其进行复杂的数学运算。然后返回结果,函数可能取一个字串进行分析,然后返回分析字串的一部分。新术语 函数(function)是与主程序分开的码段,进行预定的一个服务。函数是各种编程语言的重要部分,C++也不例外。最简单的函数不带参数,返回void(表示不返回任何东西),其它函数可能带一个或几个参数并可能返回一个值。函数名规则与变量名相同。图1.5显示了函数的构成部分。新术语 参数(parameter)是传递给函数的值,用于改变操作或指示操作程度。
返回类型 函数名 参数表
↓ ↓ ↓
int SomeFunction(int x, int y){
函数体→int z = (x * y); return z; ↑返回语句
}
图1.5函数的构成部分使用函数前,要先进行声明。函数声明或原型(prototype)告诉编译器函数所取的参数个数、每个参数的数据类型和函数返回值的数据类型。清单1.4列示了这个概念。新术语 原型(prototype)是函数外观的声明或其定义的说明。
清单1.4Muttiply.cpp
1: #include <iostream.h>
2: #include <conio.h>
3: #pragma hdrstop
4:
5: int multiply(int,int)
6: void showResult(int);
7:
8:int main(int argc,char **argv);
9:{
10: int x,y,result;
11: cout << end1 << "Enter the first value:";
12: cin >> x;
13: cout << "Enter the second value: ";
14: cin >> y;
15: result=multiply(x,y);
16: showResult(result);
17: cout << end1 << end1 << "Press any key to continue...";
18: getch();
19: return 0
20: }
21:
22: int multiply(int x,int y)
23: {
24:return x * y;
25: }
26:
27: void showResult(int res)
28: {
29:cout << "The result is: " << res <<end1;
30: }
这个程序的11到14行用标准输入流cin向用户取两个数字,第15行调用multiply()函数将两个数相乘,第16行调用showResult()函数显示相乘的结果。注意主程序前面第5和第6行multiply()和showResult()函数的原型声明。原型中只列出了返回类型、函数名和函数参数的数据类型。这是函数声明的最基本要求。函数原型中还可以包含用于建档函数功能的变量名。例如,multiply()函数的函数声明可以写成如下:int multiply(int firstNumber,int secondNumber);这里函数multiply()的作用很明显,但代码既可通过说明也可通过代码本身建档。注意清单1.4中函数multiply()的定义(22到25行)在主函数定义码段(8到20行)之外。函数定义中包含实际的函数体。这里的函数体是最基本的,因为函数只是将函数的两个参数相乘并返回结果。清单1.4中函数multiply()可以用多种方法调用,可以传递变量、直接数或其它函数调用的结果:
result = multiply(2,5);//passing literal values
result = multiply(x,y); //passing variables
showResult(multiply(x,y));
//return value used as a
//parameter for another function
multiply(x,y);//return value ignored
注意 最后一例中没有使用返回值。本例中调用函数multiply()而不用返回值没什么道理,但C++编程中经常忽略返回值。有许多函数是先进行特定动作再返回一个数值,表示函数调用的状态。有时返回值与程序无关,可以忽略不计。如果将返回值忽略,则只是放弃这个值,而不会有别的危害。例如,前面的样本程序中忽略了getch()函数的返回值(返回所按键的ASCII值)。函数可以调用其它函数,甚至可以调用自己,这种调用称为递归(recursion)。这在C++编程中是个较复杂的问题,这里先不介绍。新术语 递归(recursion)就是函数调用自己的过程。
I. c语言编程代码
两种方法我写在一起,可以独立拆开。
#include <stdio.h>
void finda1(char a[3][10]);
void finda2(char a[3][10]);
void show(char (*p)[10]);
int main()
{
char a[3][10]={{"gehajl"},{"788a987a7"},{"ccabbbabbb"}};
printf("原数组内容: ");
show(a);
printf(" 1、用数组指针的方法(函数finda1): ");
finda1(a);
printf("执行后: ");
show(a);
printf(" --------------------- ");
char b[3][10]={{"gehajl"},{"788a987a7"},{"ccabbbabbb"}};
printf("原数组内容: ");
show(a);
printf(" 2、用指针数组的方法(函数finda2): ");
finda2(b);
printf("执行后: ");
show(b);
return 0;
}
void finda1(char a[3][10])
{
int i,j;
char (*p)[10]=a;
for(i=0;i<3;i++)
for(j=0;j<10;j++)
if(p[i][j]=='a')
printf("发现:第%d行第%d个元素是‘a’,已替换 ",i+1,j+1),p[i][j]='1';
}
void finda2(char a[3][10])
{
int i,j;
char *p[3]={&a[0][0],&a[1][0],&a[2][0]};
for(i=0;i<3;i++)
for(j=0;j<10;j++)
if(p[i][j]=='a')
printf("发现:第%d行第%d个元素是‘a’,已替换 ",i+1,j+1),p[i][j]='1';
}
void show(char (*p)[10])
{
int i,j;
for(i=0;i<3;i++,printf(" "))
for(j=0;j<10;j++)
printf("%c ",p[i][j]);
}