c语言编程 新浪博客,[c语言编程]经典编程
用pi/4=1-1/3+1/5-1/7+...公式求PI的近似值,直到最后一項的絕對值小有10的-6次方為止。
#include
main()
{int i=-1;
float j,s=0.0;
for(j=1.0;fabs(1.0/j)>=1e-6;j=j+2.0)
{i=-i;
s+=i*1.0/j;}
s=s*4.0;
printf("%f\n",s);
}
輸入四個整數,要求按由小到大的順序輸出。
main()
{int a,b,c,d;
printf("請輸入4個整數:");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
printf("\n a=%d, b=%d, c=%d, d=%d \n",a,b,c,d);
if(a>b)
{t=a;a=b;b=t;}
if(a>c)
{t=a;a=c;c=t;}
if(a>d)
{t=a;a=d;d=t;}
if(b>c)
{t=b,b=c;c=t;}
if(b>d)
{t=b;b=d;d=t;}
if(c>d)
{t=c;c=d;d=t;}
printf("排序結果如下:\n");
printf("%d %d %d %d\n",a,b,c,d);
}
譯密碼。為使電文保密,往往按一定規律將其轉換成密碼,收報人再按約定的規律將其譯回原文。例如,可以按以下規律電文變為密碼:
將字母A變成字母E,a變成e,即變成其后的第4個字母,W變成A,X變成B,Y變成C,Z變成D。字母按上述規律轉換,非字母字符不變。如“China!”轉換為“Glmre!”。輸入一行字符,要求輸出其相應的密碼。
#include
main()
{char a,b[100];
int i,j=0;
printf("qing shu ru,yi hui che jie shu:");
for(i=0;(b[i]=getchar())!='\n';i++)
{if((b[i]>='a'&&b[i]<='z')||(b[i]>='A'&&b[i]<='Z'))
b[i]+=4;
if(b[i]>'Z'&&b[i]<='Z'+4||b[i]>'z')b[i]=b[i]-26;
}
while(b[j]!='\0')
{printf("%c",b[j]);
j++;}
}
輸入兩個正整數m和n,求其最大公約數和最小公倍數。
main()
{int p,r,n,m,temp;
printf("請輸入兩個正整數 n,m");
scanf("%d,%d",&n,&m);
if(n
{temp=n;
n=m;
m=temp;
}
p=n*m;
while(m!=0)
{r=n%m;
n=m;
m=r;
}
printf("它們的最大公約數為:%d\n",n);
printf("它們的最小公倍數為:%d\n",p\n);
}
打印出所有的“水仙花數”。所謂“水仙花數”是指一個3位數,其各位數字的立方和等于該數本身。例如,153是一個“水仙花數”,因為153=1的立方+5的立方+3的立方。
main()
{int i,j,k,n;
printf("水仙花"數是:");
for(n=100;n<1000;n++)
{i=n/100;
j=n/10-i*10;
k=n%10;
if(n==i*i*i+j*j*j+k*k*k)
printf("%4d",n);
}
printf("\n");
}
兩個乒乓球隊進行比賽,各出三人。甲隊為A、B、C三人,乙隊為X、Y、Z三人。已抽簽決定比賽名單。有人向隊員打聽比賽的名單,A說他不和X比,C說他不和X、Z比。請編程序找出三對賽手的名單。
main()
{char i,j,k;
for(i='X';i<='Z';i++)
for(j='X';j<='Z';j++)
if(i!=j)
for(k='X';k<='Z';k++)
if(i!=k&&j!=k)
if(i!='X'&&k!='X'&&k!='Z')
printf("A--%c\tB--%c\tC--%c\n",i,j,k);
}
用起泡法對10個數排序(由小到大)。
main()
{int a[10],t,i,j;
printf("qing shu ru 10 ge shu:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(a[j]>=a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
for(i=0;i<10;i++)
printf("%5d",a[i]);
}
輸入一行字符,統計其中有多少個單詞,單詞之間用空格分隔開。
#include
main()
{
char string[81];
int i,num=0,word=0;
char c;
gets(string);
for(i=0;(c=string[i])!='\0';i++)
if(c==' ')word=0;
else if(word==0)
{
word=1;
num++;
}
printf("there are %d wprd in the line.\n",num);
}
用選擇法對10個整數排序(從小到大)。
main()
{int i,j,temp,a[11];
printf("Enter data:\n");
for(i=1;i<=10;i++)
{printf("a[%d]=",i);
scanf("%d",&a[i]);
}
printf("\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]);
printf("\n");
for(i=1;i<=9;i++)
{for(j=i+1;j<=10;j++)
if(a[i]>a[j])
{temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
printf("\nThe sorted numbers:\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]);
}
將一個數組中的直按逆序重新存放。列如原來順序為:8、6、5、4、1。要求改為:1、4、5、6、8。
#define N 5
main()
{int a[N],i,temp;
printf("qing shu ru :");
for(i=0;i
scanf("%d",&a[i]);
for(i=0;i
{temp=a[i];
a[i]=a[N-i+1];
a[N-i+1]=temp;}
for(i=0;i
printf("%4d",a[i]);
printf("\n");
}
打印“打印魔方陣”,所謂魔方陣是指這樣的方陣,它的每一行、每一列和對角線之和均相等。要求打印1……平方的自然數構成的魔方陣。
main()
{int a[16][16],i,j,k,p,m,n;
p=1;
while(p==1)
{printf("Enter
n(n=1~15):");
scanf("%d",&n);
if((n!=0)&&(n<=15)&&(n%2!=0))
p=0;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++)
{i=i-1;
j=j+1;;
if((i<1)&&(j>n))
{i=i+2;
j=j-1;
}
else
{if(i<1)i=n;
if(j>n)j=1;
}
if(a[i][j]==0)
a[i][j]=k;
else
{i=i+2;
j=j-1;
a[i][j]=k;
}
}
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
有一個已排好序的數組,今輸入一個數,要求按原來排序的規律將它插入數組中(以兩兩交換的方式)。
main()
{int a[11]={1,4,6,13,16,19,28,40,100};
int temp1,temp2,number,end,i,j;
printf("array a:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
printf("Insert data:");
scanf("%d",&number);
end=a[9];
if(number>end)
a[10]=number;
else
{for(i=0;i<10;i++)
{if(a[i]>number)
{temp1=a[i];
a[i]=number;
for(j=i+1;j<11;j++)
{temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;
}
}
}
printf("Now,array a:\n");
for(i=0;i<11;i++)
printf("%6d",a[i]);
}
寫一函數,輸入一個4位數字,要求輸出這4個數字字符,但每兩個數字間有一個空格。如輸入1990,應輸出“1 9 9 0”。
main()
{char str[80];
void insert(char s[]);
printf("\nInput four digits:");
scanf("%s",str);
insert(str);
}
void insert(char str[])
{int i;
for(i=strlen(str);i>0;i--)
{str[2*i]=str[i];
str[2*i-1]='
';
}
printf("\nOutput:\n%s",str);
}
寫一函數,輸入一行字符,將此字符串中最長的單詞輸出。
int alphabetic(char c)
{if((c>='a'&&c<='z')||(c>='A'&&c<='z'))
return(1);
else
return(0);
}
int longest(char string[])
{int len=0,i,length=0,flag=1,place=0,point;
for(i=0;i<=strlen(string);i++)
if(alphabetic(string[i]))
if(flag)
{point=i;
flag=0;
}
else
len++;
else
{flag=1;
if(len>=length)
{length=len;
place=point;
len=0;
}
}
return(place);
}
main()
{int
i;
char line[100];
printf("Input one line:\n");
gets(line);
printf("\nThe longest word is:");
for(i=longest(line);alphabetic(line[i]);i++)
printf("%c",line[i]);
printf("\n");
}
有15個數按由大到小的順序存放在一個數組中,輸入一個數,要求用折半查找法找出該數是數組中第幾個元素的值。如果該數不在數組中,則打印出“無此表”。
#include
#define N 15
main()
{int i,j,number,top,bott,mid,loca,a[N],flag=1,sign=1;
char c;
printf("Enter data:\n");
scanf("%d",&a[0]);
i=1;
while(i
{scanf("%d",&a[i]);
if(a[i]>=a[i-1])
i++;
else
printf("Enter this data again:");
}
printf("\n");
for(i=0;i
printf("%4d",a[i]);
printf("\n");
while(flag)
{printf("Input number to look
for:");
scanf("%d",&number);
loca=0;
top=0;
bott=N-1;
if((numbera[N-1]))
loca=-1;
while((sign==1)&&(top<=bott))
{mid=(bott+top)/2;
if(number==a[mid])
{loca=mid;
printf("Find %d,its position is %d\n",number,loca+1);
sign=0;
}
else if(number
bott=mid-1;
else
top=mid+1;
}
if(sign==1||loca==-1)
printf("%d is not found.\n",number);
printf("Continue or not(Y/N)?");
scanf(" %c",&c);
if(c=='N'||c=='n')
flag=0;
}
}
寫一函數,輸入一個十六進制數,輸出相應的十進制數。
#include
#define MAX 1000
main()
{char t[MAX],c;
int i,flag,flag1;
i=0;
flag=0;
flag1=1;
printf("\nInput a hex
number:");
while((c=getchar())!='\0'&&i
{if(c>='0'&&c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F')
{flag=1;
t[i++]=c;
}
else if(flag)
{t[i]='\0';
printf("decimal number %d:\n",htoi(t));
printf("Continue or not?");
c=getchar();
if(c=='N'||c=='n')
flag1=0;
else
{flag=0;
i=0;
printf("\nInput a hex number:");
}
}
}
}
htoi(char s[])
{int i,n;
n=0;
for(i=0;s[i]!='\0';i++)
{if(s[i]>='0'&&s[i]<='9')
n=n*16+s[i]-'0';
if(s[i]>='a'&&s[i]<='f')
n=n*16+s[i]-'a'+10;
if(s[i]>='A'&&s[i]<='F')
n=n*16+s[i]-'A'+10;
}
return(n);
}
10進制轉k進制(2<=k<=9)編程
給定程序功能是將十進制正整數m轉化為k進制(2<=k<=9)數的數字輸出。例如,若輸入8和2,則應輸出1000(即十進制數8轉化為二進制表示是1000)。
#include
void fun( int m, int k )
{
int aa[20], i;
for( i = 0; m; i++ ) {
aa[i] =?m%k;
m /= k;
}
for( ; i; i-- )
printf( "%d", aa[ i-1 ] );
}
main()
{
int b, n;
printf( "\nPlease enter a number and a base:\n" );
scanf(?"%d
%d", &n, &b );
fun( n, b );}
用遞歸法將一個整數n 轉換成字符串。例如輸入483,應輸出字符串“483”。n的位數不確定,可以是任意位數的整數。
#include
void convert(int n)
{int i;
if((i=n/10)!=0)
convert(i);
putchar(n%10+'0');
}
main()
{int number;
printf("\n Input an integer:");
scanf("%d",&number);
printf("Output:");
if(number<0)
{putchar('_');
number=-number;
}
convert(number);
}
有n個整數,使其前面各數順序向后移m個位置,最后m個數變成最前面m個數,見圖10.3。寫一函數實現以上功能,在主函數中輸入n個整數,并輸出調整后的n個數。
main()
{int number[20],n,m,i;
printf("How many numbers?");
scanf("%d",&n);
printf("Input %d numbers:\n",n);
for(i=0;i
scanf("%d",&number[i]);
printf("How many place you want to move?");
scanf("%d",&m);
move(number,n,m);
printf("Now,they are:\n");
for(i=0;i
printf("%d",number[i]);
}
move(int array[20],int n,int m)
{int *p,array_end;
array_end=*(array+n-1);
for(p=array+n-1;p>array;p--)
*p=*(p-1);
*array=array_end;
m--;
if(m>0)
move(array,n,m);
}
有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。
main()
{int n,i,a[100],*p,tr=0;
printf("qing shu ru ren shu:");
scanf("%d",&n);
for(i=0;i
a[i]=i+1;
p=a;
while(tr
{
if(*p!=0)
{if(i==3)
{*p=0;
tr++;
}
i++;
}
p++;
if(p>a+n-1)
p=a;
}
for(i=0;i
if(a[i]!=0)
{printf("zui hou liu zai dui wu zhong de shi %d",a[i]);
break;}
}
寫一個函數,將一個3*3的矩陣轉置。
main()
{int a[3][3],*p,i,j;
printf("Input matrix:\n");
for(i=0;i<3;i++)
scanf("%d %d
%d",&a[i][0],&a[i][1],&a[i][2]);
p=&a[0][0];
move(p);
printf("Now,matrix:\n");
for(i=0;i<3;i++)
printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]);
}
move(int *pointer)
{int i,j,t;
for(i=0;i<3;i++)
for(j=i;j<3;j++)
{t=*(pointer+3*i+j);
*(pointer+3*i+j)=*(pointer+3*j+i);
*(pointer+3*j+i)=t;
}
}
用指向指針的指針的方法對5個字符串排序并輸出。
#define LINEMAX 20
#include
#include
main()
{char *str[5],temp[LINEMAX],a[5][LINEMAX],**p;
int i,j;
printf("qing yi ci shu ru zi fu chuan:");
for(i=0;i<5;i++)
gets(a[i]);
for(i=0;i<5;i++)
str[i]=a[i];
p=str;
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(strcmp(*(p+i),*(p+j))>0)
{strcpy(temp,*(p+i));
strcpy(*(p+i),*(p+j));
strcpy(*(p+j),temp);}
for(i=0;i<5;i++)
{puts(a[i]);
printf("\n");
}
}
寫一個函數,對一個16位的二進制數取出它的奇數位(即從左邊起第1、3、5、...、15位)。
main()
{unsigned getbits(unsigned);
unsigned int a;
printf("\nInput an octal number:");
scanf("%o",&a);
printf(""result:%o\n",getbits(a));
}
unsigned getbits(unsigned value)
{int i,j,m,n;
unsigned int z,a,q;
z=0;
for(i=1;i<=15;i+=2)
{q=1;
for(j=1;j<=(16-i-1)/2;j++)
q=q*2;
a=value>>(16-i);
a=a<<15;
a=a>>15;
z=z+a*q;
}
return(z);
}
編一函數用來實現左右循環移位。
main()
{unsigned moveright(unsigned,int);
unsigned moveleft(unsigned,int);
unsigned a;
int n;
printf("\nInput an octal number:");
scanf("%o",&a);
printf("Input n: ");
scanf("%d",&n);
if(n>0)
{moveright(a,n);
printf("result:%o\n",moveright(a,n));
}
else
{n=-n;
moveleft(a,n);
printf("result:%o\n",moveleft(a,n));
}
}
unsigned moveright(unsigned value,int n)
{unsigned z;
z=(value>>n)|(value<
return(z);
}
unsigned moveleft(unsigned value,int n)
{unsigned z;
z=(value>>(16-n))|(value<
return(z);
}
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的c语言编程 新浪博客,[c语言编程]经典编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言实战1200例 pdf6,C语言程
- 下一篇: android 自定义打包,androi