一道C语言基础知识的题大家帮帮忙

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-08-01
高分求一道很基础的C语言题

这个问题的关键之处就是大整数的乘法问题了,给你一个大整数乘法的C程序,你可以在此基础上自己添加一个累加函数以达到你的目的:

//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

#include
#include
#include

void prt(const int *a,int size)
{
int i;
for (i = 0; i<size; i++) {
printf("%u",a[i]);
}
putchar('
');
}
void mst(int *rt,int len,const int *a,int lena,const int b,const int index)
/*计算保存在数组中的整数a与一个小于10的自然数b的乘积,结果保存到rt数组中,index表示b是整个乘法中乘数的第几位*/
{
int i;
int j;
for (i=len-index-1,j=lena-1; j>=0; --j,--i) {
rt[i]+=a[j]*b;
rt[i-1]+=rt[i]/10;
rt[i]%=10;
}

}
int *tran(const char *a)
{
int i,*rt,lena=strlen(a);
rt=malloc(sizeof(int)*lena);
for (i = 0; i<lena; i++) {
rt[i]=a[i]-48;
}

return rt;
}
int *mt(const char *a,const char *b,int *len)
/*返回两个大整数的积,两个大整数以字符串的型式保存在a和b数组中,返回保存相乘结果的整型数组地址,结果的长度由指针len带回*/
{
int i,j,lena=strlen(a),lenb=strlen(b),lenm;
int *ta,*tb,*tc,*mu;
lenm=lena<lenb?lena:lenb;

mu=malloc((lena+lenb)*sizeof(int));
if (lena>=lenb) {
ta=tran(a);
tb=tran(b);
}
else{
i=lena;
lena=lenb;
lenb=i;
ta=tran(b);
tb=tran(a);
}

tc=calloc(lena+lenb,sizeof(int)); /*tc数组保存最终的计算结果*/
for (i = 0; i<lenm; i++) { /*模拟笔算过程,保存每一位的乘积*/
memset(mu,0,(lena+lenb)*sizeof(int));
mst(mu,lena+lenb,ta,lena,tb[lenb-1-i],i);
for (j = lena+lenb-1; j>=0; j--) {/*将每一位的乘积相加,得到最终的结果*/
tc[j]+=mu[j];
if (j>0) tc[j-1]+=tc[j]/10;
tc[j]%=10;
}


}
free(ta);
free(tb);
free(mu);

*len=lena+lenb;
return tc;
}
int main(void)/*调用示例*/
{
char numa[]="123456789123456789",numb[]="9876543219876543210";
int len,*a;
a=mt(numa,numb,&len);/*计算numa和numb和乘积*/
prt(a,len);/*输出计算结果*/
free(a);
return 0;

}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

1、其实,每个人的学习方式,思维习惯,都不太一样。也许,对于一些所谓的经典,但根本不适合与某个人的学习。所以,找到适合自己学习的一些资料,书籍,相关的网站,视频等,很重要。另外,通过学习书中的知识,书中的例子。主要是掌握相关的知识,熟悉、学习相关的编程思想。
2、不要以为书中的一些例子,学习后直接都能,用来解决生活中的问题。生活中的事情,千变万化,丰富多彩,通过学习相关的知识,掌握好良好的编程习惯,思想后,能够自己结合实际情况,解决相关的,现实生活中的问题。

int a=0,b=0,c=0;
c=(a-=a-5),(a=b,b+3);
printf("%d,%d,%d\n",a,b,c);
执行后的输出结果是
B.0,0,5
说明:
先计算c=(a-=a-5),运算顺序是c=(a=a-(a-5)),将a值代入式中c=(a=0-(0-5),结果为c=5,然后再计算(a=b,b+3),可得(a=0,0+3),从整个c=(a-=a-5),(a=b,b+3);逗号表达语句看到,逗号表达式的结果并没有赋给任何变量。所以不作考虑,最后输出结果a=0,b=0,c=5;
要注意逗号运算符的优先级。

问题补充:c=(a-=a-5),(a=b,b+3); 中【(a-=a-5),(a=b,b+3)】是不是也是一个逗号表达式啊?
不是,你理解错误,逗号运算符优先级为最后,(c=(a-=a-5)),((a=b,b+3));这样才算是一个逗号表达式。

a=b,b+3 是逗号表达式,所以,此时a=3,再由C后面的也是个逗号表达式,所以,C=3..

所以,我认为是选:D..不过我不肯定我的答案..呵呵..刚学的C..所以..呵呵..
错了希望见谅..

nt a=0,b=0,c=0;
c=(a-=a-5),(a=b,b+3); //a-5=-5,a=a-(a-5)=0-(-5)=5,a=b=0,a+3=3
a、b的值变为0,第一个括号中的结果5赋给了c
printf("%d,%d,%d\n",a,b,c);

  • 一道C语言基础知识的题大家帮帮忙
    答:int a=0,b=0,c=0;c=(a-=a-5),(a=b,b+3);printf("%d,%d,%d\n",a,b,c);执行后的输出结果是 B.0,0,5 说明:先计算c=(a-=a-5),运算顺序是c=(a=a-(a-5)),将a值代入式中c=(a=0-(0-5),结果为c=5,然后再计算(a=b,b+3),可得(a=0,0+3),从整个c=(a-=...
  • C语言基础题,谁能帮忙解答一下,要有详细注释,谢谢
    答:x = 6.5;c = c * x = 10 * 6.5 = 65;(这里注意下,虽然c是字符型,但是整型也是可以赋给它的,毕竟字符也是和ASCII对应的,字符型的变量,既可以给一个字符,也可以给一个整型值,它也对应一个字符(ASCII对应一个字符),输出的时候,如果格式控制是%d,就是输出字符的ASCII值)f = ...
  • 两道很基础的C语言题 求求好心人帮忙给出答案和解析
    答:第一题,从题目看,main中输入了一个字符数组到item,并把这个item传给delnum处理,delnum中的那个循环,是逐个判断s[i]是否是小于'0'或者大于9,即判断s[i]是否非数字,如果非数字,则用s[j++]=s[i]来将内容保存,举个例子,比如输入a9,在delnum中,第一次循环i=0,s[0]为'a',满足if...
  • 大佬帮忙看看简单的C语言基础题?
    答:大佬帮忙看看简单的C语言基础题? 这个是打印正六边形,但是呢,只适合b=5时,别的就不行了,没有通用性。#include<stdio.h>main(){inta=1;intb;intc;scanf("%d",&b);for(a=1;a<=2*b+3;a++){if(a==2*b)break;elseif(a<... 这个是打印正六边形,但是呢,只适合b=5时,别的就不行了,没有通用...
  • 刚刚做了一些c语言的基础选择题。大家帮我看看对错吧 圈圈的是不会的...
    答:7、++不能用于表达式和常量,AB错,表达式不能做左值,C错,D是对的 12、if(i%5!=0)也就是i不可以被5整除的时候a自增,结果是2 14、D是错的,成员运算符.的优先级高于解引用运算符*,*p.age=20相当于*(p.age)=20,显然有问题 19、long a是有符号长整型,b是短整型,错,CD是无符号...
  • 几道C语言的题,请大家帮帮忙帮我做一下,万分感谢。
    答:一、填空题(每空2分,共20分)1. 结构化程序由(顺序)、(选择)、(循环)三种基本结构组成。2. 若k为int型变量并赋值11,请写出运算++k后的表达式的值(12)和变量k++的值(11).3. c语言主函数是(include),函数体由符号(main)开始,到符号(return 0)结束。4. 请写出以下程序的...
  • 一道C语言的题,不会做,麻烦大家帮下忙,感谢
    答:首先要说的是此题有悖编程思想——计算n个整数的平均值是一件很容易的事,连数组都用不着,题目却不但要数组而且还要动态数组,这样舍近求远并不可取。include "stdio.h"#include <stdlib.h>int main(int argc,char *argv[]){int n,*p,i,sum;while(1){printf("Please enter n(int 0<=n)....
  • C语言的题目,谁帮忙做下,谢谢,
    答:2、C语言中用‘1’和‘0’表示真和假,五、1、include<stdio.h> void main(){ int a[4],i,j,k,x;printf("请输入四个整数\n");for(i=0;i<4;i++)scanf("%d",&a[i]);for(i=0;i<3;i++){ k=i;for(j=i+1;j<4;j++)if(a[j]>a[k])k=j;if(k!=i){x=a[k];...
  • c语言问题,大家帮帮忙
    答:1.t.s[k]==t.c==1所以返回t.s+k;k=0 ,即 t.s =“123”2.当k=1时t.s[k]==t.c==2所以返回t.s+k;,从是s[1]开始,t.s+k =“21”3.当k=2时t.s[k]==t.c==3所以返回t.s+k;,从是s[2]开始,t.s+k =“3”3.都不满足t.s[k]==t.c所以返回t.s;,即,t.s...
  • C语言编程题,大侠们帮帮忙啊(快考试了,指着救命的,悬赏不低啊)_百度...
    答:唉!这些题都还蛮简单的啊,看你需要帮助,还是江湖救济下哈,自己好好体会下啊,代码可直接运行的,祝你好运 第一题 include <stdio.h> int main(){ int n,sum;while(scanf("%d",&n)){ sum = 0;if((n>=0)&&(n<=10)){ sum = n * 60;} else if((n>=11)&&(n<=39)){ su...