8.4C语言小测总结

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 8.4C语言小测总结

前言

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

前四道是选择题,后两道是编程题。

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

结语

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

相关文章
|
编译器 C语言
初识C语言
本篇旨在初步了解C语言的大概知识,并不作深入探讨。知识点会在后期的更新的文章中进行深入学习。
45 0
|
1月前
|
存储 机器学习/深度学习 编译器
一篇文章,把你的C语言拉满绩点
一篇文章,把你的C语言拉满绩点
12 0
|
3月前
|
C语言
C语言中的复合语句
C语言中的复合语句
392 1
|
6月前
|
C语言
C语言中%c,%d,%x,%f,%4.2f分别是什么
C语言中%c,%d,%x,%f,%4.2f分别是什么
|
C语言
C语言假期作业 DAY 02
C语言假期作业 DAY 02
|
6月前
|
C语言
C语言中的exit函数
C语言中的exit函数
114 0
|
6月前
|
BI 编译器 C语言
初识C语言一
初识C语言一
65 0
|
Java 编译器 C语言
初识C语言(1)
初识C语言(1)
59 0
|
存储 测试技术 C语言
C语言假期作业 DAY 16
C语言假期作业 DAY 16
|
编译器 BI C语言
C语言假期作业 DAY 12
C语言假期作业 DAY 12