C语言必刷题上(保姆式详解)

简介: C语言必刷题上(保姆式详解)

说明:


(1)

以下所列题目是我结合平常时所做错重点题型和编程题.

(2)

必刷题上更新至函数


错题


1.printf输出

(1)关于printf的输出

(2)注意点

printf()参数与占位符是一一对应关系,如果有n个占位符,printf()的参数就应该有n+1

2.  关键字

continue语句和break语句相似。

所不同的是,

它不是退出一个循环,而是开始循环的一次新迭代

3. ASCII编码

4.转义字符

5.变量

局部变量是放在内存的栈区的,全局变量是放在内存的静态区

6.for循环

(1)线段图案

(2) for循环体

(3) 素数

打印100-200的素数

素数:这个数只能除1和它本身的数

int main()
{
  int i = 0, count = 0;
  for (i = 100; i <= 200; i++)
  {
    int j = 0;
    for (j = 2; j <= i; j++)
    {
      if (i % j == 0)
      {
        break;
      }
      
    }
    if (i == j)              //它本身
    {
      count++;
      printf("%d ", i);
    } 
  }
  printf("\n");
  printf("count=%d\n", count);
 
  return 0;
}

(4)"x"型图案

int main()
{
  int n = 0;
  while ((scanf("%d", &n) != EOF))
  {
    int i = 0;    //控制行
    for (i = 0; i < n; i++)
    {
      int j = 0;//控制列
      for (j = 0; j < n; j++)
      {
        if (i == j)
        {
          printf("*");
        }
        else if (i + j == n - 1)
        {
          printf("*");
        }
        else
        {
          printf(" ");
        }
      }
      printf("\n");
    }
  }
  return 0;
}

逐步调试:

(5)正方形图案

int main()
{
    int n = 0;
    while ((scanf("%d", &n) != EOF))
    {
        int i = 0;//控制行
        for (i = 0; i < n; i++)
        {
            int j = 0;
            for (j = 0; j < n; j++)
            {
                if (i == 0 || i == n - 1)
                {
                    printf("* ");
                }
                else if (j == 0 || j == n - 1)
                {
                    printf("* ");
                }
                else
                {
                    printf("  ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}

逐步调试及总结

7.while循环

(1)注意点

关于while(条件表达式) 循环体, (假设循环体里面没有break,continue,return,goto等等语句)    

条件表达式执行次数总是比循环体的执行次数多一次

while循环中,当条件表达式成立时,才会执行循环体中语句,每次执行期间,都会对循环因子进行修改(否则就成为死循环),修改完成后如果while条件表达式成立,继续循环,如果不成立,循环结束

(2)求两个数的最大公约数

int main()
{
  int a = 0, b = 0, c = 0;
  scanf("%d %d", &a, &b);
 
  while (c = a % b)//表达式直到为0停止
  {
    a = b;       //b-->a
    b = c;       //c-->b
  }
  printf("这两个数的最大公约数为%d\n", b);
  return 0;
}

8.switch..case语句

(1)switch..case中的break

(2) 注意点

 switch语句中表达式的类型只能是:整形(int)和枚举类型

9.数组

数组的下标由小到大地址由低到高

10.函数

(1)

(2) 9*9乘法口诀表

*输入n就输出到n*n的乘法口诀

int print(int n)
{
  int i = 0;
  for (i = 1; i <= n; i++)
  {
    int j = 0;
    for (j = 1; j <= i; j++) //j<=i方便控制台输出更有条理性
    {
      printf("%d*%d=%d ", i, j, i * j);
    }
    printf("\n");
  }
  return 0;
}
 
int main()
{
  int n = 0;
  scanf("%d", &n);
  print(n);
  return 0;
}


重点题型


1.关于strlen和sizeof计算的题目

(1)strlen作用与数组

(2)转义字符和strlen

(3)关于sizeof题目

sizeof的计算

(4)strlen和sizeof的计算

4.1

4.2

2.前置++和后置++

3.数组&函数

要求:

(1)实现print()  打印数组的每个元素

(2)实现reverse()  函数完成数组元素的逆置

(3)实现函数init() 初始化数组为全0

void init(int arr[], int sz, int set)
{
  int i = 0;
  for (i = 0; i < sz; i++)
  {
    arr[i] = set;
  }
}
 
void print(int arr[], int sz)
{
  int i = 0;
  for (i = 0; i < sz; i++)
  {
    printf("%d ", arr[i]);
  }
  printf("\n");
}
 
void reverse(int arr[], int sz)
{
  int left = 0;
  int right = sz - 1;
 
  while (left <= right)
  {
    int temp = arr[left];
    arr[left] = arr[right];
    arr[right] = temp;
    left++;
    right--;
  }
 
 
}
 
int main()
{
  int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  print(arr, sz);     //打印数组
  reverse(arr, sz);   
  print(arr, sz);     //数组逆序
  init(arr, sz, 0);   //函数set置为0
  print(arr, sz);     //数组置0
 
  return 0;
}


编程题


1.将三个数从大到小排序

定义临时变量temp,

从大到小,先用临时变量=最小

图解:

int main()
{
  int a = 0, b = 0, c = 0;
  scanf("%d %d %d", &a, &b, &c);
  int temp = 0;
  //从大到小
  if (a < b)
  {
    temp = a;
    a = b;
    b = temp;
  }
  if (a < c)
  {
    temp = a;
    a = c;
    c = temp;
  }
  if (b < c)
  {
    temp = b;
    b = c;
    c = temp;
  }
  printf("%d %d %d\n", a, b, c);
  return 0;
}

2.在数组中寻求最大值

int main()
{
  int arr[10] = { 0 };
  int i = 0;
  int max = arr[0];         //先令max取数组的第一个元素
  for (i = 0; i < 10; i++)
  {
    scanf("%d", &arr[i]); //在控制台输入10个数
 
    if (arr[i] > max)     //如果数组中某个元素>max
    {
      max = arr[i];     //令max取数组的某个元素
    }
  }
 
  printf("max=%d\n", max);  
//最后输出单独放出来,不能放在循环中,否则就会输出10个不同的最大值
  
  return 0;
}

计算最小值则相反

3.计算分组求和

计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值

方法一

int main()
{
  int i = 0;
  double zheng = 0.0;     
  double fu = 0.0;          //分组求和肯定是小数,要用double类型
  for (i = 1; i <= 100; i++)
  {
    if (i % 2 == 1)
    {
      zheng += 1.0 / i; //如果是分母是奇数,就用+
            //double类型所含的表达式要加小数点和0,如:1.0
    }
    else
    {
      fu -= 1.0 / i;    //如果是分母是偶数,就用-
    }
  }
  printf("result=%lf\n", zheng+fu);//0.688172
  return 0;
}

方法二

int  main()
{
  int i = 0;
  double sum = 0.0;
  int flag = 1;           //定义一个flag
  for(i=1; i<=100; i++)
  {
    sum += flag*1.0/i;  //首先分母是奇数,用+
    flag = -flag;       //然后接着下一步分母是负数,就用-
  }
  printf("%lf\n", sum);
  return 0;
}

4.数数字

数一下 1到 100 的所有整数中出现多少个数字9

int main()
{
  int count = 0;
  int i = 0;
  for (i = 1; i <= 100; i++)
  {
    if(i%10==9)
    {
      count++;
    }
    if (i / 10 == 9)
    {
      count++;
    }
  }
  printf("count=%d\n", count);//20
  return 0;
}

*值得注意的是:

i%10==9:余数为9,i的个位数为9,如9,19,29,39...

i% 9 ==0:余数为0,是9的倍数,     如9,18,27,36...

5.数组的并序并升序

两个数组分别升序组合成一个数组,并排为升序

值得注意的是,输入的两个数组都要分别为升序!!!

int main()
{
  int m = 0, n = 0;//数组a,b元素个数
  int i = 0, j = 0;//for循环会使用到
  scanf("%d %d", &m, &n);
  //定义数组
  int a[100] = { 0 };
  int b[100] = { 0 };
 
  //输入数组a,b元素个数
  for (i = 0; i < m; i++)
  {
    scanf("%d", &a[i]);
  }
 
  for (j = 0; j < n; j++)
  {
    scanf("%d", &b[j]);
  }
 
  //重新初始化为0
  i = 0;
  j = 0;
 
  while (i < m && j < n)
  {
    if (a[i] < b[j])
    {
      printf("%d ", a[i]);
      i++;
    }
    else
    {
      printf("%d ", b[j]);
      j++;
    }
  }
 
  if (i == m)
  {
    for (; j < n; j++)
    {
      printf("%d ", b[j]);
    }
  }
 
  if (j == n)
  {
    for (; i < m; i++)
    {
      printf("%d ", a[i]);
    }
  }
}

目录
相关文章
|
存储 编译器 C语言
C语言,数据在内存中的存储。——保姆级教学
C语言,数据在内存中的存储。——保姆级教学
|
2月前
|
C语言 C++
保姆式教学C语言——数组
保姆式教学C语言——数组
20 0
保姆式教学C语言——数组
|
2月前
|
机器学习/深度学习 编译器 C语言
C语言刷题(中)(保姆式详解)
C语言刷题(中)(保姆式详解)
17 0
|
6月前
|
C语言
C语言结构体教程:从入门到实践(保姆式教学)
C语言结构体教程:从入门到实践(保姆式教学)
73 0
|
6月前
|
C语言
C语言中求x的n次方:从入门到实践(保姆式教学)
C语言中求x的n次方:从入门到实践(保姆式教学)
496 0
|
存储 编译器 Linux
C语言自定义类型详解(保姆级教学)
C语言自定义类型详解(保姆级教学)
C语言自定义类型详解(保姆级教学)
|
7月前
|
安全 C语言
C语言设计扫雷(保姆级教学)
C语言设计扫雷(保姆级教学)
C语言设计扫雷(保姆级教学)
|
存储 编译器 C语言
C语言数据存储深度剖析(保姆级别教学,超级详细,干货满满)
C语言数据存储深度剖析(保姆级别教学,超级详细,干货满满)
|
C语言
初级C语言之【循环语句】(保姆级教程)(二)
初级C语言之【循环语句】(保姆级教程)(二)
212 0
|
存储 缓存 C语言
初级C语言之【循环语句】(保姆级教程)(一)
初级C语言之【循环语句】(保姆级教程)(一)
136 0