c语言实践作业,XTU C语言程序设计实践作业3

1.

第一行是一个整数n(1<=n<=1000),表示有多少个数求和;

第二行是n个整数,每个整数都在-10^5到10^5之间,每个整数之间用空格隔开。

输出和的值(不要输出回车)

这个题其实思路很简单就是建一个数组然后累加;但是在累加的过程中我还是出了一些问题,就是我忘记把初始值设置为0;

然后加出来的数特别大让我以为是程序写错了,设为0之后就没问题了;

#include

int main()

{

int i,n,a[1000];

int s = 0;

scanf("%d",&n);

for(i=0;i

{

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

s+= a[i];

}

printf("%d",s);

}

2.

有多个测试用例,每行两个正整数x,y,保证x*y不超过2^31-1。如果x与y都为0,则输入结束。

每行输出一个测试用例的结果,即x与y的最小公倍数。(最后一行有回车)

这个题吧,主要是有多组样例这里用while(scanf("%d%d",&x,&y))表示,x与y都为0用个if表示

然后就是算法问题了,这里判断怎么求最大公约数用的是判断y

#include

int main()

{

int x,y;

while(scanf("%d%d",&x,&y))

{

int c,s;

s= x*y;

if(x==0&&y==0)

return 0;

else

while(y!=0)

{

c = x%y;

x = y;

y = c;

}

printf("%d\n",s/x);

}

}

3

请求N!(N<=10000),输出结果对10007取余

输入

每行一个整数n,遇到-1结束。

输出

每行一个整数,为对应n的运算结果。

这个题求阶乘倒是,没什么问题,主要是那一句输出结果对10007取余,我们知道Int型是不够满足求阶乘,会产生溢出,所以要用长整型long

但是这个题由于对10007取余了,所以还是可以用int

#include

int main()

{

int i,n,s;

while(scanf("%d",&n))

{

s=1;

if(n==-1)

return 0;

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

{

s=(s*i)%10007;

}

printf("%d\n",s);

}

}

4.

青蛙王子

这个题有点复杂

以后再更新

5.

给出一个三角形的底长和高,求三角形的面积。 输入 第一行是一个整数N,表示样例的个数,以后每行两个整数B和H,1<=B,H<=10,000。 输出 每行输出一个三角形的面积,保留一位小数。

这个题吧,首先就是样例的问题,用循环就可以

然后,乘积s是double型而不是float型的,以后要是用float一直错可以换double试试,还有,题目有点错误

题目说的是两个整数,但是事实是浮点数,而且也是double型;

#include

int main()

{

int n;

double b,h;

double s;

scanf("%d",&n);

while(n--)

{

scanf("%lf%lf",&b,&h);

s = b*h/2;

printf("%.1lf\n",s);

}

}

6.

给一个字符串,请将其中的英文字母的大小写进行转换。 输入 第一行是一个整数N,表示样例的个数,以后每行一个字符串。字符串可能由英文字母,数字,各种标点(包括空格)组成,长度不超过200。 输出 每行输出一个转换后的结果。

这个题有很多想说的,好吧第一个坑,长度不超过200,数组要定义在201,因为字符串最后有个/0;

继续说  输入字符串的时候 你的scanf("%d",&n)有个回车,也会被读进字符串中,所以你需要用一个getchar();将这个回车吸收

还有就是 在读取字符串的时候如果用scanf("%s",&a),字符串的空格和Tab是读不进去的,遇到空格会自动停止,所以输入字符串使用gets();

然后就是字符串大小转换了,这个题很有知识

#include

#include

int main()

{

int n;

int i,h;

char a[201];

scanf("%d",&n);

getchar();

while(n--)

{

gets(a);

h = strlen(a);

for(i=0;i

{

if(a[i]>='A'&&a[i]<='Z')

a[i]+=32;

else if(a[i]>='a'&&a[i]<='z')

a[i]-=32;

}

printf("%s\n",a);

}

}

7.

海明距离是在指二进制情况下,一个整数变成另外一个整数需要翻转的位数。比如2转换到3需要翻转1位,所以2到3的海明距离是1。给你两个正整数x和y,(x,y<=1,000,000,000)求它们的海明距离。 输入 第一行是一个整数N,表示样例的个数。以后每行两个整数x和y。 输出 每行输出一个整数,及对应样例的结果。

这一题不怎么会,抄了一点

#include

int main()

{

int n,i,a,b;

scanf("%d",&n);

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

{

scanf("%d%d",&a,&b);

a^=b;   //a,b的异或运算,把运算结果储存在a中;

b=0;    //把b重置为0,用于计数;

while(a)

{

if(a&1)   //二进制a于(二进制)...00001的且运算,同1为1,其余为0;即异或运算后的结果最后一位为1时计数+1

b++;

a>>=1;   //对a进行右移位运算,去掉最低位,下一次循环比较上一位,直至a的值为0;

}

printf("%d\n",b);   //输出异或运算后结果为1的位数有几位,即两个数的海明距离;

}

return 0;

}

8.

计算机中存储的整数都是按补码的型式,一个32位有符号整数的补码的定义为:如果x>=0,则x的补码等于x的二进制表示;如果x<0,那么x的补码为2^32+x的二进制表示。请根据给定的整数,求出它的补码包含有多少位为1。

#include

int main()

{

int t,b;

while(scanf("%d",&b)!=EOF)

{

int a=0;

for(t=0;t<32;t++)

{

if (b&1)

a++;

b=b>>1;

}

printf("%d\n",a);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值