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]);
}