初级指针的系列题目

1字节=8bit
null,编号为0的内存地址不能取运算
即null内存地址不允许进行访问
null(悬空指针)用于判断一个指针变量是否可以取

操作系统有大端和小端之分

网络中用大端,我们用小端存储
大端:多字节数据,低地址存储高字节数据 高地址存储低字节数据0x12~0x78
小端:多字节数据,低地址存储低字节数据,高地址存储高字节数据  0x78~0x12

int num = 0x12345678;//十六进制0x
char *pc = (char *)&num // 强制类型转换,这个转化是因为一个num是int 一个是char
printf(%x,*pc);//%x是读取16进制的数字
pc =(char * ) & num;
printf(%x, * pc); //答案返回 78,因为类型是char,所以只取一个字节,即8个二进制位,即两个16进制位,但是因为我们的系统是小端的,所以去78而不是12
printf(%x, * (pc+1))	//返回56,因为+1相当于移位一个单位,该单位是char是一个字节,这是十六进制的,一个位数是4个二进制,一字节是8二进制位,所以两个位数。

数组元素的访问:
数组名直接就是地址,所以不用带&

int *p=arr
下面是取值的一系列写法
arr[i]
i[arr]
*(arr+i)
*(i+arr)
p[i]
i[p]
*(p+i)

作为函数的返回值类型(需要注意一些问题)

double avg(int *arr,int len){
	int sum=0;
	for(i=0;i<len;i++){
		sum += arr[i];
}
	return 1.0*sum/len;//因为函数类型是double,所以要*1.0
}
int main(){
	int arr[] ={1,9,3,2,4,8,6,10,12};
	pritnf(%g,avg(arr,sizeof(arr)/sizeof(arr[0]));
}//%g是根据结果自动选择科学记数法还是一般的小数记数法

//求数组元素的平均值,一般函数的返回结果只能有一个,
//如果要多个结果,则要指针参数
返回平均值,最大值,最小值
void func(int *arr,int len,double *avg,int *maxi,int *mini)
	if(avg==null || maxi == null || mini==null)//如果里面有空指针
		return;//直接中断函数的方法
	int sum =0;
	*maxi=0;//maxi的值设置为0,即arr[i]的i设为0,把0最作为初始最大值
	*mini=0;
	int i;
	for(i=0;i<len;i++){
		sum += arr[i];
		if(arr[i] > arr[*maxi]){
			*maxi = i;
		}
		if(min(arr[i]<arr[*mini]){
			*mini=i;
		}
	*avg = 1.0*sum/len
	}
}
int main(){
	double avg=0;
	int maxi=0;
	int mini=0;
	func(…)
	return 0;
}

需要注意的问题:

函数返回指针时,不能返回局部变量的地址(函数调用之后,该地址会被回收)
局部变量:在函数内部定义的变量 + 形参列表的元素
可以返回全局变量的地址,也可以返回堆内存地址
int *func(){//int* func();//func()函数返回的是一个int类型的指针
	int a = 10;
	printf(%p,&a);//但是在函数中不能返回局部变量的地址,当一个函数调用之后,该函数所用的内存会被回收,所以这种是错误的
	return &a;
}
void bar(){
	double d=3.14
	printf(%g,d)
}
int main(){
	int *p=func()
	printf(%p,p)
	print(%d,*p)
}

万能指针:void *p

指针即内存地址,即数值编号
int a = 10;
char *pc =&a//指针类型不兼容,所以会有强制转换(char *)&a
void *p = &a//万能指针  能够保存任意一个内存地址,这个方法就是不用管它是int,double等类型
	
但是万能指针不能取*,即不能取值。 
万能指针变量能够保存一个地址,但由于是void,所以失去了该地址的类型,所以不能取*

int a=*(int *)p;//所以只有通过强制类型转换以后才能用万能指针保存的地址查到值。

二级指针:

int a =10;
int *p=&a;
//指针变量p也是变量,所以他也有地址
printf(%p,&p)//会返回一个地址
二级指针是一级指针变量的内存地址
二级指针 int **pp = &p;//定义二级指针
printf(%p,&pp)//二级指针pp存储的是一级指针变量的地址
printf(%p,*pp)// pp =&p  *pp=*&p = p
printf(%p,p)//p=&a
所以这两个返回的都是a的地址
下面是都返回a的值:
	printf("%d",**pp)//**pp == *p = *&a ==a
	printf("%d",*p); 
	printf("%d",*&a);  
	printf("%d",a);

交换pa,pb的值,即交换地址

void swap(int **ppa,int **ppb){
	//交换  *ppa *ppb 的值
	int *pt = *ppa; //这个不是野指针,和一级指针的时候情况不同,*ppa是一个有用的内存地址,所以*pt保存的是一个地址
	*ppa=*ppb;
	*ppb = pt;
}
int main(){
	int a =10,b=20;
	int *pa=&a,*pb=&b;
	swap(&pa,&pb);//传递了pa,pb的地址,所以函数部分的形参是二级指针
}

字符串
本质:在c语言中,没有字符串这种基本数据类型,
定义:在内存中,一串连续且以’\0’为结尾标识的字符,称为字符串

‘\0’  ==  ascii 0 
字符串的表现形式:
字面值字符串  字符串字面值:
	用””引起来的一串字符  末尾默认有’\0’的存在
	这种不能修改字符串的字面值(即把hello改成Hello之类的),存储在代码区的
	“hello world”
字面值完全相同的字符串地址相同,即内存中只存储一份
连续的字面值字符串自动合并为一个字符串
printf(“%s”,"hello ""world")=“hello world”

printf(%c,"hello"[0])  //返回h
”hello”[0]=’h’ // 不能修改,这是错误的,字符串字面值只能读

字符数组

char str[10]={‘h’,…,’\0’};//不写’\0’系统自动给,单字符是' '(单引号)
char str[5] = {‘h’,’e’,’l’,’l’,’o’}  //这不是一个合法的字符串,没有’\0’的位置
但是不会显示语法错误,系统不会报错

字符数组要确保有足够的内存来存储’\0’,所以我们在设置数组来存储字符时,我们可以超量设置
即char[200]="hello",远超实际的长度,因为要有一个位置'\0'
存储在栈区,允许修改 str[0]=’h’

字符数组初始化

char str[10]="hello"这也是初始化的方法	
char s2[5]="hello";//这样编译时候会报错,和上面那种初始化有区别,数组长度不够,只能存5个字节,但是hello有6个字节(加上了'\0')
printf(%u,sizeof("hello"));   //返回6,因为连写的时候“hello”里面带了’\0’所以6字节
s2="world";//这样不行,会报错
上述两种方式,只能在定义时初始化,一旦定义后,就不能再对整体赋值

如果需要对字符串内存进行操作,一般都是用字符数组

字符指针 char*

字符指针变量不会保存字符串本身,只是保存字符串开始位置
既可以保存字面值字符串的首地址,也可以保存字符数组的首地址

char *p1=”hello world”;//字符指针指向,字面值字符串
printf(%s,p1)//就能输出hello world,%s是字符串的占位符
//字符串是连续的,所以指针只保存一个字符的地址,还是能输出一整个字符串
printf("%c",*p1)  //取值的话就只能取到一个字符  h,%c是字符的占位符

从某个内存地址开始输出字符,直至遇到'\0'结束,停止输出
从某个内存地址开始到'\0'看做一个字符串
*p1='h'还是不允许,因为只读,不能修改,这意味着p1指向代码区,即字面值

char s[] = “hello world”//字符数组
长度:12  最后还有一个'\0'
char *p1=s;//设置字符指针指向字符数组 s== &s[0] 第一个字符的地址
*p1='h';//这样就可以了,所以字符串数组是可以修改的,字面值是不能修改的

printf("%u",sizeof(‘a’) //4    ’a’ 相当于ascii运算即int类型运算 ,所以 4
char c=’a’;
printf("%u",sizeof(c));//返回1

sizeof(c+1);//4   c+1 是 int
sizeof(++c) //1  相当于 c =c+1 而左边是char,所以是1

char *p = ‘hello’ ;
printf("%u",sizeof(p)); //4   因为是指针

char str[10] =’hello’;
printf("%u",sizeof(str));  //str数组  所以是数组内存大小,10个char=10

char s[]=’hello’;
prinf("%u",sizeof(s));  //这个时候数组由字符串长度+'\0'决定,所以是6

char *s = "hello world"; //保存字符串首地址
while(*s != ’\0’){
	printf("%c",*s);
	s=s+1;//指针+1,偏移一个单位的内存 ,因为是char,所以1个
}//遍历字符串
//s上面遍历完后指向字符串末尾

s = "hello world";
for(int i=0;s[i]!=’\0’;i++){
	printf("%c" ,s[i]);   
}

strlen()函数//求字符串长度

#include<string.h>//使用strlen()函数
#include<assert.h>//使用assert()函数,用来判断是否是空指针

我们需要知道系统是如何实现 strlen函数的功能
size_t mystrlen(const char *s)//size_t就是unsigned int 
assert(s!=null);//宏函数,断言 s这个指针!=null
size_t len=0;
while(s[len])!=’\0’)
	++len;
//或者for(len=0;*(s+len) != '\0';len++);//没有循环体也行
//for(len=0;*s!=’\0’;s++,len++);//s++指针不断指向下一个字符的地址,
return len

char *p= "hello world"
char str[20] = "hello java"
char s[20] = {‘h’,’e’,’l’,’l’,’o’};
printf("%u",strlen(p));
printf("%u",strlen(str))
printf("%u",strlen(s));//strlen就是除去'\0'的一种字符串计数方法,sizeof()计数时会记上'\0'

char *p = "hello";
printf("%u",strlen(p));//这是5,不是按sizeof算指针数1

char str[10]="hello";
这个还是5,不是按sizeof(str)算数组长度char1*10

数组传到函数时,用strlen不会和前面学的一样因为传的是地址所以4,而是计算字符长度为5

sizeof与strlen的区别一定要搞清楚:
	sizeof是c语言的关键字,用于求变量或者类型数据的字节宽度
	strlen是c语言string.h头文件中的一个函数,用于计算字符串的长度

字符串拷贝

先要给一个字符串里赋值
char str1[10]="hello";   //’\0’后面的内存不需要进行拷贝
char str2[10]={};
需要把str1拷贝到str2
int i;
//只需要把’\0’拷贝到str2数组中,所以其实不需要10次
for(i=0;i<10;i++){
	str[2]=str1[i];
}
prinf("%s",str2) // hello

char str[3] ={}
char *p=strcpy(str3,str1)//实现字符拷贝,并且有返回值,指向str3的地址

把src字符串按字符拷贝到dest中 并且返回dest字符串

char *strcpy(char * dest,const char *src)
char *strncpy(char * dest,const char *src,size_t n)

char *mystrcpy(char *dest,const char *src){
assert(dest != null&&src!=null);//要先确定这个指针不是空指针,能用,即排除野指针
int i;
for(i=0;src[i]!=’\0’;i++){
	dest[i]=src[i]
	}
	dest[i]=’\0’; //确保dest字符串结束
	return dest;
}

字符串拷贝

#include <stdio.h>
#include <assert.h>

//dest 不是const  src是const原因
//把*src拷贝到*dest中,*dest需要修改 不能有const  *src不需要修改
char *mystrcpy(char *dest,const char *src){
	assert(dest!=NULL&&src!=NULL);
	int i;
	for(i=0;src[i]!='\0';i++){
		dest[i] = src[i];	
	}
	dest[i] = '\0';//确保dest字符串结束
	return dest;
}

char *mystrcpy1(char *dest,const char *src){
	assert(dest!=NULL&&src!=NULL);//排除野指针
	char *pdest = dest;//新建一个指针变量来保存初始的dest指针地址,方便主函数中调用,因为数组指针在函数中改变就是改变了。
	while(*src!='\0'){
		*dest = *src;
		++dest;//通过改变地址位来达到逐个拷贝
		++src;
	}
	*dest = '\0';
	return pdest;
}

char *mystrcpy2(char *dest,const char *src){
	assert(dest!=NULL&&src!=NULL);
	char *pdest = dest;
	while(*src!='\0'){
		*dest++ = *src++;//*dest=*src;dest++;src++;	
	}
	*dest = '\0';
	return pdest;
}

char *mystrcpy3(char *dest,const char *src){
	assert(dest!=NULL&&src!=NULL);	
	char *pdest = dest;
	while((*dest = *src)!='\0'){// *dest = *src    当*src == '\0'时  *dest== '\0',因为条件是!='\0',所以会停止循环,但是'\0'已经赋给了dest,所以最后不用确保字符串结束。
		++dest;
		++src;
	}
	return pdest;
}

char *mystrcpy4(char *dest,const char *src){
	assert(dest!=NULL&&src!=NULL);	
	char *pdest = dest;
	while((*dest++ = *src++) != '\0');
	return pdest;
}

int main(){
	char str1[] = "Hello world,Hello java!";
	char str2[100] = {};

	char *p = mystrcpy(str2,str1);//这就是函数为啥要return pdest。返回的首地址,在打印整个字符串时会用到。

	printf("%s\n",str2);
	printf("%s\n",p);//因为传了dest的首地址,字符串是连串,所以一个首地址就能打印出整个字符串。
	
	char str3[100] = {};
	p = mystrcpy4(str3,str1);
	printf("%s\n",p);
	printf("%s\n",str3);

	return 0;	
}

可选性字符串拷贝

#include <stdio.h>
#include <string.h>
#include <assert.h>

char *mystrncpy(char *dest,const char *src,size_t n){
	assert(dest!=NULL&&src!=NULL);	
	int i = 0;
	for(i=0;i<n&&src[i]!='\0';i++){
		dest[i] = src[i];	
	}
	//for(;i<n;i++){//src已经拷贝完了  一直拷贝'\0' 
	if(i<n){
		dest[i] = '\0';	
	}
	return dest;
}

char *mystrncpy1(char *dest,const char *src,size_t n){
	assert(dest!=NULL&&src!=NULL);
	char *pdest = dest;
	while(n>0&&*src!='\0'){
		--n;	
		*dest++ = *src++;
	}
	if(n>0)
		*dest = '\0';	
	return pdest;
}

char *mystrncpy2(char *dest,const char *src,size_t n){
	assert(dest!=NULL&&src!=NULL);
	char *pdest = dest;
	while(n>0 && (*dest++ = *src++)!='\0'){
		--n;	
	}
	return pdest;
}

char *mystrncpy3(char *dest,const char *src,size_t n){
	assert(dest!=NULL&&src!=NULL);
	char *pdest = dest;
	while(n-- > 0 && (*dest++ = *src++)!='\0');
	return pdest;
}

int main(){
	char str1[] = "Hello java,Hello c";

	char str2[100] = {};

	//需要从str1中拷贝10个字节到str2中
	mystrncpy3(str2,str1,10);

	printf("%s\n",str2);
	
	char str3[100] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
	mystrncpy3(str3,str1,10);//替换了前十个,即把Hello java拷贝到str3前10个
	printf("%s\n",str3);
	

	mystrncpy3(str2,str1,80);//如果拷贝个80,str1没有80个,则有多少拷多少,不会报错,即打印Hello java,Hello c
	printf("%s\n",str2);
	
	return 0;	
}

字符追加

#include <stdio.h>
#include <string.h>
#include <assert.h>

char *mystrcat1(char *dest,const char *src){
	assert(dest!=NULL && src!=NULL);//dest!=NULL && src!=NULL 
	//需要把字符串src接到dest后面
	int len = 0;
	while(dest[len]!='\0'){
		++len;	
	}
	int i;
	for(i=0;src[i]!='\0';i++){
		dest[len+i] = src[i];	
	}
	dest[len+i] = '\0';
	return dest;
}

char *mystrcat2(char *dest,const char *src){
	assert(dest!=NULL && src!=NULL);
	int len = 0;
	while(dest[len]!='\0'){
		++len;	
	}
	int i=0;
	while((dest[len+i] = src[i++])!='\0');
	return dest;
}

char *mystrcat3(char *dest,const char *src){
	assert(dest!=NULL && src!=NULL);
	char *pdest = dest;
	while(*dest != '\0'){
		++dest;	
	}//先遍历到最后一个地址
	while( (*dest = *src)!='\0'){
		++dest;
		++src;
	}
	return pdest;
}

char *mystrcat4(char *dest,const char *src){
	assert(dest!=NULL && src!=NULL);
	char *pdest = dest;
	while(*dest != '\0'){
		++dest;	
	}
	while((*dest++ = *src++) !='\0');
	return pdest;
}

char *mystrcat5(char *dest,const char *src){
	assert(dest!=NULL && src!=NULL);
	char *pdest = dest;
	while(*dest++ != '\0');//没有循环体   *dest == '\0' 结束循环 后++  dest = dest+1
	--dest;//为什么  后 判断之后再执行dest = dest+1
	while((*dest++ = *src++) != '\0');
	return pdest;
}

int main(){
	char str1[100] = "Hello";
	char str2[100] = " world";
	
	mystrcat5(str1,str2);

	printf("%s\n",str1);
	char str3[100] = ",Hello C";
	mystrcat5(str1,str3);

	printf("%s\n",str1);
	//mystrcat1(str1,NULL);
	//mystrcat1(NULL,str1);
	//mystrcat1(NULL,NULL);
	return 0;	
}

字符串可选性追加

#include <stdio.h>
#include <string.h>
#include <assert.h>


char *mystrncat1(char *dest,const char *src,size_t n){
	assert(dest!=NULL && src!=NULL);
	int len = 0;
	while(dest[len]!='\0'){
		++len;	
	}
	int i;
	for(i=0;i<n&&src[i]!='\0';i++){
		dest[len+i] = src[i];	
	}
	dest[len+i] = '\0';
	return dest;
}

char *mystrncat2(char *dest,const char *src,size_t n){
	assert(dest!=NULL && src!=NULL);
	char *pdest = dest;
	while(*dest != '\0'){
		++dest;	
	}
	while(n>0 && (*dest++ = *src++)!='\0'){//'\0'
		--n;	
	}
	*dest = '\0';//确保有'\0'
	return pdest;
}

char *mystrncat3(char *dest,const char *src,size_t n){
	assert(dest!=NULL && src!=NULL);
	char *pdest = dest;
	while(*dest != '\0'){
		++dest;	
	}
	while(n-->0 && (*dest++ = *src++)!='\0');
	*dest = '\0';
	return pdest;
}

int main(){
	char str1[100] = "Hello";
	char str2[100] = "world Hello c";

	mystrncat3(str1,str2,30);
	printf("%s\n",str1);


	mystrncat3(str1,str2,5);
	printf("%s\n",str1);
	

	char str4[100] = {'a','b','\0','x','x','x','x','x','x'};
	char str5[10] = "HHHH";
	mystrncat3(str4,str5,2);
	printf("%s\n",str4);	
	return 0;	
}

字符串比较
是一个一个比较,比较ascii码大小

#include <stdio.h>
#include <string.h>
#include <assert.h>
//返回负数表示s1<s2  0  s1==s2   正数 s1>s2
int mystrcmp1(const char *s1,const char *s2){
	assert(s1!=NULL&&s2!=NULL);
	while(*s1!='\0' && *s2!='\0' && *s1 == *s2){//两个字符串都没结束 而且在当前位置的字符一样
		++s1;
		++s2;
	}
	return *s1-*s2;//返回负数就是s2大,正数就是s1大,0就是一样大,不一样的字符处想着ASCII码值相减
/*	
	if(*s1 > *s2){
		return 1;	
	}else if(*s1 < *s2){
		return -1;	
	}
	return 0;
*/
}

int mystrcmp2(const char *s1,const char *s2){
	assert(s1!=NULL&&s2!=NULL);
	//while(*s1!='\0'&&*s2!='\0'&&*s1++==*s2++);//Error
	for(;*s1!='\0'&&*s2!='\0'&&*s1==*s2; ++s1,++s2);
	return *s1-*s2;
}


int main(){
	char *s1 = "Hello";
	char *s2 = "Hi";
	//-1  s1小于s2  0 s1==s2   1 s1>s2
	int res = mystrcmp2(s1,s2);
	printf("%d\n",res);
	
	res = mystrcmp2(s1,s1);
	printf("%d\n",res);
	

	res = mystrcmp2(s2,s1);
	printf("%d\n",res);
	//Hello world 
	//Hello java
	//ascii 'w' > 'j'
	res = mystrcmp2("Hello world","Hello java");
	printf("%d\n",res);//
	//Hello                   '\0'  0
	//Hello java              '  '  正数

	res = mystrcmp2("Hello","Hello java");
	printf("%d\n",res);

	
	res = mystrcmp2("He","Hi");//不是0
	printf("%d\n",res);

	return 0;	
}

字符串可选性比较

#include <stdio.h>
#include <string.h>
#include <assert.h>

int mystrncmp1(const char *s1,const char *s2,size_t n){
	assert(s1!=NULL && s2!=NULL);
	while(n>0 && *s1!='\0' && *s2!='\0' && *s1==*s2){
		--n;
		++s1;
		++s2;
	}
	if(n==0){//n个字节全部比较完了都相等 
		//return 0;一样的效果
		--s1;
		--s2;
	}
	return *s1-*s2;
}

int mystrncmp2(const char *s1,const char *s2,size_t n){
	assert(s1!=NULL && s2!=NULL&&n!=0);
	//如果前面n-1个字符都相等  最后一个字符不需要比较循环
	while(--n>0 && *s1!='\0' && *s2!='\0' && *s1==*s2){
		++s1;
		++s2;
	}
	return *s1-*s2;//0  负 正
}

int main(){
	int res = mystrncmp2("Hello","Hello java",5);
	printf("%d\n",res);//0
	
	res = mystrncmp2("Hello","Hello java",10);//-1
	printf("%d\n",res);
	
	res = mystrncmp2("Hello","Hellx a",5);
	printf("%d\n",res);

	return 0;	
}

东北农业大学网络教育学院 计算机应用基础网上作业题(一) 第一章计算机操作入门 一、选择 1.多窗口的切换可以通过以下哪种操作来完成?【 D 】 A.在任务栏上右击鼠标 B关闭当前活动窗口 C.按Alt + Shift键 D.按Alt +Tab键 2.下面哪种操作不能打开 【开始】菜单?【 A 】 A.按下Shift + Esc键 B按下Ctrl + Esc键 C单击【开始】按钮 D按下键 3.在Windows XP中,打开任何一个窗口的【系统控制】菜单的组合键是【 】。 A. Shift +Esc B. Alt + Shift C.Alt + Space D. Alt +Tab 4.桌面指的是Windows启动后的【 A 】。 A.整个屏幕区域 B.某个窗口 C. 非活动窗 D.主控窗口 5."任务栏"上显示的图标,表示【 A 】. A.正在运行的程序 B.硬盘中的程序 C.软盘中的程序 D.光盘中的程序 二、填空 1.在Windows XP中,打开【开始】菜单的组合键是 Ctrl + Esc 。 2.在Windows XP环境下,在窗口的上角,总是显示出3个命令按钮,这3个 按钮分别是最小化、最大化/还原和 关闭 。 3.在Windows XP中,关闭【系统控制】菜单可以按下Esc键或者 Alt 键。 三、判断 1.Windows XP中【注销Windows】对话框中有两个选项,分别是【切换用户】和【注销】。 2.关闭计算机时可以直接切断电源。 3.双击鼠标通常是指同时按下鼠标左键和右键。 4.【开始】菜单上的一些项目如带有向右的箭头,意味着这个项目还有第二级菜单。 5.快捷方式图标仅仅提供到所代表的程序或文件的链接。添加或删除该图标不会影响实 际的程序或文件。 四、简答 1.简述怎样改变窗口的大小。 一是移动鼠标到窗口上下左右边框上,当看到鼠标变成上下或左右双箭头时,按下鼠标 左键不要松开,然后拖动窗口边框到合适的地方放开鼠标左键。 二是移动鼠标到窗口任意一角当看到鼠标变成斜双箭头时,按下鼠标左键不要松开,然 后拖动鼠标到合适的地方放开左键。 三是利用控制菜单命令改变窗口大小。 2.常用的鼠标操作有哪些?移动鼠标和拖动鼠标有什么区别? 第二章 文件和文件夹的管理 一、选择 1.配合使用下面的哪个健可以选择多个连续的文件?【 C 】 A. Alt 键 B. Tab键 C. Shift键 C. Esc键 2.复制文件和粘贴文件使用的组合键分别是【 D 】。 A.shift +c , shift +v B. shift +v,Shift +c C.ctrl +v, ctrl +c D.ctrl +c, ctrl +v 3.关于文件名,下列哪个表述是错误的?【 B 】 A.文件名不能含有一下字符:\ / : * ? "<> " B.文件的名字不能是汉字 C.修改文件名的组合键是F12 D.文件的名字可以是汉字 4.可以使用下面的那个通配符来搜索名字相似的文件?【 】 A.# B.* C.% D.$ 5.打开【搜索】程序的组合键是【 】 A.ctrl +c B.ctrl +v C.ctrl +f D.ctrl +r 二、填空 1.在文件或文件夹的移动、复制或删除过程中的错误操作可以用 命令来恢复。 2.选定连续的多个文件夹或文件夹时,可以先按住 健,然后再单击想选择的首和尾文件或文件夹。 3.在【资源管理器】中,窗口图标的排列方式有:缩略图、平铺、图标、列表和 排列方式。 三、判断 1.通配符"*"表示代替文件名中任意长的一个字符串,"?"表示代替一个单个字符。 2.Delete键彻底删除文件,shift + delete键将文件删到回收站中。 3.文件名中可以包含 / \ : * ? " < > " 。 4.按下ctrl键拖动文件进行的是复制操作,按下shift键拖动文件进行的是移动操作。 5.回收站中的文件不占硬盘空间。 四、简答 1.如何给压缩文件夹设置密码? 2.简述3种删除文件的办法 第三章 磁盘与程序管理 一、选择 1.在DOS模式下对磁盘进行格式化的命令是【 】。 A.COPY B.DIR C.FORMAT D.DELTREE 2. Windows XP中的软盘格式化操作可以通过使用【 】来实现。 A.【格式】菜单 B.软盘操作快捷菜单 C.【工具】菜单 D.【控制面板】 3.关于硬件驱动程序的说法正确的是【 】。 A.Windows XP可以识别所有的硬件设备,因此不用安装驱动程序。 B.计算机中的硬件设备只有在正确地安装了驱动程序后,才能正常使用。 C.计算机中的硬件设备不需要驱动程序也可以正常使用。 D.Windows XP不带有任何硬件的驱动程序,因此所有的硬件设备要想正常使用都必须另外安装驱动 程序。 4.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值