人人范文网 范文大全

c语言第六次作业

发布时间:2020-03-02 10:43:52 来源:范文大全 收藏本文 下载本文 手机版

第六次作业:指针

(以下题目如无特殊声明,请使用指针技术实现,尽量不要使用数组作为形参,也尽量避免使用数组下标引用数组元素)

1.数组元素循环移位

有n个整数,使前面的各整数顺序向后移动m个位置,后面的m个整数则变成最前面的m个数。写一函数实现以上功能。

在主函数中输入n及n个整数,输入m (m

#include void main() { void inv(int *p,int n,int m); int n,m,a[20],*p; printf(\"please input n=\"); scanf(\"%d\",&n); printf(\"please input %d numbers:\",n); p=a; while(p

scanf(\"%d\",p++); printf(\"please input m=\"); scanf(\"%d\",&m); p=a; inv(a,n,m); printf(\"the new array:\\n\"); while(p

printf(\"%d \",*p++); putchar(\'\\n\'); } void inv(int *p,int n,int m) { int i; for(i=1;i

*(p+n-i+m)=*(p+n-i); for(i=0;i

*(p+i)=*(p+n+i); }

2.矩阵元素的排序

将一个5×5的整数型矩阵中各元素重新排序。排序规则为,矩阵元素按照从左到右,从上到下的顺序依次递增,即

要求编写一个函数实现上述排序功能。

在主函数中输入该矩阵,调用编写的上述函数,然后输出排序后的矩阵。

#include void main() { void inv(int (*x)[5]); int i,j,a[5][5]; int (*p)[5]; printf(\"please input an 5*5 array:\\n\"); p=a; for(i=0;i

for(j=0;j

scanf(\"%d\",*(p+i)+j); inv(p); printf(\"the new array:\\n\"); for(i=0;i

for(j=0;j

printf(\"%4d\",*(*(p+i)+j));

putchar(\'\\n\'); }

a0,0a0,1a0,2a0,3a0,4a1,0a1,1.......a4,4。 putchar(\'\\n\'); } void inv(int (*x)[5]) { int i,j,t; for(i=0;i

for(j=i+1;j

{

if(*(*x+i)>*(*x+j))

{t=*(*x+i);*(*x+i)=*(*x+j);*(*x+j)=t;}

} return; }

3.星期的查找

编写一个程序,输入一个1~7之间的整数,表示星期几,然后输出相应的文字。 例如:如用户输入3,则输出“星期三”。 要求:用指针数组的方法来实现。

#include void main() { int n; char (*p)[3]; char a[7][3]={\"一\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\"}; printf(\"please input n=\"); scanf(\"%d\",&n);

}p=a; printf(\"星期%s\\n\",p+n-1);

4.字符串库函数的实现

请使用指针的方法来实现如下的库函数:

Char * strncpy( char *s, char * t, int n)

//复制t的前n个字符至s Char * strncat( char *s, char * t, int n)

//连接t的前n个字符至s的末尾 int strncmp( char *s, char * t, int n)

//比较s和t的前n个字符 并请编写一个主函数来调用并测试自己编写的库函数。 #include #include char *strncpy(char *s,char *t,int n) { int i,length; length=strlen(s); for(i=0;i

*(s+i)=*(t+i); if(length

*(s+i+length)=*(t+i); *(s+length+n)=\'\\0\'; return(s); } int strncmp(char *s,char *t,int n) { int i; for(i=0;i

if(*(s+i)==*(t+i))continue;

else if(*(s+i)>*(t+i)){return(1);break;}

else {return(-1);break;} } } void main() { char a[20],b[20]; int n; scanf(\"%s%s%d\",a,b,&n); printf(\"%s\\n\",strncpy(a,b,n)); scanf(\"%s%s%d\",a,b,&n); printf(\"%s\\n\",strncat(a,b,n)); scanf(\"%s%s%d\",a,b,&n); printf(\"%d\\n\",strncmp(a,b,n)); }

5.算术练习程序(指针型函数)

一位小朋友正在学习两个100以内正整数的简单运算(加法、减法、乘法、除法),请编写一个程序来帮助他学习。

该程序调用一个GetRandomExpreion(),由它随机返回一个简单的表达式;然后程序提示用户输入表达式的计算结果,并判断答案是否正确。

#include #include #include int result=1;

void GetRanddomExpreion(int *num1,char *a,int *num2) { int n; srand(time(NULL)); *num1=rand()%100+1; *num2=rand()%100+1; n=rand()%4; switch(n) { case 0:{while(*num2>*num1) *num2=rand()%100+1;

result=(*num1)-(*num2);*a=\'-\';}break; case 1:{while((*num1+*num2)>100)*num2=rand()%100+1;

*a=\'+\';result=(*num1)+(*num2);}break; case 2:while((*num1*(*num2))>100)*num2=rand()%100+1;

*a=\'*\';result=(*num1)*(*num2);break; case 3:{while(*num1%*num2!=0)*num2=rand()%100+1;

result=(*num1)/(*num2);*a=\'/\';}break; } } int judge(int answer) { if(answer==result)return(1); else return(0); } void main() { int num1,num2; char a; int answer; while(result!=answer) { GetRanddomExpreion(&num1,&a,&num2); printf(\"please input the result expreion:\\n%d%c%d=\",num1,a,num2);

of the

}scanf(\"%d\",&answer); if(judge(answer)==1)printf(\"you are right!\"); else printf(\"sorry,it not the right answer.\\n\"); }

6.数组分区(指针作为函数参数)

本题由三个部分构成 (1) 编写一个函数CountEvensAndOdds,其功能是统计一个整型数组中奇数和偶数的个数。该函数有4个参数,整数型数组、数组的长度和两个指针(用于返回奇数、偶数的个数)

利用(1)中的CountEvensAndOdds函数,编写一个Partition函数,其功能是找出给定长度的一个整型数组中的所有奇数和偶数,并把它们分别保存在两个新的整型数组中(用C语言的库函数malloc函数动态创建),然后返回这两个新数组及其长度。该函数的参数有6个,整型数组、数组长度、奇数数组及其长度、偶数数组及其长度。

(3) 编写主函数,要求能够定义一个数组,并能够用随机数对该数组进行初始化,然后调用(2)中的函数Partition,将原始数组、奇数数组、偶数数组输出。 (2)

#include #include #include #include void CountEvensAndOdds(int *parr,int arr_len,int *even_count,int *odds_count) { int i; int count_even=0,count_odds=0; for (i=0;i

if ((*(parr+i)%2)==0)count_even++;

else count_odds++; } *even_count=count_even; *odds_count=count_odds; } void Partition(int *parr,int arr_len,int **even_arr,int *even_len,int **odds_arr,int *odds_len) { int even_count,odds_count,i,m=0,n=0; int count_even=0,count_odds=0; CountEvensAndOdds(parr,arr_len,&even_count,&odds_count); *even_arr=(int *)malloc(sizeof(int)*even_count); *odds_arr=(int *)malloc(sizeof(int)*odds_count); for (i=0;i

if((*(parr+i)%2)==0)

{*(*even_arr+m) = *(parr+i);m++;}

else

{*(*odds_arr+n) = *(parr+i);n++;} } *even_len=m; *odds_len=n; } void print_arr(int *parr,int arr_len) { int i; for(i=0;i

parr[i] = rand()%100;

}Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len); printf(\"arr:\\n\"); print_arr(parr,arr_len); printf(\"even_arr len=%d\\n\",even_len); printf(\"even_arr:\\n\"); print_arr(even_arr,even_len); printf(\"odds_arr len=%d\\n\",odds_len); printf(\"odds_arr:\\n\"); print_arr(odds_arr,odds_len);

7.字符串压缩(使用字符指针)

编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:

(1) 如果该字符是空格,则保留该字符。 (2) 如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符 (3) 否则删除该字符。

例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;字符r和e的第2次出现均被删除,因此最后的结果为: occurrence 。

#include #include #include void main() { char *p,str[50]={\'0\'}; int n,i,j=0,num[26]={0};

} gets(str); n=strlen(str); p=(char*)malloc(n*sizeof(char)); for(i=0;str[i]!=0;i++) { if(str[i]==\' \')*(p+j++)=str[i]; else {

if(num[str[i]-97]==0||num[str[i]-97]==2||num[str[i]-97]==5)

{

*(p+j++)=str[i];

num[str[i]-97]++;

}

else num[str[i]-97]++; } } for(i=0;i

8.字符查找(使用指针数组)

用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:输入”BA”,显示”BASIC”;输入”C”,显示”C”和”COBOL”。 #include #include void main() { char *a[6]={\"FORTRAN\",\"PASCAL\",\"BASIC\",\"C\",\"COBOL\",\"SMALLTALK\"}; char b[6],*p; int length,i,k; printf(\"please input some charactors:\"); scanf(\"%s\",b); length=strlen(b); for(i=0;i

for(p=b;p

{

if(*p==*a[i])k=i;

else {k=6;break;}

}

if(k==i)printf(\"%s\\n\",a[i]-length); } }

9.字符串排序(使用多级指针)

用指向指针的指针的方法对于输入的5个字符串进行排序并输出。(假设每个字符串最大长度不超过20)

//用指向指针的指针的方法对于输入的5个字符串进行排序并输出。 #include #include void sort(char *name[],int n) { char *temp; int i,j,k; for(i=0;i

k=i;

for(j=i+1;j

if(strcmp(name[k],name[j])>0)k=j;

if(k!=i){temp=name[i];name[i]=name[k];name[k]=temp;} } } void print(char *name[],int n) { int i; for(i=0;i

printf(\"%s\\n\",name[i]); } void main() { char *name[5]; char a[5][20]; int n=5,i; printf(\"please input five str:\\n\"); for(i=0;i

scanf(\"%s\",a[i]);

name[i]=*(a+i); } printf(\"\\nthe new str:\\n\"); sort(name,n); print(name,n); }

10.最长公共字串(提示使用strstr()库函数)

编写一个程序,求给定三个字符串的最长公共子串。 假设给定的三个字符串分别为:

What is local bus? Name some local bus.A Local bus is high speed I/O bus close to the proceor.#include #include int str_match(char *s1,char *s2,int len) { while(len>0) {

if(*s1!=*s2)return 0;

s1++;

s2++;

len--; } return 1; } void main() { int i,j,s,l,flag1,flag2; char str[3][60]={{\"what the local bus?\"},{\"Name some local bus.\"},{\"A Local bus is high speed I/O bus close to the proceor.\"}}; int len[3]; for(i=0;i

len[i]=strlen(str[i]); for(l=len[0];l>0;l--) {

for(s=0; s+l-1

{

flag1=1;

for(i=1;i

{

flag2 = 0;

for(j=0;j+l-1

{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}

if(!flag2){flag1=0;break;}

}

if(flag1)goto L;

} } L:printf(\"最长公共子串为:\");

for(i=0;i

printf(\"%c\",*(str[0]+s+i));

putchar(\'\\n\');

} //以下为选做题目 11.网络警察

作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。

程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。 程序的输出为在该句子中所找到的经过顺序调整的关键词。 例如输入:

guns mines miiles aameric ell snugs dan iimle ot sit neeemis 则输出为:

guns miiles #include #include int FindCode(char keyword[100], int string_num, char string[100]) { int k,letter1[26]={0},letter2[26]={0}; for(k=0;k

letter1[keyword[k]-97]++,letter2[string[k]-97]++; for(k=0;k

if(letter1[k]!=letter2[k])break;

if(k==26)return 1;

return 0; } void Part(char keyword[][100], char temp[100], int *Size) { char *p; int i=0,j;p=temp; while(*p!=\'\\0\') {

j=0;

while(*p!=\' \'&&*p!=\'\\0\')keyword[i][j++]=*(p++);

keyword[i++][j]=\'\\0\';

while(*p==\' \')p++; } *Size=i; } void main() { char keyword[100][100], string[100][100],temp[100]; int key_num,string_num; int i,j; gets(temp); Part(keyword,temp,&key_num); gets(temp); Part(string,temp,&string_num); for(i=0;i

for(j=0;j

if(FindCode(keyword[i],strlen(keyword[i]),string[j]))

printf(\"%s \",keyword[i]);

printf(\"\\n\"); }

12.动态三维数组

a、编写一个函数CreateGrid(int m, int n, int t),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。

b、另外编写一个FreeGrid函数,用来释放这个三维数组。 C、在主函数中

 输入三维数组的三个维度,调用CreateGrid()函数生成数组

 使用整数指针将1到m*m*t的整数依次赋值给该三维数组的每个元素  使用数组指针依次按每个n*t平面输出其中各个元素的值  调用FreeGrid()函数,释放空间 如,输入的三个维度依次为 2,3,4

#include #include #include int ***CreateGrid(int m, int n, int t) { int ***p=NULL;int i,j; p=(int ***)malloc(sizeof(int)*m); for(i=0;i

*(p+i)=(int**)malloc(sizeof(int)*n);

for(j=0;j

*(*(p+i)+j)=(int*)malloc(sizeof(int)*t); } return p; } void FreeGrid(int ***p,int m,int n,int t) { int i,j; if(p!=NULL) {

for(i=0;i

{

for(j=0;j

free(*(*(p+i)+j));

free(*(p+i));

}

free(p);

p=NULL; } } void main() { int ***p,m,n,t,i,j,k,s=1; scanf(\"%d,%d,%d\",&m,&n,&t); p=CreateGrid(m,n,t); for(i=0;i

for(j=0;j

{

for(k=0;k

{

*(*(*(p+i)+j)+k)=s;

s++;

}

} } for(i=0;i

printf(\"dimension %d:\\n\",i);

for(j=0;j

{

for(k=0;k

printf(\"%-3d\",*(*(*(p+i)+j)+k));

putchar(\'\\n\');

} } } FreeGrid(p,m,n,t);

C语言作业

C语言作业

C语言作业答案

C语言作业总结

c语言课程设计作业(推荐)

西工大C语言POJ作业

C语言作业实验报告[材料]

C语言程序设计大作业

大连理工大学c语言大作业

C语言程序设计课程作业_A资料

c语言第六次作业
《c语言第六次作业.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
相关范文推荐
点击下载本文文档