C语言程序设计 答案 ch09 自定义数据类型_第1页
C语言程序设计 答案 ch09 自定义数据类型_第2页
C语言程序设计 答案 ch09 自定义数据类型_第3页
C语言程序设计 答案 ch09 自定义数据类型_第4页
C语言程序设计 答案 ch09 自定义数据类型_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章自定义数据类型

一、选择题

1-5BAABB

6-10ABCAC

11-15CDDBD

16-20BBCBB

二、填空题

1.structnode*link

2.finclude<stdio.h>structlist

{chardata;

structlist

3.p=(structaa*)malloc(sizeof(structaa>);

4.34

5.6

6.24

7.4,8

8.266

9.301,100,11

10.10,x

三、编程题

1.输入3个整数,按日小到大的顺序输出。

#include<stdio.h>

voidsort(int*a,int*b,int*c)

inttemp;

if(*a>*b)

temp=*a;

*a=*b;

*b=temp;

)

if(*a>

temp=*a;

*a=*c;

*c=temp;

)

if(*b>*c)

(

temp=*b;

*b-*c;

*c=temp;

)

}

intmain()

(

inta,b,c;

printf("请输入三个整数:\n");

scanfC%d%d%d",如,&b,&c);

sort(&a,&b,&c);

printf("由小到大的顺序输出:\n");

printf(z,%d%d%d\nv,a,b,c);

return0;

)

2.已知一个整型数组x[4],它的各元素值分别为3、118和2使用指针表示法

编写程序,求该数组各元素之积。

#include<stdio.h>

intmainO

{

intx[4]={3,11812};

int*p=x;//指向数组首元素的指针

intproduct=1;

for(inti=0;i<3;i++)

{

product*=*(p+i);//使用指针进行数组访问

)

printf(“数组各元素之积为:%d\n",product);

return0;

)

3.输入10个整数,将其中最小的数与第一个数交换,把最大的数与最后一个数

交换。

#include<stdio.h>

voidswap(int*a,int*b)

(

inttemp=*a;

*a=*b;

*b=temp;

)

intmainO

(

intarr[10];

printf("请输入十个整数:\n");

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

{

scanf(飞id”,&arr[i]);

)

//找出最小数的下标

intminindex=0;

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

{

if(arr[i]<arr[minindex])

(

minindex=i;

)

)

//找出最大数的下标

intmaxindex=0;

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

{

if(arrLiJ>arr[maxIndexJ)

(

maxindex=i;

)

)

//交换最小数和第一个数

swap(&arr[0],&arr[minlndox]);

//交换最大数和最后一个数

swap(&arr[9],&arr[maxIndex]);

printf("交换后的数组为:\n〃);

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

{

printfC*%d”,arr[i]);

)

printfCAn*);

return0;

)

4.将n个数按输入顺序逆序排列。

ttinclude<stdio.h>

voidreverseArray(intarr[],intn)

(

intstart=0;

intend=n-1;

while(start<end)

{

inttemp=arr[start];

arr[start]=arr[end];

arr[end]=temp;

start++;

end一;

)

}

intmain()

(

intn;

printf("请输入数字的个数:\nO;

scanf(飞d",&n);

intarr[n];

printf(〃请输入数字:\n〃);

for(inti=0;i<n;i++)

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

}

reverseArray(arr,n);

printf("逆序排列后例数组为:\n");

for(inti=0;i<n;i++)

{

printf(,,%d”,arr[i]);

)

printf("An");

return0;

)

5.要求从键为y4][4]数组输入数据,使用一维数指针变量输入/输出数元素,并

且分别求出主、次对角线元素之和。

ttinclude<stdio.h>

intmainO

(

inty[4][4]:

int*p=&y[0][0];//一维数指针变量指向二维数组的首元素

printf("请输入4x4的二维数组y的元素:\n");

for(inti=0;i<4;i++)

{

for(intj=0;j<4;j++)

(

scanf("%d1p+i*4+j);〃使用指针访问二维数组的元素

}

)

//计算主对角线元素之和

intprimarySum=0;

for(inti=0;i<4;i++)

(

primarySum+=*(p+i*4+i);

)

//计算次对角线元素之和

intsecondarySuni=0;

for(inti=0;i<4;i++)

secondarySum+=*(p+i*4+(3-i));

}

prinlf(“主对角线元素之和:%d\n,z,primarySum);

printf("次对角线元素之和:%d\n,,»secondarySum);

return0;

}

6.编写一个程序,将一个字符串插入另一个字符串的指定位置。

ttinclude<stdio.h>

#include<string.h>

voidinsertString(char*strl,char*str2,intpos)

(

intlenl=strlen(strl);//获取字符串1的长度

intlen2=strlen(str2);//获取字符串2的长度

if(pos<0||pos>lenl)//检查插入位置是否合法

{

printf(〃插入位置不合法!\n");

return;

)

intnewSize=lenl+len2;//计算插入后的新长度

charnewString[newSize+1];//创建新字符串,+1是为了留出字符串结束符的位

//将字符串1的前pos个字符复制到新字符串中

strncpy(newString,strl,pos);

//将字符串2堂制到新字符串中

strncpy(newString+pos,str2,len2);

//将字符串1的剩余部分复制到新字符串中

strncpy(newString+pos+len2,strl+pos,lenl-pos);

newString[newSize]='\0';//添加字符串结束符

printf("插入后的字符串:%s\n,z,newString);

)

intmainO

charstrl[100]:

charstr2[50];

intpos;

printf(“请输入字符串1:\n");

fgets(strl,sizeof(strl),stdin);

strl[strcspn(strl,*\n*)]='\0';//去除字符串1中的换行符

printf(〃请输入字符串2:\n〃);

fgets(str2,sizcof(str2),stdin);

str2[strcspn(str2,*\n*)]=>\0*;//去除字符串2中的换行符

printf(〃请输入插入位置:\n〃);

scanf(飞d”,&pos);

insertString(strl,str2,pos);

return0;

)

7.编写一个程序,用指针操作将一个一维数组中的个整数进行以下处理:顺序将

前面各数后移m个位置,使最后面的m个数变成前面的m个。例如,有5个

数13579,两个后7913。

#include<stdio.h>

voidshiftArray(int*arr,intsize,intm)

(

int*temp=arr+size-1;//指向最后一个元素的指针

//逐个后移m个位置

for(inti=0;i<m;i++)

(

intlast=*temp;//记录最后一个元素的值

//从最后一个元素开始,向前逐个后移

for(intj=size-1;j>0;j一)

(

*(arr+j)=*(arr+j-1);

)

*arr=last;//将最后一个元素加到数组的开头

)

}

intmain()

intarr[100];

intsize,m;

printf("请输入数组拘大小:\nO;

scanf(线d”,&size);

printf(〃请输入数组的元素:\n〃);

for(inti=0;i<size;i++)

{

scanf(飞id",&arr[i]);

)

printf(〃请输入后移的位置数:\n");

scanf(飞d",&m);

shiftArray(arr,size,m);

printf("后移后的数组:\n〃);

for(inti=0;i<size;i++)

(

printf(,z%d”,arr[i]);

)

printf("\n");

return0;

)

8.编写一个程序,使用指针操作将一个矩阵转置,即二维数组a的转置矩阵满

足下列条件:b的行就是a的列。

ttinclude<stdio.h>

voidshiftArray(int*arr,intsize,intm)

(

int*temp=arr+size~1;//指向最后一个元素的指针

//逐个后移m个位置

for(inti=0;i<m;i++)

{

int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论