C语言编程题

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;
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 143,639评论 1 302
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 61,591评论 1 258
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 95,050评论 0 213
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 41,169评论 0 180
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 48,976评论 1 258
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 38,876评论 1 178
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 30,476评论 2 273
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,229评论 0 167
  • 想象着我的养父在大火中拼命挣扎,窒息,最后皮肤化为焦炭。我心中就已经是抑制不住地欢快,这就叫做以其人之道,还治其人...
    爱写小说的胖达阅读 29,095评论 6 234
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 32,579评论 0 213
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,356评论 2 215
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 30,698评论 1 232
  • 白月光回国,霸总把我这个替身辞退。还一脸阴沉的警告我。[不要出现在思思面前, 不然我有一百种方法让你生不如死。]我...
    爱写小说的胖达阅读 24,272评论 0 32
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,168评论 2 214
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 31,605评论 3 210
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,645评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,035评论 0 166
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 33,609评论 2 232
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 33,698评论 2 233

推荐阅读更多精彩内容