2.13 数组练习

1、选择题

1.1、若有定语句int a[3][6]; ,按在内存中的存放顺序a 数组的10个元素是   B   

A)a[0][4] B) a[1][3] C)a[0][3] D)a[1][4]

解析:二维数组在内存中是以行优先的方式存放的。这意味着首先填充第一行的所有元素,然后是第二行,依此类推。第10个位置是 a[1][3]

1.2、有数组 int   a[5] = {1020304050},  以下表达式编译错误是     B   

A)   a ++ 

B)   a[5] =  20  ;

C)  a + 20  ;

D)   (a-3,   a[3]) ;

解析:数组的索引从0开始,所以一个大小为5的数组的有效索引范围是0到4。尝试访问或修改 a[5] ,属于越界访问,会导致编译错误或运行时错误。

1.3、以下误的定义语句是     D      

Aint x[][3] = {{0},{1},{1,2,3}};

Bint x[4][3] = {{1,2,3},{1,2,3},{1,2,3},{1,2,3}};

Cint x[4][] = {{1,2,3},{1,2,3},{1,2,3},{1,2,3}}; 

Dint x[][3] = {1,2,3,4};

解析:x提供了第二维的大小为3,但没有提供第一维的大小。但在初始化时,提供了4个元素,这意味着试图将一个一维数组初始化为一个二维数组。这是不合法的。

 1.4、设int i,x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句 

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

      printf(″%d, ″,x[i][2-i]); 

 的输出结果是      D       

   A)1, 4, 7     B)1, 5, 9    C)3, 6, 9    D)3, 5, 7 

解析:当i=0时,x[i][2-i]就是x[0][2-0],即x[0][2],输出3。当i=1时,x[i][2-i]就是x[1][2-1],即x[1][1],输出5。当i=2时,x[i][2-i]就是x[2][2-2],即x[2][0],输出7。所以,输出的结果是3,5,7

1.5、表达式“sizeof(int [1][2])/sizeof(int)”的值为   A   

A)  2    B)  3  C)  4  D)  5 

解析:sizeof(int[1][2])获取的是一个1x2的整数数组的大小。在一个典型的32位或64位系统中,一个int的大小通常是4字节。因此,1x2的整数数组的大小将是2*4=8字节。sizeof(int) 获取的是单个int的大小,通常是4字节。所以,表达式 sizeof(int[1][2])/sizeof(int) 的值将是8/4=2。

1.6有以下程序 

#include main()

{ char s[]="012xy\07s34f4w2";   

int i,n=0; 

for(i=0;s[i]!=0;i++) 

if(s[i]>='0'&&s[i]<='9')

 n++; 

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

}

程序运行后的输出结果是    C     

A)0       B)3      C)7         D)8

解析:字符串中的 \07 是一个八进制转义序列,它代表一个 ASCII 值为 7 的字符,接下来遍历字符串 s,并统计其中数字字符('0' 到 '9')的数量。字符串中的数字字符有:'0', '1', '2', '3', '4', '3', '4'。一共有 7 个。

因此,程序运行后的输出结果是 7。

1.7、有以下程序

#include <stdio.h>

main( )

{ char s[ ]=wstuv; printf(%c\n,*s+2);

}

程序运行后的输出结果是    C     

At B tuv Cy      D)出错

解析:*s 是指向字符串第一个字符 'w' 的指针。表达式 *s + 2 将 'w'(其 ASCII 值是 119)加上 2,得到 121,这是字符 'y' 的 ASCII 值。因此,printf("%c\n", *s + 2); 会输出字符 'y'。

1.8  数组  int  a[5] = {10, 20, 30, 4050}, 有以下语句,其输出    C    

printf(“%d\n”, *&a +1)    );

A)  20    B)  30    C)  随机值   D)编译报错

解析:&a+1意味着将指向数组的指针向前移动一个数组的大小,而不是移动一个整数的大小。在大多数系统上,一个整数的大小是4字节,而整个数组a的大小是5个整数,即20字节。因此,&a + 1实际上会跳过整个数组,指向数组后面的内存位置.*(&a+1)是解引用这个指针,即访问这个指针指向的内存位置的值。由于这个指针指向的是数组a后面的内存位置,这个内存位置的值是不确定的,可能是之前存储的数据,也可能是未初始化的内存。因此,这个操作是不安全的,并且会导致未定义的行为。所以是个随机值

1.9  有以程序

# include <stdio.h>

int  main()

{ int s[12]={1,2,3,4,4,3,2,1,1,1,2,3}, c[5]={0,0,0,0,0}, i  ;

for(i=0;i<12;i++) c[s[i]]++ ;

for(i=1;i<5;i++) printf(%d,”,c[i]);  printf(\n);

}

输出是    A    

A) 4 3 3 2 B) 2 ,   3 4 4

C) 1 2 3 4 D ) 4 4 2 3

解析:程序的主要目的是统计数组 s 中每个元素出现的次数,并将统计结果保存在数组 c 中。通过第一个 for 循环,程序遍历数组 s 中的每个元素,并使用该元素作为索引来增加数组 c 中相应位置的值。这样,c[i] 的值就会表示 s 中 i 出现的次数。因此,输出是:4, 3, 3, 2。

1.10   有数组  int  a[3][4] = {10,20,30,40,50,60,70,80,90,100,110,120},执行以下语句输出的是     D    

printf(“%d\n”,  *(*a+2) + 3   );

A) 语句有错  B) 120     C)  30     D)  33

解析:*(*a+2)是一个复合的解引用和指针运算。首先,*a得到的是a[0]的地址,这是一个指向4个整数的数组的指针。然后,*a+2将这个地址向前移动2个整数的大小。这样,*a+2现在指向a[0][2],即a数组的第0行第2列的元素。最后,*(*a+2)是对这个地址进行解引用,得到该地址处的整数值,即a[0][2]的值。现在,我们要加上3,所以最终结果是a[0][2]的值加3。a[0][2]的值是30(从数组初始化列表中可以看到),所以30+3等于33。因此printf(“%d\n”,*(*a+2)+3);将输出33。

2、填空题

    2.1、有以下程序

#include  <stdio.h>

main( )

{ int i,n[ ]={0,0,0,0,0};

for(i=1;i<=4;i++)

{n[i]=n[i-1]*3+1;

printf(%d,n[i]);}

}

程序运行后输出结果是    1 4 13 40 

解析:根据初始条件,n[0]是0,所以:当i=1时,n[1]=n[0]*3+1=0*3+1=1。当i=2时,n[2]=n[1]*3+1=1*3+1=4。当i=3时,n[3]=n[2]*3+1=4*3+1=13。当i=4时,n[4]=n[3]*3+1=13*3+1=40。因此,程序运行后的输出结果是:1 4 13 40

    2.2、执行以程序的输出结果     3715    .

#include <stdio.h>

int  main()

{ int i,n[4]={1000};

for(i=1;i<=3;i++)

{ n[i]=n[i-1]*2+1; printf("%d",n[i]); }

}

解析:i=1时,n[1]=n[0]*2+1=1*2+1=3,然后打印3。当i=2时,n[2]=n[1]*2+1=3*2+1=7,然后打印7。当i=3时,n[3]=n[2]*2+1=7*2+1=15,然后打印15。因此,程序的输出结果是:3715

2.3、下面程序运行的结果为    358    

       main()

        {

           int  x[5]i

           x[0] = 1x[1] = 2

           fori = 2i<5i++) x[i] = x[i-1] + x[i-2];

           fori = 2i<5i++) printf“%d”x[i]);

}

解析:斐波那契数列的递推关系式x[i]=x[i-1]+x[i-2],x[0]=1x[1]=2,接下来的斐波那契数列值将是:x[2]=x[1]+x[0]=2+1=3,x[3]=x[2]+x[1]=3+2=5,x[4]=x[3]+x[2]=5+3=8

因此,程序运行的结果是:358

2.4有以下程序

#include <sthio.h> 

int  main()

{

int arr[] = {1,3,5,7,2,4,6,8}, i, start

scanf(“%d”, &start);

for(i=0,i<7,i+=2) 

printf(“%d”,arr[(start+i)%5]);

}

若在程序运行时输整数 10 <>,则输出结果为  5 2 6 1 

解析:循环开始,i初始化为0。计算(start+i)%8,即(10+0)%8,得到2。打印arr[2],即5i增加2,变成2。计算(start+i)%8,即(10+2)%8,得到4。打印arr[4],即2i再增加2,变成4。计算(start+i)%8,即(10+4)%8,得到6。打印arr[6],即6i再增加2,变成6。计算(start+i)%8,即(10+6)%8,得到0。打印arr[0],即1i再增加2,变成8。由于i<7的条件不再满足,循环结束。因此,输出结果为:5 2 6 1

2.5下面程序运行的结果为   5 4 8 2 0   。 

#include "stdio.h"

 main()

{ int i,j,a[]={0,2,8,4,5};

printf("\n");

for(i=1;i<=5;i++)

 {  j=5-i;

          printf("%2d",a[j]);

 }

 }

解析:i=1时,j=5-1=4,打印a[4],即5。当i = 2时,j=5-2=3,打印a[3],即4。当i=3j=5-3=2,打印a[2],即8。当i=4时,j=5-4=1,打印a[1],即2。当i=5时,j=5-5=0,打印a[0],即0。所以,程序运行的结果为:5 4 8 2 0

2.6有以下程序

#include  <stdio.h>

int  main()

{ int n[2],i,j;

for(i=0;i<2;i++) n[i]=0; for(i=0;i<2;i++)

for(j=0;j<2;j++) n[j]=n[i]+1;

printf(%d\n,n[1]);

}

程序运行后的输出结果是     2    

解析:i=0时,n[0]n[1]都会被设置为0+1=1。当 i=1时,n[0]n[1]都会被设置为1+1=2。因此,在第二个循环结束后,数组 n 的内容将是 {2, 2}。最后,程序打印数组 n 的第二个元素,即 n[1],其值为 2。

3、编程题

3.1、 一个班10个学生的成绩,存放在一个一维数组中,要求找出其中成绩最高的学生的成绩和该生的序号。试编程。(试着用下标法和地址法两种方法表示数组)

#include <iostream>
#include<array>
#include <limits>
using namespace std;
int main()
{
    array<int,10> score;
    array<int,10>::iterator iter; //定义了一个迭代器
    for(iter=score.begin();iter!=score.end();iter++)//begin()第一个元素的地址 end()表示最后一个元素的下一个元素的地址
    {
         cin >> *iter;//循环输入学生成绩
    }
    //使用下标法
    int index=0;
    int hscore=score[0];
    for(int i=1;i<10;++i)
    {
        if(score[i]>hscore)
        {
            hscore=score[i];
            index=i;
        }
    }
    cout << "最高成绩(下标法): " << hscore << ", 学生序号: " << index << endl;
    //使用地址法
    int *hscorep=&score[0];
    for (int *ptr=score.begin();ptr!=score.end();++ptr)
    {
        if (*ptr>*hscorep)
        {
            hscorep=ptr;
        }
    }
    int hindex=hscorep-score.begin();
    cout << "最高成绩(地址法): " << *hscorep << ", 学生序号: " << hindex << endl;
    return 0;
}

结果:

3.2、有5个学生上4门课程,要求输入全部学生的各门课程成绩,然后输出各门课程的平均成绩,并按照各个学生的平均成绩排序(成绩最高的学生排在数组最前面,最低学生排在数组最后面的行) (试着用下标法和地址法两种方法表示数组)

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
class Student
{
public:
    double scores[4];//存储学生的四门课程成绩
    double avgScore;//存储学生的平均成绩
};
bool cmpscore(const Student &a, const Student &b)
{
    return a.avgScore>b.avgScore;//降序排序
}
int main()
{
    const int stu=5;
    const int course=4;
    double scores[stu][course];
    // 输入学生的成绩
    for(int i=0;i<stu;++i)
    {
        for(int j=0;j<course;++j)
        {
            cin >> scores[i][j];
        }
    }
    // 使用下标法计算每门课程的平均成绩
    vector<double> courseavg(course, 0.0);
    for(int j=0;j<course;++j)
    {
        for(int i=0;i<stu;++i)
        {
            courseavg[j]+=scores[i][j];
        }
        courseavg[j]/=stu;
    }
    // 输出每门课程的平均成绩
    for(int j=0;j<course;++j)
    {
        cout << "Course " << j+1 << " average: " << courseavg[j] << endl;
    }
    // 使用下标法计算每个学生的平均成绩
    vector<Student> students(stu);
    for(int i=0;i<stu;++i)
    {
        double sum=0.0;
        for(int j=0;j<course;++j)
        {
            sum+=scores[i][j];
        }
        students[i].avgScore=sum/course;
        for(int j=0;j<course;++j)
        {
            students[i].scores[j]=scores[i][j];
        }
    }
    // 按照学生的平均成绩降序排序
    sort(students.begin(),students.end(),cmpscore);
    // 输出排序后的学生及其平均成绩
    for (const auto &student:students)
    {
        cout << "Student average: " << student.avgScore << endl;
        for (int j=0;j<course;++j)
        {
            cout << "Course " << j + 1 << ": " << student.scores[j] << endl;
        }
    }
    return 0;
}

结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/386226.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

读十堂极简人工智能课笔记01_人工智能简史

1. 2400年前 1.1. 希腊罗德岛 1.1.1. 是个神奇的岛屿&#xff0c;以机械发明著称&#xff0c;包括真人大小的、大理石制成的自动机 1.1.2. 早在罗马帝国诞生之前&#xff0c;公元前400多年的希腊就有这样的机器人技术&#xff0c;似乎不可思议 2. 公元前970到前931年 2.1.…

LeetCode:83和82.删除排序链表中的重复元素I,II

这两题算是链表的基础题&#xff0c;就遍历删除没啥特点&#xff0c; 83甚至不需要考虑第一个结点的特殊情况&#xff0c;属实是名副其实的easy了 LeetCode&#xff1a;21.合并两个有序链表之第一次的特殊情况-CSDN博客 83. 删除排序链表中的重复元素 - 力扣&#xff08;Lee…

controller-manager学习三部曲之三:deployment的controller启动分析

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 《controller-manager学习三部曲》完整链接 通过脚本文件寻找程序入口源码学习deployment的controller启动分析 本篇概览 本文是《controller-manager学习三…

【C++初阶】第三站:类和对象(中) -- 类的6个默认成员函数

目录 前言 类的6个默认成员函数 构造函数 概念 特性 析构函数 概念 特性 拷贝构造函数 概念 特征 赋值运算符重载 运算符重载 赋值运算符重载 const成员 const修饰类成员函数 取地址及const取地址操作符重载 本章总结&#xff1a; 前言 有时候我们写好了一个栈&#xff0c;头脑…

C#中implicit和explicit

理解: 使用等号代替构造函数调用的效果以类似重载操作符的形式定义用于类型转换的函数前者类型转换时候直接写等号赋值语法,后者要额外加目标类型的强制转换stirng str -> object o -> int a 可以 int a (int)(str as object)转换通过编译,但没有转换逻辑所以运行会报错…

《UE5_C++多人TPS完整教程》学习笔记14 ——《P15 创建我们自己的子系统(Creating Our Own Subsystem)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P15 创建我们自己的子系统&#xff08;Creating Our Own Subsystem&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&…

G85银昆高速宝鸡天台山隧道群荣获交通运输部科技示范工程,北京恒星科通隧道无线通信与广播系统应用于该项目

2023年9月12日&#xff0c;全国交通运输科技示范工程现场推进会在河南省平顶山市召开&#xff0c;会上为全国已通过验收的10项科技示范工程进行了授牌&#xff0c;其中由陕西交控集团负责实施的“秦岭天台山超长隧道群安全绿色科技示范工程”名列其中。 【授牌仪式现场】 据了解…

我让ChatGPT帮我钓妹子,它一口气撩了5000人

来自俄罗斯的一名AI开发者、社交平台TenChat的产品经理 AleksandrZhadan于1月30日在推特上发布了自己的婚讯&#xff0c;他将要与自己的女友Karina Imranovna在今年的8月结婚。令人震惊的是Aleksandr Zhadan介绍的认识女友的窍门-ChatGPT 帮他找到了另一半&#xff0c;并且通过…

vue-进阶语法(四)

目录 v-model原理 v-model应用于组件 sync修饰符 ref 和 $refs&#xff08;重点&#xff09; $nextTick v-model原理 原理&#xff1a;v-model本质上是一个语法糖。例如应用在输入框上&#xff0c;就是 value属性 和 input事件 的合写。 作用&#xff1a;提供数据的双向…

测试西门子博途S7-PLCSIM Advanced V5.0的使用

原创 honeytree 西门子博途S7-PLCSIM Advanced V5.0能支持S7-1500&#xff0c;S7-1500R/H&#xff0c;ET200SP&#xff0c;ET200pro的仿真&#xff0c;用此仿真器可以模拟实际的PLC&#xff0c;用于其他软件的连接&#xff0c;比如上位机软件、触摸屏软件,自己用高级语音开发…

VUE学习之路——列表渲染

<p v-for"item in items">{{ item }}</p>使用v-for进行列表的渲染。 这仅仅是一个简单的demo&#xff0c;使用v-for可以用来遍历数组和对象&#xff0c;具体如下&#xff1a; 注意&#xff1a;遍历数组或对象的时候&#xff0c;&#xff08;&#xff09;…

java客运管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java客运管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&#…

几个好用的 iphone 手机模板贴图样机

整理了几个好用的 iphone 手机模板贴图&#xff0c;分享一下。 关注订阅号「设计师工作日常」&#xff0c;发送关键词 iphone mockup ,获取下载链接。 [1] 原文阅读 我是 Just&#xff0c;这里是「设计师工作日常」&#xff0c;求点赞求关注&#xff01;

问题:3【单选题】实现职业理想的一般步骤是()。 #媒体#媒体

问题&#xff1a;3【单选题】实现职业理想的一般步骤是()。 A、创业-立业-择业 B、择业-创业-立业 C、择业-立业-创业 D、立业-择业-创业 参考答案如图所示

Git分支和迭代流程

Git分支 feature分支&#xff1a;功能分支 dev分支&#xff1a;开发分支 test分支&#xff1a;测试分支 master分支&#xff1a;生产环境分支 hotfix分支&#xff1a;bug修复分支。从master拉取&#xff0c;修复并测试完成merge回master和dev。 某些团队可能还会有 reale…

分享76个行业PPT,总有一款适合您

分享76个行业PPT&#xff0c;总有一款适合您 76个行业PPT下载链接&#xff1a;https://pan.baidu.com/s/17zUV16XOg9uBfDTH7sURxw?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易。知…

有趣儿的组件(HTML/CSS)

分享几个炫酷的组件&#xff0c;起飞~~ 评论区留爪&#xff0c;继续分享哦~ 文章目录 1. 按钮2. 输入3. 工具提示4. 单选按钮5. 加载中 1. 按钮 HTML&#xff1a; <button id"btn">Button</button>CSS&#xff1a; button {padding: 10px 20px;text-tr…

怎么使用ChatGPT提高工作效率?

怎么使用ChatGPT提高工作效率&#xff0c;这是一个有趣的话题。 相信不同的人有不同的观点&#xff0c;大家的知识背景和从事的工作都不完全相同&#xff0c;所以最终ChatGPT能起到的作用也不一样。 在编程过程中&#xff0c;如果我们要找一个库&#xff0c;我们最先做的肯定…

解决MAC连上wifi或热点却不能上网问题

解决MAC连上wifi或热点却不能上网问题 #新换的mac昨天还能连上wifi&#xff0c;今天就不好使了。 找到连接的wifi点击详细信息&#xff0c;选择TCP/IP 中的配置IPV4 选择关闭

【python学习篇1】python基本语法

一、第一个python程序 在控制台上面输出“你好 python”。 在venv目录下面&#xff0c;新建一个Main1.python的文件夹。 然后在文件当中使用print函数输出一句命令即可。 然后&#xff0c;在Main.py下面&#xff0c;右键一下&#xff0c;运行Main1.py&#xff1a;即可看到下…