作业2024/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]

 

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

A)   a ++ ;

B)   a[5] =  20  ;

C)    a + 20  ;

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

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

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};

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

 

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

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

 

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);

}

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

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

1.7、有以下程序

#include   <stdio.h>

 main(   )

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

}

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

At       B)  tuv      Cy      D)出错

1.8  数组  int  a[5] = {1020304050}, 有以下语句,其输出___D____

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

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

1.9  有以程序A

    # 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) 4 3 3 2        B) 2 ,   3 4 4    

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

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

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

  A) 语句有错  B) 120     C)  30     D)  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]);}

}

程序运行后输出结果是 _40_________

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

#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]); }

}

3715

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

       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]);

}

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) 0 2 4 6

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

}

若在程序运行时输整数 10 <>,则输出结果为_______

1523

2.5下面程序运行的结果为_________

#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]);

         }

      }

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

 3、编程题

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

使用下标法表示数组:

#include <stdio.h>

#define SIZE 10

int main() {

    int scores[SIZE] = {85, 90, 76, 92, 88, 95, 82, 89, 91, 87};

    int maxScore = scores[0];

    int maxIndex = 0;

    for (int i = 1; i < SIZE; i++) {

        if (scores[i] > maxScore) {

            maxScore = scores[i];

            maxIndex = i;

        }

    }

    printf("最高分数:%d\n", maxScore);

    printf("最高分数学生的序号:%d\n", maxIndex);

    return 0;

}

使用地址法表示数组:

#include <stdio.h>

#define SIZE 10

int main() {

    int scores[SIZE] = {85, 90, 76, 92, 88, 95, 82, 89, 91, 87};

    int maxScore = *scores;

    int maxIndex = 0;

    for (int i = 1; i < SIZE; i++) {

        if (*(scores + i) > maxScore) {

            maxScore = *(scores + i);

            maxIndex = i;

        }

    }

    printf("最高分数:%d\n", maxScore);

    printf("最高分数学生的序号:%d\n", maxIndex);

    return 0;

}

这两种方法的实现逻辑是相同的,只是数组元素的访问方式不同。使用下标法可以通过 scores[i] 的方式直接访问数组元素,而使用地址法可以通过 *(scores + i) 的方式来访问数组元素。

 

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

使用下标法表示数组:

#include <stdio.h>

#define STUDENTS 5#define COURSES 4

void inputGrades(int grades[STUDENTS][COURSES]) {

    printf("请输入各个学生的成绩:\n");

    for (int i = 0; i < STUDENTS; i++) {

        printf("学生 %d 的成绩:\n", i + 1);

        for (int j = 0; j < COURSES; j++) {

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

        }

    }

}

void calculateAverages(int grades[STUDENTS][COURSES], float averages[COURSES]) {

    for (int j = 0; j < COURSES; j++) {

        float sum = 0;

        for (int i = 0; i < STUDENTS; i++) {

            sum += grades[i][j];

        }

        averages[j] = sum / STUDENTS;

    }

}

void sortByAverage(int grades[STUDENTS][COURSES], float averages[STUDENTS]) {

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

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

            if (averages[j] < averages[j + 1]) {

                float temp = averages[j];

                averages[j] = averages[j + 1];

                averages[j + 1] = temp;

                for (int k = 0; k < COURSES; k++) {

                    int tempGrade = grades[j][k];

                    grades[j][k] = grades[j + 1][k];

                    grades[j + 1][k] = tempGrade;

                }

            }

        }

    }

}

void printAverages(float averages[COURSES]) {

    printf("各门课程的平均成绩:\n");

    for (int j = 0; j < COURSES; j++) {

        printf("课程 %d 平均成绩:%.2f\n", j + 1, averages[j]);

    }

}

void printGrades(int grades[STUDENTS][COURSES]) {

    printf("按平均成绩排序后的学生成绩:\n");

    for (int i = 0; i < STUDENTS; i++) {

        printf("学生 %d 的成绩:", i + 1);

        for (int j = 0; j < COURSES; j++) {

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

        }

        printf("\n");

    }

}

int main() {

    int grades[STUDENTS][COURSES];

    float averages[COURSES];

    inputGrades(grades);

    calculateAverages(grades, averages);

    sortByAverage(grades, averages);

    printAverages(averages);

    printGrades(grades);

    return 0;

}

使用地址法表示数组:

#include <stdio.h>

#define STUDENTS 5#define COURSES 4

void inputGrades(int *grades) {

    printf("请输入各个学生的成绩:\n");

    for (int i = 0; i < STUDENTS; i++) {

        printf("学生 %d 的成绩:\n", i + 1);

        for (int j = 0; j < COURSES; j++) {

            scanf("%d", (grades + i * COURSES + j));

        }

    }

}

void calculateAverages(int *grades, float *averages) {

    for (int j = 0; j < COURSES; j++) {

        float sum = 0;

        for (int i = 0; i < STUDENTS; i++) {

            sum += *(grades + i * COURSES + j);

        }

        *(averages + j) = sum / STUDENTS;

    }

}

void sortByAverage(int *grades, float *averages) {

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

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

            if (*(averages + j) < *(averages + j + 1)) {

                float temp = *(averages + j);

                *(averages + j) = *(averages + j + 1);

                *(averages + j + 1) = temp;

                for (int k = 0; k < COURSES; k++) {

                    int tempGrade = *(grades + j * COURSES + k);

                    *(grades + j * COURSES + k) = *(grades + (j + 1) * COURSES + k);

                    *(grades + (j + 1) * COURSES + k) = tempGrade;

                }

            }

        }

    }

}

void printAverages(float *averages) {

    printf("各门课程的平均成绩:\n");

    for (int j = 0; j < COURSES; j++) {

        printf("课程 %d 平均成绩:%.2f\n", j + 1, *(averages + j));

    }

}

void printGrades(int *grades) {

    printf("按平均成绩排序后的学生成绩:\n");

    for (int i = 0; i < STUDENTS; i++) {

        printf("学生 %d 的成绩:", i + 1);

        for (int j = 0; j < COURSES; j++) {

            printf("%d ", *(grades + i * COURSES + j));

        }

        printf("\n");

    }

}

int main() {

    int grades[STUDENTS][COURSES];

    float averages[COURSES];

    inputGrades(&grades[0][0]);

    calculateAverages(&grades[0][0], &averages[0]);

    sortByAverage(&grades[0][0], &averages[0]);

    printAverages(&averages[0]);

    printGrades(&grades[0][0]);

    return 0;

}

这两种方法的实现逻辑是相同的,只是数组元素的访问方式不同。使用下标法可以通过 grades[i][j] 的方式直接访问数组元素,而使用地址法可以通过 *(grades + i * COURSES + j) 的方式来访问数组元素。

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis相关介绍

概念 Redis&#xff1a;非关系型数据库&#xff08;non-relational)&#xff0c;Mysql是关系型数据库(RDBMS) Redis是当今非常流行的基于KV结构的作为Cache使用的NoSQL数据库 为什么使用NoSQL 关系型 数据库无法应对每秒上万次 的读写请求 表中的存储记录 数量有限 无法简单…

JUC-java并发编程的艺术

一、并发问题 上下文切换&#xff1a;CPU通过时间片分配算法来循环执行任务&#xff0c;当前任务执行一个时间片后会切换到下一个任务。在切换前会保存上一个任务的状态&#xff0c;以便下次切换回这个任务时&#xff0c;可以再加载这个任务的状态。所以任务从保存到再加载的过…

MySQL:常用指令

MySQL官网 一、在Windows 系统 cmd窗口里执行的命令 启动:net start MySQL停止:net stop MySQL卸载:sc delete MySQL 二、在macOS系统终端里执行的命令 启动&#xff1a;mysql.server start停止&#xff1a;mysql.server stop重启&#xff1a;mysql.server restart 三、执行帮…

Qt:槽函数的五种写法

一、Qt4写法&#xff08;不推荐&#xff09; connect(ui.btnOpen,SIGNAL(clicked),this,SLOT( open() ) );因为是以宏定义的方式展开&#xff0c;所以如果SIGNAL写错&#xff0c;或者信号名字、槽函数写错、编译器是无法检验出来的&#xff0c;导致出现隐性BUG&#xff0c;不容…

【医学大模型 知识增强】SMedBERT:结构化语义知识 + 医学大模型 = 显著提升大模型医学文本挖掘性能

SMedBERT&#xff1a;结构化语义知识 医学大模型 显著提升医学文本挖掘任务性能 名词解释结构化语义知识预训练语言模型医学文本挖掘任务 提出背景具体步骤提及-邻居混合注意力机制实体嵌入增强实体描述增强三元组句子增强 提及-邻居上下文建模域内词汇权重学习领域自监督任务…

特征值的大小和局部区域的曲率和特征向量的大小的关系

一、特征值和特征向量是矩阵的特征分解产生的结果。在计算机视觉和图形学领域&#xff0c;通常用于分析局部曲率和形状的特征。下面是特征值、特征向量和局部曲率之间的关系&#xff1a; 特征值&#xff08;Eigenvalues&#xff09;&#xff1a; 特征值表示了在特征向量方向上的…

【项目】高并发内存池

高并发内存池 【项目】高并发内存池项目介绍这个项目做的是什么&#xff1f; 内存池相关知识池化技术内存池malloc 定长内存池的实现高并发内存池整体框架设计ThreadCache对齐规则封装FreeList类封装thread cache类TLS无锁访问 CenctralCache整体设计页号规定span结构SpanList结…

QQ强制聊天,加好友。临时会话接口跳转单页源码

QQ互动增强工具&#xff1a;一键聊天、加好友与临时会话 &#x1f525; 全新体验&#xff0c;轻松连接 &#x1f525; 在数字社交时代&#xff0c;QQ仍然是我们与亲朋好友、工作伙伴沟通的重要桥梁。但有时候&#xff0c;复杂的设置和权限障碍让简单的“加个好友”或“说句话…

js 解构赋值

搬运&#xff1a;JavaScript系列之解构赋值_js解构赋值-CSDN博客

【Linux学习】生产者-消费者模型

目录 22.1 什么是生产者-消费者模型 22.2 为什么要用生产者-消费者模型? 22.3 生产者-消费者模型的特点 22.4 BlockingQueue实现生产者-消费者模型 22.4.1 实现阻塞队列BlockQueue 1) 添加一个容器来存放数据 2)加入判断Blocking Queue情况的成员函数 3)实现push和pop方法 4)完…

FPGA模块——SPI接口设计

SPI接口设计 SPI基础代码模版1. SPI协议与芯片交互接口2. SPI协议的控制器&#xff08;状态机&#xff09; SPI基础代码模版 user输入&#xff1a; valid信号 &#xff0c; 要输出的值 输出 &#xff1a;一个周期读valid &#xff0c; 读到的值 module spi_drive#(parameter…

cuda。

CUDA是由NVIDIA推出的通用并行计算架构&#xff0c;它允许开发人员利用NVIDIA的GPU进行高效的计算。 1. 高性能计算&#xff1a;CUDA使得GPU能够执行高度并行的计算任务&#xff0c;这对于需要处理大量数据的应用程序来说是非常有用的。GPU拥有成百上千个流处理器&#xff0c;…

Vue源码系列讲解——模板编译篇【三】(HTML解析器)

目录 1. 前言 2. HTML解析器内部运行流程 3. 如何解析不同的内容 3.1 解析HTML注释 3.2 解析条件注释 3.3 解析DOCTYPE 3.4 解析开始标签 3.5 解析结束标签 3.6 解析文本 4. 如何保证AST节点层级关系 5. 回归源码 5.1 HTML解析器源码 5.2 parseEndTag函数源码 6. …

前端(二十七)——封装指南:Axios接口、常用功能、Vue和React中的封装技术

&#x1f60a;博主&#xff1a;小猫娃来啦 &#x1f60a;文章核心&#xff1a;前端封装指南&#xff1a;Axios接口、常用功能、Vue和React中的封装技术 本文目录 小引前端封装以真实项目举个例子 Axios接口封装常用功能封装封装 Vue中的封装技术React中的封装技术Vue和React封装…

powershell 通过ssh增量同步文件夹

要通过 PowerShell 使用 SSH 进行文件夹的增量同步&#xff0c;你可以使用 WinSCP 或 Posh-SSH 这样的第三方库。WinSCP 是一个流行的图形界面和命令行界面的 SFTP 客户端&#xff0c;而 Posh-SSH 是一个 PowerShell 模块&#xff0c;提供了 SSH 和 SFTP 功能。 以下是一个使用…

Istio复习总结:xDS协议、Istio Pilot源码、Istio落地问题总结

1、xDS协议 1&#xff09;、xDS是什么 xDS是一类发现服务的总称&#xff0c;包含LDS、RDS、CDS、EDS以及SDS。Envoy通过xDS API可以动态获取Listener&#xff08;监听器&#xff09;、Route&#xff08;路由&#xff09;、Cluster&#xff08;集群&#xff09;、Endpoint&…

Map和Set(哈希表)

目录 map&#xff1a; map说明&#xff1a; Map.Entry的说明&#xff1a;,v> Map 的常用方法: 演示&#xff1a; 注意&#xff1a; TreeMap和HashMap的区别 Set&#xff1a; 常见方法说明&#xff1a; 注意&#xff1a; TreeSet和HashSet的区别 哈希表: 冲突&a…

19 删除链表的倒数第 N 个结点

19. 删除链表的倒数第 N 个结点 中等 相关标签 相关企业 提示 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 这段代码使用了双指针的方法&#xff0c;其中一个指针先走 n 步&#xff0c;然后两个指针一起走&#xff0c;直到第一…

一文看懂春晚刘谦魔术

魔术步骤 step1: 准备4张牌,跟随魔术步骤,见证奇迹 step2: 将4张牌平均斯成两份,并叠在一起 step3: 将牌堆顶数量为名字字数的牌移到牌堆底 step4: 将前三张牌放在牌堆中间并取出牌堆顶的一张牌放到屁股下 step5: 南方人、北方人、不确定分别取顶上的1/2/3张牌插入牌堆…

「MySQL」函数

字符串函数 常用函数 函数功能CONCAT(S1,S2,…Sn)字符串拼接&#xff0c;将 S1&#xff0c;S2&#xff0c;… Sn 拼接成一个字符串LOWER(str)将字符串 str 全部转为小写UPPER(str)将字符串 str 全部转为大写LPAD(str,n,pad)左填充&#xff0c;用字符串 pad 对 str 的左边进行…