两个C语言编程题,对C语言只有那么头疼了。教求高手的指点。

编程打印用“偶数”构成的n行下三角三角形,行数n从键盘输入。
【输入形式】一个整数
【输出形式】参见样例
【样例输入】5
【样例输出】

2
4 6
8 10 12
14 16 18 20
22 24 26 28 30

从键盘输入两个正整数,输出这两个整数的商,要求商的小数点后保留30位整数。例如输入355和113,输出3.141592920353982300884955752212
【输入形式】两个整数,逗号作分隔符
【输出形式】参见样例
【样例输入】355,113
【样例输出】3.141592920353982300884955752212

第1个回答  2011-09-30
第一题:
int main()
{
unsigned int n,m,i,num;
num = 2;
scanf("%d", &n);
for ( i = 1; i <= n; ++i)
{
for ( m = 1; m <= i; ++m, num+=2 ) printf("%d ", num);
printf("\n");
}
return 0;
}

第二题:
#include <stdio.h>

void div(int a, int b, int n, char* ans)
{
int last_d = 0;

if (( a > 0 && b < 0 ) || ( a < 0 && b > 0 ))
{
*(ans++) = '-';
}

a = a > 0 ? a : -a;
b = b > 0 ? b : -b;

// 1. Integer part
ans += sprintf(ans, "%d", a/b);

if ( n >= 0 ) *(ans++) = '.';

// 2. Float part
while ( --n > 0 )
{
a %= b; a *= 10;
if ( a < b ) *(ans++)='0';
else ans += sprintf(ans, "%d", a/b);
}

// 3. Last digit is a special case
if ( n == 0 )
{
a %= b; a *= 10;
last_d = a/b;
a %= b; a *= 10;
last_d += ( a / b >= 5 ) ? 1 : 0;
ans += sprintf(ans, "%d", last_d) ;
}

*ans = '\0';
}

int main()
{
char s[60];
int a, b;
scanf("%d,%d", &a, &b);
div(a, b, 30, s);
printf("%s\n", s);

return 0;
}
第2个回答  2011-09-30
int i;
sanf("%d", &i);
int num = 2;
for (int line = 0; line < i; line ++) {
for (int column = 0; column < line + 1; column ++) {
printf("%d ", num);
num += 2;
}
printf("\n");
}

第二题:
int main() {
int divisor;
int dividend; // 被除数
scanf("%d %d", $dividend, &divisor); // $换成&,我输入失败
if (divisor <= 0 || dividend < 0) {
printf("input error!");
return 1;
}
printf("%d", dividend/divisor);
dividend = (dividend % divisor) * 10;
if (!dividend) return 0;
printf(".");
for (int index = 0; index < 30; index++) {
printf("%d", dividend/divisor);
dividend = (dividend % divisor) * 10;
if (!dividend) break;
}
return 0;
}追问

谢谢您的提点!请问您能为我解释一下第二题为什么要这样编写吗?我不太理解为什么要这样编写

追答

这和你笔算除法立竖式是一个道理,你对应着立竖式读一读代码就明白了

刚还想到一个效率更高的方法,可是因为修改次数太多,提交不了啦,这里顺便发出来,不过看来你更看不懂了
#include
#include
int main() {
long divisor;
long dividend; // 被除数
scanf("%ld %ld", $dividend, &divisor); // $换成&,我输入失败
if (divisor <= 0 || dividend < 0) {
printf("input error!");
return 1;
}
printf("%d", dividend/divisor);
dividend = dividend % divisor;
if (!dividend) return 0;
int digit = sizeof(long) - 1;
long factor = pow(10, digit);
char decimals[30 + digit + 1];
printf(".");
divisor *= factor;
for (int index = 0; dividend && index < 30; index+=digit) {
dividend *= factor;
sprintf(factor + index, "%d", dividend/divisor);
dividend %= divisor;
}
decimals[index] = decimals[30] = 0;
printf("%s", decimals);
return 0;
}
没编译,可能有错,但就是这个理儿

本回答被提问者采纳
第3个回答  2011-09-30
1、
#include<stdio.h>
int main()
{
int n=0;
int i,j;
int s=1,sum=0;
scanf("%d",n);
for(i=1;i<=n;i++)
for(j=1;j<=s;j++){sum=sum+2;printf("%d ",sum);if(j==s)printf("\n");s++;}
return 0;
}
第二题要是大数相除,等会要上班,晚点再帮你写出来~!追问

谢谢!

追答

#include
int main()
{
int n=0;
int i,j;
int s=0,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
s++;
for(j=1;j<=s;j++){sum=sum+2;printf("%d ",sum);if(j==s)printf("\n");}
}
return 0;
}
第一题修改一下~!不好意思!

两道C语言编程题,大虾尽快帮帮忙
} 注意,你给的那个过程是错的5472576 => 5 +4 +7+2+5+7+6 =36 => 3+6 =9

两道C语言编程题:一、输入一个整数,求它的位数以及各位数字之和。
a\/=10;i++;\/\/i为位数 } printf("%d位数, 各位数字之和为%d\\n",i,sum);} 二:include <stdio.h> int issxh(int number){ int x1,x2,x3;x1=number\/100; \/\/百位数 x2=(number\/10)%10; \/\/十位数 x3=number%10; \/\/个位数 if(x1*x1*x1+x2*x2*x2+x3*x3*x3==number)retur...

C语言编程题,希望高手提点迷津,谢谢!
把int内所有素数打成表。 原理就是倍数排除。然后循环累加 bool is[N]; int prm[M]; \/\/don't break stack; define n\\m int getprm(int n)\/\/modle { int i, j, k = 0;int s, e = (int)(sqrt(0.0 + n) + 1);memset(is, 1, sizeof(is));prm[k++] = 2; is[0] =...

C语言编程,笨小猴那道,帮我看看,实在不知道出什么问题
num=maxn-minn; 应该加上类型声明 即 int num=maxn-minn; 才对 补充1: 前面的没说对, 是缺了个括号,然后 if(num%i==0) {y=0;break} break后面需要一个分号 你的程序格式有点乱 补充2:if(a[i]='\\n') break; 比较操作应该是“==”补充3:for(i=0;i<100;i++){scanf("%d...

C语言编程题,都是基础的,望达人解答。
main(){ int a,b;scanf("%d%d",&a,&b);printf("a+b=%d",a+b);} 2.main(){ int a,b;scanf("%d%d",&a,&b);if(a>b)printf("最小值是%d",b);if(a<b)printf("最小值是%d",a);if(a==b)printf("两个值相等");} 3.main(){ int a,b;scanf("%d%d",&a,&b);p...

C语言编程求助!!!求高手帮忙!感激不尽!
if (str[i]>='0' && str[i]<='9') \/*请修改此处:应该是同时满足这两个条件,如果是你写的条件的话,逻辑上刚好和这条语句相反,认真观察*\/ s=s*10+str[i] - '0'; \/*请修改此处:str[i]表示ascll值,若使用相应整数应减去‘0’*\/ printf("%d\\n",s);return 0;} 2.includ...

c语言编程题,做了一天了,有两题实在不会,老师只教了一点点,让我们自学...
六题,看函数名就知道了。写完才注意到你需要用C语言,但我写的是C++。我也懒得改了,你自己改一下吧,只要把输入输出语句换成C语言的格式就可以了。

c语言编程题求解,感谢!(再讲一下解题思路)
x,y为坐标,lt为每圈左上角的数字(起始),n为阶数。然后递归计算就是了。#include <stdio.h>int get(int x, int y, int lt, int n){ if(x == 0) return lt+y; else if(y == 0) return lt+4*(n-1)-x; else if(y == n-1) return lt+n+x-1; ...

一看到C语言就头疼,怎么才能学好啊
学编程就是在头疼和怀疑自己智商有问题的过程中成长的,学语法的时候加油把每个细节都学好。这还不是关键,学算法的时候才知道,语法其实挺简单的。总之一句话,看书比自己动手结合书更好。好多东西不上机你根本体会不到的。

C语言编程题,求解
include int Get3Num(int a[],int b[],int n){ int i;int sum=0;for(i=0;i<n;i++){ if(a[i]%3==0){ b[sum] = a[i];sum++;} } return sum;} int main(){ int num[20];int num_3[20];int i,j,sum;srand((unsigned int)time(NULL));for(i=0;i<20;i++)...

相似回答