news 2026/5/28 3:51:34

C++入门刷题记录~(动态内存分配)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++入门刷题记录~(动态内存分配)

1,结构体

题目描述

有N个学生的数据,将学生数据按成绩由低到高排序,如果成绩相同则按姓名首字母序排序,如果首字母也相同则按照年龄排序,并输出N个学生排序后的信息。

#include<iostream> #include<string> #include<algorithm> using namespace std; struct stu { string name; int age; int score; }; bool cmp(stu a,stu b) { if(a.score!=b.score) { return a.score<b.score;//升序,也就是从小到大 } else { if(a.name!=b.name) { //如何表示按字母排序呢? //其实两个string比较就默认的是按字母顺序啦! return a.name<b.name; } else { return a.age<b.age; } } } int main() { int N; cin>>N; stu arr[1000]; for(int i=0;i<N;i++) { cin>>arr[i].name>>arr[i].age>>arr[i].score; } sort(arr,arr+N,cmp); for(int i=0;i<N;i++) { cout<<arr[i].name<<" "<<arr[i].age<<" "<<arr[i].score<<endl; } return 0; }

2浮点数

题目描述

输入华氏温度F,将其按公式 C = 5/ 9 ( F–32 )转换为摄氏温度,并输出(结果保留一位小数)。

F不一定是整数,可能是浮点数

请尽量使用cin和cout完成输入输出

#include<iostream> #include<iomanip>//why,里面包含了 fixed 和 setprecision 等控制器 using namespace std; int main() { double F,C; cin>>F; //C=5/9*(F-32);这里 5/9 是两个整数相除,结果会被截断为整数 0,于是 C 永远为 0。 C=5.0/9.0*(F-32);//浮点数除法,简单说就是:当你希望除出来的结果带小数时,就必须用。 //只要参与运算的变量或常量中,至少有一个是浮点数,整条运算就会自动转为浮点数除法。 cout<<fixed<<setprecision(1)<<C<<endl; //whats fixed and setprecision //setprecision 控制的是有效数字位数;加上fixed控制的是小数点后的位数。 return 0; }

3最大指针

题目描述

输入整数a、b、c,并定义最大指针

找出三个数的最大值,使用指针指向最大值并通过指针输出最大值

#include<iostream> #include<algorithm> using namespace std; int main() { int arr[3];//表示里面有三个数 for(int i=0;i<3;i++) { cin>>arr[i]; } sort(arr,arr+3);//arr+3意思为范围到arr+3之前,不包括这个数 int *p=&arr[2]; cout<<*p<<endl; return 0; }

4选择

题目描述

如果一个数字不能被3整数,也不能被4整除,但能被7整除,就称为不三不四喜七之数。

给出数字N,统计1至N之间的满足条件的数值的数量

#include<iostream> using namespace std; int main() { int t;//变量在哪里“出生”,就只能在它出生的那对大括号 {} 里活着。 cin>>t; int arr[1000]; for(int i=0;i<t;i++) { int N; cin>>N; int sum=0; for(int j=1;j<N+1;j++) { if(j%3!=0&&j%4!=0&&j%7==0)//不能被3整除 且 不能被4整除 且 能被7整除 { sum=sum+1; } } arr[i]=sum; //i表示第几次测试,arr是存的每次测试的结果 } for(int i=0;i<t;i++) { cout<<arr[i]<<endl; } return 0; }

5选择

题目描述

小六最喜欢的数字,当然是6了。当然,他也喜欢一切6的倍数,或者数位长度是6的倍数,或者末尾数字带6的数字。当给你一个数字,你能否告诉我,这是否是小六的幸运数呢?

输入

输入数据的第一行为测试数据的个数t(1 <= t <= 100),接下来有t行。每一行是一个数字n(1 <= n <= 10000000)

输出

对于每一组测试数据,如果是小六的幸运数字则输出“Yes”,否则输出“No”。每一组数据输出一行。

#include<iostream> using namespace std; int main() { int t; cin>>t; long long N[1000]; for(int i=0;i<t;i++) { cin>>N[i]; } for(int i=0;i<t;i++) { int len=0; long long tem=N[i];//为了得出长度又不影响N while(tem) //当tem化为0时得到长度潇洒退场 { tem=tem/10; len++; } if(N[i]%6==0) { cout<<"Yes"<<endl; } /*if(sizeof(N)==N%6) { cout<<"Yes"<<endl; }*/ //错的,sizeof是求内存 else if(len%6==0)//else 或 else if 必须紧跟在 if 或 else if 的语句块后面,中间不能插入任何其他语句 { cout<<"Yes"<<endl; } else if(N[i]%10==6)//如何表示数字末尾? { cout<<"Yes"<<endl; } else { cout<<"No"<<endl; } } return 0; }

6选择

题目描述

企业发放的奖金根据利润提成。利润(为整数)低于或等于100000元的,奖金可提10%;
利润高于100000元,低于200000元(100000<I≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成 7.5%;
200000<I≤400000时,低于200000元部分仍按上述办法提成,(下同),高于200000元的部分按5%提成;
400000<I≤600000元时,高于400000元的部分按3%提成;600000<I≤1000000时,高于600000元的部分按1.5%提成;
I>1000000时,超过1000000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。

输入

一个整数,当月利润。

输出

一个整数,奖金。

#include<iostream> using namespace std; int main() { int p,b;//p=profit,b=bonus cin>>p; if(p<=100000) { b=0.1*p; } else if(p>100000&&p<=200000) { b=10000+0.075*(p-100000);//100000*0.1=10000 } else if(p>200000&&p<=400000) { b=17500+(p-200000)*0.05;//0.075*100000=7500; } else if(p>400000&&p<=600000) { b=27500+(p-400000)*0.03;//200000*0.05=100000*0.1=10000 } else if(p>600000&&p<=1000000) { b=33500+(p-600000)*0.015;//200000*0.03=100000*0.06=6000; } else { b=39500+(p-1000000)*0.01;//400000*0.015=100000*0.06=6000; } cout<<b<<endl; return 0; }

7字符串

题目描述

对候选人得票的统计程序。设有3个候选人,每个选民投票输入一个得票的候选人的名字,要求最后输出各人得票结果。

三个候选人的名字分别为Li, Zhang, Fu。

#include<iostream> #include<string> using namespace std; int main() { int t; string arr[1000]; cin>>t; for(int i=0;i<t;i++) { cin>>arr[i]; } //想遍历数组,选择语句如果满足条件则加一 int sum1=0; int sum2=0; int sum3=0; string li="Li"; string z="Zhang"; string f="Fu"; for(int i=0;i<t;i++) { if(arr[i]==li) { sum1=sum1+1; } else if(arr[i]==z) { sum2=sum2+1; } else if(arr[i]==f) { sum3=sum3+1; } } cout<<"Li:"<<sum1<<endl; cout<<"Zhang:"<<sum2<<endl; cout<<"Fu:"<<sum3<<endl; return 0; }

8动态内存分配(二维数组)

定义:

当我们遇见大小不确定的数据时(比如动态数组和单链表),我们通过动态内存分配来向系统申请或释放内存,达到按需分配的效果。

语法:

1,分配内存:new,后面接一个内存大小,返回的是一个地址,所以需要用指针来接收;

int* p=new int; int* arr=new int[5];//分配5个int的数组

2,释放内存

//单个数 delete p; delete[] arr;

生命周期:全局;

  • 动态分配内存就像租房子,new是租,delete是退租。

题目描述

输入一个N*M的矩阵,要求将这个矩阵向左旋转90度后输出

比如现在有矩阵 :

1 2 3

4 5 6

向左旋转90度后的矩阵变为:

3 6

2 5

1 4

输入

第一行输入T表示有T个测试实例

第二行输入矩阵维度N和M,表示N行和M列

第三行起输入矩阵数据,矩阵数据用自然数表示

下面依次类推。

要求矩阵使用new动态分配和释放。

输出

输出左转90度的矩阵

注意每行最后一个数据不带空格,直接换行

#include<iostream> using namespace std; int main() { //1,输入测试数 int T; cin>>T; //2,输入行列数 while(T--) { int N,M; cin>>N>>M; //3,根据行列数建立二维数组(通过动态内存分配) int** a=new int*[N];//行 //每一行分配列,所以用循环 for(int i=0;i<N;i++) { a[i]=new int[M] ; } //4,输入这个二维数组,经典两个循环 for(int i=0;i<N;i++) { for(int j=0;j<M;j++) { cin>>a[i][j]; } } //5,直接输出左移的数组 int ver=0; for(int i=0;i<M;i++) { for(int j=0;j<N;j++) { ver=a[j][M-1-i]; cout<<ver; if(j!=N-1)//最后一个不带空格 { cout<<" "; } } cout<<endl;//每一行输出完记得换行 } //6,释放动态内存 //二维动态数组的内存是分两次申请、分散存放的 //所以必须先钻进每个信箱,把里面的小格子退掉(delete[] a[i];),最后再把空信箱退掉。 for(int i=0;i<N;i++) { delete[] a[i];//比如a[1],把a1里的所有数组删掉,故为delete[].记住,delete右边跟的是地址 } } return 0; }

9进制转换

hex定义在头文件<iostream>中,它可以作用在输入流cin或输出流cout,让流把接下来的整数当作十六进制来读或写。

  • 用在输入时:告诉cin,接下来的数字是十六进制形式的字符串,要按十六进制转换成整数存储,也就是十进制。

  • 用在输出时:告诉cout,接下来输出的整数要转换成十六进制字符串打印。

int n; cin >> hex >> n; // 输入 "1A3F",n 就变成 6719 cout << n; // 输出 6719(十进制) int n = 6719; cout << hex << n; // 输出 "1a3f"(默认小写字母)
操纵符头文件作用示例(输入/输出)备注
dec<iostream>设置为十进制(基数为10)cin >> dec >> n;
cout << dec << n;
默认状态,即流刚创建时就使用十进制。
hex<iostream>设置为十六进制(基数为16)cin >> hex >> n;
cout << hex << n;
输出默认小写字母 a~f,配合uppercase可输出大写。
oct<iostream>设置为八进制(基数为8)cin >> oct >> n;
cout << oct << n;
输入时只允许数字 0~7,否则会出错。

题目描述

编写函数long change(char s[]),其作用是将参数表示的十六进制数转换为相应的十进制整数

#include<iostream> using namespace std; long change(char s[]) { int result=0; int b=0;//b为转换后的数值 //1,将字符转化为数值 for(int i=0;s[i]!='\0';i++)//字符的结尾为\0,用单引号 { char a=s[i]; if(a>='0'&&a<='9') { b=a-'0'; } else if(a>='A'&&a<='F') { b=a-'A'+10; } else if(a>='a'&&a<='f') { b=a-'a'+10; } //2,转十进制 result=result*16+b; } return result; } int main() { int t; cin>>t; while(t--) { char s[1000]; cin>>s; cout<<change(s)<<endl; } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 3:46:27

网站建设外包:从CMS选型到源码安全交付的完整技术指南

&#xff5c;写在前面 企业官网是品牌展示与线上获客的重要窗口。将网站开发外包给威客平台、个人开发者或小型工作室&#xff0c;是中小企业的常见选择。然而&#xff0c;“便宜”与“靠谱”能否兼得&#xff1f;答案不在于平台本身&#xff0c;而在于你对外包项目的技术把控能…

作者头像 李华
网站建设 2026/5/28 3:46:26

Cartographer无里程计建图实战:室内外效果对比与参数调优心得

Cartographer无里程计建图实战&#xff1a;室内外效果对比与参数调优心得当激光雷达成为唯一感知源时&#xff0c;Cartographer展现出的建图能力令人惊叹。去年在改造一座百年图书馆时&#xff0c;我们团队被迫在禁止使用任何电子设备的古籍区采用纯激光方案。令人意外的是&…

作者头像 李华
网站建设 2026/5/28 3:45:42

指纹浏览器自动化API对接实战总结:技术方案选型 + 避坑指南

二、核心原理&#xff1a;浏览器指纹与反检测机制### 2.1 浏览器指纹是什么&#xff1f;浏览器指纹是指浏览器在访问网站时&#xff0c;网站能够采集到的一系列环境参数&#xff0c;包括但不限于&#xff1a;| 指纹类型 | 说明 | 可伪造程度 || :— | :— | :— || User-Agent …

作者头像 李华
网站建设 2026/5/28 3:43:33

告别65535行限制:用QGIS一键把大型SHP文件导出为Excel表格

突破Excel行数限制&#xff1a;QGIS高效导出大型SHP至XLSX全攻略当空间数据量突破Excel传统限制时&#xff0c;许多GIS从业者都会遇到那个令人头疼的提示——"超出65535行限制"。这不仅是技术上的瓶颈&#xff0c;更是工作效率的绊脚石。传统解决方案往往需要迂回转换…

作者头像 李华