当前位置: 首页 > news >正文

优秀的网站建设解决方案网络推广电话

优秀的网站建设解决方案,网络推广电话,免费做漫画网站,怎么建立一个独立的网站目录 前言:临近期末,接下来给大家分享一些经典的编程题,方便大家复习。不一定难,但都是入门的好题,尽可能的吃透彻。因为据说期末考试的题很多来自pta上面的原题。 对于一些语言我是用c来写的,不妨碍理解…

目录

前言:临近期末,接下来给大家分享一些经典的编程题,方便大家复习。不一定难,但都是入门的好题,尽可能的吃透彻。因为据说期末考试的题很多来自pta上面的原题。

对于一些语言我是用c++来写的,不妨碍理解,大家把cin,getline看作是c语言中的scanf,把cout, 看作是c语言中的printf ,把#include看作是c的头文件。

循环:

第一题:求满足条件的斐波拉契数:

第二题:求n以内最大k个素数以及他们的和

第三题:英文字母替换加密

第四题:查验身份证

数组:

第一题:

第二题:字符串字母大小写转换​编辑

第三题:统计一行文本的单词个数

第四题:求整数序列中出现次数最多的数

第五题:交换最小值和最大值

第六题:求矩阵各行元素之和

函数:

第一题:杨辉三角形

第二题:歌词比赛打分

第三题:数据排序

第四题:近似求PI

第五题:哥德巴赫猜想

第六题:Jack cheng的烦恼3

​指针:

第一题:字符串的连接

第二题:删除字符串中数字字符

第三题:输出学生成绩

第四题:删除字符串中指定字母

第五题:用指针方法求10个数最大和最小值之差

博主对大家说的话:

最后的最后还是想给大家说,相信在初学的过程中定然会有些吃力与不理解,但可以适当地取舍,先跳过,把在能力范围内的题目先整懂,相信自己一定能整明白,只是时间问题,就像翁恺老师在视频里说我们大家都是一个脑子,你能搞懂的我也能搞懂。其实我开始在做一些题的时候也很吃力,但当你能力慢慢提高之后再回过头来看这个题,以及之前迷糊的题,你会有新的感悟。相信通过以上题目,大家对c语言基础有了新的理解,感谢大家的阅读,期待下次与你见面。


前言:临近期末,接下来给大家分享一些经典的编程题,方便大家复习。不一定难,但都是入门的好题,尽可能的吃透彻。因为据说期末考试的题很多来自pta上面的原题。

对于一些语言我是用c++来写的,不妨碍理解,大家把cin,getline看作是c语言中的scanf,把cout, 看作是c语言中的printf ,把#include<bits/stdc++.h>看作是c的头文件。

循环:

第一题:求满足条件的斐波拉契数:

2dae3c6e949b45a08fb33b114f3ce0dc.png

分析:为什么上这道题,不是因为难而是因为,有一年考到过斐波拉契函数,所以记下来就好,没什么好说的

#include<stdio.h>
int fib(int n);
int main() {int i, n;scanf("%d", &n);//输入数for (i = 1;; i++) //让i来自增遍历所有斐波拉契数{if (fib(i) > n) {printf("%d", fib(i));break;//一旦大于就跳出循环}}return 0;
}
int fib(int n) //斐波拉契函数
{if (n <= 2) {return 1;}else {return fib(n - 1) + fib(n - 2);}
}

第二题:求n以内最大k个素数以及他们的和

77401e6470fd42988499df9c7bd9c64b.png

思路:首先要输出不超过n的最大的k个素数,我们就先从n-1开始遍历,然后看输出的格式,肯定要定义一个数组arr来存放这些数字,但数目又是有限的,所以每得到一个素数,k就要减一,当k为0的时候跳出循环,这样思路打开了,然后最后输出的时候注意一下格式,最后一个数字不用输出+,就OK了。

410bb516b686402c8198020155a33174.png

第三题:英文字母替换加密

c0606f0450504aad8ac80c1ced18f91a.png

思路:

按步就班,这里我用c++实现,大家用c语言也是一个原理,大家可以定一个字符数组然后用scanf

读取,和

string str;
getline(cin, str);

本质是一样,然后呢,求字符串长度len可以用strlen库函数来实现,cout大家就换成printf输出,在判断是否是字母的语句可以换成用逻辑符号判断,即在首字母和末尾字母的区间里面,然后变成大写的可以换成str[i]-32来实现,变成大写也是同理。总体的思路就是先遍历,然后判断每一个字符是不是字母,如果是那么是大写还是小写,如果不是那么就不动自动输出。

#include<bits/stdc++.h>
using namespace std;
string newstr(string str);
int main()
{string str;getline(cin, str);str = newstr(str);cout << str;return 0;
}
string newstr(string str)
{int len = str.size();for (int i = 0; i < len; i++){if (isalpha(str[i]))//是字母{if (islower(str[i]))//shi xiao xie {str[i] = toupper(str[i]);if (str[i] == 'Z'){str[i] = 'A';}elsestr[i]++;}else{str[i] = tolower(str[i]);if (str[i] == 'z'){str[i] = 'a';}elsestr[i]++;}}}return str;
}

第四题:查验身份证

8965e881f0e14349a8e6bc05d9a64997.png

思路:这道题相对来说还是比较难,一般人写不出除非你是二班的人。

写法还是一个,那就是读懂题意见招拆招。首先身份证不合格有两种一种是前十七个字符有字母另外一种就是第十八位字符为错误。并且要理解加权的意思,最终我们要和验证码来比较,我们可以验证码弄一个数组,把验证码数组的下标当成我们加权求和然后%11的结果来比较是否相同。细节的地方就是在求和的时候,因为sfz是字符数组要减去'0'才是我们计算的数字。

#include<bits/stdc++.h>
using namespace std;
int main()
{char str[11] = { '1','0','X','9','8','7','6','5','4','3','2' };//验证吗char sfz[18];int jq[17] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 };int n, sum = 0;cin >> n;int n1 = n;int flag = 0;while (n--){//cin.getline(sfz, 18);//输入身份证cin >> sfz;sum = 0;for (int i = 0; i < strlen(sfz)-2; i++)//{if (!(isdigit(sfz[i])))//说明存在字母{cout << sfz << endl;break;}else//不存在字母,则计算加权和{sum += jq[i] * (sfz[i] - '0');}}if (sfz[17] != str[sum % 11]){cout << sfz << endl;;}elseflag++;}if (n1 == flag){cout << "All passed";}return 0;
}

数组:

第一题:

a1b52a6f80794575ad2f4b184717b004.jpeg

思路:里面的sort你可以换成冒泡排序也是一样的做法,cin你换成scanf,cout换成printf。整体的思路你应该看的明白,注意每一次算一个人的成绩时,要把sum归0,不然就会多算,然后就是要输出,单科平均成绩最大及序号,没必要多开数组,总成绩最大,单科平均就最大,人数都是一样的,然后定义个变量记录下来就ok了

f876aed611c341218f5a349d93e460a3.png

8bfa556eb10c446d8159df2c2c4521ed.png

第二题:字符串字母大小写转换668fd12c0e9a408d8bbae754b8f381c3.png

思路:明白大小写转化之间的关系,这里c实现和c++实现都给大家呈现,

#include<stdio.h>
#include<string.h>
int main() {char s[100];scanf("%s",s);for(int i = 0; s[i] != '#'; i++) {if (s[i] >= 'A' && s[i] <= 'Z') {s[i] += 32;}else if (s[i] >= 'a' && s[i] <= 'z') {s[i] -= 32;}}for (int i = 0; s[i] != '#'; i++) {printf("%c",s[i]);}return 0;
}

c++:

#include<bits/stdc++.h>
using namespace std;
int main()
{string s;for (int i = 0; s[i] != '#'; i++){if (islower(s[i]))s[i] = toupper(s[i]);else if (isupper(s[i]))s[i] = tolower(s[i]);}for (int i = 0; s[i] != '#'; i++) {printf("%c", s[i]);}return 0;
}

第三题:统计一行文本的单词个数

31000277b4e24b76bb203da6d9607f10.png

这个题要考虑的情况也不少,可能开头就有空格,这里给大家介绍一种简洁的方式istringstream 在这段代码中的作用是将输入的字符串 line 转换为字符串流对象 iss,然后我们可以使用 iss 从中逐个读取单词并进行处理。并且不会将空格读入

#include<bits/stdc++.h>
using namespace std;
int main()
{string line;getline(cin, line);istringstream iss(line);int count = 0;string word;while (iss >> word){count++;}cout << count << endl;return 0;
}

第四题:求整数序列中出现次数最多的数

6e8ce8841e664806840f07dbf2864c87.png

思路:这题没什么说的,按部就班。用一个计数器,出现一次加一次,两次遍历,如果比最大的次数大就更新。

#include<stdio.h>
int main()
{int n,i,j;scanf("%d",&n);int a[10000];int count=0;int max=0,maxcount=0;for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n;i++){for(j=0;j<n;j++){if(a[i]==a[j])count++;}if(count>maxcount){maxcount=count;max=a[i];}count=0;}printf("%d %d",max,maxcount);return 0;
}

第五题:交换最小值和最大值

e86b8c5971d04c73962cec17dda717ed.png

思路:一步步实现,代码大家应该看得懂,看不懂的留言。这是最朴实无华的写法了

#include<stdio.h>
int main()
{int n=0;int a[10]={0};int max=0;int min=0;int t=0;scanf("%d",&n);//将所有数字存入数组a中 for (int i=0;i<n;i++){scanf("%d",&a[i]);}//找出数组a中最小的元素:元素大小比较,找到小的哪个,将下标值赋给min。循环之后a[min]就是数组a中最小的 for(int i=1;i<n;i++){if(a[i]<a[min]){min=i;}}//将数组a中最小的元素与a[0]交换位置 t=a[min];a[min]=a[0];a[0]=t;//重复上述操作,找到最大值 for(int i=1;i<n;i++){if(a[i]>a[max]){max=i;}}//将最大值与元素数组最后一个交换位置 t=a[max];a[max]=a[n-1];a[n-1]=t;//遍历并打印数组a的元素 for(int j=0;j<n;j++){printf("%d ",a[j]);}return 0;} 

第六题:求矩阵各行元素之和

a323e60dd85047beadc65a1910bb2a3b.png

#include <stdio.h>int main(){int m, n;do{scanf("%d %d", &m, &n);}while( m<1 || n>6  );    // 确保m,n的范围int mat[m][n];  // 定义矩阵for( int i=0; i<m; i++ ){int sum = 0;for( int j=0; j<n; j++ ){scanf(" %d", &mat[i][j]);    // 输入数据sum += mat[i][j];    // 输入数据的同时累计一行的和}printf("%d\n", sum);}return 0;
}

函数:

第一题:杨辉三角形

a7132365e2fd420f938a62747d44228f.png

fff8dd9d33284ad0b5cd2827940378d7.png思路:要写这个还是要知道这个杨辉三角怎么构成,第一行第一个和每行最后一个都是1,然后中间的项存在a[i][j]=a[i-1][j]+a[i-1][j-1]的规律

void fun(int a[N][N], int n)
{for (int i = 0; i < n; i++){a[i][0] = 1;a[i][i] = 1;for (int j = 1; j < i; j++){a[i][j] = a[i - 1][j] + a[i - 1][j - 1];}}
}

第二题:歌词比赛打分

c4f714b79f8841d9b04135a34e545e65.png思路:还是要知道指针的一些知识,p+i表示指针所指向的对象,看不明白的可以看我指针的博客,复习一下再来整

思路:先找最高然后找最低,用总的减去,然后除总个数减2,
double getScore(int* score, int total)
{double max = -1, min = 101, sum = 0;for (int i = 0; i < total; i++){sum += *(score + i);if (*(score + i) > max){max = *(score + i);}if (*(score + i) < min){min = *(score + i);}}return (sum - max - min) / (total - 2);
}

第三题:数据排序

33966c28129344d7b9d5692b7e300a25.png思路:

排序算是一个重点,这里给大家介绍两种简单的排序。

一个冒泡排序一个选择排序,有点迷的可以去学一下

冒泡排序:

void fun(int a[], int  n)
{for (int i = 0; i < n - 1; i++){for (int j = 0; j < n - 1 - i; j++){if (a[j] > a[j + 1]){int temp=a[j+1];a[j+1]=a[j];a[j]=temp;}}}
}

选择排序:

void  fun(int a[], int  n)
{int i, j, k;for (i = 0; i < n; i++){for (j = 0; j < n; j++){if (a[j] > a[i]){k = a[j];a[j] = a[i];a[i] = k;}}}
}

第四题:近似求PI

340ce99feefc48b4bddda359d00b9b83.png思路:题目看似抽象,其实仔细分析还是好整。观察出通项,然后记得每一项都是在前一项的基础上再乘,接着求和即可。

找通项规律,i/(2*i+1);每一项是在前一项的基础上乘
#include<bits/stdc++.h>
using namespace std;
int main()
{double i = 1;double eps, sum = 1;cin >> eps;double item = 1;while (item >= eps){item = item*1.0 * (i / (2 * i + 1));i++;sum += item;}printf("PI = %.5lf", sum * 2);return 0;
}

第五题:哥德巴赫猜想

87005193aaee4adda129f038c1e45e4c.png思路:这个题之前讲过,再次搬出来说明它的重要性。这个题其实就是素数的那道题的变式,关键是分解成最小的素数,所以你从2开始遍历,找到最小的就用n-最小的,得到另外一个数,如果这个数也是素数则符合条件跳出

4cdfd6a6531740b7aff62ead6d033f91.png

第六题:Jack cheng的烦恼3

2fadbcd3ea2649f1ab057684c079f8e7.png

思路:道题也是素数的一个变式,你只需要把n的每一位数提取出来,求和,然后判断是否为素数即可

35f9213fe6064388987c21c898330350.png指针:

第一题:字符串的连接

06db103ef53f4a489307bb954b2638c2.png思路:

先让指针s自增,直到他指向\0,然后开始赋值,最后别忘了把\0填上去

//连接两个字符串,思路就是s接受的是str1的地址,t接受的是str2的地址,那么要把t赋值到s的末端,只需
//指向str1的指针s自增到/0的位置,然后把str2赋给str1,同时两种指针向后移动
//char* str_cat(char* s, char* t)
//{
//	char* p = s;
//	while (*s != '\0')
//	{
//		s++;
//	}
//	//出循环的时候s指向的是/0位置
//	//开始把str2赋给str1;
//	int i = 0;
//	while (*(t+i) != '\0')
//	{
//		*(s+i) = *(t+i);
//		i++;
//	}
//	*(s + i) = '\0';
//	return p;
//}

第二题:删除字符串中数字字符

ff9103d0056e471481433131ea9df83a.png

思路:

首先要求得字符串的长度,然后开始遍历,判断是否是数字字符,如果是,就记录当前的位置,将后续的字符往前移动,最后要把i--,原因就是当移动完之后如果不减的话回到循环体i++之后会指向下一个位置,这个时候如果有连续的数字字符,就跳过了这个情况。

void delnum(char* s) {if (s == NULL) {return;}char digit[10] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };int i = 0;int len = 0;while (*(s + len) != '\0') {len++;  // 获取字符串长度}for (i = 0; i < len; i++) {if (*(s + i) >= '0' && *(s + i) <= '9') {  // 判断是否为数字字符int j = i;while (*(s + j) != '\0') {*(s + j) = *(s + j + 1);  // 将后续字符往前移动j++;}i--;// 需要回退一步,原因就是当是连续字符的时候你回到for循环的时候,你的i又会加1,那么它就不会处理当前的字符,万一当前的字符是数字呢?}}
}

第三题:输出学生成绩

863e116b85e2405686d6d4f15fc7c72f.png

思路:按步就班,注意数据类型,

#include<bits/stdc++.h>
using namespace std;
int main()
{double n, max = -1, min = 101;cin >> n;double sum = 0, avg = 0;int n1 = n;while (n--){int score;cin >> score;sum += score;if (score > max)max = score;if (score < min)min = score;}avg = sum * 1.0 / n1;printf("average = %.2lf\nmax = %.2lf\nmin = %.2lf",avg,max,min);return 0;}

第四题:删除字符串中指定字母

225de8cf6f474f89ac52357480d24a9a.png思路:这道题和前面的删除数字字符类似,唯一要注意的就是要将i--,防止指定的字母是连续的状态,

#include <iostream>
#include <cstring>
using namespace std;
int main() {char a[101] = { 0 };char* p = a;scanf("%s", a);int len = strlen(a);int i, j;for (i = 0; i < len; i++) {if (a[i] == 'a') {j = i;while (*(p + j) != '\0') {*(p + j) = *(p + j + 1);j++;}i--;  // 由于删除一个字符,需要将 i 回退一个位置len--;  // 更新字符串长度}}cout << a << std::endl;return 0;
}

第五题:用指针方法求10个数最大和最小值之差

3b5b9a758dd44548a0f3fa0289a21dc7.png思路:很基础的指针题,大家看代码即可

#include<bits/stdc++.h>
using namespace std;
int main()
{int arr[10];int* p = arr;int min = arr[0], max = arr[0];for (int i = 0; i < 10; i++){cin >> *(p + i);if (*(p + i) > max)max = *(p + i);if (*(p + i) < min)min = *(p + i);}cout << "difference value = " << max - min;return 0;
}

然后给大家扩展一下用指针实现冒泡排序

eacc94a13c954dfb813b7556853c31ad.png

博主对大家说的话:

最后的最后还是想给大家说,相信在初学的过程中定然会有些吃力与不理解,但可以适当地取舍,先跳过,把在能力范围内的题目先整懂,相信自己一定能整明白,只是时间问题,就像翁恺老师在视频里说我们大家都是一个脑子,你能搞懂的我也能搞懂。其实我开始在做一些题的时候也很吃力,但当你能力慢慢提高之后再回过头来看这个题,以及之前迷糊的题,你会有新的感悟。相信通过以上题目,大家对c语言基础有了新的理解,感谢大家的阅读,期待下次与你见面。

http://www.mmbaike.com/news/41482.html

相关文章:

  • 新闻类的网站如何做优化、信息流推广渠道
  • 怎么网站定制企业建站系统模板
  • 网站设计公司要多少钱百度网盘网页版入口官网
  • 自适应网站可以做伪静态页面吗互动营销成功案例
  • 宁波个人做网站网络营销服务商
  • 网站建设的完整流程包括哪些深圳网络推广公司排名
  • 自己做网站需不需要钱南宁seo咨询
  • 龙岩新罗区上海专业排名优化公司
  • 海口网络建设石家庄seo代理商
  • php做网站开发网站诊断分析
  • 腾讯建站官网seo网站关键词排名优化公司
  • 凡科做的网站百度能收录吗软文代写自助发稿平台
  • 松江区建设交通委员会网站长沙网络推广服务
  • 黄村做网站的公司美国seo薪酬
  • 工厂做网站网络营销试题库及答案
  • 小米商城网站设计论文西安网站建设方案优化
  • 9uu域名更新自动转跳在线seo外链工具
  • ps做网站尺寸多少像素提高工作效率的措施
  • 公司网站如何做今日疫情实时数据
  • 新疆自治区建设厅交易中心网站网站策划书案例
  • 单位网站建设工作总结制作网站平台
  • wordpress mysql 被删长沙网站优化
  • 视频广告对接平台seo外链推广工具下载
  • 什么网站能免费做公众号封面著名的网络营销案例
  • 天津网站建设制作方案新网站推广方法
  • 如何在工商局网站上做网登网站的营销推广
  • 网站服务器租用哪家好免费的推文制作网站
  • 南通制作网站的有哪些公司吗抖音自动推广引流app
  • 中国建设会计学会网站google搜索优化
  • 深圳网站设计有哪些交换友情链接吧