linux安装gcc
linux下使用gcc编译c:
gcc test.c -o test
或者
gcc test.c -o test -lm(使用math里面的库的时候可能编译出错undefined reference to `sqrt’,需要加上-lm 连接math库)
调用编译好的文件
./test
#include<stdio.h>
#include <string.h>
#include <math.h>
/*输出前N项的斐波那契数*/
void feibo(int n){
int first=1,next=2;
int i,now;
for(i=3;i<n;i++){
now=first+next;
first=next;
next=now;
printf("第&d个斐波那契数列是%d\n",i,now);
}
}
/*求2个数的最大公约数*/
int maxDivNum(int first,int sed){
int i=first;
if(sed<first){
i=sed;
}
for(;i>0;i--){
if(first%i==0 && sed%i==0){
return i;
}
}
return 1;
}
/*求2个数的最小公倍数*/
int minDivNum(int first,int sed){
int i=first;
if(sed>first){
i=sed;
}
for(;i<first*sed;i++){
if(i%first==0 && i%sed==0){
return i;
}
}
return i;
}
/*阶乘*/
int factorial(int n){
int i=2;
int res=1;
for(;i<=n;i++){
res*=i;
}
return res;
}
/*循环输出字母*/
void printWorld(){
char i='A';
for(;i<='Z';i++){
printf("字母为%c",i);
}
}
/*判断该整数数字是几位数。*/
int isHowMany(int num){
int res=1;
while((num/=10)>=1){
res++;
}
return res;
}
/*计算一个数的 n 次方*/
long n2index(int n,int index){
int i=0;
long res=1;
for(;i<index;i++){
res=res*n;
}
return res;
}
/*判断回文数0是,1不是*/
int isPalindrome(char str[],int len){
int start=0;
int end=len-1;
while(start<end){
if(str[start++]!=str[end--]){
return 1;
}
}
return 0;
}
/*判断一个数是否为质数0是,1不是*/
int isprime(int n){
int i;
for(i=2;i<=sqrt(n);i++){
if(n%i==0){
return 1;
}
}
return 0;
}
/*s到end之间的质数*/
void printFromS2E(int s,int end){
int i=s;
for(;i<=end;i++){
if(isprime(i)==0){
printf("当前的质数为%d",i);
}
}
}
/*判断Armstrong数(阿姆斯壮数)153=1^3+5^3+3^3
1634=1^4+6^4+3^4+4^4*/
int isArmstrong(int n){
int len=isHowMany(n);
int sum=0;
int t=n;
while(n>0){
sum+=pow(n%10,len);
n=n/10;
}
if(sum==t){
return 0;
}
return 1;
}
/*打印一个整数的所有因数*/
void printAllFactor(int n){
int i=1;
for(;i<=n;i++){
if(n%i==0){
printf("我是因数%d呢\n",i);
}
}
}
/*打印佛洛依德三角n
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15*/
void printFrod(int n){
int i=0,j=0,count=1;
while(count<n){
i++;
for(j=0;j<i;j++){
printf("%d ",count++);
}
printf("\n");
}
}
/*杨辉三角,
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1 打印前row行杨辉三角*/
void yanghuiAngle(int row){
int i,j,k;
int temp[row];
temp[0]=1;
for(i=0;i<row;i++){
for(k=row-i;k>0;k--)printf(" ");
for(j=i-1;j>0;j--){
temp[j]=temp[j]+temp[j-1];
}
temp[i]=1;
for(j=0;j<=i;j++){
printf("%d ",temp[j]);
}
printf("\n");
}
}
/*数字金字塔1
2 3 2
3 4 5 4 3
4 5 6 7 6 5 4
5 6 7 8 9 8 7 6 5*/
void printNum(int row){
int i,j;
for(i=1;i<=row;i++){
for(j=row-i;j>0;j--)printf(" ");
for(j=i;j<2*i;j++)printf("%d ",j);
for(j=j-2;j>=i;j--)printf("%d ",j);
printf("\n");
}
}
void printNum10(){
int i,j;
for(i=1;i<=10;i++){
for(j=10;j<100;j+=10){
printf(" %d ",i+j);
}
printf("\n");
}
}
void printNum101(){
int i,j;
for(i=2;i<=10;i++){
for(j=i;j<=i*10;j+=i){
printf(" %d ",j);
}
printf("\n");
}
}
/*二进制转10进制*/
int binary2Decimal(long n){
int res=0,i=0,oz=0;
while(n>0){
oz=n%10;
res=res+oz*pow(2,i++);
n=n/10;
printf("n为%d\n",n);
}
return res;
}
/*十进制转二进制*/
long long decimal2Bin(int n){
int res=0,i=1,oz=0;
while(n>0){
oz=n%2;
res+=oz*i;
i=i*10;
n=n/2;
}
return res;
}
/*八进制转十进制*/
int octal2decimal(long long n){
int res=0,i=0,oz=0;
while(n>0){
oz=n%10;
res+=oz*pow(8,i);
i++;
n=n/10;
}
return res;
}
/*十进制转八进制*/
long long decimal2octal(int n){
int res=0,i=1,oz=0;
while(n>0){
oz=n%8;
res+=i*oz;
n=n/8;
i=i*10;
}
return res;
}
/*八进制转二进制*/
long long octal2bin(long long n){
int res=0,i=0,oz=0;
/*八转十*/
while(n>0){
oz=n%10;
res+=oz*pow(8,i);
n=n/10;
i++;
}
n=res;
res=0,i=1,oz=0;
/*十转二*/
while(n>0){
oz=n%2;
res+=oz*i;
n=n/2;
i=i*10;
}
return res;
}
/*二进制转八进制*/
long long bin2octal(long long n){
int res=0,i=0,oz=0;
/*二转十*/
while(n>0){
oz=n%10;
res+=oz*pow(2,i);
i++;
n=n/10;
}
n=res;
res=0,i=1,oz=0;
/*十转八*/
while(n>0){
oz=n%8;
res+=oz*i;
i=i*10;
n=n/8;
}
return res;
}
/*字符串翻转传入的char str[]="hello" c语言初始化为连续的7个地址空间,并且把首地址赋值给str
所以这里打印str(%p)就为第一个字符的地址,str+1就为第二字符的地址,*str就为第一个字符,打印str(%s)
为hello,但是如果是char str[5]="hello"就会乱码,应为c语言将字符数组自动加上了'\0',作为字符串
的结束符。所以str的实际长度sizeof为6,strlen为5
*/
char* reverseStr(char* str){
int i=0;
int j=strlen(str)-1;
char temp;
while(i<j){
temp=str[i];
str[i]=str[j];
str[j]=temp;
i++;j--;
}
return str;
}
/*求平均数*/
double avg(int arr[],int len){
int i=0;
int sum=0;
for(;i<len;i++){
sum+=arr[i];
}
return sum/len;
}
/*矩阵相加*/
void add2matrix(int a[][2],int b[][2],int rowlen,int linelen){
int i,j;
for(i=0;i<linelen;i++){
for(j=0;j<rowlen;j++){
a[i][j]=a[i][j]+b[i][j];
}
}
}
/*矩阵转换*/
void reverseMatrix(int a[10][10],int rowlen,int linelen){
int i,j;
int temp[10][10];
for(i=0;i<linelen;i++){
for(j=0;j<rowlen;j++){
temp[i][j]=a[j][i];
}
}
memcpy(a, temp, rowlen*linelen);
}
/*使用指针访问数组*/
void testPointer(int a[],int len){
int i;
for(i=0;i<len;i++)printf("这是指针%p\n",a+i);
for(i=0;i<len;i++)printf("这是元素%p\n",*(a+i));
}
void testPointer(){
int var;
int *ptr;/*申明一个指针类型的变量*/
var = 3000;
/* 获取 var 的地址并赋值给ptr地址 */
ptr = &var;
*ptr = var;
var=400;
/*打印地址ptr = 0x7ffc3fadff8c*/
printf("ptr = %p\n", ptr );
/*使用*获取指针类型的值,并打印*ptr = 400*/
printf("*ptr = %d\n", *ptr );
int *ptr1;
ptr1=&var;/*三个指针类型变量指向同一个地址,一个改变其他的全部改变*/
/* 普通赋值(普通赋值之前要先给*ptr1一个地址,不然会发生 Segmentation fault) */
*ptr1=40000;
/*打印地址ptr1 = 0x7ffc3fadff8c*/
printf("ptr1 = %p\n", ptr1 );
/*使用*获取指针类型的值,并打印*ptr1 = 40000*/
printf("*ptr1 = %d\n", *ptr1 );
/*var = 40000*/
printf("var = %d\n", var );
/**ptr = 4 0000*/
printf("*ptr = %d\n", *ptr );
}
/*交换三个数:值交换(改变指针指向的值,相应的指针就指向也就改变了,实际参数(指针或者地址)没有改变,但是实际参数的指向的值改变了)*/
void cyclicSwap1(int *a,int *b,int *c){
int temp;
temp=*a;
*a=*b;
*b=*c;
*c=temp;
}
/*交换三个数:地址交换(函数传递是地址参数,在函数里面改变参数的地址,不影响实际参数的地址,所以这里面的abc的地址和值都改变了,但是实际参数的地址不会改变)*/
void cyclicSwap2(int *a,int *b,int *c){
int *temp;
temp=a;
a=b;
b=c;
c=temp;
printf("innera=%d;b=%d;c=%d\n",*a,*b,*c);
}
/*找到数组的最大值*/
int findMax(int a[],int len){
int i;
int max=0;
for(i=0;i<len;i++){
if(a[i]>max){
max=a[i];
}
}
return max;
}
/*删除字符串里面的特殊字符*/
char * delSpe(char str[]){
int len=strlen(str);
char *res=str;/*将str的地址给res*/
int i,c=0;;
for(i=0;i<len;i++){
if((str[i]<='Z'&&str[i]>='A') ||(str[i]<='z'&&str[i]>='a') || (str[i]<=9&&str[i]>=0) ){
res[c++]=str[i];
}
}
res[c]='\0';//字符串以\0结尾;
return res;
}
/*连接两个字符串*/
char * strconnection(char *str1,char *str2){
int len1=strlen(str1);
int len2=strlen(str2);
int i;
for(i=0;i<len2;i++){
*(str1+len1+i)=*(str2+i);
}
return str1;
}
/*计算字符串的长度*/
int computerLen(char *str){
int i=0;
for(;str[i]!='\0';i++);
return i;
}
/*查找字符串在字符中出现的次数*/
int comTimes(char *str,char c){
int sum=0,i=0;
for(;str[i]!='\0';i++){
if(str[i]==c){
sum++;
}
}
return sum;
}
/*字符串复制:值复制*/
void stringcopy1(char *to,char *from){
int i;
for(;from[i]!='\0';i++){
to[i]=from[i];
}
to[i]='\0';
}
/*字符串复制:值复制*/
void stringcopy2(char *to,char *from){
int i;
for(;from[i]!='\0';i++){
*(to+i)=*(from+i);
}
to[i]='\0';
}
/*字符串排序,有小到大*/
void compStr(char str[][10],int len){
printf("%d\n",len);
int i=0,j;
char t[10];
for(;i<len-1;i++){
for(j=i+1;j<len;j++){
if(strcmp(str[i],str[j])>0){
strcpy(t,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],t);
}
}
}
}
/*字符串排序,有小到大*/
void compStr(char str[][10],int len){
printf("%d\n",len);
int i=0,j;
char t[10];
for(;i<len-1;i++){
for(j=i+1;j<len;j++){
if(strcmp(str[i],str[j])>0){
strcpy(t,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],t);
}
}
}
}
typedef struct{
float real;
float img;
}mix;
struct Mix add(struct Mix one,struct Mix two){
struct Mix m;
m.real=one.real+two.real;
m.img=one.img+two.img;
return m;
}
mix add1(mix one,mix two){
mix m;
m.real=one.real+two.real;
m.img=one.img+two.img;
return m;
}
/*读取文件中所有数据并打印*/
void readTxt(){
FILE *f=NULL;
f=fopen("./a.txt","r+");
fseek(f,0,SEEK_END);//将文件指针移动到文件的末尾
long size=ftell(f);//获取从文件头到文件指针处的的长度
char buff[size+1];
fseek(f,0,SEEK_SET);//将文件指针移动到文件的头
fread(buff,sizeof(*buff),size,f);//读文件里面的全部内容
buff[size]='\0';//加上结束符
printf("read:%s\n",buff);
fclose(f);
}
/*写文件*/
void writeTxt(){
FILE *f=NULL;
f=fopen("./b.txt","a+");//文件存在,读取会从文件的开头开始,写入则只能是追加模式。如果文件不存在会创建文件,
fputs("this is test a \n",f);
fputs("this is test b \n",f);
fclose(f);
}
/*输出当前文件代码,__FILE__为当前文件常量*/
void printShell(){
FILE *f=NULL;
f=fopen(__FILE__,"r+");
char c;
c=fgetc(f);
while(c!=EOF){
putchar(c);
c=fgetc(f);
};
fclose(f);
}
/*约瑟夫问题,30个人(1-9报数),每次数到第9个人kill掉,直到剩下15个为止*/
void whoisd(){
int a[30];
int i=0,count=0,i9=0;
while(count<15){
if(i==30){
i=0;
}
if(a[i]!=-1){
if(i9==9){//kill
a[i]=-1; //kill
count++;
printf("%d\n",i);
i9=1;
}else{
i9++;
};
}
i++;
}
}
int main(){
whoisd();
return 0;
}