C语言程序设计习题试题编程题Word下载.docx
《C语言程序设计习题试题编程题Word下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计习题试题编程题Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
![C语言程序设计习题试题编程题Word下载.docx](https://file1.bdocx.com/fileroot1/2022-12/18/3abd9c2a-59ec-42fd-97b9-ca1a0aa361cf/3abd9c2a-59ec-42fd-97b9-ca1a0aa361cf1.gif)
);
/*字符'
在C程序中要使用转义符'
*/
printf("
class1=%d,class2=%d,class3=%d\n"
class1,class2,class3);
2、从键盘输入十个整数,用插入法对输入的数据按照从小到大的顺序进行排序,将排序后的结果输出。
{inti,j,num,a[10];
for(i=0;
i<
10;
i++)
{printf("
EnterNo.%d:
"
i+1);
scanf("
%d"
&
num);
for(j=i-1;
j>
=0&
&
a[j]>
num;
j--)
a[j+1]=a[j];
a[j+1]=num;
printf("
No.%d=%d\n"
i+1,a[i]);
3、输入一个正整数,要求以相反的顺序输出该数。
例如输入12345,输出位54321。
voidmain()
{intn;
Pleaseentern:
n);
while(n>
0)
n%10);
n=n/10;
}
4、编写程序,读入一个整数N;
若N为非负数,则计算N到2×
N之间的整数和;
若N为一个负数,则求2×
N到N之间的整数和。
分别利用for和while写出两个程序。
{inti,n;
longs1=0,s2=0;
PleaseenterN:
if(n>
=0)
for(i=n;
=2*n;
s1=s1+i;
else
i>
i--)
i=n;
if(i>
while(i<
=2*n)
s2=s2+i++;
while(i>
s2=s2+i--;
Result1=%ldresult2=%ld\n"
s1,s2);
5、一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。
又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。
编写程序求这个自然数。
{inti,n,a;
;
{if(i%8==1)
{n=i/8;
if(n%8==1)
{n=n/8;
if(n%8==7)a=n/8;
if(i%17==4)
{n=i/17;
if(n%17==15)n=n/17;
if(2*a==n)
result=%d\n"
i);
break;
6、编写程序,输出用一元人民币兑换成1分、2分和5分硬币的不同兑换方法。
{intf1,f2,f5,count=0;
for(f5=0;
f5<
=20;
f5++)
for(f2=0;
f2<
=(100-f5*5)/2;
f2++)
{f1=100-f5*5-f2*2;
if(f5*5+f2*2+f1==100)
No.%2d>
>
5:
%4d2:
%2d1:
%2d\n"
++count,f5,f2,f1);
7、将一个数的数码倒过来所得到的新数叫原数的反序数。
如果一个数等于它的反序数,则称它为对称数。
求不超过1993的最大的二进制的对称数。
{inti,j,n,k,a[16]={0};
for(i=1;
=1993;
{n=i;
k=0;
0)/*将十进制数转变为二进制数*/
{a[k++]=n%2;
n=n/2;
for(j=0;
j<
k;
j++)
if(a[j]!
=a[k-j-1])break;
if(j>
=k)
%d:
"
%2d"
a[j]);
\n"
8、十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个小孩20块。
然后所有的小孩同时将自己手中的糖分一半给右边的小孩;
糖块数为奇数的人可向老师要一块。
问经过这样几次调整后大家手中的糖的块数都一样?
每人各有多少块糖?
{inti,count=0,a[11]={0,10,2,8,22,16,4,10,6,14,20};
while
(1)
{for(i=1;
=10;
a[i-1]=a[i-1]/2+a[i]/2;
a[10]=a[10]/2+a[0];
if(a[i]%2==1)a[i]++;
if(a[i]!
=a[i+1])break;
if(i==10)break;
{a[0]=0;
count++;
count=%dnumber=%d\n"
count,a[1]);
9、输入5×
5的数组,编写程序实现:
(1)求出对角线上各元素的和;
(2)求出对角线上行、列下标均为偶数的各元素的积;
(3)找出对角线上其值最大的元素和它在数组中的位置。
{inti,j,s1=0,s2=1,a[5][5];
5;
%d%d:
i,j);
a[i][j]);
{for(j=0;
%5d"
a[i][j]);
j=0;
{s1=s1+a[i][i];
if(i%2==0)s2=s2*a[i][i];
if(a[i][i]>
a[j][j])j=i;
SUN=%d\nACCOM=%d\na[%d]=%d\n"
s1,s2,j,a[j][j]);
10、编写程序,以字符形式输入一个十六进制数,将其变换为一个十进制整数后输出。
#include"
stdio.h"
{inti,n=0,a[4]={0};
Pleaseenteradigit:
4&
(a[i]=getchar())!
\n'
;
i++);
4;
if(a[i]>
=48&
a[i]<
=57)a[i]=a[i]-48;
elseif(a[i]>
=65&
=69)a[i]=a[i]-55;
=97&
=102)a[i]=a[i]-87;
elseprintf("
inputError!
n=n*16+a[i];
n);
11、编写程序,输入一个十进制整数,将其变换为二进制后储存在一个字符数组中。
{inti,n,k=16,a[16]={0};
{a[--k]=n%2;
16;
a[i]);
12、对数组A中的N(0<N<100=个整数从小到大进行连续编号,输出各个元素的编号。
要求不能改变数组A中元素的顺序,且相同的整数要具有相同的编号。
例如数组是:
A=(5,3,4,7,3,5,6)则输出为:
(3,1,2,5,1,3,4)
{inti,j,k,n,m=1,r=1,a[2][100]={0};
printf("
n;
a[%d]="
a[0][i]);
while(m<
=n)/*m记录已经登记过的数的个数*/
{for(i=0;
i++)/*记录未登记过的数的大小*/
{if(a[1][i]!
=0)/*已登记过的数空过*/
continue;
k=i;
for(j=i;
j++)/*在未登记过数中找最小数*/
if(a[1][j]==0&
a[0][j]<
a[0][k])k=j;
a[1][k]=r++;
/*记录名次,r为名次*/
m++;
/*登记过的数增1*/
j++)/*记录同名次*/
a[0][j]==a[0][k])
{a[1][j]=a[1][k];
a[%d]=%d,%d\n"
i,a[0][i],a[1][i]);
13、求这样一个三位数,该三位数等于其每位数字的阶乘之和。
即:
abc=a!
+b!
+c!
{inta[5],i,t,k;
for(i=100;
1000;
{for(t=0,k=1000;
k>
t++)
{a[t]=(i%k)/(k/10);
k/=10;
if(f(a[0])+f(a[1])+f(a[2])==i)
%d"
f(m)
intm;
{inti=0,t=1;
while(++i<
=m)t*=i;
return(t);
14、编写一个函数实现将字符串str1和字符串str2合并,合并后的字符串按其ASCII码值从小到大进行排序,相同的字符在新字符串中只出现一次。
string.h"
strcmbn(a,b,c)/*数组合并函数:
将数组a、b合并到*/
chara[],b[],c[];
{chartmp;
inti,j,k,m,n;
m=strlen(a);
n=strlen(b);
m-1;
i++)/*对数组a排序*/
{for(j=i+1,k=i;
m;
if(a[j]<
a[k])k=j;
tmp=a[i];
a[i]=a[k];
a[k]=tmp;
n-1;
i++)/*对数组b排序*/
if(b[j]<
b[k])k=j;
tmp=b[i];
b[i]=b[k];
b[k]=tmp;
i=0;
m&
n)/*合并*/
b[j])
c[k++]=b[j++];
/*将a[i]、b[j]中的小者存入c[k]*/
{c[k++]=a[i++];
if(a[i-1]==b[j])j++;
/*如果a、b当前元素相等,删掉一个*/
m)c[k++]=a[i++];
/*将a或b中剩余的数存入c*/
while(j<
n)c[k++]=b[j++];
c[k]='
\0'
15、编写函数,采用递归方法实现将输入的字符串按反序输出。
strout(s)
char*s;
{if(*s!
)
{strout(s+1);
/*递归调用strout函数,字符串首地址前移一个字符*/
putch(*s);
/*输出字符串首地址所指向的字符*/
elsereturn;
/*遇到字符串结束标志结束递归调用*/
16、编写函数,采用递归方法将任一整数转换为二进制形式。
turn(n,a,k)
intn,a[],k;
{if(n>
{a[k]=n%2;
turn(n/2,a,k-1);
{inti,n,a[16]={0};
\nPleaseentern:
turn(n,a,15);
17、将一个数的数码倒过来所得到的新数,叫作原数的反序数,如果一个数等于它的反序数,则称它为对称数。
编写程序,采用递归算法求不超过1993的最大的二进制的对称数。
smmt(chars[])/*指针s指向字符串的第一个字符*/
{char*p;
p=s;
while(*p!
)p++;
p--;
/*指针p指向字符串的最后一个字符*/
if(p==s)return
(1);
/*两个指针指向同一个字符表示字符串对称*/
=*p)
return(0);
/*两个指针指向字符不等表示字符串不对称*/
{*p='
smmt(s+1);
/*取掉首尾比较过的字符继续比较*/
18、编写程序,读入一个以符号"
."
结束的长度小于20字节的英文句子,检查其是否为回文(即正读和反读都是一样的,不考虑空格和标点符号)。
例如:
读入句子:
MADAMI'
MADAM.它是回文,所以输出:
YES
ABCDBA).它不是回文,所以输出:
NO
{chars[21],*p,*q;
gets(s);
q=s;
while(*q!
)q++;
q-=2;
while(p<
q)/*指针p指向字符串首,指针q指向串未*/
if(*p++!
=*q--)/*指针p、q同时向中间移动,比较对称的两个字符*/
NO\n"
if(p>
=q)
YES\n"
19、编写程序,其中包括一个函数,此函数的功能是:
对一个长度为N的字符串从其第K个字符起,删去M个字符,组成长度为N-M的新字符串(其中N、M<
=80,K<
=N)。
例如输入字符串"
Wearepoorstudents."
,利用此函数进行删除"
poor"
的处理,输出处理后的字符串是"
Wearestudents."
。
strcut(s,m,k)
chars[];
intm,k;
inti;
p=s+m;
/*指针p指向要被删除的字符*/
while((*p=*(p+k))!
)/*p+k指向要前移的字符*/
p++;
20、编写一个函数insert(s1,s2,ch),实现在字符串s1中的指定字符ch位置处插入字符串s2。
insert(s1,s2,ch)
chars1[],s2[],ch;
{char*p,*q;
p=s1;
while(*p++!
=ch);
while(*s2!
{q=p;
while(q>
=p)
*(q+1)=*q--;
*++q=*s2++;
21、编写程序将输入的两行字符串连接后,将串中全部空格移到串首后输出。
strcnb(s1,s2)
chars1[],s2[];
inti=1;
while((*p++=*s2++)!
);
/*将s2接于s1后面*/
)/*扫描整个字符串*/
{if(*p=='
'
)/*当前字符是空格进行移位*/
{while(*(p+i)=='
)i++;
/*寻找当前字符后面的第一个非空格*/
if(*(p+i)!
{*p=*(p+i);
/*将非空格移于当前字符处*/
*(p+i)='
/*被移字符处换为空格*/
elsebreak;
/*寻找非空格时到字符串尾,移位过程结束*/
22、编写程序,输入字符串,分别统计字符串中所包含的各个不同的字符及其各自字符的数量。
如:
输入字符串:
abcedabcdcd
则输出:
a=2b=2c=3d=3e=1。
structstrnum
{inti;
{charc;
inti=0,k=0;
structstrnums[100]={0,NULL};
while((c=getchar())!
s[i].i!
=0;
{if(c==s[i].ch)
{s[i].i++;
if(s[i].i==0)
{s[k].ch=c;
s[k++].i=1;
while(s[i].i>
%c=%d"
s[i].ch,s[i].i);
i++;
23、编写程序,读入磁盘上C语言源程序文件"
test8.c"
,删去程序中的注释后显示。
FILE*fp;
{intc,d;
if((fp=fopen("
d:
\\tc\\test8.c"
"
r"
))==NULL)
exit(0);
while((c=fgetc(fp))!
=EOF)
if(c=='
)/*如果是字符注释的起始字符'
if((d=fgetc(fp))=='
)/*则判断下一个字符是否为'
in_comment();
/*调用函数处理(删除)注释*/
else/*否则原样输出读入的两个字符*/
{putchar(c);
putchar(d);
'
||c=='
\"
)/*判断是否是字符'
或"
*/echo_quote(c);
/*调用函数处理字符'
包含的字符*/elseputchar(c);
}in_comment()
c=fgetc(fp);
d=fgetc(fp);
while(c!
||d!
)
{/*连续的两个字符不是*和/则继续处理注释*/
c=d;
d=fgetc(fp);
echo_quote(c)
intc;
/*c中存放的是定界符'
{intd;
putchar(c);
while((d=fgetc(fp))!
=c)/*读入下一个字符判断是否是定界符c*/
/*当不是定界符c时继续循环*/
if(d=='
)/*若出现转义字符\*/
putchar(fgetc(fp));
/*则下一个字符不论是何均原样输出*/