美文网首页
C语言编程题

C语言编程题

作者: 长风留言 | 来源:发表于2019-08-16 16:06 被阅读0次

    1、定义一个函数,任意传递三个整数类型的值,返回这三个值的和、差、平均值。

    int demo(int v1, int v2, int v3, int *p1, int *p2);
    int main(int argc, const char * argv[]) {
        // 要求定义一个函数, 传递三个值, 返回这三个值得和,差,平局值
        int a = 10;
        int b = 20;
        int c = 30;
    //    int res =  demo(a , b , c);
    //    printf("res = %i\n", res);
        
        // 定义三个变量用于保存计算结果
        int res1 = 0; // 和
        int res2 = 0; // 差
    //    int res3 = 0; // 平局值
        
        // *p1 == res1 *p2 == res2
        // 我们想要的就是调用完函数之后, 和差平均值对应的变量都被"修改"为对应的值
       int res3 = demo(a, b, c, &res1, &res2);
        
        printf("和 = %i, 差 = %i, 平均值 = %i\n", res1, res2, res3);
        
        return 0;
    }
    
    int demo(int v1, int v2, int v3, int *p1, int *p2)
    {
        int sum = v1 + v2 + v3;
        *p1 = sum;
        int m = v1 - v2 - v3;
        *p2 = m;
        int average = sum / 3;
        
        return average;
        
        /*
        // 因为返回的是一个逗号表达式, 而逗号表达式的值是最后一个表达式的值, 所有返回的是average
    //    return sum, m, average;
        */
        
        /*
        // return 连个作用 1.返回值给调用者 2.结束函数
        // 注意点: return后面不可以写任何语句, 因为执行不到
        return sum;
        printf("--------------\n");
        return m;
        return average;
         */
    }
    

    2、 编写一个函数char_contains(char str[],char key), 如果字符串str中包含字符key则返回数值1,否则返回数值0。

    #include <stdio.h>
    #include <math.h>
    int char_contains(char str[], int length,char key);
    int char_contains2(char str[],char key);
    int main(int argc, const char * argv[]) {
        // 编写一个函数char_contains(char str[],char key), 如果字符串str中包含字符key则返回数值1,否则返回数值0
        // 给你一个字符串和一个key, 要求从字符串中找出key, 如果找到就返回1没有找到就返回0
        char str[] = "xiaomage";
        char key = 'z';
        int length = sizeof(str) / sizeof(str[0]);
       int res = char_contains(str, length, key);
    //    int res = char_contains2(str, key);
        printf("res = %i\n", res);
        return 0;
    }
    int char_contains2(char str[],char key)
    {
        /*
         xiaomage  a
         x != a  x != \0
         i != a  i != \0
         a != a
         
         xia  z
         x != z x != \0
         i != z i != \0
         a != z a != \0
         \0 != z \0!=\0
         */
        /*
         // 1.定义一个变量记录当前的索引
         //    int index = 0;
         // 2.遍历数组, 取出当前的字符判断是否不等于key, 并且当前出去的字符不是\0
        while (str[index] != key && str[index] != '\0') {
            index++;
        }
         */
        int index = -1;
        while (str[++index] != key && str[index] != '\0');
        
        //          a != '\0'
        //          \0 != \0
    //    int res = str[index] != '\0' ? 1 : 0;
    //    return  res;
        return str[index] != '\0' ? 1 : 0;
    }
    int char_contains(char str[], int length,char key)
    {
        for (int i = 0; i < length; i++) {
            if (str[i] == key) {
                return 1;
            }
        }
        return 0;    
    }
    

    3、编程实现从键盘输入3个0至9的数字,然后输出0至9中哪些数字没有出现过。

    #include <stdio.h>
    
    int main(int argc, const char * argv[]) {
        // 从键盘输入3个0~9的数字,然后输出0~9中哪些数字没有出现过
        // 从键盘输入100个0~2000的数字,然后输出0~2000中哪些数字没有出现过
        /*
         输入: 1, 3 ,5
         输出: 0, 2, 4, , 6, 7, 8, 9
         */
        /*
        // 1.接收用户输入的数据
        int num1, num2, num3;
        printf("输入三个整数, 用逗号隔开\n");
        scanf("%i,%i,%i", &num1, &num2, &num3);
        
        // 2.遍历打印0~9
        for (int i = 0; i <= 9; i++) {
            // 3.判断当前打印的值是否是用户输入的值, 如果是就不打印
            if (num1 != i &&
                num2 != i &&
                num3 != i) {
                
                printf("%i\n", i);
            }
        }
         */
        
        // 空间换时间
        // 1.定义数组保存所有用户输入的数
        int nums[10] = {0};
        // 2.接收用户输入的数据
        int value = -1;
        for (int i = 0; i < 3; i++) {
            printf("请输入%i个整数\n", i+1);
            scanf("%i", &value);
            nums[value] = 1;
        }
        
        for (int i = 0; i < 10; i++) {
    //        printf("nums[%i] = %i\n", i , nums[i]);
            if (nums[i] != 1) {
                printf("%i\n", i);
            }
        } 
        return 0;
    }
    

    4、已知一个无序的数组, 里面有5个元素, 要求写一个函数对数组进行排序 int nums[8] = {99, 12, 88, 34, 5, 44, 12, 100};

    #include <stdio.h>
    
    void selectSort(int nums[], int length);
    void printArray(int nums[], int length);
    //void swap(int v1, int v2);
    void swap(int nums[], int i, int j);
    void bubbleSort(int nums[], int length);
    
    int main(int argc, const char * argv[])
    {
        // 已知一个无序的数组, 里面有5个元素, 要求对数组进行排序
        int nums[8] = {99, 12, 88, 34, 5, 44, 12, 100};
        int length = sizeof(nums) / sizeof(nums[0]);
        
        printArray(nums, length);
    //    selectSort(nums, length);
        bubbleSort(nums, length);
        
        printf("----------------\n");
        printArray(nums, length);
    
        return 0;
    }
    
    // 遍历数组
    void printArray(int nums[], int length)
    {
        for (int i = 0; i < length; i++) {
            printf("nums[%i] = %i\n", i, nums[i]);
        }
    }
    
    void bubbleSort(int nums[], int length)
    {
        for (int i = 0; i < length - 1; i++) {
            for (int j = 0; j < length - 1 - i; j++) {
                if (nums[j] > nums[j + 1]) {
                    swap(nums, j, j+1);
                }
            }
        }
    }
    
    // 选择排序
    void selectSort(int nums[], int length)
    {
        for (int i = 0; i < length - 1; i++) {
            for (int j = i+1; j < length; j++) {
                if (nums[i] > nums[j]) {
                    /*
                    int temp = nums[i];
                    nums[i] = nums[j];
                    nums[j] = temp;
                     */
    //                swap(nums[i], nums[j]);
                    swap(nums, i, j);
                }
            }
        }
    
    }
    
    // 基本数据类型作为函数的参数, 是值传递, 在函数中修改形参不会影响实参的值
    /*
    void swap(int v1, int v2)
    {
        int temp = v1;
        v1 = v2;
        v2 = temp;
    }
     */
    // 交换两个数的值
    void swap(int nums[], int i, int j)
    {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
    

    5、 写一个函数,对传递任意两个整型类型的数据进行值的交换。

    6、 构造一个函数,任意输入一个字符串,判断字符串里面每个字符出现的次数。

    #include <stdio.h>
    #include <string.h>
    int main(int argc, const char * argv[]) {
        
        int count[128] = {0};
        char string[200];
        int i;
        printf("请输入一串字符串:");
        //scanf("%s",string);
        gets(string);//这个函数有安全隐患warning: this program uses //gets(), which is unsafe.
        for (i = 0; string[i] != '\0'; i++) {
            count[string[i]]++;
        }
        for (i = 0; i < 128; i++) {
            if (count[i] != 0) {
                printf("字符%c出现的次数:%d\n",i,count[i]);
            }
        }
        return 0;
    }
    

    7、求1+2!+3!+...+20!的和并返回输出。

    #include <stdio.h>
    #include <string.h>
    int main(int argc, const char * argv[]) {
        
        float n,s=0,t=1;
        for(n=1;n<=20;n++)
        {
            t*=n;
            s+=t;
        }
        printf("1+2!+3!...+20!=%e\n",s);
        return 0;
    }
    

    8、 编写一个函数有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

    #include <stdio.h>
    #include <string.h>
    int age(int n){
        //逆向思维,递归函数
        int c;
        if(n==1) c=10;
        else c=age(n-1)+2;
        return c;
    }
    int main(int argc, const char * argv[]) {
        
        printf("第五个人的年龄是:%d岁\n",age(5));
        return 0;
    }
    

    9、 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

    #include <stdio.h>
    #define nmax 50
    int main(int argc, const char * argv[]) {
        
        int i,k,m,n,num[nmax],*p;
        printf("请输入游戏共计多少成员:");
        scanf("%d",&n);
        p=num;
        for(i=0;i<n;i++)
            *(p+i)=i+1;
        i=0;
        k=0;
        m=0;
        while(m<n-1){
            if(*(p+i)!=0) k++;
            if(k==3){
                *(p+i)=0;
                k=0;
                m++;
            }
            i++;
            if(i==n) i=0;
        }
        while(*p==0) p++;
        printf("最后剩下的是%d号位\n",*p);
        return 0;
    }
    

    10、 写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。(不准使用系统的strlen函数)。

    #include <stdio.h>
    int strLenth(char *p)
    {
        int n;
        n=0;
        while(*p!='\0')
        {
            n++;
            p++;
        }
        return n;
    }
    int main(int argc, const char * argv[]) {
        
        int len;
        char str[20];
        printf("请输入字符串\n");
        scanf("%s",str);
        len=strLenth(str);
        printf("你输入的字符串长度为 %d",len);
        return 0;
    }
    

    11、 计算字符串中子串出现的次数。

    #include <stdio.h>
    int main(int argc, const char * argv[]) {
        char str1[20],str2[20],*p1,*p2;
        int sum=0;
        printf("请输入两个字符串:");
        scanf("%s%s",str1,str2);
        p1=str1;p2=str2;
        while(*p1!='\0')
        {
            if(*p1 == *p2){
                while(*p1 == *p2 && *p2 != '\0'){
                    p1++;
                    p2++;
                }
            }
            else
                p1++;
            if(*p2=='\0')
                sum++;
            p2=str2;
        }
        printf("s2在s1中一共出现了%d次",sum);
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:C语言编程题

          本文链接:https://www.haomeiwen.com/subject/xilqsctx.html