C语言于LINUX中使用的基础
shell(个人理解)
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
相关代码 作用
gcc .c文件 编译.c文件
gcc .c文件 -o 文件名 只编译并生成文件
C 命令行参数
执行程序时,可以从命令行传值给 C 程序。这些值被称为命令行参数,它们对程序很重要,特别是当您想从外部控制程序,而不是在代码内对这些值进行硬编码时,就显得尤为重要了。
命令行参数是使用 main() 函数参数来处理的,其中,argc 是指传入参数的个数,argv[] 是一个指针数组,指向传递给程序的每个参数。下面是一个简单的实例,检查命令行是否有提供参数,并根据参数执行相应的动作:
#include <stdio.h>
int main( int argc, char *argv[] )
{
if( argc == 2 )
{
printf("The argument supplied is %s\n", argv[1]);
}
else if( argc > 2 )
{
printf("Too many arguments supplied.\n");
}
else
{
printf("One argument expected.\n");
}}
使用一个参数,编译并执行上面的代码,它会产生下列结果:
$./a.out testing
The argument supplied is testing
使用两个参数,编译并执行上面的代码,它会产生下列结果:
$./a.out testing1 testing2
Too many arguments supplied.
不传任何参数,编译并执行上面的代码,它会产生下列结果:
$./a.outOne argument expected
应当指出的是,
argv[0]
存储程序的名称,
argv[1]
是一个指向第一个命令行参数的指针,*argv[n] 是最后一个参数。
如果没有提供任何参数,argc 将为 1,否则,如果传递了一个参数,
argc
将被设置为 2。
C 语言复习:
1、基本架构
#include<stdio.h> //头文件
int main() //函数主体
{
return 0;
}
终端操作
hqyj@ubuntu:~/desktop$ touch xx.c //创建.c文件
hqyj@ubuntu:~/desktop$ vi xx.c //编辑.c文件
hqyj@ubuntu:~/desktop$ gcc xx.c //编译文件
hqyj@ubuntu:~/desktop$ ls //会发现已经生成了 a.out 的c输出文件
1abc1.txt 1ac1.txt 22.txt a a.out a.txt xx.c
hqyj@ubuntu:~/desktop$ gcc xx.c -o test //生成test文件
hqyj@ubuntu:~$ ./a.out //输出编译结果
1、
数值数据
进制转换
二进制:用于机器语言和位运算中 1010
八进制:一般表示文件权限
十进制:常用进制 129
十六进制:地址表示
2、非数值数据。
'a','*','$'等
常用ASCII表转换统一非数值类数据与数值数据。
0 -->'\0'(字符0)
48 -->'0'(数字0)
65 -->'A'
97 -->'a'
被''括起来的叫字符
被""括起来的叫字符串,字符串以'\0'结尾
3、运算符
|
加法
|
|
减法
|
|
乘法
|
|
除法
|
|
取余
|
|
大于等于,小于等于
|
|
相等。用于比较两个数字,相同则返回 true。
|
|
不相等。用于比较两个数字,不相同则返回 true。
|
|
赋值a=2,a+=2,a-=2
|
|
逻辑运算与 或 非 短路法则:第一个表达式为真,则第二个表达式不会执行
|
|
位运算
|
|
求字节运算
|
|
自增 自减
|
4、常量
常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。
常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。
常量就像是常规的变量,只不过常量的值在定义后不能进行修改。
常量可以直接在代码中使用,也可以通过定义常量来使用。
整数常量 :
整数常量可以是十进制、八进制或十六进制的常量。
前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。
浮点常量:
浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。
当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者。
字符常量:
字符常量是括在单引号中,例如,'x' 可以存储在
char
类型的简单变量中。
转义序列
|
含义
|
\\
|
\ 字符
|
\'
|
' 字符
|
\"
|
" 字符
|
\?
|
? 字符
|
\a
|
警报铃声
|
\b
|
退格键
|
\f
|
换页符
|
\n
|
换行符
|
\r
|
回车
|
\t
|
水平制表符
|
\v
|
垂直制表符
|
\ooo
|
一到三位的八进制数
|
\xhh . . .
|
一个或多个数字的十六进制数
|
字符串型常量:
字符串字面值或常量是括在双引号 " " 中的。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。
您可以使用空格做分隔符,把一个很长的字符串常量进行分行。
5、变量
变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C 是大小写敏感的。基于前一章讲解的基本类型,有以下几种基本的变量类型:
变量命名规则:
1、只能以数字、字母下划线组成
2、不可以数字开头
3、不能和关键字重名
存储类型:auto自动存储,可以省略
register 寄存器存储,存储快,缺点是寄存器较少
局部变量
定义在模块内,在模块结束时被释放。
全局变量
定义在函数外部,全局有效,程序结束时被释放。
当局部变量与全局变量重名时,会使全局变量失效。
static静态存储
:(面试题)
1、修饰局部变量,会延长局部变量生命周期,可以在全局中使用。
2、修饰全局变量,限制作用域,只能在本文件中使用。
3、修饰函数,
限制作用域,只能在本文件中使用。
extern 外部调用存储。获取其他文件的变量调用。
unsigned :无符号数
signed :有符号数
常用变量类型:
类型
|
描述
|
长度
|
char
|
通常是一个字节(八位), 这是一个整数类型
。
|
1
|
int
short
long
|
整型,4 个字节,取值范围 -2147483648 到 2147483647。
短整型
长整型
|
4
2
8
|
float
|
单精度浮点值。单精度是这样的格式,1位符号,8位指数,23位小数。
![]() |
4
|
double
|
双精度浮点值。双精度是1位符号,11位指数,52位小数。
![]() |
8
|
void
|
表示类型的缺失。
|
0
|
类型转换:
隐式转换
1、低精度转换为高精度
2、有符号转换为无符号
强制转换:
强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。您可以使用
强制类型转换运算符
来把值显式地从一种类型转换为另一种类型,如下所示:
(type_name) expression
数据类型转换
对变量强制类型转换
字符常量的 ASCII 值可以通过强制类型转换转换为整数值。
实例
char myChar = 'a';
int myAsciiValue = (int) myChar; // 将 myChar 转换为 ASCII 值 97
请看下面的实例,使用强制类型转换运算符把一个整数变量除以另一个整数变量,得到一个浮点数:
实例
#include <stdio.h>
int main()
{
int sum = 17, count = 5;
double mean;
mean = (double) sum / count;
printf("Value of mean : %f\n", mean );
}
当上面的代码被编译和执行时,它会产生下列结果:
Value of mean : 3.400000
这里要注意的是强制类型转换运算符的优先级大于除法,因此 sum 的值首先被转换为 double 型,然后除以 count,
得到一个类型为 double 的值。
类型转换可以是隐式的,由编译器自动执行,也可以是显式的,通过使用强制类型转换运算符来指定。在编程时,有需要类型转换的时候都用上强制类型转换运算符,是一种良好的编程习惯。
示例:
int a=10; 存储类型 变量名 = 数值;
输入输出:
Printf ("%n",a)
scanf("%d",a)
格式输出函数:printf();
原样输出
printf("***");
n表示换行;
getchar
获取一个单个字符。
Putchar
输出单个字符。
示例
hqyj@ubuntu:~/desktop$ cat -n X.c
1 #include <stdio.h>
2
3 int main()
4 {
5 char a =getchar();
6 putchar('Q');
7 putchar(a);
8 putchar('\n');
9 return 0;
10 }
hqyj@ubuntu:~/desktop$ vi X.c
hqyj@ubuntu:~/desktop$ gcc X.c
hqyj@ubuntu:~/desktop$ ./a.out
o
Qo
代码示例:
要求:输入一个4位数,输出其各个位的数值。
hqyj@ubuntu:~$ vi a.c
hqyj@ubuntu:~$ gcc a.c
hqyj@ubuntu:~$ ./a.out
1300
个位=0
十位=0
百位=3
千位=1
hqyj@ubuntu:~$ cat -n a.c
1 #include<stdio.h>
2
3 int main()
4 {
5 int a=0;
6 scanf("%d",&a);
7 int b,c,d,e;
8 b=a%10;
9 c=a/10%10;
10 d=a/100%10;
11 e=a/1000;
12 printf("个位=%d\n",b);
13 printf("十位=%d\n",c);
14 printf("百位=%d\n",d);
15 printf("千位=%d\n",e);
16 return 0;
17 }
代码示例2;三角形输出
1 /*===============================================
2 *
3 *
4 * 文件名称:a.c
5 * 创 建 者:刘振鹏
6 * 创建日期:2023年07月14日
7 * 描 述:
8 ================================================*/
9 #include <stdio.h>
10
11 int main()
12 {
13 int i=1;
14 int a=0;
15 int b=0;
16 scanf("%d",&b);
17 for (i=1;i<b;i++)
18 {
19 for (a=0;a<2*i-1;a++)
20 {
21 printf("*");
22 if (a==2*i-2)
23 printf("\n");
24 }
25 }
26 return 0;
27 }
结果:
hqyj@ubuntu:~/desktop$ gcc a.c
hqyj@ubuntu:~/desktop$ ./a.out
5
*
***
*****
*******
控制语句
1、if 2、if(表达式)
if(a==0||a<1||a>1) {
{
xxxxxxxx; }
} else if(表达式)
else {
{
xxxxxxxx; }
} else
{
}
if() .....else......
if()......else if().....else.....
作业:
hqyj@ubuntu:~/desktop$ cat -n e.c
1 #include<stdio.h>
2
3 int main()
4 {
5 int a=0;
6 int b=0;
7 scanf("%d%d",&a,&b);
8 if(a>b?0:1)
9 {
10 printf("大者为%d\n",b);
11 }
12 else
13 {
14 printf("大者为:%d\n",a);
15 };
16
17 //2 利用强制转换实现字符转换
18 //char d = getchar();
19 printf("请输入一个字符:");
20 char x;
21 scanf("%s",&x);
22 if (97<(int)x)
23 {
24 printf("%c\n",x-32);
25 }
26 else if(65<(int)x&&(int)x<97)
27 {
28 printf("%c\n",x+32);
29 }
30 else if(48<(int)x&&(int)x<65)
31 {
32 printf("%d\n",x-48);
33 }
34 else
35 printf("请你输入题目要求内容\n");
36
37 //年
38 int year;
39 printf("请输入一个年份:");
40 scanf("%d",&year);
41 if((year%4==0&&year%100!=0)||(year%400==0))
42 printf("%d年是闰年.\n",year);
43 else
44 printf("%d年不是闰年.\n",year);
45 return 0;
46 }