C 基礎練習

輸出小於500的所有的“水仙花數”,所謂“水仙花數”是指一個3位數,其各位數字立方和等於該數本身。
#include<stdio.h>
#include<math.h>
int main()
{
  int flower=100,first=0,second=0,last=0;
  for(;flower<500;flower++)
  {
      first=flower%10;
      second=flower%100/10;
      last=flower/100;   
      if(flower==pow(first,3)
      +pow(second,3)+pow(last,3))//pow(first,int)算次方函數
          printf("%d,",flower);
       }
}
給一個不多於6位的正整數,要求:①求出它是幾位數;②分別輸出每一位數字;③按逆序輸出各位數字,例如原數爲158,應輸出851。
#include<stdio.h>
#include<math.h>
int main()
{
    int array[6],num=13224,count=0;
    int temp=1;
    for(int i=0;i<=6;i++)
    {
        if(num/temp==0)
        {
            count=i;
            break;
        }
        else
            temp*=10;
    }
    printf("count=%d\n",count);
    temp=1;
    for(int i=1;i<count;i++)
    {
        temp*=10;
    }
    for(int i=0;i<count;i++)
    {
        int a=num;
        //取一個多位數每一位的方法
        //先除後餘,先除與多位數相同位數的最小值獲取最高位
        //後餘多位數相同位數的最小值剩下的值
        array[i]=a/temp;
        num=num%temp;
        temp=temp/10;
    }
     for(int i=0;i<count;i++)
     {
         printf("%d,",array[i]);
     }
     for(int i=count-1;i>=0;i--)
     {
         printf("%d",array[i]);
     }
}
求5+55+555+5555+55555的值。
#include<stdio.h>
#include<math.h>
int main()
{
    int a=5,num=5,sum=0;
    for(int i=0;i<5;i++)
    {
        sum=num+sum;
        num=num*10+a;
    }
    printf("a+aa+...+aaaaa=%d",sum);
}
冒泡排序
#include<stdio.h>
#include<math.h>
int main()
{
    float num[10];
    for(int i=0;i<10;i++)
    {
        scanf("%f",&num[i]);//標準輸入函數中的格式必須與待輸入的變量的類型一致否則無法輸入
    }
    for(int i=0;i<10;i++)
    {
        for(int j=0;j<10-i;j++)  //注意J從0開始
        {
            if(num[j]>num[j+1])
            {
                float temp=num[j];
                num[j]=num[j+1];
                num[j+1]=temp;
            }
        }
    }
    for(int i=0;i<10;i++)
    {
        printf("%f,",num[i]);
    }
}
 將一個二維數組a的行和列的元素互換(即行列互換),存到另一個二維數組b中
#include<stdio.h>
#include<math.h>
#include<stdlib.h> //生成隨機數頭函數
#include<time.h>  //生成隨機數頭函數
int main()
{
   int a[4][5],b[5][4];
   srand(time(0));  //生成隨機數
   for(int i=0;i<4;i++)
   {
       for(int j=0;j<5;j++)
       {
           a[i][j]=rand()%100;  //生成100以內的隨機數
       }
   }
   for(int i=0;i<4;i++)
   {
       for(int j=0;j<5;j++)
       {
           b[j][i]=a[i][j];
       }
   }

   return 0;
}
 輸入一行字符,統計其中有多少個單詞,單詞之間用空格分隔開
#include<stdio.h>
int main()
{
    char str[80];
    gets(str);  //輸入字符串,可以輸入空格,scanf函數不能輸入空格
    puts(str);
    int sum=0,i=0;
    while(str[i]!='\0')//字符串數組以'\0'結尾,可以用其判斷是否結束
    {
        if(str[i]==' ')
        {
            sum++;
        }
        i++;
    }
    sum++;
    printf("%d",sum);
    return 0;
}
有3個字符串,要求找出其中最大者。
#include<stdio.h>
#include<string.h>  //字符串操作頭函數
int main()
{
    char str1[80],str2[80],str3[80],large[80];
    gets(str1);
    gets(str2);
    gets(str3);
    if(strcmp(str1,str2)>0) //strcmp函數,第一個變量與第二個變量相等則返回0,否則返回第一個與第二個的差值,大爲正數否則爲負數
    {
        strcpy(large,str1);
    }
    else
    {
        strcpy(large,str2);  //字符串複製函數
    }
    if(strcmp(str3,large)>0)
    {
        strcpy(large,str3);
    }
    puts(large);
    return 0;
}

輸入兩個整數,要求用一個函數求出其最大公約數和最小公倍數

#include<stdio.h>
#include<string.h>
/*最小公倍數爲兩個數之積除以最大公約數*/
int main()
{
    int num1,num2,sum;
    scanf("%d",&num1);
    scanf("%d",&num2);
    sum=num1*num2;
    if(num1<num2)
    {
        num1=num1+num2;
        num2=num1-num2;
        num1=num1-num2;
    }
    while(1)
    {
        int temp=num1%num2;
        if(temp==0)
        {
            printf("%d\n",num2);
            printf("%d",sum/num2);
            break;
        }
        else
        {
            num1=num2;
            num2=temp;
        }
    }

    return 0;
}

輸入4個整數,找出其中最大的數。用函數的嵌套調用來處理。

#include<stdio.h>
#include<string.h>
int max_4(int a,int b,int c,int d);
int max_2(int a,int b);
int main()
{
    int a,b,c,d;
    scanf("%d %d %d %d",&a,&b,&c,&d); //scanf函數輸入多個變量的另一種方法 scanf("%d%d%d%d",&a,&b,&c,&d);
    int max=max_4(a,b,c,d);
    printf("max=%d",max);
    return 0;
}
int max_4(int a, int b, int c, int d)
{
   int m=max_2(a,b);
   m=max_2(m,c);
   m=max_2(m,d);
   return m;
}
int max_2(int a, int b)
{
    return(a>b?a:b);
}

用遞歸方法求5!。

#include<stdio.h>
#include<string.h>
int fac(int num);
int main()
{
    int num=5;
    int res=fac(num);
    printf("%d",res);
    return 0;
}
int fac(int num)
{
    if(num==1)
        return 1;
    else
        return (num*fac(num-1));
}

編寫一個函數,用來分別求數組score_1(有5個元素)和數組score_2(有10個元素)各元素的平均值。

#include<stdio.h>
float ave(float score[],int sum);
int main()
{
    float score_1[5],score_2[10]; //無特殊說明第一考慮爲float型
    printf("input score_1\n");
    for(int i=0;i<5;i++)
    {
        scanf("%f",&score_1[i]);  //輸出與輸入函數格式一定要與變量一致
    }
    printf("input score_2\n");
    for(int i=0;i<10;i++)
    {
        scanf("%f",&score_2[i]);
    }
    printf("ava1=%f\n",ave(score_1,5));
    printf("ava2=%f\n",ave(score_2,10));
    return 0;
}

float ave(float score[],int num)
{
    float sum=0.0;
    for(int i=0;i<num;i++)
    {
        sum=sum+score[i];
    }
    return (sum/num);
}

將一個數組中的值按逆序重新存放

#include<stdio.h>
#include<string.h>
int main()
{
    int max;
    printf("input max\n");
    scanf("%d",&max);
    int num[max];  //數組可以用變量確定數組大小
    for(int i=0;i<max;i++)
    {
        scanf("%d",&num[i]);
    }
    for(int i=0;i<max/2;i++)
    {
        int temp=num[max-i-1];
        num[max-i-1]=num[i];
        num[i]=temp;
    }
    for(int i=0;i<max;i++)
    {
        printf("%d,",num[i]);
    }
    return 0;
}

用遞歸法將一個整數n轉換成字符串

#include<stdio.h>
#include<string.h>
void tra(int num, int n);
int main()
{
    int num,n=10;
    scanf("%d",&num);
    if(num<0)  //注意負數的判斷
    {
        num=-num;
        putchar('-');
    }
    tra(num,n);
    return 0;
}
void tra(int num,int n)
{
    if(num/n==0)
    {
        putchar(num%n+'0');
        return;
    }
    else
    {
        tra(num/10,n);
        printf("%c",num%n+'0');
    }
}

用指針實現輸入3個整數並按從小到大的順序輸出

#include<stdio.h>
#include<string.h>
int exchange(int* a,int *b,int *c);
int main()
{
    int  a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    exchange(&a,&b,&c);
    printf("%d,%d,%d",a,b,c);
    return 0;
}
int exchange(int *a, int *b, int *c)
{
    int temp;
    if(*a>*b)  //&爲取地址符號若變量爲指針則取的爲指針本身的值,取指針指向的地址的值爲*
    {
        temp=*a;
        *a=*b;
        *b=temp;
    }
    if(*a>*c)
    {
        temp=*a;
        *a=*c;
        *c=temp;
    }
    if(*b>*c)
    {
        temp=*b;
        *b=*c;
        *c=temp;
    }
}

用指針實現將數組b[10]中的元素按逆序存放。

#include<stdio.h>
void exchange(char *p, int n);
int main()
{
    int n=3;
    char b[n];
    for(int i=0;i<n;i++)
    {
        scanf("%c",&b[i]);
    }
    char *p=&b[0];
    exchange(p,n);
    for(int i=0;i<n;i++)
    {
        printf("%c,",b[i]);
    }
    return 0;
}
void exchange(char *p,int n)
{
    char temp;
    for(int i=0;i<n/2;i++)
    {
        temp=*(p+i);
        *(p+i)=*(p+n-1);
        *(p+n-1)=temp;
    }
}

用選擇法實現對10個整數按從小到大的順序排序輸出

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void exchange(int *p, int n);
int main()
{
    srand(time(0));
    int n=10;
    int arr[n];
    for(int i=0;i<n;i++)
    {
        arr[i]=rand()%100;
        printf("%d,",arr[i]);
    }
    printf("\n");
    exchange(&arr[0],n);
    for(int i=0;i<n;i++)
    {
        printf("%d,",arr[i]);
    }
    return 0;
}
void exchange(int *p, int n)
{
    for(int i=0;i<n;i++)
    {
        int max=0;
        for(int j=1;j<n-i;j++)
        {
            if(*(p+max)<*(p+j))  //指針操作需要極爲消息
            {
                max=j;
            }
        }
        int temp=*(p+n-i-1);
        *(p+n-i-1)=*(p+max);
        *(p+max)=temp;
    }
}

定義一個結構體變量(包括年、月、日)。計算當天是本年中的第幾天,注意閏年問題

#include<stdio.h>

struct {
    int year;
    int moun;
    int day;
}date;

int main()
{
    int sum=0;
    printf("input year,moun,day\n");
    scanf("%d %d %d",&date.year,&date.moun,&date.day);
    sum=(date.moun-1)*30+date.day;
    if(date.moun==3)
    {
        sum=sum+1;
    }
    else if(date.moun==5||date.moun==4)
    {
        sum=sum+2;
    }
    else if(date.moun==7||date.moun==6)
    {
        sum=sum+3;
    }
    else if(date.moun==8)
    {
        sum=sum+4;
    }
    else if(date.moun==10||date.moun==9)
    {
        sum=sum+5;
    }
    else if(date.moun==12||date.moun==11)
    {
        sum=sum+6;
    }
    if(date.moun>2)
    {
        sum=sum-2;
        if(date.year/4==0||date.year/400==0||date.year/100==0)
            sum+=1;
    }
    printf("sum=%d",sum);
    return 0;
}

設計候選人得票統計程序,要求有4個侯選人(分別是Zhang 、Wang 、Li、 Zhao),選民每次輸入一個被選人的姓名,最後統計出各人的得票結果。


#include<stdio.h>
#include<string.h>
struct person{
    char name[20];
    int count;
}leader[4]={"zhang",0,"wang",0,"li",0,"zhao",0};

int main()
{
    char name[20];
    int i=0;
    while(i<3)
    {
        gets(name);   //輸入爲gets,輸出爲puts
        for(int i=0;i<4;i++)
        {
            if(strcmp(name,leader[i].name)==0)  //switch只能比較int型
            {
                leader[i].count++;
                return;
            }
        }
        i++;
    }
    return 0;
}

建立動態數組,輸入5個學生的成績,另外用一個函數檢查其中有無低於60分的,輸出不合格的成績。(動態數組重點)

#include<stdio.h>
#include<string.h>
#include<malloc.h>  //動態數組頭文件

int main()
{
    int n=5;
    int *p=(int*) malloc(n*sizeof(int));  //動態數組聲明方法,此時*p相當於p[5]
    printf("input score\n");
    for(int i=0;i<n;i++)
    {
        scanf("%d",&p[i]);
    }
    free(p);  //動態數組一定要釋放
    return 0;
}

有一個一維數組score,內放10個學生成績,用一個函數求平均成績,並將10個成績中不及格(小於60)的成績和該成績在數組中的序號輸出。

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<time.h>

float ave(float score[], int n);

int main()
{
    float score[10];
    srand(time(0));
    for(int i=0;i<10;i++)
    {
        score[i]=rand()%100;
        printf("%2.1f,",score[i]);
    }
    printf("\n");
    printf("average=%2.1f",ave(score,10));
    return 0;
}
float ave(float score[],int n)
{
    int sum=0;
    for(int i=0;i<10;i++)
    {
        sum=sum+score[i];
        if(score[i]<=60)
            printf("%d,",i+1);
    }
    printf("\n");
    return (sum/10);
}

輸入8個學生4門課的成績,分別用函數實現如下功能:
(1) 計算每個學生平均分;
(2) 計算每門課的平均分;
(3) 找出32個分數中最高分所對應的學生和課程。

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<time.h>

int main()
{
    srand(time(0));
    int m=8,n=4,arry[m][n];
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            arry[i][j]=rand()%100;
        }
    }
    int sum1[m],sum2[n];
    int max[2]={0,0};
    int maxs=arry[0][0];
   for(int i=0;i<m;i++)
   {
       for(int j=0;j<n;j++)
       {
           if(arry[i][j]>maxs)
           {
               max[0]=i;
               max[1]=j;
           }
           sum1[i]=sum1[i]+arry[i][j];
           sum2[j]=arry[i][j]+sum2[j];
       }
   }
    return 0;
}

用一個函數實現將一行字符串中的最長的單詞輸出。此行字符串從主函數傳遞給該函數。

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<time.h>

void maxWorld(char world[]);
int main()
{
    char world[80];
    gets(world);
    maxWorld(world);
    return 0;
}
void maxWorld(char world[])
{
    int i=0;
    int max=0,temp=0,begain=0;
    while(1)
    {
        if(world[i]==' '||world[i]=='\0')
        {
            if(temp>max)
            {
                max=temp;
                begain=i-max;
            }
            if(world[i]=='\0')
            {
                break;    //while中return跳出整個函數,break跳出while循環
            }
            temp=0;
        }
        else
        {
            temp++;
        }
        i++;
    }
    for(int i=begain;i<begain+max;i++)
    {
          printf("%c",world[i]);
    }

}

輸出金字塔圖案(要求用循環實現)

#include<stdio.h>

void main()
 {int i,j,k;
  for (i=0;i<=4;i++)
   {for (j=0;j<=3-i;j++)
      printf(" ");
    for (k=0;k<=2*i;k++)
      printf("*");
    printf("\n");
   }
  for (i=0;i<=4;i++)
   {for (j=0;j<=i;j++)
       printf(" ");
    for (k=0;k<=6-2*i;k++)
       printf("*");
    printf("\n");
   }
  }

要有一個已排好序的數組,求輸入一個數後,按原來排序的規律將她插入數組中。

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<time.h>

void insert(int *p,int n);

void main()
{
    int arry_1[5]={9,12,44,100,101};
    int m;
    scanf("%d",&m);
    int arry_2[6];  //對於數組的重排可以將原數組複製到另一個數組中
    int i,j;
    if(arry_1[0]>arry_1[1])  //減序排列
    {
        for(i=0;i<5;i++)
        {
            if(m>arry_1[i])
                break;
        }
    }
    else                //增序排序
    {
        for(i=0;i<5;i++)
        {
            if(m<arry_1[i])
                break;
        }
    }
    for(j=0;j<6;j++)
    {
        if(j<i)
        {
            arry_2[j]=arry_1[j];
        }
        else if(j==i)
        {
            arry_2[j]=m;
        }
        else
        {
            arry_2[j]=arry_1[j-1];
        }
    }
        for(i=0;i<6;i++)
        {
             printf("%d,",arry_2[i]);
        }


}

有一行電文,已按下面規律譯成密碼:
A→Z a→z
B→Y b→y
C→X c→x
即第1個字母變成第26個字母,第i個字母變成第(26 – i + 1)個字母。非字母符號不變。要求編程序將密碼譯回原文,並輸出密碼和原文。

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<time.h>

int main()
{
    char world[100],tran[100];
    gets(world);
    int i=0;
    while(world[i]!='\0')
    {
        if(world[i]>='A'&&world[i]<='Z')
        {
            tran[i]=25-(world[i]-'A')+'A';
        }
        else if(world[i]>='a'&&world[i]<='z')
        {
            tran[i]=25-(world[i]-'a')+'a';
        }
        else
        {
            tran[i]=world[i];
        }
        i++;
    }
    tran[i]='\0';
    puts(tran);
    return 0;
}

編一程序,輸入月份號,輸出該月的英文月名。例如,輸入3,則輸出March,要求用指針數組處理。

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<time.h>

int main()
{
    char * month_name[13]={"illegal month","January","February","March","April",
       "May","June","july","August","September","October", "November","December"};
    int n=0;
    scanf("%d",&n);
    if(n<1||n>12)  //注意容錯
    {
        n=0;
    }
    printf("\n%s",*(month_name+n));
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章