【C语言】速刷日记

简介: 而我们获取数字也是从低位开始获取,我们可以从低位获取数字后,每获取三个数字就加上一个逗号, 当数字全部获取完后,再将获取的数字倒过打印。

本篇收录总结3道C语言题型,其中两道来自ACM编程,有兴趣的可以刷刷,总结经验。


①. C循环控制


#include<stdio.h>
int main(){
 unsigned char i = 7;
 int j = 0;
 for(;i > 0;i -= 3){
++j;
 }
printf("%d\n", j);
 return 0;
}


请问该程序的输出是多少(

A. 2

B.死循环

C. 173

D. 172


解析:


#include<stdio.h>
int main() {
  unsigned char i = 7;
  //unsigned char 的范围为0-255
  int j = 0;
  for (; i > 0; i -= 3) //要求i大于0,当i等于0时循环停止。所以我们就计算什么时候i等于0,这时j循环了多少次就可以了
  {
    ++j;
  }
  //7 4 1 254~~~ 2  255~85
  //3+84+1+85=173
  printf("%d\n", j);
  return 0;
}

a9a685aa799f41b7bab37fdac4e503e0.png


②. 添加逗号


1b5aedc7481e48efa9e5a352027fd06b.png


思路:


规定N的范围不能超过2,000,000,000,而整数int类型的最大范围是2,147,483,647 所以没有超过整形范围。


注意它说每三位加一个逗号,如果我们从前面每三位开始加逗号,可能会更加难以理解。所以我们应该是从后面开始每三个数加一个逗号。


而我们获取数字也是从低位开始获取,我们可以从低位获取数字后,每获取三个数字就加上一个逗号, 当数字全部获取完后,再将获取的数字倒过打印。


代码:


int main()
{
  int n;
  scanf("%d", &n);
  char arr[14] = { 0 };//n的最大数是13位
  int i = 0;
  int k = 0;
  while (n)
  {
    if (k % 3 == 0&&k!=0)//k是用来记录每获取三个数字后就加上一个逗号的标识
    {
      arr[i++] = ',';
    }
    //不断获取n的低位数字,然后把它变成数字字符放进数组里
    arr[i++] = n % 10 + '0';//数字加'0'==数字字符 ---比如 8+'0'=='8'
    //获得一个数字就给数组arr的下标+1
    k++;
    n /= 10;
  }
  //最后倒着打印数组
  int j = 0;
  for (j = i-1; j >= 0; j--)
  {
    printf("%c", arr[j]);
  }
  return 0;
}


③. 删除公共字符


0101280093a34b5cafd0cc8f41bc9eea.png


思路:


要求输入两个字符串,输出字符串1中没有出现字符串2中的字符。


可以投机一下,并不是真正意义上的的删除


我们直接打印字符串1中没有出现字符串2中的字符就可以了。 如果字符串1中的字符与字符串2中的某个字符一样则不打印,如果全不一样则进行打印。


#include <string.h>
#include <assert.h>
int is_not_exist(char ch, char* str)
{
  assert(str != NULL);
  while (*str)
  {
    if (*str == ch)
    { 
      return 0;//如果一样直接返回0,那if语句就不成立,就不要打印
    }
    str++;
  }
  return 1; //最后遍历完arr2后发现没有字符与arr1[i]一样,那就返回1,if语句为真,进行打印
}
int main()
{
  char arr1[100] = { 0 };
  char arr2[100] = { 0 };
  //输入
  gets(arr1);
  gets(arr2);
  int sz = strlen(arr1);
  int i = 0;
  //输出
  for (i = 0; i < sz; i++)
  {
    if (is_not_exist(arr1[i],arr2))//如果该字符与arr2中所以字符都不一样那就可以打印,如果有一个一样那就不打印
    {
      printf("%c", arr1[i]);
    }
  }
  return 0;
}


我们还可以利用库函数strchr


53a6a0d448434e53959b44f4742a148a.png


查找字符串中的字符,如果有则返回该字符所在的地址,如果没有则返回NULL.


int main()
{
  char arr1[100] = { 0 };
  char arr2[100] = { 0 };
  //输入
  gets(arr1);
  gets(arr2);
  int sz = strlen(arr1);
  int i = 0;
  //输出
  for (i = 0; i < sz; i++)
  {
//strchr--查找字符,查找一个字符串中是否有一个字符,如果有则返回第一次出现的地址,如果没有则返回NULL;
    if (strchr(arr2, arr1[i])== NULL)//如果没有找到则返回NULL,也就可以打印了
    {
      printf("%c", arr1[i]);
    }
  }
  return 0;
}
相关文章
|
存储 Serverless C语言
【C语言】速刷日记
思路:代码实现了递归倒序打印字符串的功能,但是++s使得s的值发生了变化,回不到’G’的位置上,故而没有打印’G’
87 0
|
2月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
42 3
|
25天前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
49 10
|
25天前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
43 9
|
25天前
|
存储 Unix Serverless
【C语言】常用函数汇总表
本文总结了C语言中常用的函数,涵盖输入/输出、字符串操作、内存管理、数学运算、时间处理、文件操作及布尔类型等多个方面。每类函数均以表格形式列出其功能和使用示例,便于快速查阅和学习。通过综合示例代码,展示了这些函数的实际应用,帮助读者更好地理解和掌握C语言的基本功能和标准库函数的使用方法。感谢阅读,希望对你有所帮助!
34 8
|
25天前
|
C语言 开发者
【C语言】数学函数详解
在C语言中,数学函数是由标准库 `math.h` 提供的。使用这些函数时,需要包含 `#include <math.h>` 头文件。以下是一些常用的数学函数的详细讲解,包括函数原型、参数说明、返回值说明以及示例代码和表格汇总。
43 6
|
25天前
|
存储 C语言
【C语言】输入/输出函数详解
在C语言中,输入/输出操作是通过标准库函数来实现的。这些函数分为两类:标准输入输出函数和文件输入输出函数。
178 6
|
25天前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
54 6
|
25天前
|
C语言 开发者
【C语言】断言函数 -《深入解析C语言调试利器 !》
断言(assert)是一种调试工具,用于在程序运行时检查某些条件是否成立。如果条件不成立,断言会触发错误,并通常会终止程序的执行。断言有助于在开发和测试阶段捕捉逻辑错误。
35 5
|
1月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
58 4