c语言第六次作业解析Word文档格式.docx
- 文档编号:16443990
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:24
- 大小:145.57KB
c语言第六次作业解析Word文档格式.docx
《c语言第六次作业解析Word文档格式.docx》由会员分享,可在线阅读,更多相关《c语言第六次作业解析Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
i<
=n;
i++)
*(p+n-i+m)=*(p+n-i);
for(i=0;
m;
*(p+i)=*(p+n+i);
2.矩阵元素的排序
将一个5×
5的整数型矩阵中各元素重新排序。
排序规则为,矩阵元素按照从左到右,从上到下的顺序依次递增,即
。
要求编写一个函数实现上述排序功能。
在主函数中输入该矩阵,调用编写的上述函数,然后输出排序后的矩阵。
voidinv(int(*x)[5]);
inti,j,a[5][5];
int(*p)[5];
pleaseinputan5*5array:
5;
for(j=0;
j<
j++)
scanf("
*(p+i)+j);
inv(p);
{
printf("
%4d"
*(*(p+i)+j));
putchar('
}
voidinv(int(*x)[5])
inti,j,t;
24;
for(j=i+1;
25;
{
if(*(*x+i)>
*(*x+j))
{t=*(*x+i);
*(*x+i)=*(*x+j);
*(*x+j)=t;
}
return;
3.星期的查找
编写一个程序,输入一个1~7之间的整数,表示星期几,然后输出相应的文字。
例如:
如用户输入3,则输出“星期三”。
要求:
用指针数组的方法来实现。
intn;
char(*p)[3];
chara[7][3]={"
一"
"
二"
三"
四"
五"
六"
七"
};
星期%s\n"
p+n-1);
4.字符串库函数的实现
请使用指针的方法来实现如下的库函数:
Char*strncpy(char*s,char*t,intn)//复制t的前n个字符至s
Char*strncat(char*s,char*t,intn)//连接t的前n个字符至s的末尾
intstrncmp(char*s,char*t,intn)//比较s和t的前n个字符
并请编写一个主函数来调用并测试自己编写的库函数。
string.h>
char*strncpy(char*s,char*t,intn)
inti,length;
length=strlen(s);
n;
*(s+i)=*(t+i);
if(length<
n)*(s+n)='
\0'
;
return(s);
char*strncat(char*s,char*t,intn)
*(s+i+length)=*(t+i);
*(s+length+n)='
intstrncmp(char*s,char*t,intn)
if(*(s+i)==*(t+i))continue;
elseif(*(s+i)>
*(t+i)){return
(1);
break;
else{return(-1);
chara[20],b[20];
%s%s%d"
a,b,&
%s\n"
strncpy(a,b,n));
strncat(a,b,n));
%d\n"
strncmp(a,b,n));
5.算术练习程序(指针型函数)
一位小朋友正在学习两个100以内正整数的简单运算(加法、减法、乘法、除法),请编写一个程序来帮助他学习。
该程序调用一个GetRandomExpression(),由它随机返回一个简单的表达式;
然后程序提示用户输入表达式的计算结果,并判断答案是否正确。
time.h>
stdlib.h>
intresult=1;
voidGetRanddomExpression(int*num1,char*a,int*num2)
srand(time(NULL));
*num1=rand()%100+1;
*num2=rand()%100+1;
n=rand()%4;
switch(n)
case0:
{while(*num2>
*num1)*num2=rand()%100+1;
result=(*num1)-(*num2);
*a='
-'
}break;
case1:
{while((*num1+*num2)>
100)*num2=rand()%100+1;
*a='
+'
result=(*num1)+(*num2);
case2:
while((*num1*(*num2))>
*'
result=(*num1)*(*num2);
case3:
{while(*num1%*num2!
=0)*num2=rand()%100+1;
result=(*num1)/(*num2);
/'
intjudge(intanswer)
if(answer==result)return
(1);
elsereturn(0);
intnum1,num2;
chara;
intanswer;
while(result!
=answer)
GetRanddomExpression(&
num1,&
a,&
num2);
pleaseinputtheresultoftheexpression:
\n%d%c%d="
num1,a,num2);
answer);
if(judge(answer)==1)printf("
youareright!
elseprintf("
sorry,itnottherightanswer.\n"
6.数组分区(指针作为函数参数)
本题由三个部分构成
(1)编写一个函数CountEvensAndOdds,其功能是统计一个整型数组中奇数和偶数的个数。
该函数有4个参数,整数型数组、数组的长度和两个指针(用于返回奇数、偶数的个数)
(2)利用
(1)中的CountEvensAndOdds函数,编写一个Partition函数,其功能是找出给定长度的一个整型数组中的所有奇数和偶数,并把它们分别保存在两个新的整型数组中(用C语言的库函数malloc函数动态创建),然后返回这两个新数组及其长度。
该函数的参数有6个,整型数组、数组长度、奇数数组及其长度、偶数数组及其长度。
(3)编写主函数,要求能够定义一个数组,并能够用随机数对该数组进行初始化,然后调用
(2)中的函数Partition,将原始数组、奇数数组、偶数数组输出。
#include<
malloc.h>
voidCountEvensAndOdds(int*parr,intarr_len,int*even_count,int*odds_count)
intcount_even=0,count_odds=0;
for(i=0;
arr_len;
i++)
if((*(parr+i)%2)==0)count_even++;
elsecount_odds++;
*even_count=count_even;
*odds_count=count_odds;
voidPartition(int*parr,intarr_len,int**even_arr,int*even_len,int**odds_arr,int*odds_len)
inteven_count,odds_count,i,m=0,n=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);
if((*(parr+i)%2)==0)
{*(*even_arr+m)=*(parr+i);
m++;
else
{*(*odds_arr+n)=*(parr+i);
n++;
*even_len=m;
*odds_len=n;
voidprint_arr(int*parr,intarr_len)
{printf("
%-3d"
*(parr+i));
if((i+1)%10==0)printf("
int*parr,arr_len,i,*even_arr,even_len,*odds_arr,odds_len;
arr_len=rand()%50;
parr=(int*)malloc(sizeof(int)*arr_len);
arr_len=%d\n"
arr_len);
parr[i]=rand()%100;
Partition(parr,arr_len,&
even_arr,&
even_len,&
odds_arr,&
odds_len);
arr:
print_arr(parr,arr_len);
even_arrlen=%d\n"
even_len);
even_arr:
print_arr(even_arr,even_len);
odds_arrlen=%d\n"
odds_len);
odds_arr:
print_arr(odds_arr,odds_len);
7.字符串压缩(使用字符指针)
编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:
(1)如果该字符是空格,则保留该字符。
(2)如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符
(3)否则删除该字符。
例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;
字符r和e的第2次出现均被删除,因此最后的结果为:
occurrence。
char*p,str[50]={'
0'
intn,i,j=0,num[26]={0};
gets(str);
n=strlen(str);
p=(char*)malloc(n*sizeof(char));
str[i]!
=0;
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]++;
}
elsenum[str[i]-97]++;
j;
%c"
*(p+i));
}
8.字符查找(使用指针数组)
用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:
输入”BA”,显示”BASIC”;
输入”C”,显示”C”和”COBOL”。
char*a[6]={"
FORTRAN"
PASCAL"
BASIC"
C"
COBOL"
SMALLTALK"
charb[6],*p;
intlength,i,k;
pleaseinputsomecharactors:
%s"
b);
length=strlen(b);
6;
for(p=b;
p<
b+length;
p++,a[i]++)
if(*p==*a[i])k=i;
else{k=6;
if(k==i)printf("
a[i]-length);
9.字符串排序(使用多级指针)
用指向指针的指针的方法对于输入的5个字符串进行排序并输出。
(假设每个字符串最大长度不超过20)
//用指向指针的指针的方法对于输入的5个字符串进行排序并输出。
voidsort(char*name[],intn)
char*temp;
inti,j,k;
n-1;
k=i;
if(strcmp(name[k],name[j])>
0)k=j;
if(k!
=i){temp=name[i];
name[i]=name[k];
name[k]=temp;
voidprint(char*name[],intn)
name[i]);
char*name[5];
chara[5][20];
intn=5,i;
pleaseinputfivestr:
a[i]);
name[i]=*(a+i);
\nthenewstr:
sort(name,n);
print(name,n);
10.最长公共字串(提示使用strstr()库函数)
编写一个程序,求给定三个字符串的最长公共子串。
假设给定的三个字符串分别为:
Whatislocalbus?
Namesomelocalbus.
ALocalbusishighspeedI/Obusclosetotheprocessor.
intstr_match(char*s1,char*s2,intlen)
while(len>
0)
if(*s1!
=*s2)return0;
s1++;
s2++;
len--;
return1;
inti,j,s,l,flag1,flag2;
charstr[3][60]={{"
whatthelocalbus?
},{"
Namesomelocalbus."
ALocalbusishighspeedI/Obusclosetotheprocessor."
}};
intlen[3];
3;
len[i]=strlen(str[i]);
for(l=len[0];
l>
0;
l--)
for(s=0;
s+l-1<
len[0];
s++)
flag1=1;
for(i=1;
flag2=0;
for(j=0;
j+l-1<
len[i];
{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;
}}
if(!
flag2){flag1=0;
if(flag1)gotoL;
L:
printf("
最长公共子串为:
for(i=0;
l;
*(str[0]+s+i));
//以下为选做题目
11.网络警察
作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。
不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。
请编写一个程序,发现这种调整过顺序的关键词。
程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。
程序的输出为在该句子中所找到的经过顺序调整的关键词。
例如输入:
gunsminesmissiles
aamericssellsnugsdaniimsssleotsitneeemis
则输出为:
gunsmissiles
intFindCode(charkeyword[100],intstring_num,charstring[100])
intk,letter1[26]={0},letter2[26]={0};
for(k=0;
k<
string_num;
k++)
letter1[keyword[k]-97]++,letter2[string[k]-97]++;
26;
if(letter1[k]!
=letter2[k])break;
if(k==26)return1;
return0;
voidPart(charkeyword[][100],chartemp[100],int*Size)
char*p;
inti=0,j;
p=temp;
while(*p!
='
)
j=0;
while(*p!
&
*p!
)keyword[i][j++]=*(p++);
keyword[i++][j]='
while(*p=='
)p++;
*Size=i;
charkeyword[100][100],string[100][100],temp[100];
intkey_num,string_num;
inti,j;
gets(temp);
Part(keyword,temp,&
key_num);
Part(string,temp,&
string_num);
key_num;
if(FindCode(keyword[i],strlen(keyword[i]),string[j]))
printf("
%s"
keyword[i]);
12.动态三维数组
a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。
要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。
b、另外编写一个FreeGrid函数,用来释放这个三维数组。
C、在主函数中
●
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 第六 作业 解析
![提示](https://static.bdocx.com/images/bang_tan.gif)