一、现有文件test.c\test1.c\main.c , 请编写Makefile.
vi Makefile 创建
代码:
CC=gcc
EXE=who
OBJS=$(patsubst %.c,%.o,$(wildcard *.c))
FLAGS=-c -oall:$(EXE)$(EXE):$(OBJS)$(CC) $^ -o $@%.o:%.c$(CC) $(FLAGS) $@ $^.PHONY:cleanclean:@rm $(OBJS) $(EXE)
运行:
二、C编程实现:输入一个字符串,计算单词的个数
如:“this is a boy” 输出单词个数:4个
代码:
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
int word_number(char *p)
{int i=0,count=0;while(*(p+i))//外层循环控制到'\0'结束;{int j=i;while(*(p+j)!=' ' && *(p+j)!='\0')// 跳过单词到空格或\0结束;j++;if(*(p+j)==' ')// 记录单词中间空格的个数;count++;while(*(p+j)==' ')// 跳过空格j++;i=j;// 外层循环步长,即从下一个单词开始下一轮循环}return count+1;//单词个数等于中间空格个数加一
}
int main(int argc, const char *argv[])
{char str[20]="";printf("please enter the str:");gets(str);//gets可以获取终端输入含有空格的字符串;int count=word_number(str);封装函数计算个数printf("number of words is:%d\n",count);return 0;
}
运行:
三、在终端输入一个文件名,判断文件类型
代码:
#!/bin/bashread -p "please enter file:" fileif [ -b $file ]
thenecho dev
elif [ -c $file ]
thenecho char_dev
elif [ -d $file ]
thenecho dir
elif [ -L $file ]
then echo link
elif [ -S $file ]
thenecho socket
elif [ -p $file ]
thenecho pipe
elif [ -f $file ]
thenecho regular
elseecho error
fi
运行:
四、C编程实现字符串倒置:(注意 是倒置,而不是直接倒置输出)
如:原字符串为:char *str = “I am Chinese”
倒置后为:“Chinese am I”
附加要求:删除原本字符串中 多余的空格。
代码:
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
void Inversion(char *p)
{int k=strlen(p)-1;//计算字符串长度;int i=0;while(i<k)//整体逆置;{char t=*(p+i);*(p+i)=*(p+k);*(p+k)=t;i++;k--;}i=0;while(*(p+i))//外层循环控制到'\0'结束;{int j=i;while(*(p+j)!=' '&& *(p+j)!='\0') //找到单词后面的第一个空格或'\0';j++;k=j-1;//k为单词最后一个字母;while(i<k)//单词再逆置;{char t=*(p+i);*(p+i)=*(p+k);*(p+k)=t;i++;k--;}int z=j+1;//z为空格的后一个字符while(*(p+z)==' ') //如果z仍未空格 则将后续字符串整体前移{int x=z;while(*(p+x))//整体前移(等价于删除多余空格){*(p+x)=*(p+x+1);x++;}}i=z;//循环结束时即表示z的位置不为空格,将位置赋值给i;}
}
int main(int argc, const char *argv[])
{char str[]="I am Chinese";//定义字符串Inversion(str);//封装函数逆置单词并删除多余空格puts(str);//输出逆置后的字符串;return 0;
}
运行: