C习题集7-17

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: C习题集7-17

7.小飞机


题目描述:


       KiKi学会了printf在屏幕输出信息,他想输出一架小飞机。请帮他编写程序输出这架小飞机。


输入描述:


输出描述:

     **     
     **     
************
************
    *  *     
    *  *


解析:


      本题只需要严格按照合适的去打印就行了,注意后面的*后边的空格可以不用打印。


代码:

#include<stdio.h>
int main()
{
  printf("     **\n");
  printf("     **\n");
  printf("************\n");
  printf("************\n");
  printf("    *  *\n");
  printf("    *  *\n");
  return 0;
}


8.十六进制转十进制


题目描述:


       Alan Walker写了一个十六进制整数ABCDEF,他问Tom对应的十进制整数是多少


输入描述:


输出描述:

十六进制整数ABCDEF对应的十进制整数,所占域宽为15
备注:printf可以使用格式控制串"%md"输出域宽为m的十进制整数


解析:


       本题考查的就是%d的格式控制域宽指定。


代码:

#include<stdio.h>
int main()
{
  /*
    数值仍然是该数值,只是表示方式不同
    例如: 15 - 十进制
    二级制表示  :1111
    八进制表示  :017
    十六进制表示:0XF
  */
  printf("%15d", 0XABCDEF);//       11259375 
  return 0;
}


9.printf函数的返回值


题目描述:


       Tom写了一个输出"hello world!"的程序,BoBo老师告诉他printf函数有返回值,你能帮他写个程序输出printf("hello world!")的返回值吗?


输入描述:


输出描述:

包括两行:
第一行为"hello world!".
第二行为printf("hello world!")调用后的返回值.


解析:


由上面的图我们可以看到printf函数的返回值类型是int类型,而且返回的是打印在屏幕上的字符的个数。本题的重点就是要严格要求按照题目要求的格式,输出2行,先打印字符串,在打印字符串的长度。


代码:

#include<stdio.h>
int main()
{
  int ret = printf("hello world!");//不可在hello world!加'\n',因为\
    //写法一               这样'\n'字符会使总字符个数增加
  //printf("\n");
  //printf("%d\n", ret);//12
    //写法二
  //printf("\n%d\n", ret);
    //写法三
    //本写法执行%d时候先要执行printf("hello world!");
  printf("\n%d\n", printf("hello world!"));
  return 0;
}
扩展 - 试试下面的代码的运行结果
#include<stdio.h>
int main()
{
  printf("%d", printf("%d", printf("%d", 43)));
  return 0;
}
结果是:4321


10.学生基本信息的输入输出


题目描述:


       依次输入一个学生的学号,以及3科(C语言,数据库,数据结构)成绩,在屏幕上输出该学生的学号,3科成绩。


输入描述:

学号以及3科成绩,学号和成绩之间用英文分号隔开,成绩之间用英文逗号隔开.
示例输入:20230001;80.845,90.55,100.00


输出描述:

学号,3科成绩,输出格式见示例.
输出示例:The each subject score of  NO.20230001 is 80.85,90.55,100.00.


解析:


       这个题目有个大坑也就是格式的指定,还有空格的控制,必须和题目要求的输出结果一致,比如of后面有2个空格。浮点数打印指定小数点的后面的2位数应用'.2f'表示。


代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
  int id = 0;
  float cScore = 0.0;
  float databaseScore = 0.0;
  float dataStructureScore = 0.0;
  //输入
  scanf("%d;%f,%f,%f",
    &id, &cScore, &databaseScore, &dataStructureScore);
  //输出 - .2 保留两位小数
  printf("The each subject score of  NO.%d is %.2f,%.2f,%.2f.", 
    id, cScore, databaseScore, dataStructureScore);
  return 0;
}


11.判断字母


题目描述:


       从键盘任意输入一个字符,编程判断是否是字母(包括大小写)


输入描述:

多组输入,每行输入包括一个字符.
示例输入:
        H
        9


输出描述:

针对每行的输入,输出该字母是字母(YES)和(NO).
示例输出:
        YES
        NO


解析:


       1.本题是多组输入,一定要注意循环输入的问题

       2.字母的判断可以自己写,也可以


代码:

#include<stdio.h>
#include<ctype.h>
int main()
{
  int ch = 0;
  while ((ch = getchar()) != EOF)
  {
    //判断并输出
    if (('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z'))
        //也可写成 if (isalpha(ch)) -  - 专门用来判断一个字符是不是字母
        //- 是 - 返回非0                                 
        //-不是 - 返回0
    { 
      printf("YES\n");
    }
    else
    {
      printf("NO\n");
    }
    getchar();//接受'\n'
  }
  return 0;
}


12.字符金字塔


题目描述:


       输入一个字符,用它构造一个三角形金字塔。


输入描述:

输入只有一行,一个字符
示例输入:
        *


输出描述:

该字符构成的三角形金字塔。
示例输出:
        *
       * *
      * * *
     * * * *
    * * * * *


解析:


       1.c语言规定变量必须定义在当前代码块的最前面。

       2.每一行的输出是前面空格,后边1。


代码:

#include<stdio.h>
int main()
{
  //输入一个字符
  char ch = 0;
  ch = getchar();
  //输出金字塔
  int i = 0;
  //每循环一次打印一行
  //每一行由两部分组成,空格和字符
  for (i = 0; i < 5; i++)
  {
    //空格
    int j = 0;
    for (j = 0; j < 5 - i - 1; j++)
    {
      printf(" ");
    }
    //字符
    for (j = 0; j < i+1; j++)
    {
      printf("%c ", ch);
    }
    printf("\n");
  }
  return 0;
}


13.ASCII码值


题目描述:


       字符常量或者字符变量表示的字符在内存中以ASCII码的形式存储。转换一下的ASCII码为对应的字符并输入他们。


73,32,99,97,110,32,100,111,32,105,116,33


输入描述:


输出描述:

转换输出题目中给出的所有ASCII对应的字符.


解析:


这里我们需要了解清楚ASCII编码,如果采用ASCII编码,每个字符都有一个对应的数字,这个数字被称为这个字符的ASCII码,如果把这个数字按照%c打印,打印的就是字符。


代码:

#include<stdio.h>
int main()
{
  char arr[] = { 73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116, 33 };
  //arr是数组,数组是用下标访问,下标从0开始
  int i = 0;
  for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
  {
    printf("%c",arr[i]);
    //打印结果是:I can do it!
  }
  return 0;
}


13.出生日期输入输出


题目描述:


       输入一个人的出生日期(包括年月日),将该生日中的年、月、日分别输出。


输入描述:

输入只有一行,出生日期,包括年月日,年月日之间的数字没有分隔符。
示例输入:20230403
备注:通过scanf函数的%m格式控制可以指定输入域宽,输入数据域宽(列数),
    按此宽度截取所需数据;通过printf函数的%0格式控制符,输出数值时指
    定左面不使用的空位置自动填0.


输出描述:

三行,第一行为出生年份,第二行为出生月份,第三行为出生日期。
输出时,如果月份或者天数为1位数,需要在1位数前面补0.
输出示例:
year=2023
month=04
day=03


解析:


       本题的难点在于如何按照指定的域宽读取数据,如何按照指定格式打印数据。


代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
  int year = 0;
  int month = 0;
  int day = 0;
  //按照格式输入
  scanf("%4d%2d%2d", &year, &month, &day);
  //输出
  printf("year=%4d\n", year);
  printf("month=%02d\n", month);
  printf("day=%02d\n", day);
  return 0;
}


13.2的n次方计算


题目描述:


       不使用累计乘法的基础上,通过移位运算符(<<)实现2的n次方计算。


输入描述:

多组输入,每一行输入整数n(0<=n<31)
示例输入:2 
         10


输出描述:

针对每组输入输出对应的2的n次方的结果
示例输出:4
         1024


解析:


       本题为多组输入,要使用循环输出。注意<<(左移操作符的使用,左移一位有乘2的效果)


代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
  int n = 0;
  //多组输入 - 整型
  while (scanf("%d", &n) != EOF)
  {
    //2的n次方计算
    printf("%d", 1 << n);
    printf("\n");
  }
  return 0;
}


14.按照格式输入并交换输出


题目描述:


       将两个整数,范围-231~231-1,交换两个数并交换。


输入描述:

输入只有一行,按照格式输入两个整数,范围-231~231-1,中间用","分隔.
示例输入:1,2


输出描述:

把两个整数按格式输出,中间用","分隔.
示例输出:a=2,b=1


解析:


       输入和输出格式的控制,如果格式控制串中有非格式字符则输入时也要输入该非格式字符。


代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
  int a = 0;
  int b = 0;
  int temp = 0;
  scanf("%d,%d", &a, &b);
  //交换
  temp = a;
  a = b;
  b = temp;
  printf("a=%d, b=%d", a, b);
  return 0;
}


15.字符转ASCII码值


题目描述:


       输入一个字符,输出该字符相应的ASCII码。


输入描述:

一行,一个字符
示例输入:c


输出描述:

一行,输出输入字符对应的ASCII码
示例输出:99


解析:


       直接按照%d打印,就是字符对应的ASCII码值。


代码:

#include<stdio.h>
int main()
{
  char ch = 0;
  //输入
  ch = getchar();
  printf("%d\n", ch);
  return 0;
}


16.计算机表达式的值


题目描述:


      计算表达式"(-8+22)*a-10+c/2",其中,a=40,c=212。


输入描述:


输出描述:

(-8+22)*a-10+c/2计算之后的结果,为一个整数。


解析:


       按照操作符的优先级直接设计表达式,计算输出就行


代码:

#include<stdio.h>
int main()
{
  int a = 40;
  int c = 212;
  printf("%d", (-8 + 22) * a - 10 + c / 2);//结果为656
  return 0;
}


17.计算带余除法


题目描述:


       给定两个整数a和b(-10,000<a,b<10,000),计算a除以b的整数商和余数。


输入描述:

一行,包括两个整数a和b,依次为被除数和除数(不为0),中间用空格隔开。
示例输入:15 2


输出描述:

一行,包括两个整数,依次为整数商和余数,中间用一个空格隔开。
示例输出:7 1


解析:


代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
  int a = 0;
  int b = 0;
  scanf("%d %d", &a, &b);
  //  / - 除法操作符  - 商
  //  % - 取模(取余)操作符 - 余数
  printf("%d %d", a / b, a % b);
  return 0;
}
相关文章
|
关系型数据库 vr&ar
下一篇
无影云桌面