华清学习2 --- C语言基础

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
  • &&  ||  !
逻辑运算与 或 非 短路法则:第一个表达式为真,则第二个表达式不会执行
  • &  |  ~
位运算
  • sizeof()
求字节运算
  • ++   --
自增 自减
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        }
  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值