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

网站页面打开速度慢网络营销推广的应用场景

网站页面打开速度慢,网络营销推广的应用场景,小说网站开发需求,浙江省建设信息港网站一、选择判断部分 第一题#xff1a; 如下代码是否存在风险#xff0c;并说明原因和修改方案 #includestdio.h int main() {char* str hello world;*str a;return 0; }思路提示#xff1a;这种形式的字符串存储在什么区域呢#xff1f;是否真的有…一、选择判断部分 第一题 如下代码是否存在风险并说明原因和修改方案 #includestdio.h int main() {char* str hello world;*str a;return 0; }思路提示这种形式的字符串存储在什么区域呢是否真的有写入权限 答案运行会报错!!! 因为这种形式的字符串是存储在常量区的而对于储存在常量区的数据只能进行读取并不能进行写入所以此时直接对str所指向的值进行修改是不行的。当然如果我们先将字符串存放在数组形式中就可以对数据进行修改啦: #includestdio.h int main() {char str[] hello world;char* pstr str;*str a;return 0; }第二题 若定义:int a[2][3]{1357911},以下描述正确的是      A*(a 1)为元素7的地址 B(a[1] 1)的值是5 C**(a 1) 2值是11 Da[0]和a不同 答案A 题解在二维数组中*(a 1)代表的是第二列首元素的地址而第二列首元素对应的值为7则A是正确的。而(a[1] 1)所代表的是第二列的第二个元素的地址对应的值应该为9的地址(需要再解引用一次才是9)故B是错误的。**(a 1) 2中**(a 1)所代表的是第二列首元素此值为72得9并不是11所以C是错误的。a所代表的是首元素地址也就是数组首地址而a[0]代表的是第一列的首元素地址同样也是数组首地址故a和a[0]其实是相同的。 第三题 请问下列代码的输出是多少 (      ) #includestdio.h int main() {int m[] { 1,2,3,4,5,6,7,8,9,0 };int(*p)[4] (int(*)[4])m;printf(%d, p[1][2]);return 0; } 思路提示int(*p)[n]代表的是什么而int* p[n]代表的又是什么p[1][2]中p这个二维数组是对一维数组m以什么形式的拆分所得到的呢 答案输出结果是7。 题解int∗ p[n] 表示的是大小为n的用来存储指针变量的指针数组。            int(∗p)[n] 表示的是一个指向有n个元素的数组的数组指针。 而对于(int(*)[4])m 我们可以联想一下(int)m 就是将m强制类型转换为int型而此时(int(*)[4])m也与(int)m的格式相似而(int(*)[4])的格式代表了一个以4位元素组成一组的数组指针此时将m强制类型转换为它那么m现在就应该是{{1,2,3,4},{5,6,7,8},{9,0, , }};而p[1][2]所指向的就是第二列的第三个元素也就是7。 第四题 说出以下代码的错误之处并说明原因 char* getmemory(void) {char p[] hello world;return p; } void test() {char* str NULL;str getmemory();printf(%s, str); } int main() {test();return 0; } 思路提示在getmemory函数中定义的p值在什么区域是全局变量还是局部变量还是静态变量 答案运行不报错但也不会输出hello world而是随机输出乱码。 题解因为当我们将str置空之后将str传入getmemory函数中虽然getmemory函数中期望的定义并返回的p为hello world但p是一个局部变量当退出函数时p会自动销毁而此时我们再打印str时会发现str不再是NULL了但也不会是hello world而是随机的乱码。 第五题 请问下列代码的输出是什么      int main() {char* str hello.com;int i;str hello world!;int len strlen(str);printf(%d \n, len);printf(%c \n, *(str 4));printf(%s \n, (str 6));return 0; }答案 12 o world! 题解因为将str重新赋值后长度发生了改变此时长度为12*(str 4)对应的是str字符数组中第五个字符也就是o而打印字符串形式(str 6)代表的就是跳过str前六个字符再进行打印也就是world!。 二、编程题部分 第一题统计字母,空格,字符数! 输入一行字符分别统计出其中英文字母、空格、数字和其它字符的个数。 输入样例 aaabbb11223344 输出样例 数字个数为:8 字母个数为:6 空格个数为:3 字符个数为:4 思路提示想要做到分别统计出一段字符中的英文字母空格数字以及其他字符个数我们可以定义出四个计数器分别来统计数字字母空格字符的个数。然后我们可以定义一个整型变量sz用来存放这段字符的长度通过一个for循环将这段字符的每一个字符遍历一边并且对每一个字符进行判断使相应的计数器自增最后按格式输出它们的个数。 答案 int main() {char arr[100];fgets(arr, 100, stdin);int sz strlen(arr) - 1;int shunum 0;int zinum 0;int kongnum 0;int funum 0;int i 0;for (i 0; i sz; i){if (arr[i] 0 arr[i] 9)shunum;else if ((arr[i] a arr[i] z) || (arr[i] A arr[i] Z))zinum;else if (arr[i] )kongnum;elsefunum;}printf(数字个数为:%d\n, shunum);printf(字母个数为:%d\n, zinum);printf(空格个数为:%d\n, kongnum);printf(字符个数为:%d\n, funum);return 0; } 需要注意的是:在对定义的字符串赋值时我们使用的是fgets函数而并非scanf(%s)这是因为使用scanf的形式进行赋值在遇到空格时会终止赋值所以无法判断空格的个数。而fgets函数在进行赋值时大部分情况下不会被终止只有遇到换行符号\n或者已经达到输入大小的限度才会终止。 由图我们可以知道fgets函数的原型以及fgets传参的参数类型。 char* fgets(char* str, int num, FILE* stream) 第一个参数char* str代表的是容器的地址。 第二个参数int num代表的是容器的大小。 第三个参数FILE* stream代表的是从哪里开始读取。 在题中我们使用的格式为fgets(arr, 100, stdin);这段代码就代表我们需要为地址为arr的容器进行赋值并且容器最大为100从0(键盘)开始读取。(stdin代表输入流表示从0(键盘)开始记录) 第二题然后是几点 我们使用四个数字来代表时间比如1209代表12点零9分。而此题中你的代码需要计算之前的时间加上经过的时间后的到的现在的时间。 读入两个数字一个数字代表之前的时间另一个数字代表经过的时间而最后输出现在的时间。比如我们输入1130 160;   输出1410; 思路提示如果直接将时间用一个数来表示那么将本是100进1的小时位改成60进1的小时位未免过于繁琐我们是否可以尝试一下将时间分成两个数字分别代表小时和分钟呢这样或许会方便很多哦~ 答案 int main() {int time;int minute;scanf(%d %d, time, minute);int time1 time / 100;//用来表示小时int time2 time % 100;//用来表示分钟if (minute 0)//用来判断经过时间0{while (minute 60){time1;minute - 60;}}else if (minute 0)//用来判断经过时间0{while (minute 0){time1--;minute 60;}}time2 minute;if (time2 60)//将60的分钟进位{time1;time2 - 60;}if (time1 24)time1 - 24;if(time210)//补充分钟为个位时,中间缺少的0printf(%d0%d, time1, time2);elseprintf(%d%d, time1, time2);return 0; }题解我们定义两个变量为time1和time2time1 time / 100代表只取两个高位数也就是小时。而time2 time % 100代表只取两个低位数也就是分钟。之后我们使用if选择语句和while循环语句将流逝的时间minute分别加在小时位和分钟位上。当minute60时不断地将minute自减60并且同时为小时位1。同时也要注意此题中输入流逝时间为负数的情况(难道这就是传说中的反方向的钟?!)同样的当minute0时不断地将minute自增60并且同时小时位-1。最后将剩余的时间加在分钟位上再进行一次time2是否60的判断然后此题就解决啦~怎么样只要想到将小时和分钟分开算其实还是很简单的呢。 第三题阶乘计算升级版 本题要求实现一个打印非负整数的阶乘的函数。 要求其中N是用户传入的参数其值不超过1000。如果N是非负整数则该函数必须在一行中打印出N!的值否则打印“Invalid input”。 整体代码: #include stdio.hvoid Print_Factorial(const int N) {/* 你需要编写并实现此代码 */}int main() {int N;scanf(%d, N);Print_Factorial(N);return 0; } 思路提示平时我们使用的阶乘计算方法很简单比如我们此时要求5!只需要定义一个整形变量初始化值为1for(i1;i5;i)使此变量在for循环中与i分别相乘就能求出5! int main()//阶乘计算初阶版 {int a;scanf(%d, a);int i 0;int sum 1;for (i 1; i a; i){sum * i;}printf(%d, sum);return 0; }但这是之前的初阶版对于比较小的数字求阶乘还勉强能做到但如果要求的阶乘位数很高呢高到我们用long long型变量也接收不了那该怎么办呢给大家一个提示我们可以定义一个很大的数组用数组中的元素分别放置阶乘结果的每一位数字这样无论结果位数多大我们也能轻松自如的接收啦~ (在此大家可能觉得就算知道了用数组接收每一位数字的思路但想要实现能够计算1000!的函数还是太难太繁琐了确实这是一个较难的题也可能是我菜(ㄒoㄒ)那让我们先做一个稍微比较好理解的题来练练手吧~) 练手题大数加法 利用数组的形式存储每一位数字并进行运算。 运行效果: 大数加法的核心思想与阶乘计算升级版的思想是一致的我们需要使用数组来接收每一位数字并运算。因为是大数加法所以输入的数字也可能非常大所以输入的数字也需要使用数组来存储。 因为我们需要使每一位数字存储在数组相应的位置并且这一位数字必须是个位数所以我们可以将其转换成字符形式这样输入运算数时自动就将每一位运算数当作字符存储在相应位置了~~~那么有了思路具体来操作一下:我们定义三个char型数组char a[10001]用来接收大数运算数(存入时为字符类型)char arr1[10001]和char arr2[10001]用来接收两个大数运算数(接收时将每一位都转换成数字类型)。 char a[10001] { 0 };//用于存储运算数(字符形式) char arr1[10001] { 0 };//用于接收运算数(接收需转换成数字形式) char arr2[10001] { 0 };//用于接收运算数(接收需转换成数字形式) printf(输入两个运算数:\n); scanf(%s, a); for (i strlen(a) - 1; i 0; i--) {arr1[tmp] a[i] - 0;//将字符转换为数字 } scanf(%s, a); for (tmp 0,i strlen(a) - 1; i 0; i--) {arr2[tmp] a[i] - 0;//将字符转换为数字 } 解决了大数运算数的传输与接收那么再让我们来思考一下大数运算数如何通过数组的形式进行每一位的运算呢 让我们来举一个例子并且逐步分析来看一下运算的过程 比如此时我们输入的arr1为97输入的arr2为75那么两者运算过程就会是: 个 十 百7 9 05 7 0(第一次运算)tmp arr1[i] arr2[i] up; (tmp 7 5 0 12)arr1[i] tmp % 10; (arr1[i] 12 % 10 2)up tmp / 10; (up 12 / 10 1)(第二次运算)tmp arr1[i] arr2[i] up; (tmp 9 7 1 17)arr1[i] tmp % 10; (arr1[i] 17 % 10 7)up tmp / 10; (up 17 / 10 1)(第三次运算)tmp arr1[i] arr2[i] up; (tmp 0 0 1 1)arr1[i] tmp % 10; (arr1[i] 1 % 10 1)up tmp / 10; (up 1 / 10 0)(结束运算)结果为:arr1[0] 2 arr1[1] 7 arr1[2] 1;(97 75 172) 由此我们就能够直观的看出运算过程到底是何种方式~我们可以定义两个整型变量tmp和up来辅助运算tmp代表此次两个位数相加的和up代表两个位数相加后是否需要进1。而arr1[i]用来存储此次运算后得到的此位数字(只需要取10的余数即可)。将这个思路转化为运算公式的形式就会是这样: for (i 0; i 10000/*运算的最大位数*/; i) {tmp arr1[i] arr2[i] up;//两数相加运算arr1[i] tmp % 10;up tmp / 10; } 怎么样转化为运算公式之后是不是感觉一下简便了很多呢~接下来就只剩下最后的打印工作了此处我们需要注意的是之前我们对arr1和arr2进行存储时使用的是逆序的存储这样的目的是使低位数在前高位数在后这样我们就能做到使用for循环运算时先计算低位数再计算高位数。相应的得出的结果也理所当然的是逆序所以打印时我们需要从后往前打印才能得出真正的结果~ 答案 int main() {char a[10001] { 0 };//用于存储运算数(字符形式)char arr1[10001] { 0 };//用于接收运算数(接收需转换成数字形式)char arr2[10001] { 0 };//用于接收运算数(接收需转换成数字形式)int tmp 0;int up 0;int i 0;printf(输入两个运算数:\n);scanf(%s, a);for (i strlen(a) - 1; i 0; i--){arr1[tmp] a[i] - 0;//将字符转换为数字}scanf(%s, a);for (tmp 0,i strlen(a) - 1; i 0; i--){arr2[tmp] a[i] - 0;//将字符转换为数字}printf(运算结果为:\n);for (i 0; i 10000; i){tmp arr1[i] arr2[i] up;//两数相加运算arr1[i] tmp % 10;up tmp / 10;}for (i 10000; i 0; i--){if(arr1[i]!0)for(i;i0;i--)//逆序打印出真正结果printf(%d, arr1[i]);}return 0; } 那么学会了大数相加让我们收回思路继续解决阶乘计算升级版吧~ 还是同样的思路我们需要定义一个足够大的char型数组用来后续存放i的阶乘然后先分别对0求阶乘和对0,对1求阶乘的情况进行解决: #include stdio.h void Print_Factorial(const int N) {char a[5000] { 1 };//因为是相乘而不是相加,如果初始化为0则无法进行相乘int tmp 0; //所以我们将第一个元素初始化为1,使其能够正常运算int i 0; //并且其他的元素仍为0,使用进位来增大其余元素int j 0;int up 0;if (N 0)printf(Invalid input);else if (N 0 || N 1)printf(1);else{...} 而else中的内容就是求阶乘的运算了~ 同样的让我们举个例子逐步分析一下应该如何运算 从 i 2 开始 i5 i 分别求2! 3! 4! 5!(计算2!)//2 0 0tmp a[j] * i up; (tmp 1 * 2 0 2)a[j] tmp % 10; (a[j] 2 % 10 2)up tmp / 10; (up 2 / 10 0)(计算3!)//6 0 0tmp a[j] * i up; (tmp 2 * 3 0 6)a[j] tmp % 10; (a[j] 6 % 10 6)up tmp / 10; (up 6 / 10 0)(计算4!)//4 2 0(逆序)tmp a[j] * i up; (tmp 6 * 4 0 24)a[j] tmp % 10; (a[j] 24 % 10 4)up tmp / 10; (up 24 / 10 2)tmp a[j] * i up; (tmp 0 * 4 2 2)a[j] tmp % 10; (a[j] 2 % 10 2)up tmp / 10; (up 2 / 10 0)(计算5!)//0 2 1(逆序)tmp a[j] * i up; (tmp 24 * 5 0 120)a[j] tmp % 10; (a[j] 120 % 10 0)up tmp / 10; (up 120 / 10 12)tmp a[j] * i up; (tmp 0 * 5 12 12)a[j] tmp % 10; (a[j] 12 % 10 2)up tmp / 10; (up 12 / 10 1)tmp a[j] * i up; (tmp 0 * 5 1 1)a[j] tmp % 10; (a[j] 1 % 10 1)up tmp / 10; (up 1 / 10 0) (整理这个真的要把我这个小菜鸡累毁了!!!各位看到这里如果不介意的话,点点收藏点点赞吧 T A T) 统计成公式就是 for (i 2; i N; i) {for (up 0, j 0; j 5000; j){tmp a[j] * i up;a[j] tmp % 10;up tmp / 10;} } 最后我们只需要将运算出来的数组给逆序打印出来就好啦~ 答案 #include stdio.h void Print_Factorial(const int N) {char a[5000] { 1 };int tmp 0;int i 0;int j 0;int up 0;if (N 0)printf(Invalid input);else if (N 0 || N 1)printf(1);else{for (i 2; i N; i){for (up 0, j 0; j 5000; j){tmp a[j] * i up;a[j] tmp % 10;up tmp / 10;}}for (i 5000; i 0; i--){if (a[i] ! 0)for (i; i 0; i--)printf(%d, a[i]);}} } int main() {int N;scanf(%d, N);Print_Factorial(N);return 0; } 怎么样是不是看起来比大数运算还要更加简便一些呢但其实这段乘法的公式是真的难!! 最后我们算出1000的阶乘为......好可怕的数字......不愧是计算机这都能算出来~ 那么今天的刷题日记就给大家分享到这啦~如果有哪里说的不对的或者讲解的不清楚的还请大家多多在评论区指出意见哦~我也会多多吸取教训多多学习的~那么我们下一篇再见啦ヾ(•ω•)o
http://www.w-s-a.com/news/716147/

相关文章:

  • 住房城市乡建设部网站装修平台有哪些
  • 小米网站 用什么做的深圳广告公司前十强
  • 勤哲网站开发视频瑞安 网站建设培训
  • 有个蓝色章鱼做标志的网站高端的网站建设怎么做
  • 建站网址导航hao123html网页设计实验总结
  • 西宁市网站建设价格丽水集团网站建设
  • 长宁怎么做网站优化好本机怎么放自己做的网站
  • 诚信网站备案中心网站字体怎么设置
  • 企业网站建设费是无形资产吗佛山网站建设哪个好点
  • 网站建设就业方向国开行网站毕业申请怎么做
  • 创建一个网站的费用wordpress 4.0 安装
  • 会员登录系统网站建设dw软件是做什么用的
  • 手机网站被做跳转长沙网上购物超市
  • 网站建设中网站需求分析设计网站推荐html代码
  • 容易收录的网站台州汇客网站建设
  • 企业网站源码百度网盘下载网站备案号如何查询密码
  • 个人网站建设课程宣传栏制作效果图
  • 自己做的网站能上传吗网上做彩票网站排名
  • 教育培训网站模板下载自己做商务网站有什么利弊
  • 平面设计公司网站兰州室内设计公司排名
  • 个人工作室注册条件温州seo结算
  • 360免费建站系统中国建设银行官网站黄金部王毅
  • 罗源福州网站建设个体户可以网站备案吗
  • 网站开发 专有名词pc网站建设和推广
  • 上海部道网站 建设conoha wordpress
  • 手机测评做视频网站宝塔可以做二级域名网站么
  • 代理公司注册济南重庆seo优化效果好
  • 佛山市骏域网站建设专家徐州网站建设价格
  • 公司做网站多济南好的网站建设公司排名
  • 网站维护的方式有哪几种该网站在工信部的icp ip地址