Coursera课程笔记----计算导论与C语言基础----Week 10
C程序中的数组(Week 10)
一维数组
数组的定义
类型 数组名[常量表达式] int sheep[10]
定义数组时,[]内必须为常量表达式
- 可以用const int
- 可以在main函数前,#define(预定义部分)
数组的初始化
- int a[10] = {1,2,3,4,5,6,7,8,9,10}
- int a[ ] = {1,2,3,4}
- int a[4] = {1,2} // a[2]和a[3]就为0了
二维数组
int a[3][4] //3行4列
在内存中存储,拉平成一个线性的序列
数组的初始化:大框号内的大括号,或直接拉平输入,也可以部分初始化
cout<<setw(3)<<a[i][j]; //setw设置输出占位
三维数组
int a[5][3][4] //高3宽4深5的立方体,5片,3行,4列
存储方式也是拉成一条线
数组的作用
例1 数字统计
- 输入20个0~9之间的整数,统计每个数载输入数列中出现的次数
#include <iostream>
using namespace std;
int main()
{
int mun,count[10] = {0};
for(int i=0;i<20;i++)
{
cin >> num;
for(int j = 0; j < 10; j ++)
{
if(num == j) count[j]++;
}
}
for(int i = 0; i < 10; i++)
{
if(count[i]!=0)
cout<<i<<"输入了"<<count[i]<<"次"<<endl;
}
return 0;
}
例2 数字统计
- 某学校有1000老师,分布在20个不同的学院中,每个学院最多12个系,请你编写一个程序,输入每位老师的所在院、系的编号,打印出各个系老师的数量。(两级概念——二维数组)
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int teacher[21][13];
int school,department;
int i,j;
char name[30];
for(i = 0; i < 1000; i++)
{
cin>>name>>school>>department;
teacher[school][department]++;
}
for(i=1;i<21;i++)
for(j = 1 ;j < 13; j++)
cout<<setw(4)<<teacher[i][j];
cout<<endl;
return 0;
}
例3 找出素数
请编写程序,输出100以内所有素数
典型的解决方法:
循环(i从2至100)
设置一个标示p = 0;
循环(j从2至i-1)
如果(i mode j == 0)p=1
如果p=0,输出i
埃拉托斯特尼筛子法:筛出所有的合数
- 稍做优化:可以让2,3,4……,c中的每个数自我相加多次,来获得100之内的所有合数
- c的确定:根据初等数论,若n为合数,则n的最小正因数满足1<c<=$\sqrt{2}$
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int sum = 0, a[100] = {0};
for(int i=2;i<sqrt(100.0);i++)//Optimization Point1
{
sum = i;
if(a[sum] == 0)//Optimization Point2
{
while(sum < 100)
{
sum = sum + i;
sum = sum + i;
if(sum < 100) a[sum] = 1;
}
}
}
for(int i=2; i<100;i++)
{
if(a[i] == 0) cout<<i<<" ";
}
return 0;
}
练习
Quiz1 求字母的个数
#include <iostream>
using namespace std;
int main()
{
char s[80];
int a=0,e=0,i1=0,o=0,u=0;
cin.getline(s,80);
for (int i = 0; s[i] !='\0' ; i++) {
if(s[i] == 'a')
a++;
if(s[i] == 'e')
e++;
if(s[i] == 'i')
i1++;
if(s[i] == 'o')
o++;
if(s[i] == 'u')
u++;
}
cout<<a<<" "<<e<<" "<<i1<<" "<<o<<" "<<u<<endl;
}
Quiz 2 忽略大小写比较字符串大小
#include <iostream>
using namespace std;
int main()
{
char s1[80],s2[80];
cin.getline(s1,80);
cin.getline(s2,80);
for (int i = 0; i < 80; i++) {
if(s1[i] == '\0' && s2[i] != '\0')
{
cout<<'<'<<endl;
break;
}
if(s2[i] == '\0' && s1[i] !='\0')
{
cout<<'>'<<endl;
break;
}
if(s1[i] == '\0' && s2[i] == '\0')
{
cout<<'='<<endl;
break;
}
if(s1[i] >= 65 && s1[i] <=90)
s1[i] += 32;
if(s2[i] >= 65 && s2[i] <=90)
s2[i] += 32;
if(s1[i] > s2[i])
{
cout<<'>'<<endl;
break;
}
if(s1[i] < s2[i])
{
cout<<'<'<<endl;
break;
}
}
return 0;
}
Quiz3 最长单词2
#include <iostream>
using namespace std;
int main()
{
char s[500];
cin.getline(s,500,'.');
int length = 0;
char longest[100];
int maxLength = 0;
for (int i = 0; s[i] != '\0' ; i++) {
if((s[i] >= 65 && s[i] <=90 || s[i] >= 97 && s[i] <= 122) &&
(s[i+1] >= 65 && s[i+1] <=90 || s[i+1] >= 97 && s[i+1] <= 122))
{
length++;
continue;
}
if((s[i] >= 65 && s[i] <=90 || s[i] >= 97 && s[i] <= 122) &&
(s[i+1] < 65 || s[i+1] > 122 || s[i+1] < 97 && s[i+1] > 90) &&
((length + 1) > maxLength))
{
length++;
maxLength = length;
for (int j = length - 1; j >= 0 ; j--) {
longest[j] = s[i - (length - 1 - j)];
}
length = 0;
}
if(s[i+1] < 65 || s[i+1] > 122 || s[i+1] < 97 && s[i+1] > 90)
length = 0;
}
for (int i = 0; i < maxLength; i++) {
cout<<longest[i];
}
cout<<"\n";
}
Quiz4 矩阵交换行
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int matrix[5][5];
int m,n;
int tmp[5];
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
cin>>matrix[i][j];
cin >> m >> n;
if(!(m <= 4 && m >=0) || !(n <= 4 && n >=0))
{
cout<<"error"<<endl;
return 0;
}
if(m == n)
{
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
{
cout<<setw(4)<<matrix[i][j];
if(j == 4)
cout<<'\n';
}
return 0;
}
for (int i = 0; i < 5; i++) {
tmp[i] = matrix[m][i];
matrix[m][i] = matrix[n][i];
matrix[n][i] = tmp[i];
}
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
{
cout<<setw(4)<<matrix[i][j];
if(j == 4)
cout<<'\n';
}
return 0;
}
Quiz5 异常细胞检测
#include <iostream>
using namespace std;
int main()
{
int n,number = 0;
cin >> n;
const int N = n;
int matrix[N][N];
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
cin >> matrix[i][j];
for (int i = 1; i < N-1; i++)
for (int j = 1; j < N-1 ; j++) {
if (-matrix[i][j] + matrix[i - 1][j] >= 50 && -matrix[i][j] + matrix[i + 1][j] >= 50 &&
-matrix[i][j] + matrix[i][j - 1] >= 50 && -matrix[i][j] + matrix[i][j + 1] >= 50)
number++;
}
cout<<number<<endl;
return 0;
}
Quiz6 循环移动
#include <iostream>
using namespace std;
int main()
{
int n,m;
cin >> n >> m;
const int N = n;
int number[N];
for (int i = 0; i < N; i++)
cin >> number[i];
for (int i = 0; i < m; i++) {
int temp = number[N-1];
for (int j = N-2; j >= 0; j--) {
number[j+1] = number[j];
}
number[0] = temp;
}
for (int i = 0; i < N; i++)
{
cout << number[i]<<' ';
}
return 0;
}
Quiz7 中位数
#include <iostream>
using namespace std;
int main()
{
int n;
while (cin >> n)
{
if(n == 0) break;
int average = 0;
int number[15000];
for (int i = 0; i < n; i++) {
cin >> number[i];
}
for (int i = 0; i < n; i++) {
for (int j = 1; j < n - i; j++) {
if (number[j - 1] > number[j]) {
int temp = 0;
temp = number[j];
number[j] = number[j - 1];
number[j - 1] = temp;
}
}
}
if(n % 2 == 0)
average = (number[n/2] + number[n/2 - 1])/2;
else average = number[n/2];
cout<<average<<endl;
}
return 0;
}
//如何不排序实现这个程序?
Quiz8 校门外的树
#include <iostream>
using namespace std;
int main()
{
int tree[10001] = {0};
int leftM[101] = {0},rightM[101] = {0};
int l,m;
int num = 0;
cin >> l >> m;
for (int i = 0; i < m; i++)
cin>>leftM[i]>>rightM[i];
for (int i = 0; i <= l; i++) {
tree[i] = 1;
}
for (int i = 0; i < m; i++)
for (int j = leftM[i]; j <= rightM[i]; j++)
tree[j] = 0;
for (int i = 0; i <= l; i++)
if(tree[i] == 1)
num++;
cout<<num<<endl;
return 0;
}
//如果数据范围很大(L=500w),该用什么办法处理?
Coursera课程笔记----计算导论与C语言基础----Week 10的更多相关文章
- Coursera课程笔记----计算导论与C语言基础----Week 6
理性认识C程序 导论(Week 6) 明确学习进度 讲课内容 感性➡️理性➡️函数➡️指针等 作业练习 初级阶段 ➡️正常作业练习 C语言的由来 程序设计语言的分类 低级语言之机器语言 0010101 ...
- Coursera课程笔记----计算导论与C语言基础----Week 8
C语言中的运算成分(Week 8) 赋值运算符 "="赋值运算符 给赋值号左边的变量赋予数值 在变量定义的同时可以为变量赋初值 要点一:两面类型不同 若=两边的类型不一致,赋值时要 ...
- Coursera课程笔记----计算导论与C语言基础----Week 7
C语言中的数据成分(Week7) 内存 把内存想象成长带,带子上有许多方格,每个方格有8位(8bit) 2^10 = 1024 1B = 8 b 1KB = 1024Byte MB.GB.TB.PB- ...
- Coursera课程笔记----计算导论与C语言基础----Week 4
感性认识计算机程序(Week 4) 引入 编程序 = 给计算机设计好运行步骤 程序 = 人们用来告诉计算机应该做什么的东西 问题➡️该告诉计算机什么?用什么形式告诉? 如果要创造一门"程序设 ...
- Coursera课程笔记----计算导论与C语言基础----Week 2
计算机的历史与未来(Week 2) 计算机历史 早期计算机:手工计算器➡️机械计算器➡️计算机原型 现代计算机:电子管计算机➡️晶体管计算机➡️集成电路计算机➡️超大规模集成电路 早期的手工计算辅助工 ...
- Coursera课程笔记----计算导论与C语言基础----Week 9
C语言中的控制成分(Week 9) 计算机程序的基本结构 任何具有单入口单出口的程序,都可以用顺序结构.分支结构.循环结构来表达 分支语句 在执行if语句前,先对表达式求解 if()内可以是任意的数值 ...
- Coursera课程笔记----计算导论与C语言基础----Week 3
存储程序式计算机 冯·诺伊曼式计算机 "关于EDVAC的报告草案" 组成:控制器(协调工作).运算器(算数&逻辑运算).存储器(存储操作信息和中间结果).输入设备.输出设备 ...
- Coursera课程笔记----计算导论与C语言基础----Week 1
计算机的基本原理(Week 1) 第一次数学危机 公元前500年,毕达哥拉斯学派,他们相信数是万物的本源:一切数均可表示成整数或者整数之比 然而毕达哥拉斯证明了勾股定理,某些直角三角形的三边比不能用整 ...
- Coursera课程笔记----计算导论与C语言基础----Week 12
期末编程测试(Week 12) Quiz1 判断闰年 #include <iostream> using namespace std; int main() { int year; cin ...
随机推荐
- 在众多小说中,Python告诉你哪本小说好看
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 有趣的Python PS:如有需要Python学习资料的小伙伴可以 ...
- I NEED A OFFER! HDU - 1203
概率+0 1背包 要算成功的最大概率,那就是失败的最小概率,所以01背包直接让失败的概率最小就行了. 注意: 概率与概率之间是要相乘的,不是相加. #include<bits/stdc++.h& ...
- 《Spring In Action》阅读笔记之装配bean
Spring主要装配机制 1.在XML中进行显式配置 2.在Java中进行显式配置 3.隐式的的bean发现机制和自动装配 自动化装配bean Spring从两个角度来实现自动化装配 1.组件扫描:S ...
- 【5min+】为你的.NET应用进行一次全方位体检
系列介绍 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net ...
- 解决Typecho Gravatar头像加载缓慢的问题
前言 Typecho评论默认使用的是Gravatar头像,但因为Gravatar网站总是被墙,导致页面加载被拖慢,而且加载半天也还是个裂图,太影响心情,所以我们可以不使用Gravatar头像,换成另一 ...
- PHP反序列化漏洞总结(二)
写在前边 之前介绍了什么是序列化和反序列化,顺便演示了一个简单的反序列化漏洞,现在结合实战,开始填坑 前篇:https://www.cnblogs.com/Lee-404/p/12771032.htm ...
- 不使用tomcat,仅适用javaSE手写服务器--模拟登陆
1.搭建框架 我们只是简单模拟,框架简单分三个模块 a,服务器端server包 b,servlet,根据不同的请求url,利用反射生产对应的servlet c,IO工具包,用来关闭IO流 d,编写we ...
- Jenkins(3)- 安装Jenkins过程中遇到问题的排查思路
如果想从头学起Jenkins的话,可以看看这一系列的文章哦 https://www.cnblogs.com/poloyy/category/1645399.html 安装Jenkins过程中,可能会遇 ...
- 关于foreach总是报错invalid param等问题
原因为被foreach的数组可能为空,则会报错,只需做好容错即可,例如 if ( !empty( $arr ) ) { foreach ( $arr as $k => $v ) { } }
- 2019-2020-1 20199308《Linux内核原理与分析》第五周作业
<Linux内核分析> 第四章 系统调用的三层机制(上) 4.1 用户态.内核态和中断 与系统调用打交道的方式是通过库函数的方式 用户态与内核态的区分 内核态:高的执行级别下,代码可以执行 ...