第七次课上课程序及习题参考程序.docx

上传人:b****6 文档编号:6795884 上传时间:2023-01-10 格式:DOCX 页数:20 大小:71.69KB
下载 相关 举报
第七次课上课程序及习题参考程序.docx_第1页
第1页 / 共20页
第七次课上课程序及习题参考程序.docx_第2页
第2页 / 共20页
第七次课上课程序及习题参考程序.docx_第3页
第3页 / 共20页
第七次课上课程序及习题参考程序.docx_第4页
第4页 / 共20页
第七次课上课程序及习题参考程序.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

第七次课上课程序及习题参考程序.docx

《第七次课上课程序及习题参考程序.docx》由会员分享,可在线阅读,更多相关《第七次课上课程序及习题参考程序.docx(20页珍藏版)》请在冰豆网上搜索。

第七次课上课程序及习题参考程序.docx

第七次课上课程序及习题参考程序

第七次课上课程序

复习:

例1:

选择法排序:

#include

intmain(void)

{

intarr[10],i,j,temp,min;

printf("Pleaseinput10numbers:

\n");

for(i=0;I<10;i++)/*数组的输入*/

{

scanf("%d",&arr[i]);

}

for(i=0;i<10-1;i++)/*选择法从小到大排序*/

{

min=i;

for(j=i+1;j<10;j++)

{

if(arr[min]>arr[j])

{

min=j;

}

}

if(min!

=i)

{

temp=arr[i];

arr[i]=arr[min];

arr[min]=temp;

}

}

printf("Thesortednumbers:

\n");

for(i=0;i<10;i++)/*数组的输出*/

{

printf("%4d",arr[i]);

}

return0;

}

例2:

冒泡法排序

#include

intmain(void)

{

intarr[10,i,j,temp;

printf("Pleaseinput10numbers:

\n");

for(i=0;i<10;i++)/*数组的输入*/

{

scanf("%d",&arr[i]);

}

for(i=0;i<10-1;i++)/*冒泡法从小到大排序*/

{

for(j=0;j<10–i-1;j++)

{

if(arr[j]>arr[j+1])

{

temp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

}

}

}

printf("Thesortednumbers:

\n");

for(i=0;i<10;i++)/*数组的输出*/

{

printf("%4d",arr[i]);

}

return0;

}

函数独立:

记忆1:

理解并记忆例1和例2选择法、冒泡法函数的声明、调用、定义

例1:

选择法排序:

#include

voidselect_sort(intarr[],intn);/*选择法排序函数声明*/

intmain(void)

{

intarr[10],i;

printf("Pleaseinput10numbers:

\n");

for(i=0;i<10;i++)

{

scanf("%d",&arr[i]);

}

select_sort(arr,10);/*选择法排序函数调用*/

printf("Thesortednumbers:

\n");

for(i=0;i<10;i++)

{

printf("%4d",arr[i]);

}

printf("\n");

return0;

}

voidselect_sort(intarr[],intn)/*选择法排序函数定义*/

{

inti,j,min,temp;

for(i=0;i

{

min=i;

for(j=i+1;j

{

if(arr[min]>arr[j])

{

min=j;

}

}

if(min!

=i)

{

temp=arr[i];

arr[i]=arr[min];

arr[min]=temp;

}

}

}

例2:

冒泡法排序

#include

voidbubble_sort(intarr[],intn);/*冒泡法排序函数声明*/

intmain(void)

{

intarr[10],i;

printf("Pleaseinput10numbers:

\n");

for(i=0;i<10;i++)

{

scanf("%d",&arr[i]);

}

bubble_sort(arr,10);/*冒泡法排序函数调用*/

printf("Thesortednumbers:

\n");

for(i=0;i<10;i++)

{

printf("%4d",arr[i]);

}

printf("\n");

return0;

}

voidbubble_sort(intarr[],intn)/*冒泡法排序函数定义*/

{

inti,j,temp;

for(i=0;i

{

for(j=0;j

{

if(arr[j]>arr[j+1])

{

temp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

}

}

}

}

例3:

二维数组举例

58题码:

  章节:

数组  考查点:

键盘输入技巧的掌握和二维数组的应用  难度:

2

  编写一程序P2-216.C实现以下功能

  求任意的一个m×m矩阵的最大数及其所在的行列数,m(2<=m<=20)及矩阵元素从键盘输入(只考虑int型)。

编程可用素材:

printf("Please input m:

 ")...、printf("\nPlease input array:

\n")...、printf("\nmax=...,i=...,j=...\n"...。

  程序的运行效果应类似地如图1所示,图1中的5和

    1 45 67 235 464

    35 6 89 32342 8 

    347 9346 47 95 746

    46 785 436 19434 634

    3235 567 24 8465 25

  是从键盘输入的内容。

图1程序运行效果示例

分析结果:

输入:

m和arr[][]值

输出:

最大值max及其行标maxi和列标maxj

算法:

初值max=arr[0][0],maxi=0,maxj=0;将max与arr[][]数组中所有元素进行比较找出最大值并记下其行标和列标

#include

intmain(void)

{

/*定义变量*/

intarr[20][20];

inti,j,m,max,maxi,maxj;

/*输入数据*/

printf("Pleaseinputm:

");

scanf("%d",&m);

printf("\nPleaseinputarray:

\n");

for(i=0;i

{

for(j=0;j

{

scanf("%d",&arr[i][j]);

}

}

/*处理数据*/

max=arr[0][0];

maxi=0;

maxj=0;

for(i=0;i

{

for(j=0;j

{

if(max

{

max=arr[i][j];

maxi=i;

maxj=j;

}

}

}

/*输出数据*/

printf("\nmax=%d,i=%d,j=%d\n",max,maxi,maxj);

return0;

}

类似有59题(p2-217.c)、60题(p2-218.c)

例4:

顺序查找函数——有序表和无序表皆可

intsearch(inta[],intn,intx)

{

inti;

for(i=0;i

{

if(a[i]==x)

{

return(i);

}

}

return(-1);

}

例5:

折半查找函数——适用于有序表

intbinsearch(inta[],intn,intx)

{

intlow,high,mid;

low=0;

high=n-1;

while(low<=high)

{

mid=(high+low)/2;

if(x>a[mid])

{

low=mid+1;

}

elseif(x

{

high=mid-1;

}

else

{

return(mid);

}

}

return(-1);

}

记忆2:

排序+查找:

理解并记忆例6

例6:

输入10个数,从小到大排序,然后输入一个数,要求找出该数是数组中第几个(序号从1开始计算)元素:

#include

voidselect_sort(intarr[],intn);/*函数声明*/

intbinsearch(inta[],intn,intx);/*函数声明*/

intmain(void)

{

intarr[10],i,num,flag;

printf("Pleaseinput10numbers:

\n");

for(i=0;i<10;i++)

{

scanf("%d",&arr[i]);

}

select_sort(arr,10);/*函数调用*/

printf("Thesortednumbers:

\n");

for(i=0;i<10;i++)

{

printf("%4d",arr[i]);

}

printf("\n");

printf("inputthenumtolookfor:

\n");

scanf("%d",&num);

flag=binsearch(arr,10,num);/*函数调用*/

if(flag!

=-1)

{

printf("thepositionof%dis%d\n",num,flag+1);

}

else

{

printf("notfind!

\n");

}

return0;

}

voidselect_sort(intarr[],intn)/*函数定义*/

{

inti,j,min,temp;

for(i=0;i

{

min=i;

for(j=i+1;j

{

if(arr[min]>arr[j])

{

min=j;

}

}

if(min!

=i)

{

temp=arr[i];

arr[i]=arr[min];

arr[min]=temp;

}

}

}

intbinsearch(inta[],intn,intx)/*函数定义*/

{

intlow,high,mid;

low=0;

high=n-1;

while(low<=high)

{

mid=(high+low)/2;

if(x>a[mid])

{

low=mid+1;

}

elseif(x

{

high=mid-1;

}

else

{

return(mid);

}

}

return(-1);

}

字符串与字符数组

记忆3:

理解并记忆例7和例8一维字符数组和二维字符数组的输入和输出

例7_1:

一维字符数组逐个输入与输出,理解并记忆for中循环终止条件

#include

intmain(void)

{

inti;

charstr[80],ch;

printf("Inputastring:

");

for(i=0;(ch=(char)getchar())!

='\n';i++)/*字符串输入遇上‘\n’结束*/

{

str[i]=ch;

}

str[i]='\0';/*人为加上结束符*/

printf("outputastring:

");/*字符串输出遇上结束符‘\0’结束*/

for(i=0;str[i]!

='\0';i++)

{

putchar(str[i]);

}

printf("\n");

return0;

}

例7_2:

一维字符数组整体输入

使用scanf()和printf()——不能输入带空格字符串

使用gets()和puts()——可输入带空格的字符串

#include

intmain(void)

{

charstr[80];

printf("Inputastring:

");

gets(str);/*scanf("%s",str);*/

printf("Outputastring:

");

puts(str);/*printf("%s",str);*/

printf("\n");

return0;

}

例8:

二维字符数组的输入和输出

#include

intmain(void)

{

charstr[5][80];

printf("Inputastring:

");

for(i=0;i<5;i++)

{

gets(str);

}

printf("Outputastring:

");

for(i=0;i<5;i++)

{

puts(str);

}

printf("\n");

return0;

}

例9:

53题码:

 章节:

数组 考查点:

字符数组的处理,循环和判断 难度:

2

  编写一程序P2-220.C实现以下功能

  从键盘读入一行字符(约定:

字符数≤127字节),统计及输出其中的字母、数字、空格和其他符号的个数。

编程可用素材:

printf("Pleaseinputstring:

")...、printf("\nzimu=...,shuzi=...,kongge=...,qita=..."...。

  程序的运行效果应类似地如图1所示,图1中的gfaskl45623cvsac,53dwaflfaf32535是从键盘输入的内容。

#include

intmain(void)

{

charstr[128];

inti,zimu=0,shuzi=0,kongge=0,qita=0;

printf("Pleaseinputstring:

");

gets(str);

for(i=0;str[i]!

='\0';i++)

{

if(((str[i]>='a')&&(str[i]<='z'))||((str[i]>='A')&&(str[i]<='Z')))

{

zimu++;

}

elseif((str[i]>='0')&&(str[i]<='9'))

{

shuzi++;

}

elseif(str[i]=='')

{

kongge++;

}

else

{

qita++;

}

}

printf("\nzimu=%d,shuzi=%d,kongge=%d,qita=%d\n",zimu,shuzi,kongge,qita);

return0;

}

记忆4:

理解并记忆例10中二维字符数组的输入和输出及排序

例10:

95题码:

章节:

数组考查点:

排序算法,二维字符数组及字符串处理函数的应用难度:

3

  编写一程序P7-719.C实现以下功能

  从键盘上输入5个字符串(约定:

每个字符串中字符数≤80字节),对其进行升序排序并输出。

编程可用素材:

printf("Input5strings:

\n")...、printf("---------------------------\n")...。

  程序的运行效果应类似地如图1所示,图1中的

hello

my

friend

Areyouready?

help!

  是从键盘输入的内容。

#include

#include

voidsel_sort(chars[][81],intn);

intmain(void)

{

charstr[5][81];

inti;

printf("Input5strings:

\n");

for(i=0;i<5;i++)

{

gets(str[i]);

}

sel_sort(str,5);

printf("---------------------------\n");

for(i=0;i<5;i++)

{

puts(str[i]);

}

return0;

}

voidsel_sort(chars[][81],intn)

{

inti,j,min;

chartemp[81];

for(i=0;i

{

min=i;

for(j=i+1;j

{

if(strcmp(s[min],s[j])>0)

{

min=j;

}

}

if(min!

=i)

{

strcpy(temp,s[i]);

strcpy(s[i],s[min]);

strcpy(s[min],temp);

}

}

}

习题参考程序

习题7-5

P7-771.c

思路:

找到一个单词将其放在temp[128]数组中,并用count统计其长度,若count>maxlen,则将temp[128]中的暂存单词复制到max[128]中,并用maxlen(maxlen=count)记下该单词长度。

#include

#include

intmain(void)

{

charstr[128],temp[128],max[128];

inti,j=0,count=0,maxlen=0;

printf("pleaseinputastring:

\n");

gets(str);

for(i=0;str[i]!

='\0';i++)

{

if(str[i]!

='')

{

temp[j]=str[i];

j++;

count++;

}

elseif(j!

=0)/*处理单词和单词之间有多个空格*/

{

temp[j]='\0';

if(count>maxlen)

{

strcpy(max,temp);

maxlen=count;

}

j=0;

count=0;

}

}

if(count>maxlen)/*处理最后一个单词是最长单词*/

{

strcpy(max,temp);

maxlen=count;

}

printf("\nmax_lengthofthestringis:

%d\n",maxlen);

return0;

}

习题7-6

P7-705.c

#include

intmain(void)

{

charch;

printf("Pleaseinputtheletterofsomeday:

");

while((ch=(char)getchar())!

='Y')

{

switch(ch)

{

case'M':

printf("Monday\n");

break;

case'W':

printf("Wednesday\n");

break;

case'F':

printf("Friday\n");

break;

case'T':

ch=(char)getchar();

if(ch=='u')

{

printf("Tuesday\n");

}

elseif(ch=='h')

{

printf("Thrusday\n");

}

else

{

ungetc(ch,stdin);/*将ch中的字符还给stdin即键盘*/

printf("dataerror\n");

}

break;

case'S':

ch=(char)getchar();

if(ch=='a')

{

printf("Saturday\n");

}

elseif(ch=='u')

{

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1