C语言习题~day11

简介: C语言习题

1、C程序常见的错误分类不包含:( )

A.编译错误

B.链接错误

C.栈溢出

D.运行时错误

栈溢出是运行时错误的一种,因此C程序不会将栈溢出错误单独列出来,栈溢出包含在运行时错误中。

因此:选择C


2、关于VS调试快捷键说法错误的是:( )

A.F5-是开始执行,不调试


B.F10-是逐过程调试,遇到函数不进入函数


C.F11-是逐语句调试,可以观察调试的每个细节


D.F9是设置断点和取消断点


A:错误,F5是开始调试,在遇到短点的位置可以停下来,Ctrl+F5是开始执行,不调试


B:正确,F10遇到函数时不会进入到函数体中,F11会


C:F11遇到函数时,会进入函数中


D:F9会在光标所在行下短点,如果有短点会取消短点  因此,选择A

3、关于Debug和Release的区别说法错误的是:( )

A.Debug被称为调试版本,程序调试找bug的版本


B.Release被称为发布版本,测试人员测试的就是Release版本


C.Debug版本包含调试信息,不做优化。


D.Release版本也可以调试,只是往往会优化,程序大小和运行速度上效果最优


A:正确,Debug为调试版本,一般在开发完成后发布工程前,调试代码都是在Debug模式下进行的


B:正确,Release版本最终是要发送给用户的,发给用户的版本必须要没有问题,测试人员就是最后一个把关的


C:正确,Debug版本是调试版本,编译器编译时会增加一些调试信息,编译器基本不会对其进行优化


D:错误,Release版本是不能调试的,一般都是在Debug版本下调试的,Release版本一般编译器会进行大量的优化,删除无用的代码,指令的次序调整等,让其速度更快


因此:选择D

4、喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水(编程实现)。


/*
思路:
1. 20元首先可以喝20瓶,此时手中有20个空瓶子
2. 两个空瓶子可以喝一瓶,喝完之后,空瓶子剩余:empty/2(两个空瓶子换的喝完后产生的瓶子) + empty%2(不够换的瓶子)
3. 如果瓶子个数超过1个,可以继续换,即重复2
*/
int main()
{
  int money = 0;
  int total = 0;
  int empty = 0;
 
 
  scanf("%d", &money);
  
  //方法1
  total = money;
  empty = money;
  while(empty>1)
  {
    total += empty/2;
    empty = empty/2+empty%2;
  }
 
    printf("total = %d\n", total);
  return 0;
}
 
 
// 方法二:按照上述喝水和用瓶子换的规则的话,可以发现,其实就是个等差数列:money*2-1
int main()
{
  int money = 0;
  int total = 0;
  int empty = 0;
 
 
  scanf("%d", &money);
  
  //方法2
  if(money <= 0)
  {
    total = 0;
  }
  else
  {
    total = money*2-1;
  }
  printf("total = %d\n", total);
 
 
  return 0;
}

5、用C语言在屏幕上输出以下图案:

/*
思路:
仔细观察图形,可以发现,此图形中是由空格和*按照不同个数的输出组成的。
上三角:先输出空格,后输出*,每行中
  空格:从上往下,一行减少一个
  *:2*i+1的方式递增
  
下三角:先输出空格,后输出*,每行中
  空格:从上往下,每行多一个空格
  *: 从上往下,按照2*(line-1-i)-1的方式减少,其中:line表示总共有多少行
按照上述方式,将上三角和下三角中的空格和*分别输出即可。 
*/
 
 
int main()
{
  int line = 0;
  int i = 0;
  scanf("%d", &line);//7
  //打印上半部分
  for(i=0; i<line; i++)
  {
    //打印一行
    //打印空格
    int j = 0;
    for(j=0; j<line-1-i; j++)
    {
      printf(" ");
    }
    //打印*
    for(j=0; j<2*i+1; j++)
    {
      printf("*");
    }
    printf("\n");
  }
 
 
  //打印下半部分
  for(i=0; i<line-1; i++)
  {
    //打印一行
    int j = 0;
    for(j=0; j<=i; j++)
    {
      printf(" ");
    }
    for(j=0; j<2*(line-1-i)-1; j++)
    {
      printf("*");
    }
    printf("\n");
  }
  return 0;
}

6、求出0~100000之间的所有“水仙花数”并输出。“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。 

/*
思路:
此题的关键在于只要知道判断一个数据是否为水仙花数的方式,问题就迎刃而解。假定给定一个数据data,具体检测方式如下:
1. 求取data是几位数
2. 获取data中每个位置上的数据,并对其进行立方求和
3. 对data中每个位上的数据立方求和完成后,在检测其结果是否与data相等即可,
相等:则为水仙花数
否则:不是
具体实现参考以下代码。
*/
#include <stdio.h>
#include <math.h>
 
int main()
{
  int i = 0;
  for(i=0; i<=99999; i++)
  {
    int count = 1;
    int tmp = i;
    int sum = 0;
    //判断i是否为水仙花数
    //1. 求判断数字的位数
    while(tmp/10)
    {
      count++;
      tmp = tmp/10;
    }
     
    //2. 计算每一位的次方和
    tmp = i;
    while(tmp)
    {
      sum += pow(tmp%10, count);
      tmp = tmp/10;
    }
     
    //3. 判断
    if(sum == i)
      printf("%d ", i);
  }
  return 0;
}

7、 求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222

/*
思路:
通过观察可以发现,该表达式的第i项中有i个a数字,因此:
假设第i项为temp,则第i+1项为temp*10+a
具体参考以下代码
*/
int main()
{
  int a = 0;
  int n = 0;
  int i = 0;
  int sum = 0;
  int tmp = 0;
 
 
  scanf("%d%d", &a, &n);
  for(i=0; i<n; i++)
  {
    tmp = tmp*10+a;
    sum += tmp;
  }
  printf("%d\n", sum);
 
  return 0;
}
目录
相关文章
|
18天前
|
C语言
C语言习题
该文主要讨论计算序列 Sn=a+aa+aaa+... 的问题,其中a是一个数字,最后一项包含n个a。对于n=1, 3, 7的情况,文章提供了两种分析方法。第一种方法通过观察得出 tₙ=tₙ∗10+2 和 Sₙ=Sₙ+tₙ,第二种方法利用公式 tₙ=2*(10^n−1)。每种方法都配合图像展示了计算过程和结果。最后,文章扩展到当a由键盘输入(a≤9)时如何求Sₙ,只需将a的初始值改为用户输入,并使用`scanf`函数读取。同样给出了示例结果。
20 0
TU^
|
22天前
|
C语言
C语言习题~day13
C语言习题
TU^
26 1
TU^
|
22天前
|
C语言
C语言习题~day12
C语言习题
TU^
26 2
|
8天前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
9 1
|
8天前
|
程序员 C语言 C++
C语言学习记录——动态内存习题(经典的笔试题)、C/C++中程序内存区域划分
C语言学习记录——动态内存习题(经典的笔试题)、C/C++中程序内存区域划分
9 0
|
8天前
|
C语言
C语言学习记录——操作符习题、算数转换习题,多解法&优解法&单选题
C语言学习记录——操作符习题、算数转换习题,多解法&优解法&单选题
10 1
|
18天前
|
C语言 C++
C语言习题2
这是一个关于求和的问题,涉及三个序列的计算:∑11001k!(k从1到100),∑150k2(k从1到50)和∑1101k(k从1到10)。由于k!可能溢出,建议使用t=t/i(t为double类型)的方式来避免。提供的C++代码示例中,使用for循环分别计算这三个序列,并将结果累加到变量sum中。最后,程序输出总和。附有代码执行结果的截图。
20 0
TU^
|
22天前
|
编译器 C语言
C语言习题~day18
C语言习题
TU^
19 1
TU^
|
22天前
|
存储 编译器 C语言
C语言习题~day17
C语言习题
TU^
9 1
TU^
|
22天前
|
C语言
C语言习题~day16
C语言习题
TU^
23 1