① c語言求助,把一個數插入到一個已排好序的數組中
改後的代碼:
#include<stdio.h>
void main()
{
int a[10]={1,5,9,15,16,25,45,75,96,115};
int b[11],i,j,k,p;
scanf("%d",&k);
for(i=0;i<10;i++)
{
p=i;
if(a[i]>k) break;
}
for(j=0;j<p;j++)
b[j]=a[j];
b[p]=k;
for(j=p+1;j<11;j++)
b[j]=a[j-1];
for(j=0;j<11;j++)
printf("%d ",b[j]);
}
你的程序共有3處錯誤:
1,scanf("%d",k);k前面少了個&;
2,{if(a[i]>k) break;
p=i;}此處的p=i,應該放到if語句之前,否則你的p表示的將不是開始大於k的數的位置,而是之前的一個位置;
3,for(j=0;j<p;j++);的後面多了個分號
② C語言編程
C語言——十進制轉為二進制、八進制、十六進制的函數轉換
/***
* Copyright(C) 2011, SKYCNC
* All rights reserved
*
* 程序名稱:dec_to_bin_oct_hex
* 功 能:輸入一個十進制數,將其轉化為二進制、八進制、十六進制
*
* 作 者:zhanghbboy
* 完成日期:11.07.27
*
***/
#include<stdio.h>
#include<string.h>
#include<math.h>
void dec_to_bin(int x); //函數調用定義
void dec_to_oct(int x);
void dec_to_hex(int x);
int main(void) // 計算機中,int 佔用4個位元組- -
{
int decNum;
printf("請輸入一個十進制整數:\n");
scanf("%d", &decNum);
dec_to_bin(decNum);
dec_to_oct(decNum);
dec_to_hex(decNum);
return 0;
}
void dec_to_bin(int x)
{
char *table="01";
char array[33];
int num;
num = x;
array[32] = '\0';
int i = 31;
if (x > 0)
{
memset(array,'0',32);
while(x)
{
array[i--] = table[x % 2];
x = x/2;
}
}
if (x < 0)
{
memset(array,'1',32);
int j;
for(j=0; j<32; j++)
{
array[i--] = table[x & 0x01];
x >>= 1;
}
}
printf("十進制數%d <======>對應二進制為%s\n", num, array);
}
void dec_to_oct(int x)
{
char *table = "01234567";
char array[12]; //數組設定為12.是因為除了結束符之外,考慮到負數的輸入,
//其轉化為補碼再轉為八進制數出,32位每三個取組成一個8進制數。因此元素為11個。
int num;
num = x;
array[11] = '\0';
int i = 10;
if (x > 0)
{
memset(array,'0',11);
while(x)
{
array[i--] = table[x % 8];
x = x/8;
}
}
if (x < 0)
{
memset(array,'1',11);
int j;
for(j=0; j<10; j++)// 32/3 = 10;
{
array[i--] = table[x & 0x07];
x >>= 3;
}
array[i] = table[x & 0x03];
}
printf("十進制數%d <======>對應八進制為%s\n", num, array);
}
void dec_to_hex(int x)
{
char *table = "0123456789abcdef";
char array[9];
array[8] = '\0';
int i = 7, num;
num = x;
if (x > 0)
{
memset(array,'0',8);
while(x)
{
array[i--] = table[x % 16];
x = x / 16 ;
}
}
else
{
memset(array,'1',8);
int j;
for(j=0; j<8; j++)
{
array[i--] = table[x & 0x0f];
x >>= 4;
}
}
printf("十進制數%d <======>對應十六進制為%s\n", num, array);
}
③ C語言網上教學
學習C++ 之前不知有C. 且當時辛苦忙碌於砍怪練級.
突然有一天, 腦門像被人敲打了一下便決定: 我要編程 我要編寫游戲.於是我的C++之路就開始了.
學C++買的第一本書<<標准C++寶典>>.難啃.超難啃...硬著頭皮啃了兩周, 還是沒啃完.
於是開始上網找一些相關的資料, 才知: 原來還有C這種東西!
找了幾本同學的課本, 講C語言入門之類的. 看了看沒什麼感覺. 心裡還是想, C++是不是比C更好呢?
於是又找C++的書. 幸好 找到了錢能 的<<C++程序設計>>(注:是紅皮的.). 一章一章地看.
練習的代碼 寫了一本又一本. 每個例子幾乎都是先背下來, 才學會理解.
在學習當中慢慢的認識了一些熱心的網友, 在他們的幫助下, 我慢慢地知道了. 有VC6.0這東西.
於是結束了紙上寫碼的歷史.(有時遇到有意思的代碼我仍然會抄到紙上. 我覺得這是一種很好的習慣.)
涉及到類之後 又捉狂了一陣子. 類?面向對像?
不懂, 真的不懂...
於是看別人的代碼, 看別人的所謂的面向對像的代碼. 看了也沒覺得什麼.
可是看得多了之後 發現,代碼和代碼還是有很大差別的. 面向對像這東西 還是抽像的不得了. 感覺比形而上學還難理解.
這樣時間大約過了一個多月.離畢業還有一年. 突然萌發出了找工作的想法.覺得自己會寫程序了.
至少 來個 "Hello, World!"甚至幾個都沒有問題.
第一次面試的時候人家問我: 什麼時面向對像?
我想了想 竟然說: 面向對像... 其實就是面向對像.
....
結果可想而知了.
有了這次近於流汗的求職經歷.讓自己更能靜下心來去學習.
學習了windows 知道了消息 MFC 多線程...期間仍是不斷地面試, 不斷地失敗 不斷地鞭策自己.
終於在我畢業前 7個月得到了我的第一份軟體工作的合同.
在那裡 有很多的牛人, 嘿嘿, 也有像我一樣的菜鳥. 大家都是為著一個目標工作...
回想起來. 學習編程 真的沒有什麼太多的學習捷徑.只要能靜下心來.沒有搞不定的事.
其實有一件事是非常明確的 砍怪練級可以長經驗. 但不會提高 你的編程水平.
學得越多越覺得, 我還是一個初學者.
④ 求注釋以下C語言代碼
這是一個背包問題,該演算法已經是最簡單的了,還有遞歸演算法,我覺得更麻煩。對你的代碼進行解釋如下://背包問題:有m件物品和一個承重為t的背包。第i件物品的重量是w[i],價值是v[i]。//求解將哪些物品裝入背包可使這些物品的重量總和不超過背包承重量t,且價值總和最大。#include #include #include int f[1010],w[1010],v[1010];//f記錄不同承重量背包的總價值,w記錄不同物品的重量,v記錄不同物品的價值int max(int x,int y){//返回x,y的最大值 if(x>y) return x; return y;}int main(){ int t,m,i,j; memset(f,0,sizeof(f)); //總價值初始化為0 scanf("%d %d",&t,&m); //輸入背包承重量t、物品的數目m for(i=1;i=w[i];j--){ f[j]=max(f[j-w[i]]+v[i],f[j]); //在放入第i個物品前後,檢驗不同j承重量背包的總價值,如果放入第i個物品後比放入前的價值提高了,則修改j承重量背包的價值,否則不變 } } printf("%d",f[t]); //輸出承重量為t的背包的總價值 printf("\n"); getch(); return 0;}
⑤ c語言sky數用函數如何編
#include <stdio.h>
int func(int n,int m)
{
int sum;
for(sum=0;n;n/=m)
sum+=n%m;
return sum;
}
int main()
{
int n,t;
while(scanf("%d",&t)==1)
{
for(;t;t--)
{
scanf("%d",&n);
if(func(n,10)==func(n,16)&&func(n,16)==func(n,12))
printf("%d is a Sky Number. ",n);
else
printf("%d is not a Sky Number. ",n);
}
}
return 0;
}
⑥ 求大佬們看看這題c語言
您好,你的問題,我之前好像也遇到過,以下是我原來的解決思路和方法,希望能幫助到你,若有錯誤,還望見諒!eof是文件尾的意義(它實際上等於-1),在windows中,eof在輸入時表示ctrl+z這個鍵,scanf(..)!=eof就是說緩沖區已無內容時就結束(也就是結束輸入時按ctrl+z然後按回車),只需要把你代碼中的while(1)換成上面提示中這個while就行了非常感謝您的耐心觀看,如有幫助請採納,祝生活愉快!謝謝!
⑦ 用c語言設計一個程序判斷一個5×5矩陣是否為對稱矩陣。謝謝!!!
intnum[5][5]={0};
for(inti=0;i<5;i++)
{
for(intj=0;j<5;j++)
{
printf("請輸入第%d行第%d列:",i+1,j+1);
scanf("%d",&num[i][j]);
}
printf(" ");
}
printf(" ");
shorta=1;
for(inti=0;i<5;i++)
{
for(intj=0;j<5;j++)
{
printf("%4d",num[i][j]);
if(j<=1)
{
if(num[i][j]!=num[i][4-j])
{
a=0;
}
}
}
printf(" ");
}
printf(" ");
a==0?printf("你輸入的不對稱 "):printf("你輸入的對稱 ");
system("pause");
⑧ 大佬們求請教這道sky數的c語言題目怎麼編寫
你在sky函數里,第一個while已經把x消耗為0了,那麼第2個和第3個while都進不去了,那肯定錯了
每個while分別改為
for(int i=x;i;s1+=i%10,i/=10);
for(int i=x;i;s2+=i%16,i/=16);
for(int i=x;i;s3+=i%12,i/=12);
⑨ C語言黑白棋
#include "graphics.h" /*圖形系統頭文件*/
#define LEFT 0x4b00 /*游標左鍵值*/
#define RIGHT 0x4d00 /*游標右鍵值*/
#define DOWN 0x5000 /*游標下鍵值*/
#define UP 0x4800 /*游標上鍵值*/
#define ESC 0x011b /* ESC鍵值*/
#define ENTER 0x1c0d /* 回車鍵值*/
int a[8][8]={0},key,score1,score2;/*具體分數以及按鍵與存放棋子的變數*/
char playone[3],playtwo[3];/*兩個人的得分轉換成字元串輸出*/
void playtoplay(void);/*人人對戰函數*/
void DrawQp(void);/*畫棋盤函數*/
void SetPlayColor(int x);/*設置棋子第一次的顏色*/
void MoveColor(int x,int y);/*恢復原來棋盤狀態*/
int QpChange(int x,int y,int z);/*判斷棋盤的變化*/
void DoScore(void);/*處理分數*/
void PrintScore(int n);/*輸出成績*/
void playWin(void);/*輸出勝利者信息*/
/******主函數*********/
void main(void)
{
int gd=DETECT,gr;
initgraph(&gd,&gr,"c:\\tc"); /*初始化圖形系統*/
DrawQp();/*畫棋盤*/
playtoplay();/*人人對戰*/
getch();
closegraph();/*關閉圖形系統*/
}
void DrawQp()/*畫棋盤*/
{
int i,j;
score1=score2=0;/*棋手一開始得分都為0*/
setbkcolor(BLUE);
for(i=100;i<=420;i+=40)
{
line(100,i,420,i);/*畫水平線*/
line(i,100,i,420); /*畫垂直線*/
}
setcolor(0);/*取消圓周圍的一圈東西*/
setfillstyle(SOLID_FILL,15);/*白色實體填充模式*/
fillellipse(500,200,15,15); /*在顯示得分的位置畫棋*/
setfillstyle(SOLID_FILL,8); /*黑色實體填充模式*/
fillellipse(500,300,15,15);
a[3][3]=a[4][4]=1;/*初始兩個黑棋*/
a[3][4]=a[4][3]=2;/*初始兩個白棋*/
setfillstyle(SOLID_FILL,WHITE);
fillellipse(120+3*40,120+3*40,15,15);
fillellipse(120+4*40,120+4*40,15,15);
setfillstyle(SOLID_FILL,8);
fillellipse(120+3*40,120+4*40,15,15);
fillellipse(120+4*40,120+3*40,15,15);
score1=score2=2; /*有棋後改變分數*/
DoScore();/*輸出開始分數*/
}
void playtoplay()/*人人對戰*/
{
int x,y,t=1,i,j,cc=0;
while(1)/*換棋手走棋*/
{
x=120,y=80;/*每次棋子一開始出來的坐標,x為行坐標,y為列坐標*/
while(1) /*具體一個棋手走棋的過程*/
{
PrintScore(1);/*輸出棋手1的成績*/
PrintScore(2);/*輸出棋手2的成績*/
SetPlayColor(t);/*t變數是用來判斷棋手所執棋子的顏色*/
fillellipse(x,y,15,15);
key=bioskey(0);/*接收按鍵*/
if(key==ESC)/*跳出遊戲*/
break;
else
if(key==ENTER)/*如果按鍵確定就可以跳出循環*/
{
if(y!=80&&a[(x-120)/40][(y-120)/40]!=1
&&a[(x-120)/40][(y-120)/40]!=2)/*如果落子位置沒有棋子*/
{
if(t%2==1)/*如果是棋手1移動*/
a[(x-120)/40][(y-120)/40]=1;
else/*否則棋手2移動*/
a[(x-120)/40][(y-120)/40]=2;
if(!QpChange(x,y,t))/*落子後判斷棋盤的變化*/
{
a[(x-120)/40][(y-120)/40]=0;/*恢復空格狀態*/
cc++;/*開始統計嘗試次數*/
if(cc>=64-score1-score2) /*如果嘗試超過空格數則停步*/
{
MoveColor(x,y);
fillellipse(x,y,15,15);
break;
}
else
continue;/*如果按鍵無效*/
}
DoScore();/*分數的改變*/
break;/*棋盤變化了,則輪對方走棋*/
}
else/*已經有棋子就繼續按鍵*/
continue;
}
else /*四個方向按鍵的判斷*/
if(key==LEFT&&x>120)/*左方向鍵*/
{
MoveColor(x,y);
fillellipse(x,y,15,15);
SetPlayColor(t);
x-=40;
fillellipse(x,y,15,15);
}
else
if(key==RIGHT&&x<400&&y>80)/*右方向鍵*/
{
MoveColor(x,y);
fillellipse(x,y,15,15);
SetPlayColor(t);
x+=40;
fillellipse(x,y,15,15);
}
else
if(key==UP&&y>120)/*上方向鍵*/
{
MoveColor(x,y);
fillellipse(x,y,15,15);
SetPlayColor(t);
y-=40;
fillellipse(x,y,15,15);
}
else
if(key==DOWN&&y<400)/*下方向鍵*/
{
MoveColor(x,y);
fillellipse(x,y,15,15);
SetPlayColor(t);
y+=40;
fillellipse(x,y,15,15);
}
}
if(key==ESC)/*結束游戲*/
break;
if((score1+score2)==64||score1==0||score2==0)/*格子已經占滿或一方棋子為0判斷勝負*/
{
playWin();/*輸出最後結果*/
break;
}
t=t%2+1; /*一方走後,改變棋子顏色即輪對方走*/
cc=0; /*計數值恢復為0*/
} /*endwhile*/
}
void SetPlayColor(int t)/*設置棋子顏色*/
{
if(t%2==1)
setfillstyle(SOLID_FILL,15);/*白色*/
else
setfillstyle(SOLID_FILL,8);/*灰色*/
}
void MoveColor(int x,int y)/*走了一步後恢復原來格子的狀態*/
{
if(y<100)/*如果是從起點出發就恢復藍色*/
setfillstyle(SOLID_FILL,BLUE);
else/*其他情況如果是1就恢復白色棋子,2恢復黑色棋子,或恢復藍色棋盤*/
switch(a[(x-120)/40][(y-120)/40])
{
case 1:
setfillstyle(SOLID_FILL,15);break; /*白色*/
case 2:
setfillstyle(SOLID_FILL,8);break; /*黑色*/
default:
setfillstyle(SOLID_FILL,BLUE); /*藍色*/
}
}
int QpChange(int x,int y,int t)/*判斷棋盤的變化*/
{
int i,j,k,kk,ii,jj,yes;
yes=0;
i=(x-120)/40; /*計算數組元素的行下標*/
j=(y-120)/40; /*計算數組元素的列下標*/
SetPlayColor(t);/*設置棋子變化的顏色*/
/*開始往8個方向判斷變化*/
if(j<6)/*往右邊*/
{
for(k=j+1;k<8;k++)
if(a[i][k]==a[i][j]||a[i][k]==0)/*遇到自己的棋子或空格結束*/
break;
if(a[i][k]!=0&&k<8)
{
for(kk=j+1;kk<k&&k<8;kk++)/*判斷右邊*/
{
a[i][kk]=a[i][j]; /*改變棋子顏色*/
fillellipse(120+i*40,120+kk*40,15,15);
}
if(kk!=j+1) /*條件成立則有棋子改變過顏色*/
yes=1;
}
}
if(j>1)/*判斷左邊*/
{
for(k=j-1;k>=0;k--)
if(a[i][k]==a[i][j]||!a[i][k])
break;
if(a[i][k]!=0&&k>=0)
{
for(kk=j-1;kk>k&&k>=0;kk--)
{
a[i][kk]=a[i][j];
fillellipse(120+i*40,120+kk*40,15,15);
}
if(kk!=j-1)
yes=1;
}
}
if(i<6)/*判斷下邊*/
{
for(k=i+1;k<8;k++)
if(a[k][j]==a[i][j]||!a[k][j])
break;
if(a[k][j]!=0&&k<8)
{
for(kk=i+1;kk<k&&k<8;kk++)
{
a[kk][j]=a[i][j];
fillellipse(120+kk*40,120+j*40,15,15);
}
if(kk!=i+1)
yes=1;
}
}
if(i>1)/*判斷上邊*/
{
for(k=i-1;k>=0;k--)
if(a[k][j]==a[i][j]||!a[k][j])
break;
if(a[k][j]!=0&&k>=0)
{
for(kk=i-1;kk>k&&k>=0;kk--)
{
a[kk][j]=a[i][j];
fillellipse(120+kk*40,120+j*40,15,15);
}
if(kk!=i-1)
yes=1;
}
}
if(i>1&&j<6)/*右上*/
{
for(k=i-1,kk=j+1;k>=0&&kk<8;k--,kk++)
if(a[k][kk]==a[i][j]||!a[k][kk])
break;
if(a[k][kk]&&k>=0&&kk<8)
{
for(ii=i-1,jj=j+1;ii>k&&k>=0;ii--,jj++)
{
a[ii][jj]=a[i][j];
fillellipse(120+ii*40,120+jj*40,15,15);
}
if(ii!=i-1)
yes=1;
}
}
if(i<6&&j>1)/*左下*/
{
for(k=i+1,kk=j-1;k<8&&kk>=0;k++,kk--)
if(a[k][kk]==a[i][j]||!a[k][kk])
break;
if(a[k][kk]!=0&&k<8&&kk>=0)
{
for(ii=i+1,jj=j-1;ii<k&&k<8;ii++,jj--)
{
a[ii][jj]=a[i][j];
fillellipse(120+ii*40,120+jj*40,15,15);
}
if(ii!=i+1)
yes=1;
}
}
if(i>1&&j>1)/*左上*/
{
for(k=i-1,kk=j-1;k>=0&&kk>=0;k--,kk--)
if(a[k][kk]==a[i][j]||!a[k][kk])
break;
if(a[k][kk]!=0&&k>=0&&kk>=0)
{
for(ii=i-1,jj=j-1;ii>k&&k>=0;ii--,jj--)
{
a[ii][jj]=a[i][j];
fillellipse(120+ii*40,120+jj*40,15,15);
}
if(ii!=i-1)
yes=1;
}
}
if(i<6&&j<6)/* 右下*/
{
for(k=i+1,kk=j+1;kk<8&&kk<8;k++,kk++)
if(a[k][kk]==a[i][j]||!a[k][kk])
break;
if(a[k][kk]!=0&&kk<8&&k<8)
{
for(ii=i+1,jj=j+1;ii<k&&k<8;ii++,jj++)
{
a[ii][jj]=a[i][j];
fillellipse(120+ii*40,120+jj*40,15,15);
}
if(ii!=i+1)
yes=1;
}
}
return yes;/*返回是否改變過棋子顏色的標記*/
}
void DoScore()/*處理分數*/
{
int i,j;
score1=score2=0;/*重新開始計分數*/
for(i=0;i<8;i++)
for(j=0;j<8;j++)
if(a[i][j]==1)/*分別統計兩個人的分數*/
score1++;
else
if(a[i][j]==2)
score2++;
}
void PrintScore(int playnum)/*輸出成績*/
{
if(playnum==1)/*清除以前的成績*/
{
setfillstyle(SOLID_FILL,BLUE);
bar(550,100,640,400);
}
setcolor(RED);
settextstyle(0,0,4);/*設置文本輸出樣式*/
if(playnum==1)/*判斷輸出哪個棋手的分,在不同的位置輸出*/
{
sprintf(playone,"%d",score1);
outtextxy(550,200,playone);
}
else
{
sprintf(playtwo,"%d",score2);
outtextxy(550,300,playtwo);
}
setcolor(0);
}
void playWin()/*輸出最後的勝利者結果*/
{
settextstyle(0,0,4);
setcolor(12);
if(score2>score1)/*開始判斷最後的結果*/
outtextxy(100,50,"black win!");
else
if(score2<score1)
outtextxy(100,50,"white win!");
else
outtextxy(60,50,"you all win!");
}