C 语言练习题总结


#include <stdio.h>

#include <stdlib.h>

#include <string.h>


void printBinary(int number);

char upper(char ch);

void arrayWinthBig(char ch[],int lenth);

int arrayMax(int a[],int count);

int arraySum(int a[],int n);

void reverseOder(int a[],int number);

int includeStr(char str[],char ch);

void changeNumber(int*p);

void changeValue(int *v1,int *v2);

int huiWen(char*s);

void strlink2(char s[],char t[]);

int jieCheng2(int n);

void game();

void maoPao(int a[],int number);

void xuanZe(int a[],int len);

int zheBan(int a[],int len,int number);

int searchChar(char ch[],char a);

void nixuArray(int arry[],int len);

void paiXuArray(char *ch[],int len);

#define MAX(a,b) a>b ? a:b;

int main()

{


 

    



       return 0;

}

//文件操作

void test20()

{

    FILE *p = fopen("one.txt", "r+");

    char*s = {"hello"};

    char ch[6];

    if (p!=NULL)

    {

        fputs(s,p);

    }else

    {

        printf("写入失败!");

        

    }

    

    fpurge(p);

    

    if (p)

    {

        fgets(ch, 6, p);

    }else

    {

        printf("读取失败!");

        

    }

    printf("%s\n",ch);

    

    

    fclose(p);


}


void paiXuArray(char *ch[],int len)

{

    char *temp;

    for(int i = 0;i<len-1;i++)

    {

    

        for(int j = 0;j<len-1-i;j++)

        {

        if(strcmp(ch[j],ch[j+1])>0)

        {

            temp = ch[j];

            ch[j] = ch[j+1];

            ch[j+1] = temp;

        

        }

        

        }

    

    }


}

void nixuArray(int arry[],int len)

{

    int *p=arry;

    for(int i = 0;i<=len-i;i++)

    {

        int temp = *(p+i);

        

        *(p+i) = *(p+len-1-i);

        

        *(p+len-1-i)=temp;

    

    

    }


}

//统计单词的个数

void test19()

{

    

char ch[100];

printf("请输入单词中间以空格隔开:\n");

gets(ch);

int words = 0;

int count = 0;

for(int i = 0;i<strlen(ch);i++)

{

    if(ch[i]==' ')

    {

        words = 0;

        

        

    }else if(words == 0)

    {

        count++;

        ch[i]=ch[i]-32;

        words=1;

        

    }

    

}

printf("%d\n",count);

    puts(ch);


}


//判断某个字符是否在字符串中,如果在返回所在的下标,如果不在则返回-1

int searchChar(char ch[],char a)

{

    for(int i = 0;i<strlen(ch);i++)

    {

        if(ch[i]==a)

        {

            return i;

        }

    }

    

    return -1;


}


//求二维数组的最大值和最大值的下标

int test18()

{

    int score[5][3]=

    {

        {59,90,68},

        {69,95,73},

        {99,70,78},

        {39,50,75},

        {50,80,100},

        

    };

    int max=score[0][0];

    for(int i = 0;i<5;i++)

    {

        for(int j = 0;j<3;j++)

        {

            if(score[i][j]>max)

            {

                max=score[i][j];

                

            }

            

        }

        

    }

    printf("%d\n",max);

    for(int i = 0;i<5;i++)

    {

        for(int j = 0;j<3;j++)

        {

            if(score[i][j]==max)

            {

                printf("score[%d][%d]",i,j);

                return 0;

                

            }

            

        }

        

    }

    

    return 0;


}


void test17()

{

    //求多人多门课程的平均成绩

    float score[5][3]=

    {

        {59,90,68},

        {69,95,73},

        {99,70,78},

        {39,50,75},

        {50,80,88},

        

    };

    

    

    

    for(int i = 0;i<5;i++)

    {

        float temp=0;

        for(int j = 0;j<3;j++)

        {

            temp+=score[i][j];

            

        }

        printf("%.2f\t",temp/3);

        

    }

    printf("\n");

    for(int i = 0;i<3;i++)

    {

        float temp=0;

        for(int j = 0;j<5;j++)

        {

            temp+=score[i][j];

            

        }

        printf("%.2f\t",temp/5);

        

    }


}

void test16()

{


    //215彩票

    int ca[5];

    for(int i = 0;i<5;i++)

    {

        

        for(int j = 0;j<5;j++)

        {

            ca[j]=arc4random_uniform(21)+1;

            

            for(int k = 0;k<j;k++)

                while(ca[j]==ca[k])

                {

                    ca[j]=arc4random_uniform(21)+1;

                    

                    

                }

            

            printf("%d\t",ca[j]);

            

        }

        

        

        printf("\n");

        

        

    }


}

//折半查找

int zheBan(int a[],int len,int number)

{

    int low = 0;

    int high = len -1;

    

    while(low<=high)

    {

        int mid = (low+high)/2;

        if(a[mid]<number)

        {

            low = mid+1;

        }else if(a[mid]>number)

        {

            high = mid-1;

        }else if(a[mid]==number)

        {

            return mid;

        }

    

    }


    return -1;

}


//选择排序

void xuanZe(int a[],int len)

{

    for(int i = 0;i<len;i++)

    {

        for(int j = i+1;j<len;j++)

        {

            if(a[i]>a[j])

            {

                int temp = a[i];

                a[i] = a[j];

                a[j] = temp;

            

            }

        }

    }



}

//冒泡排序

void maoPao(int a[],int number)

{

    int temp;

    for(int i = 0;i<number;i++)

    {

        for(int j = 0;j<number-i;j++)

        {

            if(a[j]>a[j+1])

            {

                temp = a[j];

                a[j] = a[j+1];

                a[j+1] = temp;

                

            }

            

        }

        

    }


}


//打印图形  钻石


void test14()


{

    for(int i = 0;i<4;i++)

    {

        

        for(int j = 0;j<4-i;j++)

        {

            printf("  ");

        }

        for(int x = 0;x<2*i+21;x++)

        {

            

            printf("* ");

            

        }

        

        

        printf("\n");

    }

    

    for(int i = 0;i<15;i++)

    {

        

        for(int j = 0;j<i;j++)

        {

            printf("  ");

        }

        for(int x = 0;x<2*(15-i)-1;x++)

        {

            printf("* ");

        }

        

        

        printf("\n");

    }


}

//剪刀 石头 的游戏

void game()

{

    //0-剪刀  1-石头  2-

    int person=-1,computer=-1;

    while(person!=0&&person!=1&&person!=2)

    {

        printf("请输入(提示:0-剪刀  1-石头  2-布):\n");

        scanf("%d",&person);

    }

    computer = arc4random_uniform(3);

    if((person == 0&&computer==2)||(person == 1&&computer==0)||(person == 2&&computer==1))

    {

        if(person==0)

        {

            printf("你出的是:剪刀\n");

        }else if(person==1)

        {

            printf("你出的是:石头\n");

        }else if(person==2)

        {

            printf("你出的是:布\n");

        }

        switch(computer)

        {

            case 0:

                printf("电脑出的是:剪刀\n");

                break;

            case 1:

                printf("电脑出的是:石头\n");

                break;

            case 2:

                printf("电脑出的是:布\n");

                break;

        }

        

        printf("恭喜你赢了!\n");

    }else if((person == 0&&computer==0)||(person == 1&&computer==1)||(person == 2&&computer==2))

    {

        if(person==0)

        {

            printf("你出的是:剪刀\n");

        }else if(person==1)

        {

            printf("你出的是:石头\n");

        }else if(person==2)

        {

            printf("你出的是:布\n");

        }

        switch(computer)

        {

            case 0:

                printf("电脑出的是:剪刀\n");

                break;

            case 1:

                printf("电脑出的是:石头\n");

                break;

            case 2:

                printf("电脑出的是:布\n");

                break;

        }

        

        printf("平局!\n");

    }else

    {

        if(person==0)

        {

            printf("你出的是:剪刀\n");

        }else if(person==1)

        {

            printf("你出的是:石头\n");

        }else if(person==2)

        {

            printf("你出的是:布\n");

        }

        switch(computer)

        {

            case 0:

                printf("电脑出的是:剪刀\n");

                break;

            case 1:

                printf("电脑出的是:石头\n");

                break;

            case 2:

                printf("电脑出的是:布\n");

                break;

        }

        printf("很遗憾!你输了!\n");

        

        

    }



}


//输入一个数判断月份

void test15()

{

    int month = 0;

    while(month<1||month>12)

    {

        printf("请输入1~12之间的数字:\n");

        scanf("%d",&month);

    }

    switch(month)

    {

        case 3:

        case 4:

        case 5:

            printf("春季\n");

            break;

        case 6:

        case 7:

        case 8:

            printf("夏季\n");

            break;

        case 9:

        case 10:

        case 11:

            printf("秋季\n");

            break;

        case 12:

        case 1:

        case 2:

            printf("冬季\n");

            break;

            

            

    }


}




void test12()

{

    /*

     提示用户输入一个正整数n,求出并输出其阶乘值n! = 1*2*3*4*...n

     要求:用递归的方式编写一个函数实现n的阶乘

     */

    //定义变量n来接收用户输入的值

    int n = 0;

    //提示用户输入

    

    printf("请输入一个正整数:\n");

    scanf("%d",&n);

    

    //计算结果并且输出

    int result = jieCheng2(n);

    printf("%d\n",result);


}

int jieCheng2(int n)

{

    if(n<=0)

    {

        return 1;

    }

    return jieCheng2(n-1)*n;


}

int cityNumber()

//河北省邯郸市的身份证是以130481开头;以13结尾是男士;写一个程序来通过身份证号码判断是否是邯郸人和性别

    //定义一个变量cityNumber来存储判断城市的号码130481

    //提示用户输入18位身份证号码

    printf("请输入18位身份证号码:\n");

    //定义数组用来存放用户输入的值

    char ID[19];

    scanf("%s",ID);

    

    char *cityNumber = "130481";

    for(int i = 0;i < 6;i++)

    {

        if(ID[i]!=cityNumber[i])

        {

            printf("这不是邯郸人!");

            return 0;

        }

        

    }

    

    printf("这是邯郸人!");

    if(ID[17]=='1'||ID[17]=='3')

    {

        printf("这位是男性");

    }else

    {

        printf("这位是女性");

    }


    return 0 ;

}

/*

 编写一个函数void strlink(char s[], char t[])

 将字符串t连接到字符串s的尾部

 */

void strlink2(char s[],char t[])


{


    

    for(int i =0 ;i<=strlen(s);i++)

{

    if(s[i]=='\0')

    {

        for(int j = 0;j<=strlen(t);j++)

        {

            s[i]=t[j];

            i++;

        }

    }


}


}


void strlink(char s[],char t[])

{

    int i = 0;

    while(s[i]!='\0')

    {

        i++;

    }

    int j = 0;

    while(t[j]!='\0')

    {

        s[i]=t[j];

        j++;

        i++;

    

    }



}

/*

 编写一个函数,判断某个字符串是否为回文。

 回文就是从左边开始读 从右边开始读 都是一样的,比如"abcba"

 */

int huiWen(char*s)

{

    for(int i = 0;i<strlen(s)-1;i++)

    {


            if(s[i]!=s[strlen(s)-1-i])

            {

                printf("这不是回文!\n");

                return 0;

            }

        

       

    

    }

    printf("这是回文!\n");

    return 1;


}

//定义一个函数实现两个值的交换

void changeValue(int *v1,int *v2)

{

    int temp = *v1;

    *v1 = *v2;

    *v2 = temp;


}

//定义一个函数实现出啊如一个值改变其内容(利用指针)

void changeNumber(int*p)

{

    *p=10;

}


//设计一个函数判断一个字符是否在字符串内

int includeStr(char str[],char ch)

{

    for(int i = 0;i<strlen(str);i++)

    {

        if(str[i]==ch)

        {

            return 1;

        }

    

    }


    return 0;

}

//设计一个函数逆序一维数组

void reverseOder(int a[],int number)

{

    

    for(int i = 0;i<(number/2);i++)

{

    


    

    int temp = a[i];

    a[i] = a[number-i-1];

    a[number-i-1] = temp;



    

}

    for(int i = 0;i<5;i++)

    {

        printf("%d\t",a[i]);

    }

    

    printf("\n");


}

//设计一个函数求前N个元素的和

int arraySum(int a[],int n)

{

    int sum;

    for(int i = 0;i<n;i++)

    {

        sum+=a[i];

    

    }

    return sum;

}

//设计一个函数找出数组元素的最大值

int arrayMax(int a[],int count)

{

    int max=a[0] ;

    for(int i = 0;i<count;i++)

    {

       

        if(a[i]>max)

        {

            max = a[i];

        }

    

    }


    return max;

}


int test11()

{

    //提示输入吴哥学生的成绩然后算出,最高分,最低分,平均分,总分,然后输出结果

    //定义数组来接收用户输入的值

    int score[5];

    //提示也难怪乎输入吴哥分数

    printf("请您分别输入5个分数:\n");

    for(int i = 0;i<sizeof(score)/sizeof(int);i++)

    {

        scanf("%d",&score[i]);

        

        if(score[i]<0)

        {

            printf("输入错误请重新运行程序!");

            return 0;

        }

    }

    int topScore=score[0];//最高分

    int lowScore=score[0];//最低分

    int totalScore;//总分

    int averageScore;//平均分

    for(int i = 0;i<sizeof(score)/sizeof(int);i++)

    {

        totalScore+=score[i];

        if(score[i]>topScore)

        {

            topScore=score[i];

        }else if(score[i]<lowScore)

        {

            lowScore=score[i];

        }

        

    }

    averageScore=totalScore/(sizeof(score)/sizeof(int));

    printf("最高分是:%d\n最低分是:%d\n总分是:%d\n平均分是:%d\n",topScore,lowScore,totalScore,averageScore);


    return 0;

}

void arrayWinthBig(char ch[],int lenth)

{

    char temp;

    int max ;

    

    for(int i = 0;i<lenth;i++)

    {

        max = i;

        for(int j = i+1;j<lenth;j++)

        {

            if(ch[max]<ch[j])

            {

                max=j;

            }

        }

        

        if(i!=max)

        {

            temp = ch[i];

            ch[i] = ch[max];

            ch[max] = temp;

        }

        

        

    }

    

    puts(ch);

//    for(int n = 0;n<lenth&&ch[n]!='\0';n++)

//    {

//        printf("%c",ch[n]);

//    }


}


//设计一个函数将小写字母转换成大写

char upper(char ch)

{

    if(97<=ch&&ch<=122)

    {

        return ch-32;

    }

    return ch;

}

//利用位运算符来输出一个数的二进制格式

void printBinary(int number)

{

    int temp =sizeof(number)*8;

    for(int i = 1;i <=temp ;i++)

    {

        if((1&(number>>(temp-i)))==0)

        {

            printf("0");

        }else if((1&(number>>(temp-i)))==1)

        {

            printf("1");

        }

        if(i%4==0)

        {

            printf(" ");

        }

    

    }

    printf("\n");

}


void test10()

{

    //利用位运算符来判断一个数的奇偶性

    int a = 12;

    a&1 ? printf("奇数\n") : printf("偶数\n");


}


void test9()

{

    //在不使用其他变量的情况下实现两个值的转化

    int a = 10;

    int b = 20;

    printf("转换前a = %d,b = %d\n",a,b);

    //    a = a^b;

    //    b = a^b;

    //    a = a^b;

    a = a+b;

    b = a-b;

    a = a-b;

    printf("转化后a = %d,b = %d\n",a,b);

}

void test8()

{

    /*

     题目:程序运行的时候提示下列信息

     请输入相应数字选择需要执行的运算:

     1 加法

     2 减法

     3 乘法

     4 除法

     

     用户选择运算后,再提示用户输入两个需要进行运算的整数,输入完毕后就输出运算结果

     */

    //1:提示用户输入 1 加法  2 减法

    printf(" 请输入相应数字选择需要执行的运算:\n1 加法\n2 减法\n3 乘法\n4 除法\n");

    //2:定义变量cal接收用户输入的数值并判断

    int cal = 0;

    while(cal!=1 && cal!=2&& cal!=3&& cal!=4)

    {

        scanf("%d",&cal);

        if(cal!=1 && cal!=2&& cal!=3&& cal!=4)

        {

            printf("error\n");

        }

    }

    //3:提示用户输入两个数中间由","隔开

loop:printf("请您输入要计算的两个整数,中间用“,”隔开(例如12:\n");

    //4:定义变量numA,numB用来接收用户输入的数据

    int numA = 0,numB = 0;

    

    //5:接收用户输入的数据

    

    scanf("%d,%d",&numA,&numB);

    //6:计算结果并输出

    if(cal==1)

    {

        printf("%d + %d = %d\n",numA,numB,numA+numB);

    }else if(cal==2)

    {

        printf("%d - %d = %d\n",numA,numB,numA-numB);

    }else if(cal==3)

    {

        printf("%d × %d = %d\n",numA,numB,numA*numB);

    }else if(cal==4)

    {

        float temp = 1;

        temp*=numA;

        if(numB!=0)

        {

            printf("%d / %d = %f\n",numA,numB,temp/numB);

        }else

        {

            goto loop;

        }

        

    }


}


//printfscanf,运算符的使用

void caTime()

{

    //printf("%d\n",10%3);//取余

    //1:提示用户输入几秒

    printf("请您输入要计算的秒数:\n");

    //2:定义一个变量接收

    int m = 0 ;

    scanf("%d",&m);

    //3:计算输出结果

    printf("计算结果是:%d%d\n",m/60,m%60);

    

}


void caScore ()

{

    //    分数>=0 && 分数<=59 E

    //    分数 >=60&& 分数<=69 D

    //    分数>=70&&分数<=79 C

    //    分数>=80&&分数<=89 B

    //    分数>=90&&分数<=100 A

    //    分数<0||分数>100 不合法

    

    int score = 0;

    printf("请输入分数:\n");

    scanf("%d",&score);

    

    if (score>=0 && score<=59)

    {

        printf("等级是:E\n");

    }else if (score>=60 && score<=69)

    {

        printf("等级是:D\n");

    }else if (score>=70 && score<=79)

    {

        printf("等级是:C\n");

    }else if (score>=80 && score<=89)

    {

        printf("等级是:B\n");

    }else if (score>=90 && score<=100)

    {

        printf("等级是:A\n");

    }else

    {

        printf("您输入的不合法!\n");

    }

    

}


void test1()

{

    printf("请输入一个1-7的数字:\n");

    int a = 0;

    scanf("%d",&a);

    switch (a)

    {

        case 1:

            printf("星期一\n");

            break;

        case 2:

            printf("星期二\n");

            break;

        case 3:

            printf("星期三\n");

            break;

        case 4:

            printf("星期四\n");

            break;

        case 5:

            printf("星期五\n");

            break;

        case 6:

            printf("星期六\n");

            break;

        case 7:

            printf("星期日\n");

            break;

        default:

            printf("error\n");

            break;

    }

    

}



void test2()

{

    //使用随机数随机产生一个1-100之间的数,给用户10次竞猜的机 ,效果如下

    int num = arc4random_uniform(100)+1;

    

    int n = 0;

    for (int i = 1; i <= 10; i++)

    {

        printf("请输入:\n");

        scanf("%d",&n);

        if (num == n)

        {

            printf("你猜对了!你还剩%d次机会!\n",10-i);

            break;

        }else if (n<num)

        {

            printf("你猜小了!你还剩%d次机会!\n",10-i);

        }else

        {

            printf("你猜大了!你还剩%d次机会!\n",10-i);

        }

        if (i==10)

        {

            printf("你的机会用完了!");

        }

    }

    

    

}


void test3()

{

    //乘法口诀

    for (int i = 1; i <= 9; i++)

    {

        for (int j = 1; j <= i; j++)

        {

            printf("%dx%d=%d\t",j,i,i*j);

        }

        printf("\n");

    }

}


void test4()

{

    //统计从键盘输入一行字符的个数

    int num = 0;

    char ch;

    printf("请输入字符:\n");

    

    while (ch!='\n') {

        scanf("%c",&ch);

        num++;

    }

    printf("%d",num);

}


void test5()

{

    //输入一个正数n计算从1+2+3+.......+n的值。

    

    printf("请输入一个正数:\n");

    int n = 0,sum = 0;

    scanf("%d",&n);

    for (int i = 1; i <= n; i++)

    {

        sum = sum + i;

    }

    printf("%d",sum);

}

//定义一个函数来计算两个数的大小返回最大的那个

int comp(int a,int b)

{

    

    return a>b ? a:b;

}


//n的阶乘

int jieCheng(int a)

{

    int result;

    if (a == 1)

    {

        result = a;

    }else

    {

        result = jieCheng(a-1)*a;

    }

    return result;

    

}


void test6()

{

    char ch[100]="hello world!";

    char ch2[50]= "  hello c!";

    

    printf("%s\n",strcat(ch, ch2));

    printf("%s\n",strcpy(ch, "  hello oc!"));

    

    printf("%lu\n",strlen(ch2));

    printf("%d\n",strcmp(ch, ch2));

    

    //puts(ch);

}


void swap(int *p,int *q)

{

    

    int temp= *p;

    *p = *q;

    *q = temp;

}


void test7()

{

    //int a = 10,b = 20;

    //    printf("转换前:a = %d,b = %d\n",a,b);

    //    swap(&a, &b);

    //    printf("转换后:a = %d,b = %d\n",a,b);

    

    //    int ch = a>b ? a:b;

    //    printf("%d\n",ch);

    //

    int x = 1,y = 1;

    //    if(x++==2 && ++y==2) {

    //        x =7;

    //    }

    //    printf("x=%d, y=%d\n", x, y);//2,1

    //    int x = 1,y = 1;

    //    if(x++==2 || ++y==2) {

    //        x =7;

    //    }

    

    

    

    printf("x=%d, y=%d\n", x, y);//7,2

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值