c语言第六次作业_c语言第六次作业解析

2020-02-27 其他范文 下载本文

c语言第六次作业由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言第六次作业解析”。

第六次作业:指针

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

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(“星期%sn”,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)='';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(“%sn”,strncpy(a,b,n));scanf(“%s%s%d”,a,b,&n);printf(“%sn”,strncat(a,b,n));scanf(“%s%s%d”,a,b,&n);printf(“%dn”,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=%dn”,even_len);printf(“even_arr:n”);print_arr(even_arr,even_len);printf(“odds_arr len=%dn”,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(“%sn”,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(“%sn”,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!=''){

j=0;

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

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

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语言第六次作业.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
c语言第六次作业
点击下载文档
相关专题 c语言第六次作业解析 作业 第六次 语言 c语言第六次作业解析 作业 第六次 语言
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文