【学习ios之路:C语言】数组.循环.语句总和运用试题练习

1).求一个数组中的第二大值.数组中的值范围10 - 30 ,存储空间大小为10.

代码如下:

    int a[10] = {0};
    int max = 0, secMax = 0; //定义第一大值,第二大值.

    for (int i = 0; i< 10; i++) {
        a[i] = arc4random() %(30 - 10 + 1) + 10;//随机值 10-30
        printf("a[%d] = %d\n" ,i ,a[i]);
    }
    for (int i = 0 ; i < 10; i++) {
        if (max < a[i]) {
            secMax = max ;  //先将手中的第二大值给 secMax.然后在保存当前最大值.
            max = a[i];
        } else if (a[i] > secMax && max != a[i]) { //为了不出现 max= 30 ,sexMax =30 现象. 即  a[i] < secMax < max
            secMax = a[i];  //如果当前值比sexMax要大,比max小,则是第二大值.
        }
    }
    printf("max = %d,sexMax = %d \n" ,max ,secMax);

2.)随机产生20 个10~50的正整数存放到数组中,并求数组中的多有元素最大值、最小值、平均值及各元素之和。

代码如下:

    int m[20] = {0};
    for (int i = 0; i < 20; i++) {
        m[i] = arc4random() % (50 - 10 + 1) + 10;
        printf("%d\n", m[i]);
    }
    int max = 0, min = 0 , sum = 0; float avg = 0;

    //最大值
    for (int i = 0; i < 20; i++) {
        if (max < m[i]) {
            max = m[i];
        }
    }
    printf("max = %d\n", max);

    //最小值
    for (int i = 0; i < 20; i++) {
        if ( i == 0) {
           min = m[i];
        } else {
            if (min > m[i]) {
                min = m[i];
            }
        }
    }
    printf("min = %d\n", min);

    //和
    for (int i = 0; i < 20; i++) {
        sum += m[i];
    }
    printf("sum = %d\n", sum);

    //平均数
    avg = sum / 20;
    printf("avg = %.2f\n",avg);

3).将两个排好序的数组,合并到另外一个数组中,并且合并之后的数组也是有序的(归并排序)。

    //定义两个数组m,n
    int m[10] = {0};
    int n[10] = {0};

    //给数组赋值,随机值范围[20,40]之间
    for (int i = 0; i < 10; i++) {
         m[i] = arc4random() % (40 - 20 + 1) + 20;
         n[i] = arc4random() % (40 - 20 + 1) + 20;
    }
    //对数组m升序排列
    for (int i = 0; i < 10 - 1; i++) {
        for (int j = 0; j < 10 - i - 1; j++) {
            if (m[j] > m[j+1]) {
                int temp = m[j];
                m[j] = m[j+1];
                m[j+1] = temp;
            }
        }
    }
     //对数组n升序排列
    for (int  i = 0; i < 10 - 1; i++) {
        for (int j = 0; j < 10 - i - 1; j++) {
            if (n[j] > n[j+1]) {
                int temp = n[j];
                n[j] = n[j+1];
                n[j+1] = temp;
            }
        }
    }
      //排序后打印结果
    for (int i = 0; i < 10 ; i++) {
        printf("m[%d] = %d,n[%d] = %d \n", i, m[i], i, n[i]);
    }
 

    int c[10] ={0};//定义第三个数组.两个数组合并.归并排序
    int k = 0, i = 0, j = 0;
    while (i < 10 && j < 10 ) {
        if (a[i] < b[j]) {
            c[k++] = a[i++];
        } else {
            c[k++] = b[j++];
        }
    }
    while(i < 10){
        c[k++] = a[i++];
    }
    while (j < 10) {
         c[k++] = b[j++];
    }
    for (int i = 0; i< 10; i++) {
    printf("%d\n",c[i]); //输出结果
    }

4).在一个已知的字符串中,查找最长单词,并且输出最长单词.

    char str[] =  "name is a mk fuckd is fucshish";
    int len = 0;//存储当前单词的长度
    int max = 0;//存储最长单词的长度
    int maxIndex = 0;//存储最长单词的位置

    int i = 0;//循环变量初始值
    while (str[i] != '\0') {
        if (str[i] != ' ') {
              //如果去到的字符不是空格
            len++;
        } else {
             //获取到的是字符是空格.
            if (len > max) {
                max = len;
                maxIndex = i - len;
            }
            len = 0;//将单词长度清零,计算新的单词.
        }
        i++;
    }
    //如果最后一个单词是最长单词,不会遇到空格,则不会和maxLength 比较.所以我们只需要在循环外部比较一次即可.
    if (len > max) {
        max = len;
        maxIndex = i - len;
    }

    for (int i = maxIndex; i < maxIndex + max ; i++) {
        printf("%c",str[i]);//最长单词
    }

5).耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,最后留在圈子内的人就是出卖耶稣的叛徒。请找出它原来的序号。

思路:

1.如何描述13个人? 定义数组

2.如何报数? 定义变量 count记录报数

3.一旦报数为3,做什么处理?

4.如何剔除一个人? 将该元素置0

5.表示当前或者的人数? 定义变量number;

6.因为不确定循环次数,用whlie循环 循环条件 number > 1

7.如何循环报数?  如果 i = 13 ,就转到第一个人继续报数.

代码如下:

    int arr[13] ={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
    int count = 0, number = 13,i = 0 ;

    while (number > 1) {
        if (arr[i] != 0) {
            count++;
        if (count == 3) {
                arr[i] = 0;
                number--;
                count = 0;
            }
        }
         i++;
    if (i == 13) { //下标
            i = 0;//及第一个个人
        }

    }

    //对数组遍历,找到活着的人
    for ( int i = 0; i < 13; i++) {
        if (arr[i] != 0) {
            printf("当前活着的人:%d\n",arr[i]);
        }
    }

6),有1000000个数,每个数取值范围是0-999999找出其中重复的数,重复次数。

    int n[1000000];
    for (int i = 0; i < 1000000; i++) {
        //随机产生1000000个数,范围0-999999
        n[i] = arc4random() % 999999 ;
        printf("%d ", n[i]);
    }
     printf("\n");
    int count = 0; int temp = 0;
    for (int i = 0; i < 1000000; i++) {
             count = 0;
        for (int j = i; j < 1000000  ; j++) {
            if (n[i] == n[j] && i != j && n[i] != -1) {
                count++;
                temp = n[i];
                n[j] =  -1;
            }
        }
        n[i] = -1;
        if (count > 0) {
            printf("重复数为:%d,重复次数为:%d\n",temp,count);
        }
    }
时间: 2024-08-03 13:47:25

【学习ios之路:C语言】数组.循环.语句总和运用试题练习的相关文章

【学习ios之路:C语言】循环方面试题

1.打印出如下所示图形  : * *  * * * * 代码如下: for (int i = 0; i < 3; i++) { for (int j = 2; j > i; j--) { printf(" "); } for (int k = 0; k < i + 1; k++) { printf(" *"); } printf("\n"); } 2. 打印出如下图形: * *   * *  *  * *   * * 代码如下:

【学习ios之路:C语言】C语言中容易出错的试题整理.

注:此类题都是比较基础的试题,但是都容易让人忽视,或者平常不在意的. 1.表达式3.6-5/2+1.2+5%2的值是(D). A. 4.3  B. 4.8  C.3.3  D. 3.8 2.设有说明:char w;int x;float y;double z;则表达式w*x+z-y值的数据类型为:(D) A. float   B. char  C. int  D. double 3.以下关于运算符优先顺序的描述中正确的是:(C) A.关系运算符<算术运算符<赋值运算符<逻辑与运算符  

【学习ios之路:C语言】一维数组,数组排序,字符数组

1.数组 数组,快速定义多个变量. 数组定义: 数据类型 数组名[数组元素的个数] = {值1, 值2, 值 3}; 数组所占存储空间大小 = 数组元素个数 * 每个元素所占的存储空间大小. %lu  unsigned long 无符号的长整型. 无符号 >=0 sizeof 存储大小值  //用来计算一个变量,类型,以及数组所占存储空间的大小. int a[5] = { 2, 7, 4, 3, 6 };  printf("%lu\n", sizeof(arr)); //5 in

【学习ios之路:C语言】If循环的应用的练习

1.求三个数中的最大值 <span style="font-size:14px;"></span><pre name="code" class="cpp"><span style="font-size:14px;"> //方法1:先找到两个数的最大值,然后用最大值和第三个进行比较.</span> int n1 = 0, n2 = 0 ,n3 = 0 ; printf(

【学习ios之路:C语言】小程序:实现类似ATM取款机功能.

小程序:模拟ATM机取款的过程 1).定义两个能保存5个整形数的数组,一个用于保存5个人的卡号,一个用于保存对应卡号的密码 2).判断输入的卡号是否在数组中. 3).如果在数组中就让输入密码,判断是否和卡号对应的密码匹配. 4).判断密码,24小时内只允许输入3次错误的密码.输入错误应该提示还剩下的输入次数,3次都输入错误提示24小时内不允许操作该卡. 5).密码正确就让用户对该账户进行相应的操作. 6).注意取款的限制. 7).述功能对于一个ATM机是循环的过程,也就是说每个客户都会按照上面的

【学习ios之路:Objective-C】数组,字符串,字典的总和练习

①.实现方法:13个人,3个人一组,用一个大数组来管理每一个分组. //1.原数组 NSArray *array = @[@1,@2,@3,@4,@5,@6,@7,@8,@9,@10,@11,@12,@13]; //2.原数组个数 NSInteger count = [array count]; //3.新建一个可变的数组1. NSMutableArray *newArray = [[NSMutableArray alloc] init]; //4.循环 for (NSInteger i = 0

【学习ios之路:C语言】指针

指针 1.指针定义,即简单用法. <span style="font-size:14px;"> //指针变量:专门用来存储地址的变量. int *p = NULL;//NULL == 0 /** * 变量定义时: * (int *):指针类型 * p: 变量名 NULL:初始值. * NULL(指向了一个无效的区域) * *的作用: 告诉编译器,后面变量是指针变量,用来存储地址. * int作用: 1.当通过指针变量取数据时,一次性读取几个字节的数据. 2.当指针变量+1时

【学习ios之路:C语言】总结整理:学好Object-C---C语言必备知识点

一.基本数据类型.常量.变量.运算符 1.数据类型 int. short.char.long.float.double. 2.常量的分类.(1).整型常量 (2)浮点型常量 (3)字符常量 (4)字符串常量. 3.常量的特性:常量存储在常量区,常量区的内容不可被更改. 4.变量的定义与本质.数据类型 变量名 = 初值 . 本质变量就是一个容器. 5.变量名的命名规范 6.运算符. (1)赋值运算符 = (2)算数运算符 +  -  *  /  %  ++  -- (3)复合运算符  +=  -+

【学习ios之路:C语言】②高级指针应用

1.指针与字符数组 <span style="font-size:14px;"> /** 定义字符串的2种方式 * 1.利用数组 * char name[] = "itcast" * *特点:字符串里面的字符是可以修改的 * *使用场合:字符串的内容需要经常修改. * 2.利用指针 * char *name = "itcast"; * *特点:字符串其实是一个常量字符串,里面的字符是不能修改的; * *使用场合:字符串内容不需要修改,