免费的海报设计网站,个人asp网站模板下载,一个域名可以建设几个网站,注册的网站文章目录 C/C笔试练习1.%符号在printf用作格式说明符的注意事项#xff08;1#xff09;输出%5.3s#xff08;2#xff09;判断%中小数点含义 2.for循环语句的三个条件#xff08;3#xff09;判断循环次数#xff08;4#xff09;判断循环次数 3.运算符优先级#xf… 文章目录 C/C笔试练习1.%符号在printf用作格式说明符的注意事项1输出%5.3s2判断%中小数点含义 2.for循环语句的三个条件3判断循环次数4判断循环次数 3.运算符优先级5判断运算符优先级6判断优先级再计算大小 4.编程题7删除公共字符 C/C笔试练习
1.%符号在printf用作格式说明符的注意事项
1输出%5.3s 以下程序的运行结果是
#include stdio.hint main(void)
{printf(%s , %5.3s\n, computer, computer);return 0;
}A computer , puter B computer , com C computer , computer D computer , compu.ter %m.ns: m:输出字符串的宽度 n:左起截取目标字符串n个字符并且是右对齐如果实际字符串长度不足3则会在右侧用空格填充。 所以%5.3s在C语言中表示一个字符串宽度为5其中包括3个字符和2个空格。如果实际字符串长度不足3则会在右侧用空格填充。 答案选B 2判断%中小数点含义 使用printf函数打印一个double类型的数据要求输出为10进制输出左对齐30个字符4位精度。以下哪个选项是正确的 A %-30.4e B %4.30e C %-30.4f D %-4.30f %-30.4f 中的 %-30 表示左对齐且总宽度为30个字符。 .4 表示小数点后有4位。 f 表示浮点数即 double 类型。 答案选C 在C语言中%符号用于格式说明符用于指定输入或输出的数据类型和格式。 . 表示精度指定了小数点后的位数或字符串中的最大字符数。 例如 %5.3s表示一个字符串宽度为5其中包括3个字符和2个空格。如果实际字符串长度不足3则会在右侧用空格填充。 %5.3f表示一个浮点数宽度为5其中包括3位小数和2位整数。如果实际数字不足5位则会在左侧用空格填充。 需要注意的是在%d、%c等格式说明符中.并没有实际意义因为这些格式说明符不支持小数点后的精度。 以下是C语言中常见的%打印格式及其含义
%打印格式含义%d打印十进制整数。%f打印浮点数。%c打印字符。%s打印字符串。%u打印无符号十进制整数。%x打印十六进制整数。%o打印八进制整数。%e打印科学计数法表示的浮点数。%g自动选择%f或%e输出。%p打印指针地址。%%打印一个%符号。 这些格式说明符可以与一些标志字符一起使用以控制输出格式如
标志字符输出格式-左对齐输出。在正数前加正号。空格在正数前加空格。#对于%o输出前导零对于%x和%X输出前导0x或0X。0用0填充输出的数字。 2.for循环语句的三个条件 3判断循环次数 以下for循环的执行次数是
for(int x 0, y 0; (y 123) (x 4); x);A 是无限循环 B 循环次数不定 C 4次 D 3次 在循环开始前x和y都被初始化为0。然后循环条件为 (y 123) (x 4)。首先y 123是一个赋值操作它将y的值设置为123然后返回123。因此循环条件中的y 123始终为真。 其次x 4 是一个比较操作它检查x的值是否小于4。在每次循环迭代后x的值增加1因为在for循环的第三个部分中没有对x进行修改。因此循环将执行4次直到x的值达到4此时循环条件不再为真循环终止。 答案选C
4判断循环次数 下列main()函数执行后的结果为
int func()
{int i, j, k 0;for(i 0, j -1;j 0;i, j){k;}return k;
}int main()
{cout (func());return 0;
}A -1 B 0 C 1 D 2 同理这段代码中的函数 func 包含一个 for 循环该循环的初始条件是 j -1并且在每次迭代中 j 的值都会增加 1。循环的终止条件是 j 0这意味着当 j 的值变为 0 时循环将停止。 然而 j 的值在开始就赋值为了 -1 在条件判断中 j 0 为假所以根本不会进入到这个循环中直接跳出k0。 答案选B 3.运算符优先级
5判断运算符优先级 若有定义语句int year1009,*pyear;以下不能使变量 year 中的值增至 1010 的语句是 A *p1; B (*p); C (*p) D *p A、*p1; 等价于 *(p1)先解引用得到year的值然后增加1再赋值给yearyear的值变为1010可以 B、(*p); 等价于 *(p1)先解引用得到year的值然后增加1再赋值给yearyear的值变为1010可以 C、(*p) 等价于 (year)先解引用得到year的值然后增加1再赋值给yearyear的值变为1010可以 D、*p 等价于 *p再对p先解引用得到year的值然后p指针向后移动一位year不变所以D不可以。 答案选D
6判断优先级再计算大小 32位系统中定义**a[3][4],则变量占用内存空间为()。 A 4 B 48 C 192 D 12 因为 [ ] 的优先级高于 * 所以a先和 [ ] 结合所以a是数组 在32位系统中指针大小是4此时a是一个二维数组a[3][4]每个数组元素是一个**类型变量每个元素是一个二级指针占用4个字节。整个数组a包含3行4列共12个元素所以整个数组占用的内存空间为12*448个字节。 答案选B 4.编程题
7删除公共字符
删除公共字符 暴力解法 本题可以使用传统的暴力查找方式判断第一个串的字符是否在第二个串中在再挪动字符删除这个字符的方式时间复杂度为O(N^2)效率比较低。
#include iostream
#include string
using namespace std;int main() {string str1;string str2;getline(cin,str1);//使用getline可以输入空格getline(cin,str2);for(int i0;istr1.size();i)//暴力查找{for(int j0;jstr2.size();j)//有一样的数字就删除{if(str1[i]str2[j]){str1.erase(i,1);}}}coutstr1;return 0;
}哈希表 1.将第二个字符串的字符都映射到一个hashtable数组中用来判断一个字符在这个字符串。 2.判断一个字符在第二个字符串不要使用删除这样效率太低因为每次删除都伴随数据挪动。这里可以考虑使用将不在字符添加到一个新字符串最后返回新新字符串。
#includeiostream
#includestring
using namespace std;int main() {//IO输入字符串最好使用getline。string str1, str2;getline(cin, str1);getline(cin, str2);//使用哈希映射思想先str2统计字符出现的次数int hashtable[256] {0};for (size_t i 0; i str2.size(); i) {hashtable[str2[i]];}//遍历str1str1[i]映射hashtable对应位置为0则表示这个字符在//str2中没有出现过则将他到ret。注意这里最好不要str1.erases(i)//因为边遍历边erase容易出错。string ret;for (size_t i 0; i str1.size(); i) {if (hashtable[str1[i]] 0)ret str1[i];}cout ret endl;return 0;
}