C语言程序设计习题精彩试题编程题.docx

上传人:b****7 文档编号:10209927 上传时间:2023-02-09 格式:DOCX 页数:20 大小:20.53KB
下载 相关 举报
C语言程序设计习题精彩试题编程题.docx_第1页
第1页 / 共20页
C语言程序设计习题精彩试题编程题.docx_第2页
第2页 / 共20页
C语言程序设计习题精彩试题编程题.docx_第3页
第3页 / 共20页
C语言程序设计习题精彩试题编程题.docx_第4页
第4页 / 共20页
C语言程序设计习题精彩试题编程题.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C语言程序设计习题精彩试题编程题.docx

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

C语言程序设计习题精彩试题编程题.docx

C语言程序设计习题精彩试题编程题

C语言程序设计习题〔编程类〕

1、从键盘输入任意的字符,按如下规如此进展分类计数。

    第一类'0','1','2','3','4','5','6','7','8','9'

    第二类'+','-','*','/','%','='

    第三类其它字符

当输入字符'\'时先计数,然后停止接收输入,打印计数的结果。

参考答案:

#include

voidmain()

{intclass1,class2,class3;

charch;

class1=class2=class3=0;/*初始化分类计数器*/

do

{ch=getch();

switch(ch)

{case'0':

case'1':

case'2':

case'3':

case'4':

case'5':

case'6':

case'7':

case'8':

case'9':

class1++;break;/*对分类1计数*/

case'+':

case'-':

case'*':

case'/':

case'%':

case'=':

class2++;break;/*对分类2计数*/

default:

class3++;break;/*对分类3计数*/

}

}while(ch!

='\\');/*字符'\'在C程序中要使用转义符'\\'*/

printf("class1=%d,class2=%d,class3=%d\n",class1,class2,class3);

}

2、从键盘输入十个整数,用插入法对输入的数据按照从小到大的顺序进展排序,将排序后的结果输出。

参考答案:

voidmain()

{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;

}

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

printf("No.%d=%d\n",i+1,a[i]);

}

 

3、输入一个正整数,要求以相反的顺序输出该数。

例如输入12345,输出位54321。

参考答案:

voidmain()

{intn;

printf("Pleaseentern:

");

scanf("%d",&n);

while(n>0)

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

n=n/10;

}

}

4、编写程序,读入一个整数N;假如N为非负数,如此计算N到2×N之间的整数和;假如N为一个负数,如此求2×N到N之间的整数和。

分别利用for和while写出两个程序。

参考答案:

voidmain()

{inti,n;

longs1=0,s2=0;

printf("PleaseenterN:

");

scanf("%d",&n);

if(n>=0)

for(i=n;i<=2*n;i++)

s1=s1+i;

else

for(i=n;i>=2*n;i--)

s1=s1+i;

i=n;

if(i>=0)

while(i<=2*n)

s2=s2+i++;

else

while(i>=2*n)

s2=s2+i--;

printf("Result1=%ldresult2=%ld\n",s1,s2);

}

5、一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。

又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。

编写程序求这个自然数。

参考答案:

voidmain()

{inti,n,a;

for(i=0;;i++)

{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)

{printf("result=%d\n",i);

break;

}

}

}

 

6、编写程序,输出用一元人民币兑换成1分、2分和5分硬币的不同兑换方法。

参考答案:

voidmain()

{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)

printf("No.%2d>>5:

%4d2:

%2d1:

%2d\n",++count,f5,f2,f1);

}

}

7、将一个数的数码倒过来所得到的新数叫原数的反序数。

如果一个数等于它的反序数,如此称它为对称数。

求不超过1993的最大的二进制的对称数。

参考答案:

voidmain()

{inti,j,n,k,a[16]={0};

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

{n=i;k=0;

while(n>0)/*将十进制数转变为二进制数*/

{a[k++]=n%2;

n=n/2;

}

for(j=0;j

if(a[j]!

=a[k-j-1])break;

if(j>=k)

{printf("%d:

",i);

for(j=0;j

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

printf("\n");

}

}

}

8、十个小孩围成一圈分糖果,教师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个小孩20块。

然后所有的小孩同时将自己手中的糖分一半给右边的小孩;糖块数为奇数的人可向教师要一块。

问经过这样几次调整后大家手中的糖的块数都一样?

每人各有多少块糖?

参考答案:

voidmain()

{inti,count=0,a[11]={0,10,2,8,22,16,4,10,6,14,20};

while

(1)

{for(i=1;i<=10;i++)

a[i-1]=a[i-1]/2+a[i]/2;

a[10]=a[10]/2+a[0];

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

if(a[i]%2==1)a[i]++;

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

if(a[i]!

=a[i+1])break;

if(i==10)break;

else

{a[0]=0;

count++;

}

}

printf("count=%dnumber=%d\n",count,a[1]);

}

9、输入5×5的数组,编写程序实现:

(1)求出对角线上各元素的和;

(2)求出对角线上行、列下标均为偶数的各元素的积;

(3)找出对角线上其值最大的元素和它在数组中的位置。

参考答案:

voidmain()

{inti,j,s1=0,s2=1,a[5][5];

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

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

{printf("%d%d:

",i,j);

scanf("%d",&a[i][j]);

}

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

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

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

printf("\n");

}

j=0;

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

{s1=s1+a[i][i];

if(i%2==0)s2=s2*a[i][i];

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

}

printf("SUN=%d\nAC=%d\na[%d]=%d\n",s1,s2,j,a[j][j]);

}

 

10、编写程序,以字符形式输入一个十六进制数,将其变换为一个十进制整数后输出。

参考答案:

#include"stdio.h"

voidmain()

{inti,n=0,a[4]={0};

printf("Pleaseenteradigit:

");

for(i=0;i<4&&(a[i]=getchar())!

='\n';i++);

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

if(a[i]>=48&&a[i]<=57)a[i]=a[i]-48;

elseif(a[i]>=65&&a[i]<=69)a[i]=a[i]-55;

elseif(a[i]>=97&&a[i]<=102)a[i]=a[i]-87;

elseprintf("inputError!

");

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

n=n*16+a[i];

printf("%d",n);

}

11、编写程序,输入一个十进制整数,将其变换为二进制后储存在一个字符数组中。

参考答案:

voidmain()

{inti,n,k=16,a[16]={0};

printf("Pleaseenteradigit:

");

scanf("%d",&n);

while(n>0)/*将十进制数转变为二进制数*/

{a[--k]=n%2;

n=n/2;

}

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

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

}

12、对数组A中的N〔0<N<100=个整数从小到大进展连续编号,输出各个元素的编号。

要求不能改变数组A中元素的顺序,且一样的整数要具有一样的编号。

例如数组是:

A=(5,3,4,7,3,5,6)如此输出为:

 (3,1,2,5,1,3,4)

参考答案:

voidmain()

{inti,j,k,n,m=1,r=1,a[2][100]={0};printf("Pleaseentern:

");

scanf("%d",&n);

for(i=0;i

{printf("a[%d]=",i);

scanf("%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[1][k]=r++;/*记录名次,r为名次*/

m++;/*登记过的数增1*/

for(j=0;j

if(a[1][j]==0&&a[0][j]==a[0][k])

{a[1][j]=a[1][k];

m++;

}

break;

}

}

for(i=0;i

printf("a[%d]=%d,%d\n",i,a[0][i],a[1][i]);

}

13、求这样一个三位数,该三位数等于其每位数字的阶乘之和。

        即:

 abc=a!

+b!

+c!

参考答案:

voidmain()

{inta[5],i,t,k;

for(i=100;i<1000;i++)

{for(t=0,k=1000;k>=10;t++)

{a[t]=(i%k)/(k/10);

k/=10;

}

if(f(a[0])+f(a[1])+f(a[2])==i)

printf("%d",i);

}

}

f(m)

intm;

{inti=0,t=1;

while(++i<=m)t*=i;

return(t);

}

 

14、编写一个函数实现将字符串str1和字符串str2合并,合并后的字符串按其ASCII码值从小到大进展排序,一样的字符在新字符串中只出现一次。

参考答案:

#include"string.h"

strcmbn(a,b,c)/*数组合并函数:

将数组a、b合并到*/

chara[],b[],c[];

{chartmp;

inti,j,k,m,n;

m=strlen(a);

n=strlen(b);

for(i=0;i

{for(j=i+1,k=i;j

if(a[j]

tmp=a[i];a[i]=a[k];a[k]=tmp;

}

for(i=0;i

{for(j=i+1,k=i;j

if(b[j]

tmp=b[i];b[i]=b[k];b[k]=tmp;

}

i=0;j=0;k=0;

while(i

if(a[i]>b[j])

c[k++]=b[j++];/*将a[i]、b[j]中的小者存入c[k]*/

else

{c[k++]=a[i++];

if(a[i-1]==b[j])j++;/*如果a、b当前元素相等,删掉一个*/

}

while(i

while(j

c[k]='\0';

}

15、编写函数,采用递归方法实现将输入的字符串按反序输出。

参考答案:

#include"stdio.h"

strout(s)

char*s;

{if(*s!

='\0')

{strout(s+1);/*递归调用strout函数,字符串首地址前移一个字符*/

putch(*s);/*输出字符串首地址所指向的字符*/

}

elsereturn;/*遇到字符串完毕标志完毕递归调用*/

}

16、编写函数,采用递归方法将任一整数转换为二进制形式。

参考答案:

turn(n,a,k)

intn,a[],k;

{if(n>0)

{a[k]=n%2;

turn(n/2,a,k-1);

}

elsereturn;

}

voidmain()

{inti,n,a[16]={0};

printf("\nPleaseentern:

");

scanf("%d",&n);

turn(n,a,15);

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

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

}

17、将一个数的数码倒过来所得到的新数,叫作原数的反序数,如果一个数等于它的反序数,如此称它为对称数。

编写程序,采用递归算法求不超过1993的最大的二进制的对称数。

参考答案:

smmt(chars[])/*指针s指向字符串的第一个字符*/

{char*p;

p=s;

while(*p!

='\0')p++;

p--;/*指针p指向字符串的最后一个字符*/

if(p==s)return

(1);/*两个指针指向同一个字符表示字符串对称*/

else

{if(*s!

=*p)

return(0);/*两个指针指向字符不等表示字符串不对称*/

else

{*p='\0';

smmt(s+1);/*取掉首尾比拟过的字符继续比拟*/

}

}

}

 

18、编写程序,读入一个以符号"."完毕的长度小于20字节的英文句子,检查其是否为回文〔即正读和反读都是一样的,不考虑空格和标点符号〕。

例如:

读入句子:

MADAMI'MADAM.它是回文,所以输出:

YES

读入句子:

ABCDBA).它不是回文,所以输出:

NO

参考答案:

#include"stdio.h"

voidmain()

{chars[21],*p,*q;

gets(s);

p=s;

q=s;

while(*q!

='\0')q++;

q-=2;

while(p

if(*p++!

=*q--)/*指针p、q同时向中间移动,比拟对称的两个字符*/

{printf("NO\n");

break;

}

if(p>=q)

printf("YES\n");

}

19、编写程序,其中包括一个函数,此函数的功能是:

对一个长度为N的字符串从其第K个字符起,删去M个字符,组成长度为N-M的新字符串(其中N、M<=80,K<=N)。

例如输入字符串"Wearepoorstudents.",利用此函数进展删除"poor"的处理,输出处理后的字符串是"Wearestudents."。

参考答案:

strcut(s,m,k)

chars[];

intm,k;

{char*p;

inti;

p=s+m;/*指针p指向要被删除的字符*/

while((*p=*(p+k))!

='\0')/*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!

='\0')

{q=p;

while(*q!

='\0')q++;

while(q>=p)

*(q+1)=*q--;

*++q=*s2++;

p++;

}

}

21、编写程序将输入的两行字符串连接后,将串中全部空格移到串首后输出。

参考答案:

strb(s1,s2)

chars1[],s2[];

{char*p;

inti=1;

p=s1;

while(*p!

='\0')p++;

while((*p++=*s2++)!

='\0');/*将s2接于s1后面*/

p=s1;

while(*p!

='\0')/*扫描整个字符串*/

{if(*p=='')/*当前字符是空格进展移位*/

{while(*(p+i)=='')i++;/*寻找当前字符后面的第一个非空格*/

if(*(p+i)!

='\0')

{*p=*(p+i);/*将非空格移于当前字符处*/

*(p+i)='';/*被移字符处换为空格*/

}

elsebreak;/*寻找非空格时到字符串尾,移位过程完毕*/

}

p++;

}

}

22、编写程序,输入字符串,分别统计字符串中所包含的各个不同的字符与其各自字符的数量。

如:

输入字符串:

abcedabcdcd

如此输出:

a=2b=2c=3d=3e=1。

参考答案:

#include"stdio.h"

structstrnum

{inti;

charch;

}

voidmain()

{charc;

inti=0,k=0;

structstrnums[100]={0,NULL};

while((c=getchar())!

='\n')

{for(i=0;s[i].i!

=0;i++)

{if(c==s[i].ch)

{s[i].i++;

break;

}

}

if(s[i].i==0)

{s[k].ch=c;

s[k++].i=1;

}

}

i=0;

while(s[i].i>0)

{printf("%c=%d",s[i].ch,s[i].i);

i++;

}

}

23、编写程序,读入磁盘上C语言源程序文件"test8.c",删去程序中的注释后显示。

参考答案:

#include"stdio.h"FILE*fp;

voidmain()

{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_ment();/*调用函数处理(删除)注释*/

else/*否如此原样输出读入的两个字符*/

{putchar(c);

putchar(d);

}

else

if(c=='\''||c=='\"')/*判断是否是字符'或"*/echo_quote(c);/*调用函数处理字符'或"包含的字符*/elseputchar(c);}in_ment()

{intc,d;

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*/

{putchar(c);/*当不是定界符c时继续循环*/

if(d=='\\')/*假如出现转义字符\*/

putchar(fgetc(fp));/*如此下一个字符不论是何均原样输出*/

}

putchar(d);

}

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

当前位置:首页 > PPT模板 > 商务科技

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

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