首页 > 编程语言 >衡庐浅析·C语言程序设计·第三章·三种基本结构之顺序结构

衡庐浅析·C语言程序设计·第三章·三种基本结构之顺序结构

时间:2024-07-14 11:31:24浏览次数:18  
标签:输出 函数 字符 int C语言 衡庐 printf 浅析 输入

       本文适用于大学的期中期末考试、专升本(专接本、专插本)考试、408等考研预科。如有相关题目疑问或建议欢迎在评论区进行互动。

       转载请标明出处。


在介绍C的三种基本结构之前,我们首先来逐字逐句的解析一些代码语句,以便更好地上手并学习接下来的内容。

此处介绍C的最经典代码案例:Hello world!

#include<stdio.h>  //编译预处理,程序包含头文件stdio.h
int main()  //定义一个整型类型的主函数main()
{
  printf("Hello world!");  //在屏幕上打印Hello world! 
  return 0;  //返回值,返回的状态码被用来表示函数执行的顺利与否(-1和0就是最常用的状态码)
}

在这段代码中,我们注意到一下几点:

编写C代码需要添加头文件以使用相应头文件所包含的函数

此代码中用到了printf库函数,故要编译包含printf所在的头文件stdio.h

定义一个整型类型的主函数main(),将其所包含的语句用花括号括起来

此处打印(输出)的语句为:printf("格式控制");

 C的每条语句必须以分号结尾

由void定义的函数,不需要return返回值,而其他定义的函数(如此处的int),则需要返回一个状态码,通常这个状态码为0或-1

C语言中注释语句有两种方式

//只能进行单行注释

/*可以进行多行注释*/

我们可以对他进行一些改动:

#include<stdio.h>
int main()
{
  int count = 0;  //定义一个整型计数器并赋初值,用于循环计数
  int maxOutputs = 2;  //定义循环的最大次数
  for (count = 0; count < maxOutputs; count++)  //循环结构
  {
    if (count == 0)  //选择结构:判断是否为第一次输出
    {
      printf("Welcome to C programming!\n");  //输出句尾的\n为换行符
    }
    printf("Hello world!\n");
  }  //使用顺序结构输出结束语
  printf("Goodbye!\n");
  return 0;
}

程序首先包含了stdio.h头文件,这是因为我们需要使用printf函数来输出文本到控制台

定义了两个整型变量countmaxOutputscount用于跟踪循环的次数,maxOutputs定义了 "Hello, World!" 需要被输出的次数

使用 for 循环作为循环结构,循环体将执行两次,由 count 从0开始,直到小于 maxOutputs

在循环体内,首先使用 if 语句作为选择结构来判断是否是第一次循环。如果是,就输出额外的欢迎信息

无论是否为第一次循环,都会执行printf("Hello, World!\n");来输出 "Hello, World!"

循环结束后,使用顺序结构输出结束语 "Goodbye!"

在这个代码中共用到了顺序、选择、循环三种结构,即C语言的三大基本结构。现在我们就来详细了解一下这一章的内容。

顺序结构

顺序结构是指程序按照代码的书写顺序从上到下依次执行,且每条语句必须执行并只执行一次。 接下来我们将从输入、输出语句中切实感受顺序结构的精髓所在。

输入语句

在第一章的学习中,我们提到了一个算法具备五种特点,且程序=数据结构+算法,故而程序同样具备其中的某些特点,如有零个或多个输入、一个或多个输出。

其中输入语句我们常常用以下句式来实现:

scanf("格式控制",地址表列);  //其目的是将键盘上输入的数据赋给指定的变量

内部的格式控制往往包含三个字符类型,即转换说明符,转义字符,普通字符。

转换说明符(允许程序员在执行输入和输出操作时指定期望的格式):

%d:用于输出或输入一个十进制的整数(int 类型)。

%i:与 %d 类似,用于输出或输入一个十进制的整数。

%u:用于输出或输入一个无符号十进制整数(unsigned int 类型)。

%o:用于输出或输入一个八进制整数(int 类型)。

%x:用于输出或输入一个十六进制整数(小写字母,int 类型)。

%X:用于输出或输入一个十六进制整数(大写字母,int 类型)。

%c:用于输出或输入一个字符(char 类型)。

%s:用于输出或输入一个字符串(char 数组或 char 指针)。

%f:用于输出或输入一个浮点数(float 或 double 类型)。

%e:用于输出或输入科学计数法格式的浮点数(float 或 double 类型)。

%E:与 %e 类似,但使用大写字母 'E' 表示指数。

%g:用于输出浮点数,根据数值的大小自动选择 %f 或 %e

%G:与 %g 类似,但使用大写字母 'E' 或 'e'。

%a:用于输出十六进制或八进制浮点数(C99标准引入)。

%A:与 %a 类似,但使用大写字母表示。

%n:不输出任何内容,但更新一个变量,表示到目前为止在输出中写入的字符数。

%%:输出一个百分号字符 %

 转义字符(用于表示那些在键盘上无法直接输入的控制字符,或需要特殊格式的输出):

\n - 换行符:将光标移动到下一行的开头。

\t - 制表符(水平):将光标移动到下一个水平制表位(tab位),通常是8个字符的位置。

\v - 垂直制表符:将光标移动到下一个垂直制表位。

\b - 退格符:光标后退一个位置,不常用。

\r - 回车符:将光标移动到当前行的开头。

\f - 换页符:相当于形式上的换页,类似于打印机的换页。

\a - 响铃符:在某些终端上产生响声。

\' - 单引号:用于在字符串中包含单引号字符。

\" - 双引号:用于在字符串中包含双引号字符。

\\ - 反斜杠:用于在字符串中表示一个反斜杠字符。

\? - 问号:在某些上下文中,如 printf 的格式字符串中,可以作为特殊字符使用。

\ooo - 八进制转义序列:以 \ 开头,后跟1到3个八进制数字(0-7),表示相应的ASCII字符。例如,\041 表示字符 'A'

\xhh - 十六进制转义序列:以 \x 开头,后跟两个十六进制数字,表示相应的ASCII字符。例如,\x41 表示字符 'A'

普通字符:除转换说明符、转义字符以外的字符,在printf函数输出时按原样输出。

值得注意的是,转换说明符在进行输入的格式控制时,还常常有以下几种用法:

%md:指定输入数据的宽度为m列。

%*md:输入项在读入后有m列不赋值给相应的变量。

以上只能用于整型、指定整型的变量。

其中m > 0:右对齐,即末位往左;m < 0:左对齐,即首位往右。

地址表列往往格式如此:&变量名1,&变量名2,……,&变量名n

除非变量是数组、指针、字符串,否则必须使用取地址符 & 。

在整型、实型之前可以加分隔符(空格、换行)。

对于字符型变量的输入,我们往往有三种方法,其一就是仍然用scanf函数来进行实现。

举个例子:

#include <stdio.h>
int main()
{
  char ch;
  printf("请输入一个字符: ");
  scanf("%c", &ch);
  printf("你输入的字符是: %c\n", ch);
  return 0;
}

需要注意的是,在字符型前不能加分隔符,在整型前可以加分隔符。 

第二种方法在初学阶段往往不常使用,即 fgets函数。

举个例子:

fgets函数可以读取一行字符串,我们利用其从这个字符串中提取第一个字符:

#include <stdio.h>
int main()
{
  char str[100];  //确保数组足够大以存储一行输入
  char ch;
  printf("请输入一个字符: ");
  if (fgets(str, sizeof(str), stdin))
  {
    ch = str[0];  //假设用户至少输入了一个字符
    printf("你输入的字符是: %c\n", ch);
  }
  return 0;
}

使用 fgets函数 时,需要提供一个字符数组来存储输入的字符串。函数的第二个参数是数组的大小,以防止缓冲区溢出。 fgets函数 会读取直到遇到换行符或达到最大字符数为止的输入,并包括换行符在内。 

通常,字符型变量有其自己的输入方法,即字符输入函数:

getchar();

使用时如下:

char ch;
ch = getchar();
printf("%c", ch);

可能有同学就会发现,为什么这里还用printf函数来输出呢,难道字符型变量没有自己的输出函数吗?当然有,但在介绍之前我们还是需要从printf函数开始说起。

输出语句

在C语言中,我们常常使用printf函数来进行某一数据的输出,和scanf函数一样都需要使用编译包含printf、scanf库函数所在的头文件stdio.h,即:

#include<stdio.h>

其printf函数的格式如下:

printf("格式控制",输出表列);  //其目的是向终端输出数据

输出语句的格式控制雷同于输入语句,这里不再赘述。

类似于输入语句,输出语句的转换说明符在进行输出的格式控制时,同样有以下几种用法:

%md:以宽度m列输出。

%m.ns:取字符串中左端的n个字符按m列输出。

%m.nf:以宽度m列,小数点后保留n位输出,m可以省略不写,省略时小数点前原样输出;

当m和n都省略不写时,小数点后输出六位,不足的自动补齐。

其中m > 0:右对齐,即末位往左;m < 0:左对齐,即首位往右。

举个例子:

#include <stdio.h>

int main()
{
  // 定义一些示例变量
  int integerVar = 123;
  int width = 10;
  float floatVar = 3.1415926;
  char charVar = 'A';
  double doubleVar = 1.6180339;
  char stringVar[] = "Hello, World!";
    
  // 普通整数输出
  printf("普通整数输出: %d\n", integerVar);
   
  // 带宽度的整数输出(宽度为10)
  printf("带宽度的整数输出: %10d\n", integerVar);
    
  // 右对齐的整数输出
  printf("右对齐的整数输出: %-10d\n", integerVar);
    
  // 浮点数输出,指定小数点后位数
  printf("浮点数输出: %.2f\n", floatVar);
    
  // 科学计数法输出浮点数
  printf("科学计数法输出: %.2e\n", floatVar);
   
  // 指定宽度和精度的浮点数输出
  printf("指定宽度和精度的浮点数输出: %10.3f\n", floatVar);
    
  // 双精度浮点数输出
  printf("双精度浮点数输出: %Lf\n", doubleVar);
    
  // 带前缀的八进制数输出
  printf("带前缀的八进制数输出: %#o\n", 17);
    
  // 带前缀的十六进制数输出
  printf("带前缀的十六进制数输出: %#x\n", 255);
    
  // 带前缀的十六进制数输出(大写)
  printf("带前缀的十六进制数输出(大写): %#X\n", 255);
    
  // 字符输出
  printf("字符输出: %c\n", charVar);
    
  // 字符串输出
  printf("字符串输出: %s\n", stringVar);
    
  // 使用%ld输出长整型,假设有long int longVar = 1234567890;
  // printf("长整型输出: %ld\n", longVar);
    
  // 使用%lu输出无符号长整型,假设有unsigned long int ulongVar = 1234567890;
  // printf("无符号长整型输出: %lu\n", ulongVar);
    
  // 使用%s输出日期,假设有struct tm *timeptr;
  // printf("日期输出: %s\n", asctime(timeptr));
    
  return 0;
}

其输出的结果为:

输出表列的格式为:输出项1,输出项2,……,输出项n

其中需要注意的是:

  • 输出项可以是常量、变量名、表达式
  • 说明符必须与输出项一一对应(类型需匹配)
  • 当输出项的个数大于与之对应的说明符时,舍弃多余的输出项

在输出函数中,同样存在字符输出函数,即:

putchar(输出项);

举个例子:

char ch = 'a';
putchar('B');  //输出字符常量B
putchar(ch);  //输出字符变量a
putchar(65+1);  //输出的表达式结果:B(B的ASCII码为66)

而以上三条语句其实就等价于:

printf("%c,%c,%C",'B',ch,65+1);

《衡庐浅析·C语言程序设计·第三章·三种基本结构之顺序结构》部分到这里就结束了,我会在后续章节编写一些题目或分享一些典型的例子以巩固所学的知识点。下一个知识点章节我们将会学习C语言中三种基本结构之选择结构的相关知识,敬请期待,也欢迎大家在评论区进行互动!

标签:输出,函数,字符,int,C语言,衡庐,printf,浅析,输入
From: https://blog.csdn.net/m0_68962556/article/details/140249060

相关文章

  • 求助大佬——期末考试评分标准(浙大)C语言
    最主要的问题是:1.不知道怎么控制输入的结束2.成绩部分既有可能是数字也有可能是汉字,那我该怎么写输入的函数呢浙大某年度期末考试的评分标准是这样的:总评成绩=考勤+作业x20%+阶段测试x25%+ 理论考试x35%+ 实验考试调整分数作业、阶段测试、理论考试是百分制。考......
  • C语言常见概念(划掉)我的C语言入门笔记(√)上
    本人菜鸟一枚,下述内容如有误差望各位斧正。1.什么是C语言C语言是一种计算机语言,就像汉语是一种人类语言一样。人们可以使用计算机语言给计算机下达指令,计算机会根据所接收到的指令进行工作(或者报错)。当然人类的语言不只汉语一种,计算机语言同样同样也有很多,例如Python/C++/C......
  • 数据结构,(动态)顺序表,C语言实现
    ——如果代码存在问题,请务必评论告诉我,感激不尽(#^.^#)——动态和静态的顺序表差别主要在于开辟内存的方式,动态顺序表中的数据所在内存是通过malloc函数实现的,这也意味着,动态顺序表可以更改存储数据的内存大小,其他的话基本没什么差别1.数据类型定义 structElemType想要建......
  • C语言中关键字volatile
     1:什么是volatile?    在C语言中,volatile关键字同样用于修饰变量,volatile告诉编译器该变量的值可能会在程序的控制之外被改变,因此编译器在优化代码时不能对该变量的访问进行优化,比如不能将其缓存到寄存器中,而是每次访问时都需要直接从内存中读取其值。2:变量的访问......
  • C语言——数组、sizeof关键字
    一、数组1.数组的引入与定义: C语言中的数组是一种基本的数据结构,用于在计算机内存中连续存储相同类型的数据。数组中的每个元素可以通过索引来访问,索引通常是一个整数,用于指定元素在数组中的位置。在C语言中,数组索引是从0开始的。 要使用数组,必须在程序中先定义数组,即通知......
  • C语言内存管理深度解析
    第一章基础概念梳理1.1堆与栈的区别在C语言中,堆和栈是两种重要的内存管理机制,它们之间存在显著的区别。首先,栈内存是由编译器自动分配和释放的,其操作方式类似于数据结构中的栈,遵循后进先出(LIFO)的原则。每当一个函数调用发生时,就会在栈上分配一块内存用于存储该函数的局部变......
  • C语言菜鸟学习(函数)
    引入C语言本身就是由多个函数模块组成,在C语言本身自带的头文件中,也有很多被封装好的函数,在初学C语言时,我们最先使用的就是使用printf()函数输出一个“helloworld”;而printf()函数就是被封装在#include<stdio.h>头文件中的。但是经过封装的函数我们无法看到源代码,在实际开发中......
  • C语言——练习:水仙花数、n次幂值的计算
    1.输入一个数判断是否是水仙花数,并输出100—999之间所有的水仙花数水仙花数(Narcissisticnumber),也被称为超完全数字不变数(pluperfectdigitalinvariant,PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrongnumber),是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和......
  • 在VSCODE中创建C语言环境,编译、运行、调试。
    1、安装MinGWMinGW-w64-for32and64bitWindowsdownload|SourceForge.net下载下来是一个压缩包对压缩包解压得到文件夹mingw64将文件夹mingw64剪切到C:\ProgramFiles目录下配置环境变量点击系统变量里面的Path将C:\ProgramFiles\mingw64\bin目录添加......
  • 【C语言】字符串与相关操作函数
    字符串思路分析在注释文章目录字符串一、字符串的定义1.使用sizeof()计算他们的长度二、sizeof和strlen的区别1.sizeof操作符2.strlen函数三、动态开辟字符串1.malloc函数2.realloc函数3.free函数4.memset函数四、几种字符串常用的API1.strncpy函数2.asse......