第一篇:C语言程序设计上机指导及习题选解 实验二编程
C语言程序设计上机指导及习题选解
实验2顺序结构程序设计
二、6.实现两个数的对调:
#include
(1)#include
#include
#include
printf(“%lfn”,area);}
第二篇:C语言程序设计习题试题(编程题)
C语言程序设计习题(编程类)
1、从键盘输入任意的字符,按下列规则进行分类计数。
第一类 '0','1','2','3','4','5','6','7','8','9'
第二类 '+','-','*','/','%','='
第三类 其它字符
当输入字符''时先计数,然后停止接收输入,打印计数的结果。参考答案:
#include
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=%dn”, class1, class2, class3); }
2、从键盘输入十个整数,用插入法对输入的数据按照从小到大的顺序进行排序,将排序后的结果输出。参考答案: void main(){ int i,j,num,a[10]; for(i=0;i<10;i++){ printf(“Enter No.%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=%dn”, i+1, a[i]); }
3、输入一个正整数,要求以相反的顺序输出该数。例如输入12345,输出位54321。参考答案: void main(){ int n;
printf(“Please enter n:”); 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写出两个程序。参考答案: void main(){ int i,n;
long s1=0,s2=0;
printf(“Please enter N:”); 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=%ld result2=%ldn”,s1,s2); }
5、一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。又知这个自然数被17除余4,•所得的商被17除余15,最后得到一个商是a的2倍。编写程序求这个自然数。参考答案: void main(){ int i,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=%dn”,i); break; } } }
6、编写程序,输出用一元人民币兑换成1分、2分和5分硬币的不同兑换方法。参考答案: void main(){ int f1,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: %4d 2: %2d 1: %2dn”,++count,f5,f2,f1); } }
7、将一个数的数码倒过来所得到的新数叫原数的反序数。如果一个数等于它的反序数,则称它为对称数。求不超过1993的最大的二进制的对称数。参考答案: void main(){ int i,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 8、十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14 块,第十个小孩20块。然后所有的小孩同时将自己手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块。问经过这样几次调整后大家手中的糖的块数都一样?每人各有多少块糖? 参考答案: void main(){ int i,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=%d number=%dn”,count,a[1]); } 9、输入5×5的数组,编写程序实现:(1)求出对角线上各元素的和; (2)求出对角线上行、列下标均为偶数的各元素的积;(3)找出对角线上其值最大的元素和它在数组中的位置。参考答案: void main(){ int i,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=%dnACCOM=%dna[%d]=%dn”,s1,s2,j,a[j][j]); } 10、编写程序,以字符形式输入一个十六进制数,将其变换为一个十进制整数后输出。参考答案: #include “stdio.h” void main(){ int i,n=0,a[4]={0}; printf(“Please enter a digit:”); 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; else if(a[i]>=65&&a[i]<=69)a[i]=a[i]-55; else if(a[i]>=97&&a[i]<=102)a[i]=a[i]-87; else printf(“input Error!”); for(i=0;i<4;i++)n=n*16+a[i]; printf(“%d”,n); } 11、编写程序,输入一个十进制整数,将其变换为二进制后储存在一个字符数组中。参考答案: void main(){ int i,n,k=16,a[16]={0}; printf(“Please enter a digit:”); 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)参考答案: void main(){ int i,j,k,n,m=1,r=1,a[2][100]={0}; printf(“Please enter n:”); scanf(“%d”,&n); for(i=0;i for(j=i;j 13、求这样一个三位数,该三位数等于其每位数字的阶乘之和。 即: abc = a!+ b!+ c!参考答案: void main(){ int a[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)int m; { int i=0,t=1; while(++i<=m)t*=i; return(t); } 14、编写一个函数实现将字符串str1和字符串str2合并,合并后的字符串按其ASCII码值从小到大进行排序,相同的字符在新字符串中只出现一次。参考答案: #include “string.h” strcmbn(a,b,c)/* 数组合并函数:将数组a、b合并到 */ char a[],b[],c[]; { char tmp; int i,j,k,m,n; m=strlen(a); n=strlen(b); for(i=0;i tmp=a[i]; a[i]=a[k]; a[k]=tmp; } for(i=0;i tmp=b[i]; b[i]=b[k]; b[k]=tmp; } i=0;j=0;k=0; while(i