8.4C语言小测总结

前言

这篇博客,是针对今天测试的总结复盘,我整理了一些我认为有用的题,总结的知识点都不难,但比较细,大家可以看一看有没有帮助大家查漏补缺
前四道是选择题,后两道是编程题。

1.

k的结果是:

int i = 10;
int j = 20;
int k = 3;
k *= i + j;

答案及解析:

90
计算过程:
(i+j)k
解析:
操作符的优先级很低,所以*=的优先级低于+,先计算+

2.

下列程序的运行结果是:

#include
#include

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

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

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;
}

结语

虽然这次测试的结果自己并不满意,但总结之后,发现归根到底是自己掌握的知识不牢固,还是需要努力啊。

你可能感兴趣的:(C语言错题集,c语言,算法,开发语言)