『壹』 c語言如何實現從0000,0001,0010,,到1111的循環
你要的這個是格雷碼,修改LEN改變位數
#include<stdio.h>
#defineLEN4
voidcalc(intx)
{
inti=0;
for(i=LEN-1;i>=0;--i)
putchar('0'+((x&(1<<i))!=0));
puts("");
}
intmain()
{
inti,N=1<<LEN;
for(i=0;i<N;++i)
{
printf("No%2d:",i+1);
calc(i^(i>>1));
}
}
第i個數對應的格雷碼就是
i^(i>>1)
clac函數的功能,是把對應的數轉成二進制輸出。
單片機就更簡單了
#include<stdio.h>
#defineLEN4
intmain()
{
inti,N=1<<LEN;
for(i=0;i<N;++i)
{
P0=i^(i>>1);
}
}
如果不想影響另外幾位的值,可以這樣
#include<stdio.h>
#defineLEN4
intmain()
{
inti,N=1<<LEN,mask=(1<<LEN)-1;
for(i=0;i<N;++i)
{
P0=(~mask&P0)|(i^(i>>1)&mask);
}
}
目測你是在寫跑馬燈之類的程序。。
『貳』 C語言 念數字
你一共提出三個問題:
1、為什麼不寫成int?
此處也可以寫成int。
如果寫成int型,還要求出各位上的數字是多少,才能將數字轉換為拼音。
寫成char型,省去了轉換各位數字的環節,可以用str[i]任意取出各位上的數字。兩位,也方便負號的處理。
2、為什麼是*?
如果不加*,只能定義一個字元數組(或叫字元串),如char num[]="yi";
加上一個*後,char *num[]跟不加*相比,①num已經變成字元串數組;②num變成了指針數組,num[0]、num[1]等各個元素已經成為指向「ling」、「yi」的地址,而「ling」等數據則放在常量區。
根據num[0]指向「ling」,num[1]指向「yi」,num[2]指向「er」……
這樣可以通過num[i],很方便地找到對應的數字i的漢語拼音。
3、str[0]-'0'是什麼意思?
先看str[0]是什麼,它是你輸入的整數的第一個數字,比如它是3,在這里程序是把3當作字元'3'處理的(原因就是變數str的類型為char型),在儲存這個'3'時,實際上儲存的是字元'3'的asc碼,即51。而字元'0'的asc碼是48,str[0]-'0'=51-48=3。這樣,num[str[0]-'0']=num[3],如前面所述,就很容易找到3對應的拼音「san」了。
有什麼問題請留言。
『叄』 c語言,數循環
#include<stdio.h>
#include<string.h>
voidmy_itoa(unsignedlongintm,chara[],intp){
inti=0;
while(m>0){
a[i]=m%p+'0';
m=m/p;
i=i+1;
}
a[i]=0;
intn=i;
intj;
intmid=n/2;
for(i=0,j=n-1;i<mid;i++,j--){
if(a[i]!=a[j])a[i]=(a[i]+a[j])-(a[j]=a[i]);
}
return;
}
intisCircle(unsignedlongintm){
if(m>0&&m<10)return1;
chara[32];
my_itoa(m,a,10);
if(strstr(a,"0"))return0;
intn=strlen(a);
inti,j;
for(i=1;i<n;i++){
for(j=0;j<i;j++){
if(a[i]==a[j])return0;
}
}
intvisited[n];
for(i=0;i<n;i++)visited[i]=0;
visited[0]=1;
intstart=0;
intend=(a[start]-'0'+start)%n;
while(visited[end]==0){
visited[end]=1;
start=end;
end=(a[start]-'0'+start)%n;
}
for(i=0;i<n;i++){
if(visited[i]==0)return0;
}
returnend==0;
}
intmain(intargc,char*argv[]){
unsignedlongm;
while(scanf("%u",&m)!=EOF){
while(!isCircle(++m));
printf("%u ",m);
}
return0;
}
『肆』 c語言怎麼寫一個0 到100的循環語句
#include <stdio.h>void main(){int i;//用來控制循環.for(i=0;i<=100;i++) {/*語句塊*/} //用for實現從0循環到100; i=0;while(i<=100) {/*語句塊*/} //用while實現從0循環到100;}具體每個循環中要做什麼可以在語句塊中添加代碼.
『伍』 循環數(circle)C語言編程
#include<stdio.h>
intIsCircle(intn)//判斷n是不是循環數
{
intcir[6],cirtemp[6];//本題中輸入最大為6位數
inti=0,j,k=0,count=0;
while(n>0)//把n的每一位一次放入數字cirtemp中(反序)
{
count++;//計數
cirtemp[i++]=n%10;
n=n/10;
}
for(i=0;i<count;i++)//把順序還原回來(直接用反序也可以,只是還原回看後面的代碼會好理解些)
cir[i]=cirtemp[count-i-1];
for(i=0;i<count;i++)//是幾位數總共就要循環幾次
{
j=cir[k];//向前右j步
k=(k+j)%count;//走完後的下標
}
if(k==0)//循環完剛好回到第一個數,這個數是循環數
return1;
else
return0;
}
intmain()
{
intn,i=0;
printf("請輸入一個數(9<這個數<999589): ");//按題意這行可以刪去
scanf("%d",&n);
while(1)
{
if(IsCircle(n+i)==1)
{
printf("%d ",n+i);
break;
}
elseif(IsCircle(n-i)==1)
{
printf("%d ",n-i);
break;
}
i++;
}
return0;
}
嚴格來說我這個程序還不嚴謹,IsCircle中判斷k是否遍歷了0,1,2,……count這些自然數來判斷是否是循環數更准確,畢竟可能會有巧合使得循環完後回到了第一個數(下標k=0)但是卻在中途有一個數沒有作為起點和終點(只是覺得有可能,具體是否可能需要證明)。
其實也不難把k的每一個值都加起來如果=1+2+3+……+count,且最後k=0就可以了
還有就是輸入的時候最好判斷一下輸入是否規范 9<數<999589
『陸』 c語言如何循環輸入
這樣你覺得行不,最後你從input[]里按順序取出來就行了:
#include <stdio.h>
#include<math.h>
int main(){
int n,temp,i=0;
printf("請輸入你要輸入數字的個數:");
scanf("%d",&n);
float input[n];
while(n>0){
printf("請輸入你要輸入的數字:");
scanf("%d",&temp);
input[i] = temp;
i++;
n--;
}
printf("你輸入的數字為: ");
for(int j=0;j<i;j++){
printf("%f ",input[j]);
}
return 0;
}
運行結果:
『柒』 求如何編寫一個念數字程序(c語言)
先定義好拼音,在根據數據處理;
n%m
n/m得到每個數;
1-9對應一個拼音;
當為一個數字時,直接輸出對應拼音;
當為2位數據時,分別得到十位和個位輸出就行了呀;
『捌』 C語言里如何建立一個循環,當輸入數字在0~9之間的時候繼續輸入,當輸入不在0~9之間的時候結束
用自符串: 先定義一個字元串,如:char hanzi[20]; 然後: scanf("%s",hanzi); 或者gets(hanzi); 不過定義的時候控制了位元組為20,不能輸太多,(一個漢字兩 個位元組)
『玖』 C語言編程,數字循環,求解,以下圖型如何編寫,輸入整數(n=5)
#include<stdio.h>
void print(int n);
int main()
{
int n;
scanf("%d",&n); //輸入n=5
print(n);
getchar();
return 0;
}
void print(int n)
{
int i,j;
int k;
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
printf("%d",j);
}
for(k=j-2;k>0;k--)
{
printf("%d",k);
}
printf("\n");
}
for(i=n;i<2*n-1;i++)
{
for(j=1;j<=2*n-1-i;j++)
{
printf("%d",j);
}
for(k=j-2;k>0;k--)
{
printf("%d",k);
}
printf("\n");
}
}