c语言习题Word格式.docx
《c语言习题Word格式.docx》由会员分享,可在线阅读,更多相关《c语言习题Word格式.docx(38页珍藏版)》请在冰豆网上搜索。
else语句4;
2.将输入的十进制正整数n通过函数Dec2Bin转换为二进制数,并将转换结果输出。
#include“stdio.h”
VoidDec2Bin(intm)
intbin[32],j;
for(j=0;
m!
=0;
j++)
{
bin[j]=m%2;
m%2为m除以2取余,并用数组对应记录下来
m=m/2;
m/2为m除以2取整
}
for(;
j!
j--)j从大到小循环到0
%d"
bin[j-1]);
如m=3,j先赋值为0,判断m不等于0,循环,
}b[0]=1,m=1,j=1,再判断m不等于0,循环,
voidmain()b[1]=1,m=0,j=2,再判断m等于0,跳出循环,进
{入下一个循环,因为j=2时没有对应的数组,
intn;
所以输出时j-1
scanf("
&
n);
Dec2Bin(n);
1、非(!
)与(&
&
)或(||)等于(==)
条件表达式一般形式:
表达式1?
表达式2:
表达式3
计算过程:
先计算表达式1的值,若非0,则计算表达式2的值作为表达式值,忽略表达式3;
否则计算表达式3的值作为条件表达式值,不计算表达式2。
2、函数调用,子函数,定义函数
1)定义的函数的类型与返回值类型相同(double,float,int)
2)return
3、数组
1)一维数组a[]
2)二维数组a[][]第一个[]表示数组的行,第二个[]表示每一行的个数
3、输入1个整数后,输出该数的位数(例:
输入3214则输出4,输入-23156则输出5)
intn,k=0;
while(_____1_____)//n!
=0
k++;
_____2_____;
//n=n/10
%d\n"
k);
4、求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6。
#include<
stdio.h>
math.h>
intn,s=0;
______1______//if(n<
0)n=-n;
while(n!
=0){
______2______//s+=n%10;
n=n/10;
s);
$1__VE_ITEM__
(1)
调用函数f,将一个整数首尾倒置。
例如:
若程序输入12345,则输出54321;
若程序输入-34567,则输出-76543。
longf(longn)
{
longm,y=0;
m=fabs(n);
while(m!
=0){
y=y*10+m%10;
____1____
//
m=m/10;
if(n>
=0)returny;
else_____2_____
return-y;
printf("
%ld\t"
f(12345));
%ld\n"
f(-34567));
$1__VE_ITEM__
(2)
调用函数f,从字符串中删除所有的数字字符。
string.h>
ctype.h>
voidf(char*s)
{inti=0;
while(s[i]!
='
\0'
){
if(isdigit(s[i]))____1____(s+i,s+i+1);
strcpy
___2___
i++;
}
{charstr[80];
gets(str);
f(str);
puts(str);
$1__VE_ITEM__(3)
调用find函数在输入的字符串中查找是否出现"
the"
这个单词。
如果查到返回出现的次数,如果未找到返回0。
intfind(char*str)
{char*fstr="
;
inti=0,j,n=0;
while(str[i]!
)
for(______1______)
j=0;
j<
3;
j++
if(str[j+i]!
=fstr[j])break;
if(______2______)n++;
//
j>
=3
returnn;
chara[80];
gets(a);
find(a));
$1__VE_ITEM__(4)
输入的一个小写字母,将字母循环后移5个位置后输出。
"
a"
变成"
f"
,"
w"
b"
。
{
charc;
c=getchar();
if(______1______)
//
c>
a'
c<
u'
c=c+5;
if(c>
v'
&
c<
z'
______2______
c=(c-'
+5)%26+'
putchar(c);
$1__VE_ITEM__(5)
将字符串s中所有的字符'
c'
删除。
chars[80];
inti,j;
gets(s);
for(i=j=0;
______1______;
i++)
s[i]!
='
if(s[i]!
{
s[j]=s[i];
j++;
s[j]='
puts(s);
对x=1,2,……,10,求f(x)=x*x-5*x+sin(x)的最大值。
#definef(x)x*x-5*x+sin(x)
voidmain()
intx;
floatmax;
______1______
//max=f
(1);
for(x=2;
x<
=10;
x++)
//if(f(x)>
max)
max=f(x);
%f\n"
max);
1__VE_ITEM__
(2)
输入三个整数,按由小到大的顺序输出这三个数。
voidswap(______1______)
//int
*pa,int
*pb
{/*交换两个数的位置*/
inttemp;
temp=*pa;
*pa=*pb;
*pb=temp;
inta,b,c,temp;
%d%d%d"
a,&
b,&
c);
if(a>
b)
swap(&
b);
if(b>
c)
if(______2______)
//if(a>
b)
%d,%d,%d"
a,b,c);
调用函数f,去除数组中的负数,输入数组x[7],输出结果为:
1
3
4
6
//数组元素的删除
voidf(int*a,int*m)
inti,j;
for(i=0;
*m;
i++)
if(a[i]<
0){
for(j=i--;
j<
*m-1;
j++)a[j]=a[j+1];
_____1_____;
*m=*m-1;
inti,n=7,x[7]={1,-2,3,4,-5,6,-7};
_______2_______;
f(x,&
n);
for(i=0;
n;
i++)printf("
%5d"
x[i]);
);
调用函数f计算代数多项式1.1+2.2*x+3.3*x*x+4.4*x*x*x+5.5*x*x*x*x当x=1.7时的值。
floatf(float,float*,int);
floatb[5]={1.1,2.2,3.3,4.4,5.5};
f(1.7,b,5));
floatf(_______1________)
floatx,float*a,intn
floaty=a[0],t=1;
inti;
for(i=1;
i<
i++)
t=t*x;
y=y+a[i]*t;
_____2_____
returny;
分别统计字符串中英文字母、数字、和其他字符出现的次数。
intn[3]={0},i;
gets(a);
________1________
for(i=0;
a[i]!
i++)
{if(tolower(a[i])>
tolower(a[i])<
)/*统计字母个数*/
n[0]++;
elseif(________2________)
/*统计数字个数*/
a[i]>
0'
a[i]<
9'
n[1]++;
else
n[2]++;
n[i]);
将输入的十进制整数n通过函数DtoH函数转换为十六进制数,并将转换结果以字符串形式输出。
(例如:
输入十进制数79,将输出十六进制4f。
#include<
chartrans(intx)
if(x<
10)return'
+x;
else_______1________
//return
'
+x-10;
intDtoH(intn,char*str)
inti=0;
while(n!
=0)
________2________
//str[i]=trans(n%16);
n/=16;
i++;
}
returni-1;
inti,k,n;
char*str;
scanf("
k=DtoH(n,str);
for(i=0;
=k;
%c"
str[k-i]);
将输入的十进制正整数n通过函数Dec2Bin转换为二进制数,并将转换结果输出。
voidDec2Bin(intm)
intbin[32],j;
bin[j]=______1______;
//m%2
for(;
j!
j--)
______2______);
//bin[j-1]
数列的第1、2项均为1,此后各项值均为该项前二项之和。
计算数列第30项的值。
_______1______
long
f(intn);
或者
long
f(int);
f(30));
longf(intn)
if(______2______)
//
n==1||n==2
return1;
returnf(n-1)+f(n-2);
该程序计算四位学生的平均成绩,保存在结构中,然后列表输出这些学生的信息。
structSTUDENT
charname[16];
intmath;
intenglish;
intcomputer;
intaverage;
};
voidGetAverage(structSTUDENT*pst)
/*计算平均成绩*/
intsum=0;
sum=______1______;
//pst->
math+pst->
english+pst->
computer
pst->
average=sum/3;
int
i;
structSTUDENTst[4]={{"
Jessica"
98,95,90},{"
Mike"
80,80,90},
{"
Linda"
87,76,70},{"
Peter"
90,100,99}};
4;
{
GetAverage(______2______);
st+i
Name\tMath\tEnglish\tCompu\tAverage\n"
%s\t%d\t%d\t%d\t%d\n"
st[i].name,st[i].math,st[i].english,
st[i].computer,st[i].average);
输入m、n(要求输入数均大于0)。
输出它们的最大公约数。
#include<
int
m,n,k;
while(scanf("
%d%d"
&
m,&
n),______1______);
m<
=0||n<
for(___2___;
n%k!
=0||m%k!
=0;
k--);
k=m>
n?
n:
m
k);
求出a中各相邻两个元素的和,并将这些和存放在数组b中,按每行3个元素的形式输出。
b[1]=a[0]+a[1],……,b[9]=a[8]+a[9]。
inta[10],b[10],i;
\nInput10numbers:
"
for(i=0;
10;
i++)
/*数组输入*/
a[i]);
for(i=1;
b[i]=______1______;
/*计算b数组中的元素*/
//a[i-1]+a[i]
%3d"
b[i]);
if(______2______)
/*每行打印3个数据*/
i%3==0
输入整数n(n>
0),求m使得2的m次方小于或等于n,2的m+1次方大于或等于n。
intm=0,t=1,n;
while(_____1________);
scanf(“%d”,&
n),n<
=0
//逗号表达式
while(!
(t<
=n&
t*2>
=n)){
_____2_____
t=t*2;
m++;
printf(“%d\n”,m);
改错题:
输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。
charstr[256];
inti,j,k=0,n;
n=strlen(str);
/********1********/
if(tolower(str[i])<
'
||tolower(str[i])>
)//if(tolower(str[i])>
tolower(str[i])<
/********2********/
str[n]=str[i];
n++;
str[k]=str[i];
str[k]='
%s\n"
str);
输入一个字符串,将组成字符串的所有字符先按顺序存放到字符串t中,再将字符串中的字符按逆序连接到字符串t后面。
输入"
ABCD"
,则字符串t为"
ABCDDCBA"
voidfun(char*s,char*t)
inti,sl;
sl=strlen(s);
sl;
i++)
t[i]=s[i];
t[sl+i]=s[sl-i];
t[sl+i]=s[sl-1-i];
/********2********/
t[sl]="
\0"
t[sl+i]='