C语言程序设计上机题1120.docx

上传人:b****8 文档编号:11012642 上传时间:2023-02-24 格式:DOCX 页数:17 大小:20.41KB
下载 相关 举报
C语言程序设计上机题1120.docx_第1页
第1页 / 共17页
C语言程序设计上机题1120.docx_第2页
第2页 / 共17页
C语言程序设计上机题1120.docx_第3页
第3页 / 共17页
C语言程序设计上机题1120.docx_第4页
第4页 / 共17页
C语言程序设计上机题1120.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

C语言程序设计上机题1120.docx

《C语言程序设计上机题1120.docx》由会员分享,可在线阅读,更多相关《C语言程序设计上机题1120.docx(17页珍藏版)》请在冰豆网上搜索。

C语言程序设计上机题1120.docx

C语言程序设计上机题1120

上机作业题之十一

生成一个5×5的整型方阵。

其各个元素值依次为1开始的连续自然数。

输出该方阵。

然后求该方阵的主对角线上元素之和sum1和次对角线元素之和sum2,并输出。

下标访问法参考程序如下:

#include

voidmain()

{inta[5][5],i,j,sum1=0,sum2=0,n=1;

printf("生成的矩阵是:

\n");

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

{for(j=0;j<5;j++)

{a[i][j]=n++;

printf("%5d",a[i][j]);

if(i==j)sum1+=a[i][j];

if(i+j==4)sum2+=a[i][j];

}

printf("\n");

}

printf("主对角线之和%d\t次对角线之和%d\n",sum1,sum2);

}

指针访问法参考程序如下:

#include

voidmain()

{inta[5][5],(*ip)[5],*jp,sum1=0,sum2=0;

printf("生成的矩阵是:

\n");

for(ip=a;ip

{for(jp=*ip;jp<*ip+5;jp++)

{*jp=jp-*a+1;

printf("%5d",*jp);

if(ip-a==jp-*ip)sum1+=*jp;

if(ip-a+jp-*ip==4)sum2+=*jp;

}

printf("\n");

}

printf("主对角线之和%d\t次对角线之和%d\n",sum1,sum2);

}

两个程序运行的输出结果都是:

生成的矩阵是:

12345

678910

1112131415

1617181920

2122232425

主对角线之和65次对角线之和65

 

上机作业题之十二

生成一个5×5的整型方阵。

其各个元素值用伪随机函数产生[10,99]之间的数。

输出矩阵。

然后求出各行上元素的最大值存储在一维数组max[5]中,求出各行上元素的最小值存储在一维数组min[5]中。

输出这两个一维数组。

下标访问法的参考程序如下:

#include

#include

voidmain()

{inta[5][5],i,j,max[5],min[5];

printf("生成的矩阵是:

\n");

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

{for(j=0,max[i]=0,min[i]=100;j<5;j++)

{a[i][j]=rand()%90+10;

printf("%5d",a[i][j]);

if(a[i][j]>max[i])max[i]=a[i][j];

if(a[i][j]

}

printf("\n");

}

printf("各行的最大值是:

\n");

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

printf("%5d",max[i]);

printf("\n");

printf("各行的最小值是:

\n");

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

printf("%5d",min[i]);

printf("\n");

}

指针访问法的参考程序如下:

#include

#include

voidmain()

{inta[5][5],(*ip)[5],*jp,max[5],*pmax=max,min[5],*pmin=min;

printf("生成的矩阵是:

\n");

for(ip=a;ip

{for(jp=*ip,*pmax=0,*pmin=100;jp<*ip+5;jp++)

{*jp=rand()%90+10;

printf("%5d",*jp);

if(*jp>*pmax)*pmax=*jp;

if(*jp<*pmin)*pmin=*jp;

}

printf("\n");

}

printf("各行的最大值是:

\n");

for(pmax=max;pmax

printf("%5d",*pmax);

printf("\n");

printf("各行的最小值是:

\n");

for(pmin=min;pmin

printf("%5d",*pmin);

printf("\n");

}

两个程序运行的结果都是:

生成的矩阵是:

5127445099

7458286284

4575719771

5135726746

9134427332

各行的最大值是:

9984977291

各行的最小值是:

2728453532

 

上机作业题之十三

从键盘上读入两个串,将第二个串中的某个单词移到第一个串中的某个单词的前面。

要移动的单词和要移到的位置处的单词,都从键盘输入。

如:

读的第一个串是:

”Iamastudent.”,第二个串是:

”Heisagoodboy!

”,要移动的单词是”good“,要移到第一个串的”student”之前。

移动后的两个串应为:

”Iamagoodstudent.”和”Heisaboy!

”。

不用指针的参考程序如下:

#include

#include

voidmain()

{charstr1[50],str2[50],str3[30],str4[30],str5[20];

intn;

puts("读入两个串!

");

gets(str1);

gets(str2);

puts("读入第二个串中要移动的单词!

");

gets(str3);

puts("移到第一个串中哪个单词之前?

");

gets(str4);

n=strlen(str3);

strcpy(strstr(str2,str3),strstr(str2,str3)+n);

strcpy(str5,strstr(str1,str4));

strcpy(strstr(str1,str4),str3);

strcat(str1,str5);

puts("移动后的两个串是:

");

puts(str1);

puts(str2);

}

用指针的参考程序如下:

#include

#include

voidmain()

{charstr1[50],*ps1=str1,str2[50],*ps2=str2,str3[30],*ps3=str3,str4[30],*ps4=str4;

charstr5[20],*ps5=str5;

intn;

puts("读入两个串!

");

gets(ps1);

gets(ps2);

puts("读入第二个串中要移动的单词!

");

gets(ps3);

puts("移到第一个串中哪个单词之前?

");

gets(ps4);

n=strlen(ps3);

ps2=strstr(ps2,ps3);

strcpy(ps2,ps2+n);

ps1=strstr(ps1,ps4);

strcpy(ps5,ps1);

strcpy(ps1,ps3);

strcat(ps1,ps5);

puts("移动后的两个串是:

");

puts(str1);

puts(str2);

}

运行时屏幕上显示:

读入两个串!

输入:

Iamastudent.回车

Heisagoodboy!

回车

屏幕上显示:

读入第二个串中要移动的单词!

输入:

good回车(注意good后面要输入一个空格再回车)

屏幕上显示:

移到第一个串中哪个单词之前?

输入:

student.回车

屏幕上显示:

移动后的两个串是:

Iamagoodstudent.

Heisaboy!

 

上机作业题之十四

编一个长整型函数ifac用来求n!

,主函数中调用该函数求:

从R个元素中取K个元素的组合数C是多少。

C的计算公式如下:

参考程序如下:

#include

voidmain()

{intc,r,k;

longifac(int);

printf("读入两个正整数R和K,R应大于K!

\n");

scanf("%d%d",&r,&k);

c=ifac(r)/(ifac(r-k)*ifac(k));

printf("从%d个元素中取%d个元素的组合数是%d\n",r,k,c);

}

longifac(intn)

{longfac=1;

inti;

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

fac*=i;

returnfac;

}

程序运行时屏幕显示:

读入两个正整数R和K,R应大于K!

输入:

86回车

则输出结果为:

从8个元素中取6个元素的组合数是28

 

上机作业题之十五

编程找出100~999之间所有“回文质数”。

所谓“回文质数”是指既是回文数又是质数的数。

而“回文数”是指一个数正方向念和反方向念都是同一个数的数,如101就是这样的数。

要求:

1.在主函数中调用一个判断回文数的函数,在判断回文数的函数中又调用一个判断质数的函数。

2.在判断质数的函数中,将找出的回文质数按每行10个数输出。

参考程序如下:

#include

#include

voidzshu(intn)

{inti,k;

staticintm;

for(i=2,k=sqrt(n);i<=k&&n%i;i++);

if(i>k)

{printf("%6d",n);

m++;

if(m%10==0)printf("\n");

}

}

voidhwun(intm)

{if(m/100==m%10)zshu(m);

}

voidmain()

{intn;

printf("三位数中的回文质数有以下几个:

\n");

for(n=101;n<=999;n+=2)

hwun(n);

printf("\n");

}

程序运行输出的结果为:

三位数中的回文质数有以下几个:

101131151181191313353373383727

757787797919929

 

上机作业题之十六

一天小猴摘了一大堆桃子,他请父母和兄妹来一起吃了一半,临睡前他又吃了一个。

第二天他又请小伙伴们来吃了前一天剩下的一半,临睡前他又吃了一个。

以后每天都是自己吃前一天剩下的一半再又多吃一个。

到第十天时发现只剩下一个桃子了。

编一个递归调用函数求小猴第一天摘了多少个桃子。

提示:

设第n天的桃子数为tao(n),第n+1天的桃子数为tao(n+1),则:

tao(n)=(tao(n+1)+1)*2。

参考程序如下:

#include

inttao(intn)

{returnn==10?

1:

(tao(n+1)+1)*2;

}

voidmain()

{printf("小猴第一天摘了%d个桃子。

\n",tao

(1));

}

运行后输出的结果是:

小猴第一天摘了1534个桃子。

 

上机作业题之十七

生成一个8个元素的整型一维数组。

其各个元素的值为从1开始的连续自然数,输出该数组。

再将数组逆序,又输出逆序后的数组。

要求:

全部采用指针访问。

参考程序如下:

#include

voidmain()

{inta[8],*p1,*p2,temp;

printf("生成的一维数组是:

\n");

for(p1=a;p1

{*p1=p1-a+1;

printf("%5d",*p1);

}

printf("\n");

printf("逆序后的一维数组是:

\n");

for(p1=a,p2=a+7;p1

temp=*p1,*p1=*p2,*p2=temp;

for(p1=a;p1

printf("%5d",*p1);

printf("\n");

}

运行后输出的结果是:

生成的一维数组是:

12345678

逆序后的一维数组是:

87654321

 

上机作业题之十八

用伪随机函数给5×5的二维数组的各个元素产生[10,99]之间的整数,输出这个数组。

然后用它作函数的参数,调用一个求平均值的函数,求出各行元素的平均值average储存在一维数组aver[5]中。

在主函数中输出aver数组。

要求全部采用指针访问。

参考程序如下:

#include

#include

voidaverage(inta[5][5],float*paver)

{int(*ip)[5],*jp;

floatsum;

for(ip=a;ip

{for(jp=*ip,sum=0;jp<*ip+5;jp++)

sum+=*jp;

*paver=sum/5;

}

}

voidmain()

{inta[5][5],(*ip)[5],*jp;

floataver[5],*paver=aver;

printf("生成的矩阵是:

\n");

for(ip=a;ip

{for(jp=*ip;jp<*ip+5;jp++)

{*jp=rand()%90+10;

printf("%7d",*jp);

}

printf("\n");

}

average(a,aver);

printf("各行元素的平均值是:

\n");

for(paver=aver;paver

printf("%7.2f",*paver);

printf("\n");

}

运行后输出的结果是:

生成的矩阵是:

5127445099

7458286284

4575719771

5135726746

9134427332

各行元素的平均值是:

54.2061.2071.8054.2054.40

 

上机作业题之十九

从键盘上读入一个串,然后将串中序号为奇数的字符留在串中,把序号为偶数的字符拷贝到另一个串中。

输出处理后的两个串。

要求全部采用指针访问。

参考程序之一:

#include

#include

#include

voidmain()

{chara[80],b[40],*p1=a,*p2=b;

intflag=0;

puts("读入一个串!

");

gets(p1);

puts("原来的串是:

");

puts(p1);

while(*p1)

if(flag==0)

{flag=1;

p1++;

continue;

}

else

{flag=0;

*p2++=*p1;

strcpy(p1,p1+1);

}

*p2='\0';

printf("分解后的两个串是:

\n");

puts(a);

puts(b);

}

参考程序之二:

#include

#include

#include

voidmain()

{chara[80],b[40],*p1=a,*p2=b;

puts("读入一个串!

");

gets(p1);

puts("原来的串是:

");

puts(p1);

while(*p1)

{p1++;

if(!

*p1)break;

*p2++=*p1;

strcpy(p1,p1+1);

}

*p2='\0';

printf("分解后的两个串是:

\n");

puts(a);

puts(b);

}

运行时屏幕上显示:

读入一个串!

若输入:

a1b2c3d4e5f回车

则输出的结果是:

原来的串是:

a1b2c3d4e5f

分解后的两个串是:

abcdef

12345

 

上机作业题之二十

从命令行上提供一个9位的长整型数,求它的逆序数并输出。

如提供的是123456,则它的逆序数是654321。

参考程序之一如下:

#include

#include

voidmain(intargc,char*argv[])

{longa,b=0;

if(argc==1)

{puts("Notdata!

");

return;

}

printf("%ld\n",a=atol(argv[1]));

while(a)

{b=b*10+a%10;

a/=10;

}

printf("%ld\n",b);

}

参考程序之二如下:

#include

#include

#include

voidmain(intargc,char*argv[])

{char*p1,*p2,ch;

if(argc==1)

{puts("Notdata!

");

return;

}

printf("%ld\n",atol(argv[1]));

for(p1=argv[1],p2=argv[1]+strlen(argv[1])-1;p2>p1;p1++,p2--)

{ch=*p1;

*p1=*p2;

*p2=ch;

}

printf("%ld\n",atol(argv[1]));

}

该程序在TC3上运行。

若提供的参数是123456789,则输出的结果是:

123456789

987654321

 

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

当前位置:首页 > 人文社科 > 哲学历史

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

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