前言
这篇博客,是针对今天测试的总结复盘,我整理了一些我认为有用的题,总结的知识点都不难,但比较细,大家可以看一看有没有帮助大家查漏补缺
前四道是选择题,后两道是编程题。
1.
k的结果是:
int i = 10; int j = 20; int k = 3; k *= i + j;
答案及解析:
90
计算过程:
(i+j)k
解析:
操作符的优先级很低,所以*=的优先级低于+,先计算+
2.
下列程序的运行结果是:
#include<stdio.h> #include<stdlib.h> int a = 1; void test() { int a = 2; a += 1; } int main() { test(); printf("%d\n", a); return 0; }
解析:
首先在test函数内部创建的变量是局部变量,她的作用域只在test函数的内部,所以在主函数中,刚才为局部变量a申请的空间已经销毁了,所以在打印a时,打印的是全局变量a。
所以结果是1
错因:
在看这道题时,我认为它考察的知识点是,局部变量和全局变量的名称相同时,局部变量优先。而忽略了他们之间的作用域和生命周期不同。
3.
以下叙述正确的是:
A.在c程序中,main函数必须位于程序的最前面。
B.c程序的每行中只能写一条语句。
C.c语言本身没有输入输出语句。
D.在对一个c程序进行编译的过程中,可发现注释中的拼写错误
概念介绍:
main函数可位于任意位置,这是常识。
2.
C语言给定了语法,而输入输出语句是库函数中提供的。
C语言约定了一些函数,规定了函数的名字、功能、参数、返回类型
而这些规定的函数是由编译器的厂商实现的,msvc、gcc、clang的厂商在实现编译器的时候提供实现的。
这些函数放在标准库中,成为库函数。
4.
若有定义语句:
int year = 2009, * p = &year;
下列不能使year中的值增至2010的语句是:
A.(*p)+=1;
B.(*p)++;
C.++(*p);
D.*p++;
解析:
此题考查的就是运算符的优先级以及指针的知识
++的优先级高于*,所以++是作用于p,而非*p。
5.
示例答案:
#include<stdio.h> int main() { long long a = 0; long long b = 0; scanf("%lld %lld", &a, &b); long long m = 0; m = (a > b) ? a : b; while (1) { if (m % a == 0 && m % b == 0) { break; } m++; } printf("%d\n", m); return 0; }
优化一下:
#include<stdio.h> int main() { long long a = 0; long long b = 0; scanf("%lld %lld", &a, &b); long long i = 1; while (i * a % b != 0) { i++; } printf("%lld\n", i * a); return 0; }
6.
解答:第一种方法:
void reverse(char* left, char* right) { while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } } int main() { char arr[101] = { 0 };//留一个空间给\0 gets(arr); //此处输入语句也可以用:scanf("%[^\n]s", arr); //意思是知道\0才读取结束 int ch = 0; int i = 0; while ((ch = getchar()) != '\n') { arr[i++] = ch; } int len = strlen(arr); //1. 逆序整个字符串 reverse(arr, arr + len - 1); //2. 逆序每个单词 char* cur = arr; while (*cur) { char* start = cur; while (*cur != ' ' && *cur != '\0') { cur++; } char* end = cur - 1; reverse(start, end);//逆序一个单词 if (*cur == ' ') cur++; } printf("%s\n", arr); return 0; }
第二种方法:
int main() { char arr[101] = { 0 }; gets(arr); int i = 0; for (i = (int)strlen(arr); i > 0; i--) { if (arr[i] == ' ') { printf("%s ", arr + i+1); arr[i] = 0; } } printf("%s", arr); return 0; }
结语
虽然这次测试的结果自己并不满意,但总结之后,发现归根到底是自己掌握的知识不牢固,还是需要努力啊。