C语言编程个人真情奉献答案2Word文档格式.docx
《C语言编程个人真情奉献答案2Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言编程个人真情奉献答案2Word文档格式.docx(36页珍藏版)》请在冰豆网上搜索。
printf("
%d\n"
max);
return0;
}
6.8程序定义了
4×
4的二维数组,请编写程序,给二维数组赋值,并使数组下半三角元素中的值乘以n。
例如:
数组中的值为
假设n为10,则输出结果如下:
(输出的数按照4位宽度来输出,即%4d)
#defineN4
inta[N][N];
inti,j,n;
4;
for(j=0;
j<
j++)
a[i][j]);
n);
if(i>
=j)
a[i][j]=n*a[i][j];
%d"
a[i][j]);
\n"
);
6.9杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。
其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。
中国古代数学史曾经有自己光辉灿烂的篇章,而贾宪三角的发现就是十分精彩的一页。
杨辉三角有如下性质:
1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。
2、第n行的数字个数为n个。
3、每个数字等于上一行的左右两个数字之和。
编写程序,输入正数n,将所有数据存储到二维数组中,并在屏幕上显示对应的杨辉三角形(注意数据之间的空格)。
例如:
n=5
图形如下:
1
1
1
2
3
4
6
5
#defineN100
=n;
if(i==j||j==0)
a[i][j]=1;
for(i=1;
for(j=1;
a[i][j]=a[i-1][j-1]+a[i-1][j];
{if(a[i][j]!
=0)
{printf("
%3d"
6.10编写一个程序,求出4×
5的二维数组周边元素之和。
输入:
二维数组元素
输出:
周边元素之和
如:
13579
29994
69998
13570
61
inta[N][N+1];
inti,j,sum=0;
5;
scanf("
a[i][j]);
if(i==0||i==3||j==0||j==4)
sum=sum+a[i][j];
}}}
sum);
6.11编程,输入n,存储并输出如下例(n=5)所示的图形。
12345
11234
11123
11112
11111
inta[N][N];
n;
if(j<
=i)
}if(j>
i)
a[i][j]=j-i+1;
%2d"
6.12对数组a[10]中的十个整数从小到大进行连续编号,输出各个元素的编号。
要求不能改变数组a中元素的顺序,且相同的整数要具有相同的编号。
例如数组是:
A=(5,3,4,7,3,5,6,8,9,10)则输出为:
(4,1,3,7,1,4,6,8,9,10)
inta[11],c[11];
inti,j,t,n;
11;
c[i]=a[i];
11-j;
if(a[i]>
=a[i+1])
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
for(n=1;
n<
n++)
if(c[n]==a[i])
i);
break;
}printf("
8.1描述
提取一个字符串中的所有数字字符(‘0’...‘9’)将其转换为一个整数输出。
输入
一个以回车符为结束标志的字符串(少于80个字符)。
输出
把字符串中的所有数字字符(‘0’...‘9’)转换为一个整数并输出。
string.h>
charstr1[81],str2[80];
inti=0,j=0;
gets(str1);
while(str1[i]!
='
\0'
)
if('
0'
<
=str1[i]&
&
str1[i]<
9'
str2[j]=str1[i];
j++;
i++;
}//{if(str2[j]=’\0’)
//break;
str2[j]='
;
//}}
%s\n"
str2);
//相同
8.2输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。
两个已经排好顺序(升序)的字符串
一个合并在一起的有序(升序)的字符串
要求:
设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。
如果采用先进行串连接,然后再进行排序的算法,则效率太低了。
chara[100],b[100],t;
inti,j,k;
gets(a);
gets(b);
strcat(a,b);
k=strlen(a);
=k;
k-j;
puts(a);
8.3输入一个长度不超过100的字符串,删除串中的重复字符。
输入要检查的字符串,长度不超过100个字符。
abacaeedabcdcd。
删除重复字符后的字符串。
abced。
chara[100],b[100];
intn,i,j,cnt=1;
n=strlen(a);
b[0]=a[0];
i;
if(a[i]==a[j])
if(a[i]==a[j]&
i==j)
b[cnt]=a[j];
cnt++;
i<
cnt;
i++)
%c"
b[i]);
8.4输入两个字符串s1和s2,在s1中删除任何s2中有的字符。
例如,s1:
“abc123ad”,s2:
“a1”,则输出“bc23d”。
两个字符串s1和s2
删除后的字符串s1
chara[100],b[100],c[100];
intx,y,i,j,cnt;
%s"
a);
b);
x=strlen(b);
y=strlen(a);
j<
x;
j++)
cnt=0;
y;
if(a[i]!
=b[j])
c[cnt]=a[i];
strcpy(a,c);
y=cnt;
c[i]);
8.5用空格或换行分开的字符串称为单词。
输入多行字符串,直到遇到了单词"
stop"
时才停止。
最后输出单词的数量。
用于分割单词的空格或换行可能多于1个。
多个字符串
单词的数量
malloc.h>
{intcnt=0;
char*word;
while
(1)
word=(char*)malloc(sizeof(char)*20);
word);
++cnt;
if(0==strcmp(word,"
))
free(word);
cnt-1);
8.6输入两个字符串s1、s2和s1中任意字符k,在s1中的指定字符k第一次出现的位置处插入字符串s2并输出。
两个字符串s1、s2和s1中任意字符k
插入后的字符串s1
inti,j,n,t,cnt=-1;
chark;
t=strlen(b);
k);
=n-1;
{cnt=cnt+1;
if(k==a[i])
for(i=cnt;
cnt+t;
c[i]=b[i-cnt];
for(i=cnt+t;
=n+t;
c[i]=a[i-t];
}puts(c);
9.1请编写函数fun,其功能是:
将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a的十位和个位依次存放在c数的十位和千位上,b的十位和个位依次存放在c数的个位和百位上。
当a=45,b=12,调用该函数后,c=5241。
提醒:
本题提交的时候,只需要提交fun函数就可以。
预设代码
前置代码
/*PRESETCODEBEGIN-NEVERTOUCHCODEBELOW*/
/*PRESETCODEEND-NEVERTOUCHCODEABOVE*/
后置代码
inta,b,c;
%d%d"
a,&
b);
c=fun(a,b);
c=%d\n"
c);
答案
intfun(inta,intb,int*c)
*c=a%10*1000+a/10*10+b%10*100+b/10;
return&
c;
9.2请编写函数fun,其功能是判断一个整数n是否为素数,如果是素数,则返回1,否则返回0。
inta;
a);
if(fun(a))printf("
Prime\n"
elseprintf("
NonPrime\n"
答案:
intfun(intn)
inti,flag=0;
for(i=2;
if(n%i==0)
flag++;
if(flag==0)
return1;
if(flag>
0)
9.3请编写函数fun,它的功能是计算下列级数和,值由函数值返回。
例如,当n=10,x=0.3时,函数值为1.349859。
请勿改动主函数main,仅在函数fun的花括号中填入所编写的若干语句。
doublex;
intn;
%lf%d"
x,&
%lf\n"
fun(x,n));
答案:
doublefun(doublex,intn)
inti;
doublesum=1,v=1,k=1;
v=v*i;
k=k*x;
sum=sum+k/v;
returnsum;
9.4请编写一个函数,其功能是:
将大于整数m且紧靠m的k个素数存入xx所指的数组中。
例如,若输入175,则应输出1923293137
intm,n,zz[1000];
m,&
fun(m,n,zz);
for(m=0;
m<
m++)
%6d"
zz[m]);
voidfun(intm,intk,intzz[])
inti,j,t=0;
for(i=m+1;
;
for(j=2;
=i;
if(i%j==0)
if(i==j)
zz[t]=i;
t++;
if(t==k)
9.5请编写函数fun,其功能是:
从字符串中删除指定的字符。
同一字母的大、小写按照不同的字符处理。
charstr[80];
charch;
gets(str);
ch);
fun(str,ch);
str);
intfun(chars[],charc)
inti,j=0;
s[i]!
if(s[i]!
=c)
s[j++]=s[i];
s[j]='
return(s);
9.6背景:
哈哈!
我们终于学了递归了,现在大家一定感到非常有意思吧,那个典型的“汉诺塔”问题,一个非常短的程序居然可以完成如此复杂的工作,真是神奇啊!
来吧,让我们也动手编写一个递归程序,当然,我们要编写的不可能太复杂。
功能:
求整数n到m区间的累加和,其中n<
=m。
区间的起始点n
区间的终止点m
累加和
使用递归算法完成。
intmain()
{
intm,n,s;
n,&
m);
s=fun(n,m);
s);
#include<
intsum(inti,intj)
intc;
if(j==i)
c=i;
else
c=j+sum(i,j-1);
returnc;
voidmain()
intm,n;
sum(m,n));
9.7请使用递归算法计算正整数n和m的最大公约数GCD(n,m)。
n和m
n和m的最大公约数
intfun(intn,intm)
inta,r,t;
if(n<
m)