[土狗之路]Coursera C++第10周作业(上)

这周作业有八道题,所以分为上下两部分。

先来第一题:

编程题#1:求字母的个数

来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)

注意: 总时间限制: 1000ms 内存限制: 65536kB

描述

在一个字符串中找出元音字母a,e,i,o,u出现的次数。

输入

输入一行字符串(字符串中可能有空格,请用cin.getline(s,counts)方法把一行字符串输入到字符数组s中,其中counts是s的最大长度,这道题里面可以直接写80。),字符串长度小于80个字符。

输出

输出一行,依次输出a,e,i,o,u在输入字符串中出现的次数,整数之间用空格分隔。

样例输入

If so, you already have a Google Account. You can sign in on the right.

样例输出

5 4 3 7 3

提示

注意,只统计小写元音字母a,e,i,o,u出现的次数。


这道题貌似简单粗暴的解决就可以了:

#include<iostream>
using namespace std;
int main() {
	char s[80];
	cin.getline(s, 80);
	int a = 0;
	int e = 0;
	int i = 0;
	int o = 0;
	int u = 0;
	for (int j = 0; j < 80; j++) {
		if (s[j] == 'a' )
			a++;
		if (s[j] == 'e' )
			e++;
		if (s[j] == 'i' )
			i++;
		if (s[j] == 'o' )
			o++;
		if (s[j] == 'u' )
			u++;
	}
	cout << a << ' ' << e << ' ' << i << ' '<< o <<' '<< u << endl;
	return 0;
}


然后来下一道题:

编程题#2:忽略大小写比较字符串大小

来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)

注意: 总时间限制: 1000ms 内存限制: 65536kB

描述

一般我们用strcmp可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按ASCII码值大小比较),直到出现不同的字符或遇到'\0'为止。如果全部字符都相同,则认为相同;如果出现不相同的字符,则以第一个不相同的字符的比较结果为准。但在有些时候,我们比较字符串的大小时,希望忽略字母的大小,例如"Hello"和"hello"在忽略字母大小写时是相等的。请写一个程序,实现对两个字符串进行忽略字母大小写的大小比较。

输入

输入为两行,每行一个字符串,共两个字符串。(请用cin.getline(s,80)录入每行字符串)(每个字符串长度都小于80)

输出

如果第一个字符串比第二个字符串小,输出一个字符"<"

如果第一个字符串比第二个字符串大,输出一个字符">"

如果两个字符串相等,输出一个字符"="

样例输入

第一组
Hello
hello
第二组
hello
HI
第三组
hello
HELL

样例输出

第一组
=
第二组
<
第三组
>

提示

注意,只统计小写元音字母a,e,i,o,u出现的次数。

strcmp的实现如下,结果用result保存。

int i = 0;
char result;
while (s1[i] != '\0' && (s1[i] == s2[i])){
    i++;
}
if (s1[i] > s2[i]) {
    result = '>';
} else if (s1[i] < s2[i]) {
    result = '<';
} else{
    result = '=';
}
#include <stdio.h>
#include <string.h>
#include<iostream>
using namespace std;
int main() {
	char str1[80];
	char str2[80];
	cin.getline(str1, 80);
	cin.getline(str2, 80);
	for (int i = 0; i < 80; i++) {
		if (str1[i] >= 'A'&&str1[i] <= 'Z')
			str1[i] = str1[i] + 32;//对于ACSⅡ码而言,大写字母是从65(A)到90(Z),
		//小写字母是从97(a)到122(z),所以大写字母+32就变成了与其对应的小写字母。
		if (str2[i] >= 'A'&&str2[i] <= 'Z')
			str2[i] = str2[i] + 32;
	}
	int i = 0;
	char result;
	if (strcmp(str1, str2) == 0)
		result = '=';
	if (strcmp(str1, str2) > 0)
		result = '>';
	if (strcmp(str1, str2) <0)
		result = '<';
	cout << result << endl;
	return 0;
}

接着来第三题:

编程题#3:最长单词2

来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)

注意: 总时间限制: 1000ms 内存限制: 65536kB

描述

一个以'.'结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式

输入

一个以'.'结尾的简单英文句子(长度不超过500),单词之间用空格分隔,没有缩写形式和其它特殊形式

输出

该句子中最长的单词。如果多于一个,则输出第一个

样例输入

第一组
I am a student of Peking University.
第二组
Hello world.

样例输出

第一组
University
第二组
Hello
直接来代码吧:

#include<iostream>
using namespace std;
int main() {
	char input[500];
	cin.getline(input, 500);
	int end = 0;//这个用来标记最大单词结尾在字符数组中的位子
	int count = 0;//这个用来数每个单词的长度
	int longest = 0;//用来记录当前所找到的最长单词的长度
	int i = 0;
	while (i < 500)
	{
		if (input[i] != ' '&&input[i] != ','&&input[i] != '.') {
			count++;
			i++;
			if (count > longest) {//如果这里是》=,那么如果有相同长度的单词,就会打印最后面的。
				longest = count;
				end = i;

			}
		}

		if (input[i] == ' ' || input[i] == ',' ) {			
			count = 0;
			i++;
		}
		if (input[i] == '.'|| input[i] == '\0' )
			break;
	}
	for (int j = end - longest; j < end; j++) {
		cout << input[j];//end-longest就是最长单词的开始位子,然后输出整个单词。
	}
	cout << endl;
	return 0;
}

这么写的好处是不需要创建第二个数组储存最长单词,就能解决为题。


第四题

编程题#4:矩阵交换行

来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)

注意: 总时间限制: 1000ms 内存限制: 65536kB

描述

在main函数中, 生成一个5*5的矩阵,输入矩阵数据,并输入n,m的值。判断n,m是否在数组范围内,如果不在,则输出error;如果在范围内,则将n行和m行交换,输出交换n,m后的新矩阵。

输入

5*5矩阵的数据,以及n和m的值。

输出

如果不可交换,则输出error

如果可交换,则输出新矩阵

样例输入

第一组
1 2 2 1 2
5 6 7 8 3
9 3 0 5 3
7 2 1 4 6
3 0 8 2 4
0 4
第二组
1 2 2 1 2
5 6 7 8 3
9 3 0 5 3
7 2 1 4 6
3 0 8 2 4
5 1

样例输出

第一组
   3   0   8   2   4
   5   6   7   8   3
   9   3   0   5   3
   7   2   1   4   6
   1   2   2   1   2
第二组
error

提示

输出error格式如下:

cout<< "error" << endl;

输出矩阵格式如下:

cout<< setw(4)<< num;

输出矩阵一行后要输出cout<< endl;

setw是iomanip库里定义的格式控制操作符,需要#include <iomanip> 包含这个头文件。

#include<iostream>
#include<iomanip>
using namespace std;
int main() {
	char input[5][5];
	for (int i = 0; i < 5; i++) {
		for (int j = 0; j < 5; j++) {
			cin >> input[i][j];
		}
	}
	int m, n;
	cin >> m >> n;
	if ((m >= 0 && m <= 4) && (n >= 0 && n <= 4)) {//在交换区间内
		for (int i = 0; i < 5; i++) {
			if (i == m&&i!=n) {
				for (int j = 0; j < 5; j++) {
					cout << setw(4) << input[n][j];//如果到了第m行,打印出n行的值就得了
				}
				cout << endl;
			}
			if (i == n&&i!=m)
			{
				for (int j = 0; j < 5; j++) {				
					cout << setw(4) << input[m][j];//同理,n行打印m行的值

				}
				cout << endl;
			}
					if (i != m&&i != n) {
						for (int j = 0; j < 5; j++) {
							cout << setw(4) << input[i][j];//正常输出该行值

						}
						cout << endl;
					}
					if (i == m&&m == n) {//如果m==n,那么交换没交换其实就没区别了
						for (int j = 0; j < 5; j++) {
							cout << setw(4) << input[i][j];
						}
						cout << endl;
					}
				}

		}
	else
		cout << "error" << endl;//如果输出的m,n不合法,直接报错就行了

	return 0;
}






Coursera R编程的互评作业一个很好的学习机会。通过这个作业,你将有机会编写R代码并与其他学员互相评估和交流。这个作业通常会在课程的后半部分出现,要求你完成一些相对复杂的编程任务。 在这个作业中,你将需要通过使用R语言来解决一些实际问题。这些问题可能涉及数据分析、数据可视化、统计模型等等。你会收到一份作业说明,并且需要根据要求编写相应的R代码。完成作业后,你需要将你的代码上传至Coursera平台上的作业提交系统。 完成代码编写后,你会被要求对一部分其他学员提交的代码进行评估。这意味着你会阅读他人的代码,并根据一些预定义的标准进行评分和反馈。这有助于你加深对R编程的理解,同时也能够向他人学习,看到其他人是如何解决同样的问题的。通过这个过程,你也能获取一些对你自己代码的反馈和建议。作为回报,你也需要对其他学员的作业进行评估,给出你对他们代码质量的评价。 此外,互评作业还带来了一种学习的动机,因为你知道你的作业会被他人评估。这鼓励你努力编写高质量的代码,并且对自己的作品有更高的标准。 总而言之,Coursera R编程的互评作业是一种非常有价值的学习机会。通过编写和评估他人的代码,你可以加深对R编程的理解,同时也能够从他人的经验中学习,并提高自己的编程水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值