论述题3: 已知C源程序如下: /*longIntAdd*/ #include<stdio.h> #include<string.h> #define LENGTH 81 void addLInt(char s1[],char s2[]); void reverse(char s[]); int main( ) { char intstr1[LENGTH],intstr2[LENGTH]; printf("请输入超长整数的被加数和加数:/n"); scanf("%s%s",intstr1,intstr2); addLInt(intstr1,intstr2); printf("超长整数和为:%s",intstr1); return 0; } void addLInt(char s1[],char s2[]) { int i=0,tmp,c=0; char s[LENGTH]; if(strlen(s1)<strlen(s2)){ strcpy(s,s1); strcpy(s1,s2); strcpy(s2,s); } reverse(s1);reverse(s2); while(s2[i]!=;/0’){ tmp=s1[i]-’0’+s2[i]-’0’+c; 81[i]=tmp%10+’0’; c=tmp/10; i++; } while(si[1]!=’/0’&&c){ tmp=s1[i]-’0’+c; s1[i]=tmp%10+’0’; c=tmp/10; i++; } If(c){ s1[i++]=c+’0’; s1[i]=’/0’; } reverse(s1); } void reverse(char s[]) { int i,j,c; for(i=0,j=strlen(s)-1;i<j;i++,j--){ c=s[i]; s[i]=s[j]; s[j]=c; } }
画出程序中函数addLInt的控制流程图;
已知C源程序如下:
/*分数运算 fsys.c*/
#include<stdio.h>
int main( )
long int a,b,c,d,i,x,y,z;
char op;
printf("两分数b/a,d/c作+、-、*、/四则运算。结果为分数。/n");
printf("请输入分数运算式:b/a op d/c/n");
scanf("%ld/%ld%c%ld%ld",&b,&a,&op,&d,&C) ;
if(a==0||c==0)
printf("分母为0,输入错误!/n");
return(0);
if(op==’+’)
y=b*c+d*a;
x=a*c; /*运算结果均为y/x*/
if(op==’-’)
y=b*c-d*a;
x=a*c;
if(op==’*’)
y=b*d;
x=a*c;
if(op==’/’)
y=b*c;
x=a*d;
z=x;
if(x>y)z=y;
i=z;
while(i>1)
if(x%i==0&&y%i==0)x=x/i;y=y/i;continue;;
i——;
printf("%ld/%ld%c%ld/%ld=%ld/%ld./n",b,a,op,d,c,y,x);
return 0;
已知C源程序如下:
#include
已知C源程序如下:
/*Input today’s date,output tomorrow’s date*/
/*version 2*/
#include<stdio.h>
struct ydate
int day;int month;int year;;
int leap(struct ydate d)
if((d.year%4==0&&d.year%100!=0)||(d.year%400==0))
return 1;
else
return 0;
int numdays(struct ydate d)
int day;
static int daytab[]=
31,28,31,30,31,30,31,31,30,31,30,31);
if(leap(d)&&d.month==2)
day=29;
else
day=daytab[d.month-1];
return day;
int main(void)
struct ydate today,tomorrow;
printf("format of date is:year,month,day 输入的年、月、日之间应用逗号隔开/n");
printf("today is:");
scanf("%d,%d,%d",&today.year,&today.month,&today.day);
while(0>=today.year
|| today.year>65535 || 0>=today.month || today.mon
已知计算个人所得税的C源程序如下:
/*sds.c*/
double sds(double y)
double x;
if(y<=2000) x=0;
else if(y<=3600)
x=(y-2000)*0.05;
else if(y<=6600)
x=sds(3600)+(y-3600)*0.1;
else if(y<=21600)
x=sds(6600)+(y-6600)*0.2;
else if(y<=61600)
x=sds(21600)+(y-21600)*0.3;
else if(y<=101600)
x=sds(61600)+(y-61600)*0.4;
else x=sds(101600)+(y-101600)*0.5;
return(x);
#include<stdio.h>
int main( )
double y,x;
printf("请输入收入:/n");
scanf("%If",&y);
x=sds(y);
printf("应缴个人所得税为:sds(%9.2f)=%9.2f",y,x);
return 0;
已知检查括号匹配及注释、字符串处理的C源程序如下:
#include<stdio.h>
int brace,brack,paren;
void in_quote(int c);
void in_comment(void);
void search(int c);
/*rudimentary syntax checKer for C program*/
int main( )
int c;
extern int brace,brack,paren;
while((c=getchar( ))!=EOF)
if(c==’/’)
if((c=getchar( ))==’*’)
in_comment( ); /*inside comment*/
else
search(C) ;
else if(c==’/"||c=="")
in_quote(c); /*inside quote*/
else
search(c);
if(brace<0) /*output errors*/
printf("Unbalanced braces/n");
brace=0;
else if(brack<0)
printf("Unbalanced brackets/n");
brack=0;
else if(paren<0)
printf("Unbalanced parentheses/n");
paren=0;
if(brace>0) /*output errors*/
已知检查括号匹配及注释、字符串处理的C源程序如下: #include<stdio.h> int brace,brack,paren; void in_quote(int c); void in_comment(void); void search(int c); /*rudimentary syntax checKer for C program*/ int main( ) { int c; extern int brace,brack,paren; while((c=getchar( ))!=EOF){ if(c==’/’){ if((c=getchar( ))==’*’) in_comment( ); /*inside comment*/ else search(C) ; }else if(c==’/"||c=="") in_quote(c); /*inside quote*/ else search(c); if(brace<0){ /*output errors*/ printf("Unbalanced braces/n"); brace=0; }else if(brack<0){ printf("Unbalanced brackets/n"); brack=0; }else if(paren<0){ printf("Unbalanced parentheses/n"); paren=0; } } if(brace>0) /*output errors*/ printf("Unbalanced braces/n"); if(brack>0) printf("Unbalanced brackets/n"); if(paren>0) printf("Unbalanced parentheses/n"); return 0; } /*search:search for rudimentary syntax errors*/ void search(int c) { extern int brace,brack,paren; if(c==&rsqu
我来回答: