程序设计题(4)

2020-05-05 16:40

{\2}}; STRECh[N]; inti,n; doubleave; ave=fun(s,h,&n); printf(\\for(i=0;i

本题中第1个循环的作用求出所有分数的总和,然后进行av=av/N后得到平均值。第2个循环的作用是将大于等于平均分的学生存入b所指存储单元中。注意同一结构体变量之间可以互相赋值。本程序中直接用*n来表示b的下标,注意开始时要给*n赋初值0,且使用时不能少*号,因为单独的n是一个指针变量,而我们要用的是它所指向的存储单元中的值。

28.编写函数fun,其功能是:将1到m之间(含m)能被7或11整除的所有整数放在数组a中,并通过n返回这些数的个数。

例如,若传给m的值为50,则程序输出: 7 11 14 21 22 28 33 35 42 44 49 #include #include #include #defineM100

voidfun(intm,int*a,int*n) {

inti,j=0;

for(i=1;i<=m;i++)

if(i%7==0||i==0)//求出1到m之内能被7或11整除的所有整数并放在数组a中 a[j++]=i;

*n=j;//返回这些数的个数 voidmain()

{intaa[M],n,k;

system(“CLS”); fun(50,aa,&n); for(k=0;k

if((k+1) ==0)//每行输出20个数 {printf(\printf(\

} else

printf(\

printf(\}

分析:本题考查:整除的判定方法;if语句条件表达式中\逻辑与\和\逻辑或\的区别;for循环语句;一维数组的定义与引用。 本题应使用循环判断语句实现,首先要确定循环变量的取值范围,题且要求找到1~m之间附合要求的数,所以循环变量的取值范围为1~m。if条件语句用来对每一个数进行判断,注意题目要求能被7或11整除,因此条件表达式中应使用逻辑或\运算符。

整除用求余运算来实现。某数值n如能被数值m1或m2整除,则代码实现为:if(n%m1==0||n%m2==0)。某数值n如能被数值m1和m2整除,则代码实现为:if(n%m1==0&&n%m2==0)。

29.规定输入的字符串中只包含字母和*号。编写函数fun,其功能是:将字符串的前导*全部删除,中间和尾部的*号不删除。

例如,字符串中的内容为:\,删除后字符串中的内容应当是:\。编写函数时,不得使用C语言提供的字符串函数。

16

#include #include voidfun(char*a) { char*p=a; while(*p=='*') p++;/*指针p指向字符串第一个字母*/ for(;*p!='\\0';p++,a++) *a=*p;/*从第一个字母开始,其后的字符都放入指针a所指的字符串中*/ *a='\\0'; } voidmain() {chars[81]; printf(\gets(s); fun(s); printf(\puts(s); } 分析:本题考查:要删除字符串中的指定字符,一般采用的方法是保留不用删除的字符;字符串结束标识’\\0’。 我们在此提供另一种解答方法。 #include voidfun(char*a) {char*p=a;

while(*p=='*')p++; strcpy(a,p);}

30.N名学生的成绩已在主函数中放入一个带有头节点的链表结构中,h指向链表的头节点。请编写函数fun,其功能是:找出学生的最高分,并由函数值返回。 #include #include #defineN8 structslist {doubles;

structslist*next; };

typedefstructslistSTREC; doublefun(STREC*h) {

doublemax=h->s; while(h!=NULL)

{if(maxs)max=h->s; h=h->next; }

returnmax; }

STREC*creat(double*s) {STREC*h,*p,*q; inti=0;

h=p=(STREC*)malloc(sizeof(STREC)); p->s=0; while(i

{q=(STREC*)malloc(sizeof(STREC));

p->s=s[i];i++;p->next=q;p=q; }

p->next=NULL; returnh; }

outlist(STREC*h) {STREC*p; p=h->next; printf(\do

{printf(\p=p->next;}

while((p->next)!=NULL); printf(\}

voidmain()

{doubles[N]={56,89,76,95,91,68,75,85},max; STREC*h; h=creat(s); outlist(h); max=fun(h);

printf(\}

17

分析:本题考查:结构体类型;指针型变量;链表的相关知识。

本题使用循环语句遍历链表中的每个结点,用判断语句比较结点数据的域大小。注意,h是一个指向结构体类型的指针变量,若要引用它所指向的结构体中的某一成员时,要用指向运算符\。

31.请编写函数fun,其功能是:找出一维整形数组元素中最大的值及其所在的下标,并通过形参传回。数组元素的值已在主函数中赋予。

主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。 #include #include #include

voidfun(inta[],intn,int*max,int*d) { inti;

*max=a[0]; *d=0;

for(i=0;i}

voidmain()

{inti,x[20],max,index,n=10; srand((unsigned)time(NULL)); for(i=0;i

printf(\输出一个随机数组 printf(\

fun(x,n,&max,&index);

printf(\}

分析:本题考查:查找一维数组中的最大值及其下标,使用循环判断结构实现。指针变量的应用。要查找最大值及其下标需要定义两个变量,该程序直接使用形参max和d,由于它们都是指针变量,所以在引用它所指向的变量时要对它进行指针运算。循环语句用来遍历数组元素,条件语句用来判断该数组元素是否最大。 该程序考查求最大值,需要掌握以下语句:

for(i=0;i{*max=a[i];*d=i;}

32.编写函数fun,其功能是:将s所指字符串中除了下标为奇数同时ASCII值也为奇数的字符外,其余的所有字符全部删除,串中剩余字符所形成的一个新串放在t所指的数组中。

例如,若s所指字符串的内容为:\,其中字符A的ASCII码值为奇数,但所在元素的下标为偶数,因此需要删除;而字符1的ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其它依此类推。最后t所指数组中的内容应为:\。 #include #include #include voidfun(char*s,chart[])

18

{

inti,j=0,n; n=strlen(s); for(i=0;i

if(i%2!=0&&s[i]%2!=0) {t[j]=s[i];/*将下标为奇数同时ASCII码值为奇数的字符放入数组t中*/ j++; } t[j]='\\0';/*最后加上结束标识符*/ } main() 的字符保留,同时需要掌握奇数的判定方法。

{ chars[100],t[100]; printf(\scanf(\fun(s,t); printf(\} 分析:本题考查:删除指定字符串中下标为偶数和ASCII码值为偶数的字符,只要把字符串中下标为奇数和ASCII码为奇数

本题要求除了下标为奇数同时ASCII码值也为奇数的字符之外,其余的所有字符都删除。即要留下下标为奇数同时ASCII码值也为奇数的字符。所以if的条件语句中应使用if(i%2!=0&&s[i]%2!=0)。

33.编写函数fun,其功能是:实现B=A+A',即将矩阵A加上A的倒置,存放在矩阵B中。计算结果在main函数中输出。

??????????????????

例如,输入下面的矩阵:??????其转置矩阵为: ????????????

??????????????????程序输出: ????????

?????????? ????????????

#include #include #include

voidfun(inta[3][3],intb[3][3]) { inti,j;

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

b[i][j]=a[i][j]+a[j][i];/*把矩阵a加上a的转置,存放在矩阵b中*/ }

voidmain()

{

inta[3][3]={{1,2,3},{4,5,6},{7,8,9}},t[3][3]; inti,j;

system(“CLS”); fun(a,t);

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

for(j=0;j<3;j++) printf(\printf(\} }

分析:本题考查:矩阵的操作,如何表示矩阵及其转置矩阵的各个元素。

行列数相等的二维数组的转置就是行列互换,即转置后的第i行第j列正好对应原矩阵的第j行第i列。本题使用双层循环实现矩阵的转置,并将计算结果存入矩阵B中,外层循环控制矩阵的行下标,内层循环控制矩阵的列下标。 若要将矩阵a转置后还存入a中,可用程序: inti,j,t;

19

for(i=0;i

{t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;} 注意第2个循环的初值。 若要将矩阵a转置后存入c中: inti,j;

for(i=0;i

注意数组c和a的下标。

34.编写函数fun,其功能是:将M行N列的二维数组中的数据,按列的顺序依次放到一维数组中。一维数组中数据的个数存放在形参n所指的存储单元中。 例如,若二维数组中的数据为

33333333 44444444 55555555

则一维数组中的内容应是:

334455334455334455334455 #include

voidfun(int(*s)[10],int*b,int*n,intmm,intnn) { inti,j;

for(j=0;j

b[*n]=*(*(s+i)+j);

*n=*n+1;/*通过指针返回元素个数*/ }

main() {

intw[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;

inta[100]={0},n=0; printf(\for(i=0;i<3;i++) {

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

printf(\printf(\}

fun(w,a,&n,3,4);

printf(\for(i=0;i

题目要求实现将二维数组元素存入一维数组,需使用for循环语句来控制二维数组元素的下标,同时使用指针变量配合操作。 可以用两个循环来处理问题,由于是按列的顺序取出,所以第1个循环用于控制列下标,第2个循环用于控制行下标。

35.编写函数fun,其功能是:将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的千位和十位上。

20


程序设计题(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:我的家乡红石林校本课程研究报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: