C语言程序设计习题(编程类)
scanf输入整型数组1、从键盘输入任意的字符,按下列规则进行分类计数。
第一类'0','1','2','3','4','5','6','7','8','9'
第二类'+','-','*','/','%','='
第三类其它字符
当输入字符'''时先计数,然后停止接收输入,打印计数的结果。
参考答案:
#include <stdio.h>
void main()
{ int class1, class2, class3;
char ch;
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、从键盘输入十个整数,用插入法对输入的数据按照从小到大的顺序进行排序,将排序后的结 果输出。
参考答案:
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=%d\n", 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到2XN之间的整数和;若N为一个 负数,则求2XN到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=%ld\n",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=%d\n",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: %2d\n”,++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<k; j++)
if(a[j]!=a[k-j-1]) break;
if(j>=k)
{ printf(" %d: ",i);
for(j=0; j<k; j++)
printf("%2d",a[j]);
printf("\n");
)
)
)
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=%d\n",count,a[1]);
}
9、输入5X5的数组,编写程序实现:
⑴求出对角线上各元素的和;
(2)求出对角线上行、列下标均为偶数的各元素的积;
⑶出对角线上其值最大的元素和它在数组中的位置。
参考答案:
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;
)
printfC'SUN=%d\nACCOM=%d\na[%d]=%d\n”,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)贝U输出为:(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<n; i++)
{ printf("a[%d]= ",i);
scanf("%d”,&a[0][i]);
}
while(m<=n) /* m记录已经登记过的数的个数*/
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论