c语言习题.docx
- 文档编号:6927093
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:38
- 大小:29.78KB
c语言习题.docx
《c语言习题.docx》由会员分享,可在线阅读,更多相关《c语言习题.docx(38页珍藏版)》请在冰豆网上搜索。
c语言习题
1.找出100~999之间所有的Armstrong数所谓Armstrong是指这个三位数各位上数字的立方和等于自身
#include“stdio.h”//尽量用“”,少用<>.
#include“math.h”
voidmain()
{
inti,a,b,c;
for(i=100;i<=999;i++)for循环
{
a=i/100;//a为百位数
b=i/10-10*a;//b为十位数
c=i%10;//c为个位数
if(a*a*a+b*b*b+c*c*c==i)//判断三位数各位上数字的立方和是否等于自身
printf("%disaArmstrongnumber!
\n",i);
}
}
1、for语句的一般形式:
for(表达式1;表达式2;表达式3)//各表达式之间用分号,括号后不加分号
语句s//for不加大括号时只能作用一个语句
执行过程,1)计算表达式1
2)计算表达式2,当其值为真(非零),执行循环体语句s后转3),否则循环结束,转到for的后续语句执行
3)计算表达式3,然后转回2)继续
注:
for语句中“表达式1”,“表达式2”,“表达式3”的任意一个或多个表达式可缺省,其中“表达式2”的缺省,就等价于该“表达式2”的值是1,使循环无限次执行。
2、if
1)if(表达式)语句1;
else语句2
2)if(表达式)语句;//判断表达式是否为1
3)if(表示式1)语句1;
elseif(表达式2)语句2;
````
elseif(表达式n-1)语句n-1;
else语句n;
4)if(表达式1)
if(表达式2)语句1;
else语句2;
else
if(表达式3)语句3;
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!
=0;j--)j从大到小循环到0
printf("%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("%d",&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)
#include“stdio.h”
voidmain()
{
intn,k=0;
scanf("%d",&n);
while(_____1_____)//n!
=0
{
k++;
_____2_____;//n=n/10
}
printf("%d\n",k);
}
4、求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6。
#include
#include
voidmain()
{
intn,s=0;
scanf("%d",&n);
______1______//if(n<0)n=-n;
while(n!
=0){
______2______//s+=n%10;
n=n/10;
}
printf("%d\n",s);
}
$1__VE_ITEM__
(1) 调用函数f,将一个整数首尾倒置。
例如:
若程序输入12345,则输出54321;若程序输入-34567,则输出-76543。
#include
#include
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;
}
voidmain()
{
printf("%ld\t",f(12345)); printf("%ld\n",f(-34567));
}
$1__VE_ITEM__
(2) 调用函数f,从字符串中删除所有的数字字符。
#include
#include
#include
voidf(char*s)
{inti=0;
while(s[i]!
='\0'){
if(isdigit(s[i]))____1____(s+i,s+i+1); // strcpy
___2___ i++;} // else
}
voidmain()
{charstr[80];
gets(str);f(str);puts(str);
}
$1__VE_ITEM__(3) 调用find函数在输入的字符串中查找是否出现"the"这个单词。
如果查到返回出现的次数,如果未找到返回0。
#include
intfind(char*str)
{char*fstr="the";
inti=0,j,n=0;
while(str[i]!
='\0')
{
for(______1______) // j=0;j<3;j++
if(str[j+i]!
=fstr[j])break;
if(______2______)n++; // j>=3
i++;
}
returnn;
}
voidmain()
{ chara[80];
gets(a);
printf("%d",find(a));
}
$1__VE_ITEM__(4) 输入的一个小写字母,将字母循环后移5个位置后输出。
例如:
"a"变成"f","w"变成"b"。
#include
voidmain()
{ charc;
c=getchar();
if(______1______) // c>='a'&&c<='u'
c=c+5;
else
if(c>='v'&&c<='z')
______2______ // c=(c-'a'+5)%26+'a';
putchar(c);
}
$1__VE_ITEM__(5) 将字符串s中所有的字符'c'删除。
#include
voidmain()
{ chars[80];
inti,j;
gets(s);
for(i=j=0;______1______;i++) // s[i]!
='\0'
if(s[i]!
='c')
{ s[j]=s[i];
______2______ // j++;
}
s[j]='\0';
puts(s);
}
$1__VE_ITEM__
(1) 对x=1,2,……,10,求f(x)=x*x-5*x+sin(x)的最大值。
#include
#include
#definef(x)x*x-5*x+sin(x)
voidmain()
{ intx;floatmax;
______1______ //max=f
(1);
for(x=2;x<=10;x++)
______2______ //if(f(x)>max) max=f(x);
printf("%f\n",max);
}
1__VE_ITEM__
(2) 输入三个整数,按由小到大的顺序输出这三个数。
#include
voidswap(______1______) //int *pa,int *pb
{/*交换两个数的位置*/
inttemp;
temp=*pa;
*pa=*pb;
*pb=temp;
}
voidmain()
{ inta,b,c,temp;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
swap(&a,&b);
if(b>c)
swap(&b,&c);
if(______2______) //if(a>b)
swap(&a,&b);
printf("%d,%d,%d",a,b,c);
}
$1__VE_ITEM__(3) 调用函数f,去除数组中的负数,输入数组x[7],输出结果为:
1 3 4 6
#include
voidf(int*a,int*m)
{ inti,j;
for(i=0;i<*m;i++)
if(a[i]<0){
for(j=i--;j<*m-1;j++)a[j]=a[j+1];
_____1_____; // *m=*m-1;
}
}
voidmain()
{ inti,n=7,x[7]={1,-2,3,4,-5,6,-7};
_______2_______; // f(x,&n);
for(i=0;i printf("\n"); } $1__VE_ITEM__(4) 调用函数f计算代数多项式1.1+2.2*x+3.3*x*x+4.4*x*x*x+5.5*x*x*x*x当x=1.7时的值。 #include floatf(float,float*,int); voidmain() { floatb[5]={1.1,2.2,3.3,4.4,5.5}; printf("%f\n",f(1.7,b,5)); } floatf(_______1________) // floatx,float*a,intn { floaty=a[0],t=1; inti; for(i=1;i _____2_____ // returny; } $1__VE_ITEM__(5) 分别统计字符串中英文字母、数字、和其他字符出现的次数。 #include #include voidmain() { chara[80]; intn[3]={0},i; gets(a); ________1________ // for(i=0;a[i]! ='\0';i++) {if(tolower(a[i])>='a'&&tolower(a[i])<='z')/*统计字母个数*/ n[0]++; elseif(________2________) /*统计数字个数*/ // a[i]>='0'&&a[i]<='9' n[1]++; else n[2]++; } for(i=0;i<3;i++)printf("%d\n",n[i]); } $1__VE_ITEM__ (1) 将输入的十进制整数n通过函数DtoH函数转换为十六进制数,并将转换结果以字符串形式输出。 (例如: 输入十进制数79,将输出十六进制4f。 ) #include #include chartrans(intx) { if(x<10)return'0'+x; else_______1________ //return 'a'+x-10; } intDtoH(intn,char*str) { inti=0; while(n! =0) { ________2________ //str[i]=trans(n%16); n/=16;i++; } returni-1; } voidmain() { inti,k,n; char*str; scanf("%d",&n); k=DtoH(n,str); for(i=0;i<=k;i++)printf("%c",str[k-i]); } $1__VE_ITEM__ (2) 将输入的十进制正整数n通过函数Dec2Bin转换为二进制数,并将转换结果输出。 #include voidDec2Bin(intm) { intbin[32],j; for(j=0;m! =0;j++) { bin[j]=______1______; //m%2 m=m/2; } for(;j! =0;j--) printf("%d",______2______); //bin[j-1] } voidmain() { intn; scanf("%d",&n); Dec2Bin(n); } $1__VE_ITEM__(3) 数列的第1、2项均为1,此后各项值均为该项前二项之和。 计算数列第30项的值。 #include _______1______ // long f(intn); 或者 long f(int); voidmain() { printf("%ld\n",f(30)); } longf(intn) { if(______2______) // n==1||n==2 return1; else returnf(n-1)+f(n-2); } $1__VE_ITEM__(4) 该程序计算四位学生的平均成绩,保存在结构中,然后列表输出这些学生的信息。 #include structSTUDENT { charname[16]; intmath; intenglish; intcomputer; intaverage; }; voidGetAverage(structSTUDENT*pst) /*计算平均成绩*/ { intsum=0; sum=______1______; //pst->math+pst->english+pst->computer pst->average=sum/3; } voidmain() { int i; structSTUDENTst[4]={{"Jessica",98,95,90},{"Mike",80,80,90}, {"Linda",87,76,70},{"Peter",90,100,99}}; for(i=0;i<4;i++) { GetAverage(______2______); // st+i } printf("Name\tMath\tEnglish\tCompu\tAverage\n"); for(i=0;i<4;i++) { printf("%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); } } $1__VE_ITEM__(5) 输入m、n(要求输入数均大于0)。 输出它们的最大公约数。 #include voidmain() { int m,n,k; while(scanf("%d%d",&m,&n),______1______); // m<=0||n<=0 for(___2___;n%k! =0||m%k! =0;k--); // k=m>n? n: m printf("%d\n",k); } $1__VE_ITEM__ (1) 求出a中各相邻两个元素的和,并将这些和存放在数组b中,按每行3个元素的形式输出。 例如: b[1]=a[0]+a[1],……,b[9]=a[8]+a[9]。 #include voidmain() { inta[10],b[10],i; printf("\nInput10numbers: "); for(i=0;i<10;i++) /*数组输入*/ scanf("%d",&a[i]); for(i=1;i<10;i++) b[i]=______1______; /*计算b数组中的元素*/ //a[i-1]+a[i] for(i=1;i<10;i++) { printf("%3d",b[i]); if(______2______) printf("\n"); /*每行打印3个数据*/ // i%3==0 } } $1__VE_ITEM__ (2) 输入整数n(n>0),求m使得2的m次方小于或等于n,2的m+1次方大于或等于n。 #include voidmain() { 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); } 改错题: $1__VE_ITEM__ (1) 输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。 #include #include voidmain() { charstr[256]; inti,j,k=0,n; gets(str); n=strlen(str); for(i=0;i /********1********/ if(tolower(str[i])<'a'||tolower(str[i])>'z')//if(tolower(str[i])>='a'&&tolower(str[i])<='z') { /********2********/ str[n]=str[i];n++; // str[k]=str[i];k++; } str[k]='\0'; printf("%s\n",str); } $1__VE_ITEM__ (2) 输入一个字符串,将组成字符串的所有字符先按顺序存放到字符串t中,再将字符串中的字符按逆序连接到字符串t后面。 例如: 输入"ABCD",则字符串t为"ABCDDCBA"。 #include #include voidfun(char*s,char*t) { inti,sl; sl=strlen(s); for(i=0;i t[i]=s[i]; for(i=0;i /********1********/ t[sl+i]=s[sl-i]; // t[sl+i]=s[sl-1-i]; /********2********/ t[sl]="\0"; // t[sl+i]='\0'; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 习题