计算机导论与C语言基础 Coursera 第七周

第七周

1 明确学习进度

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上的情况是VC编译环境中的数据。每个编译环境对这些解释不通。主要是因为C标准问题。
在这里插入图片描述
在这里插入图片描述

2 整数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这种储存结构在组成原理中会讲,大概意思就是这种方式会使计算加快。
在这里插入图片描述
hex控制输出打印符。
在这里插入图片描述
在这里插入图片描述
输出控制符必须要切回来。
在这里插入图片描述
在这里插入图片描述
0x代表16进制 0代表8进制
在这里插入图片描述
int最大大约在42亿。
在这里插入图片描述
在这里插入图片描述
最大的数+1 就变成最小的数了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3其他类型

在这里插入图片描述
float精度只有7位。
在这里插入图片描述
cout默认打印6位精度。
在这里插入图片描述
浮点型的表示方式。
在这里插入图片描述
浮点表示法是已知的C/C++编译器都是按照IEEE(国际电子电器工程师协会)制定的IEEE浮点数表示法来进行运算的。这种结构是一种科学表示法,用符号(+或-)、指数和尾数来表示,底数被确定为2。所以在IEEE浮点数表示法里,一个浮点数为尾数乘以2的指数次方再加上符号。
这边是组成原理的部分
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
字符型必须是单引号,双引号是字符串
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
超出之后就出现截断现象。
在这里插入图片描述
转义字符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
const 在前面标注
定义后在程序中不能被改变数值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这边是C++中保留字符
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4 作业

//http://pkuic.openjudge.cn/hw03/1/
//编程题#1:年龄与疾病
//来源 : POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)
//
//	 注意: 总时间限制 : 1000ms 内存限制 : 65536kB
//
//	 描述
//	 某医院想统计一下某项疾病的获得与否与年龄是否有关,需要对以前的诊断记录进行整理。
//
//	 输入
//	 共2行,第一行为过往病人的数目n(0 < n <= 100),第二行为每个病人患病时的年龄。
//
//	 输出
//	 每个年龄段(分四段:18以下,19 - 35,36 - 60,大于60注意看样例输出的格式)的患病人数占总患病人数的比例,以百分比的形式输出,精确到小数点后两位(double)。关于c++的格式化的输入输出,请参考:http://www.cplusplus.com/reference/iomanip。也可以在网上搜索一下,资料很多的。
//
//样例输入
//10
//1 11 21 31 41 51 61 71 81 91
//样例输出
//1 - 18: 20.00 %
//19 - 35 : 20.00 %
//36 - 60 : 20.00 %
//60 - : 40.00%

//提示
//注意最后一行的输出是“60 - : ”,而不是“61 - : ”。
//
//每个冒号之后有一个空格。
//
//输出可以用 cout << fixed << setprecision(2) << f; 来保留f后面的两位小数。

#include <iostream>     // std::cout, std::fixed
#include <iomanip>      // std::setprecision
using namespace std;

int main(){
	int n;
	cin >> n;
	int a[100];

	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}

	int Num0118=0, Num1935=0, Num3660=0, Num60=0;

	for (int i = 0; i < n; i++)
	{
		if (a[i]<=18)
		{
			Num0118 += 1 ;
		}
		else if (a[i]<=35)
		{
			Num1935 += 1;
		}
		else if (a[i] <= 60)
		{
			Num3660 += 1;
		}
		else{
			Num60 += 1;
		}
	}
	cout << "1-18: " << fixed << setprecision(2) << double(Num0118*100/n)<<'%'<<endl;
	cout << "19-35: " << fixed << setprecision(2) << double(Num1935 * 100 / n) << '%' << endl;
	cout << "36-60: " << fixed << setprecision(2) << double(Num3660 * 100 / n) << '%' << endl;
	cout << "60-: " << fixed << setprecision(2) << double(Num60 * 100 / n) << '%' << endl;

	return 0;
}

double()命令用法出错

#include <iostream>     // std::cout, std::fixed
#include <iomanip>      // std::setprecision
using namespace std;

int main(){
	int n;
	cin >> n;
	int a[100];

	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}

	int Num0118=0, Num1935=0, Num3660=0, Num60=0;

	for (int i = 0; i < n; i++)
	{
		if (a[i]<=18)
		{
			Num0118 += 1 ;
		}
		else if (a[i]<=35)
		{
			Num1935 += 1;
		}
		else if (a[i] <= 60)
		{
			Num3660 += 1;
		}
		else{
			Num60 += 1;
		}
	}
	cout << "1-18: " << fixed << setprecision(2) << (double(Num0118)*100/n)<<'%'<<endl;
	cout << "19-35: " << fixed << setprecision(2) << (double(Num1935) * 100 / n) << '%' << endl;
	cout << "36-60: " << fixed << setprecision(2) << (double(Num3660) * 100 / n) << '%' << endl;
	cout << "60-: " << fixed << setprecision(2) << (double(Num60) * 100 / n) << '%' << endl;

	return 0;
}
//http://pkuic.openjudge.cn/hw03/2/
//编程题#2:成绩判断
//来源 : POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)
//
//	 注意: 总时间限制 : 1000ms 内存限制 : 6000kB
//
//	 描述
//	 输入一个0--100的分数,判断分数代表什么等级。
//
//	 95 <= 分数 <= 100, 输出1
//
//	 90 <= 分数<95, 输出2
//
//	 85 <= 分数<90, 输出3
//
//	 80 <= 分数<85, 输出4
//
//	 70 <= 分数<80, 输出5
//
//	 60 <= 分数<70输出6
//
//	 分数 < 60; 输出7.
//
//	 输入
//	 n
//
//	 输出
//	 m
//
//	 样例输入 87 

//样例输出 3

#include <iostream>
using namespace std;

int main(){
	int score;
	cin >> score;

	if (score<60)
	{
		cout << 7 << endl;
	}
	else if (score<70)
	{
		cout << 6 << endl;
	}
	else if (score<80)
	{
		cout << 5 << endl;
	}
	else if (score<85)
	{
		cout << 4 << endl;
	}
	else if (score<90)
	{
		cout << 3 << endl;
	}
	else if (score<95)
	{
		cout << 2 << endl;
	}
	else
	{
		cout << 1 << endl;
	}

	return 0;
}
//http://pkuic.openjudge.cn/hw03/5/
//编程题#4:人民币支付
//来源 : POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)
//
//	 注意: 总时间限制 : 1000ms 内存限制 : 65536kB
//
//	 描述
//	 从键盘输入一指定金额(以元为单位,如345),然后输出支付该金额的各种面额的人民币数量,显示100元,50元,20元,10元,5元,1元各多少张,要求尽量使用大面额的钞票。
//
//	 输入
//	 一个小于1000的正整数。
//
//	 输出
//	 输出分行,每行显示一个整数,从上到下分别表示100元,50元,20元,10元,5元,1元人民币的张数
//
//	 样例输入  735
//	 样例输出
//7
//0
//1
//1
//1
//0

#include <iostream>
using namespace std;

int main(){
	int price;
	cin >> price;
	int money[6] = {100,50,20,10,5,1};

	for (int i = 0; i < 6; i++)
	{
		cout << price / money[i]<<endl;
		price = price%money[i];
	}

	return 0;
}
http://pkuic.openjudge.cn/hw03/3/
//编程题#3:找出第k大的数
//来源 : POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)
//
//	 注意: 总时间限制 : 1000ms 内存限制 : 65536kB
//
//	 描述
//	 用户输入N和K,然后接着输入N个正整数(无序的),程序在不对N个整数排序的情况下,找出第K大的数。注意,第K大的数意味着从大到小排在第K位的数。
//
//	 输入
//	 N
//
//	 K
//
//	 a1 a2 a3 a4 .....aN
//
//	 输出
//	 b
//
//	 样例输入
//5
//2
//32 3 12 5 89
//
//样例输出
//32

//提示
//这是一道很经典的算法问题,是公司面试的常见考题。以后学习递归之后再回头看看这道题,或许有新解法。
//参考
//https://www.cnblogs.com/fengkang1008/p/4727038.html

#include <iostream>
using namespace std;

//冒泡算法
//int main(){
//	int N, K;
//	cin >> N >> K;
//	int a[100];
//	for (int i = 0; i < N; i++)
//	{
//		cin >> a[i];
//	}
//	for (int i = 0; i < K; i++)
//	{
//		for (int j = N-1; j >i; j--)
//		{
//			if (a[j] > a[j - 1]){
//				int temp = a[j];
//				a[j] = a[j - 1];
//				a[j - 1] = temp;
//			}
//		}
//	}
//	cout << a[K-1]<< endl;
//
//	return 0;
//}

//快排算法
int main(){
	int N, K;
	cin >> N >> K;
	int a[100];
	for (int i = 0; i < N; i++)
	{
		cin >> a[i];
	}
	
	for (int i = 0; i < K; i++)
	{
		int maxIndex = i;
		for (int j = i+1; j < N; j++)
		{
			if (a[maxIndex] < a[j]){
				maxIndex = j;
			}
		}

		if (maxIndex != i){
			int temp = a[i];
			a[i] = a[maxIndex];
			a[maxIndex] = temp;
		}
	}
	cout << a[K - 1] << endl;
	return 0;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值