软件项目实训报告
gedit kate
C程序的开发执行次序:
1写源文件,后缀名.c
2对代码中的指令进行预处理,以#开头的
3代码编译,生成xx.o/xx.obj
4代码的连接生成可执行文件a.out/xx.exe
5加载文件,把文件从硬盘读入内存
6执行
gcc的选项:
-c只编译不连接
-E只作预处理
-S汇编代码
-std=c89/c99
返回值:dest数值(地址)。
使用:
char str1[20];
char str2[20];
strcpy(str1,str2);
strcpy(str1,"hello");
注意:strcpy不考虑第一个参数指向缓冲区大小。
char* strncpy(char* dest,const char* src,size_t size);
"abc"
"acb"
返回值有三种可能:
1 0相等
2正数s1>s2
3负数s1<s2
strncmp(...size_t n);
只比较前n个字符。
空指针:不指向任何地方
指针的赋值:
q = &i;
运算符:
*取对应地址上的内容。
const与指针:
(1) const int *q
: q指向的数据数值不能改变q本身可以改变。
(2) int * const q
: q本身不可以改变,q指向的数值是可以改变的。
数组名
(3) const int * const q
strcat:
char* strcat(char *dest,char* src);
作用:将src指向的字符串链接到dest指向的字符串结尾的地方
注意:不会考虑dest指向的缓冲区的大小。
char* strncat(char* dest,char* src,size_t size);
strlen:---->sizeof
四、实训内容
1.实训期间完成的学习任务
一.Linux系统操作命令
首先,我们学习了最基础的系统操作指令。因为在学习过程中c和c++代码的编程和修改在linux系统下,所以我们集中精力花费了3天时间学习指令操作。
命令:
文档统计:wc日期:date cal关机poweroff windows:shutdown
-o改变最后的可执行文件的名字
二.linu下c程序开发
库函数sqrt开平方#include <math.h>
连接的时候需要连接数学库gcc xxx.c -lm
举例:打印1-30之间不能被4整除的整数。
while循环
while(表达式)
{
语句;
}
int i = 1;
while(i<11)
{
printf("%d ",i++);
int function(int a[],int length,...)
const:
使用const修饰的变量,只读变量。
如果形式参数传递的是地址,不希望在被调函数中修改地址上的
内容可以使用const来修饰形参
void f(const int a[],int length);
return :
main函数中使用
整个程序结束。
递归:如果一个函数调用了它本身,递归函数。
指针的初级:
指针就是内存的地址,指针变量就是存储地址的变量。
定义一个指针变量:
数据类型*变量名;
指针变量所保存的地址--->内存上的数据类型。
* :告诉编译器后面的变量是一个指针变量
指针初始化:
int *q = NULL;//NULL 0 0.0
<2>如果函数没有返回值指定void
<3> C语言中返回值类型可以省略默认int
参数:形式参数
<1>多个形式参数之间使用逗号分割
<2>每个形式参数必须有类型的说明
float x,y,z;
float aver(float x,y)//错误
<1> C语言中没有bool类型
#include <stdbool.h>
yw yy p r R u : undo #G
底行命令模式:
set nu
set cindent:按照C语言的风格进行自动缩进。
set tabstop=4:设置tab按键的长度
行号+回车
字符串n N
/n个空格%s/string/replace/g
wq
指定初始化:
int a[5] = {[3] = 4};
二维数组:
数据类型数组名[行][列]
行下标列下标
for()
{
for()
a[i][j] = 0;
}
一维:
for()
{
a[i] = 0;
}
二维数组初始化:
int a[2][3] = {{},{}};
函数的返回值:
<1>函数返回值的类型必须和return返回值的类型一致。
while(1)
for(;;)
do-while循环:
do
{
语句;
}while(表达式);
缓冲区:
输入:
scanf(数据类型);
scanf("%*[^\n]");
* :将读取到的内容忽略掉
[^\n] :非\n的字符
scanf("%*c");
if(scanf()==0)
{
}
输出缓冲区:
<1> \n
<2>程序结束
bool true false
本质就是一个整数
<2> #include <math.h>
double sqrt(double);
gcc xxx.c -lm
<3>函数调用
函数名(实际参数);
形式参数和实际参数:参数名可以不一样
函数声明:
C语言规定:函数在使用之前必须声明。
声明:
函数头;
bool prime(int);
可以不写形式参数的名字。
隐式声明:
如果函数在使用之前并没有进行声明,编译器会自动创建
一个隐式声明,返回值类型为int
实际参数--->形式参数
值传递:拷贝一份数组赋值给形式参数。
float aver(float x,float y);
t = aver(i,j);
i--->x
j--->y
aver返回值--->t
字符串:string类型
三种表现形式:
(1)字面值常量“abcde”,不能作为变量,可以赋值给变量。
程序段(代码段)后面'\0'结束
数值相同的字面值常量在代码段只有一份。
(2)char arr[20]表示字符串类型的变量(数组)
后面一定加上'\0'
printf("%s",arr);--->arr是数组的名字
tee
ls -l | tee a.txt
ln硬连接软连接
ln file02 file ln -s file02 sfile
users:
who:
who am i:
whoami:
系统进程信息ps
ps u:详细方式显示当前终端下的进程的信息
ps -e:当前正在运行的所有进程
sleep 10&
kill PID
一直打印直到遇到'\0'
(3)int a[10];int* q=&a[0];
char str[20];char *q=&str[0];
指针方式存储字符串常量的地址。
考虑缓冲区的大小,可能会导致缓冲区溢出。
<3>fgets(char *s,size_t size,FILE* stream);
s:指向缓冲区的指针
jobs:查看任务
kill %n fg %n bg %n stop %n ctrl+c / z
man帮助手册
(1)系统命令
(2)系统调用open
(3)库函数fopen
(4) (5) (6) (7) (8)管理员的命令ifconfig service
ifconfig
ip地址:netmask:默认网关:
char name[20] = "hello";
sizeof(name)---->20:数组所占用的内存
int strlen(char* s);
strlen(name) = 5;
测量字符串的长度,不包含结尾的'\n'
strcmp:对比两个字符串
int strcmp(char* s1,char* s2)
<3>满4kb
<4>人工刷新
fflush(stdout);//stdin stderr
一维数组:
数据类型相同的一组数据。(结构体)数组的定义:
数据类型数组名[数组的长度];
char int float结构体
int a[5];
下标:
数组的初始化:
int a[5] = {1,2,3,4};
int a[5] = {0};
Reboot exit find grep find [目录列表]匹配标准-name size -type -atime
通配符
操作目录下有需要通配的内容的时候采使用通配符。