
请帮我解析几道C语言填空题?
9.22以下程序的输出结果是:#include<stdio.h>#defineN5intfun(char*s,chara,intn){intj;*s=a;j=n;whil...
9.22 以下程序的输出结果是:
#include<stdio.h>
#define N 5
int fun(char *s,char a,int n)
{ int j;
*s=a;j=n;
while(a<s[j]) j--;
return j;
}
main()
{ char s[N+1];int k;
for(k=1;k<=N;k++) s[k]='A'+k+1;
printf("%d\n",fun(s,'E',N));
}
答案: 3
疑问:完全就不知道3是怎么运算出来的?
9.23 若输入3个整数3 2 1,则以下程序的输出结果是:
#include<stdio.h>
void sub(int n,int uu[])
{ int t;
t=uu[n--];t+=3*uu[n];
n++;
if(t>=10) {uu[n++]=t/10; uu[n]=t%10;}
else uu[n]=t;
}
main()
{ int i,n,aa[10]={0};
scanf("%d%d%d",&n,&aa[0],&aa[1]);
for(i=1;i<n;i++) sub(i,aa);
for(i=0;i<=n;i++) printf("%d",aa[i]);
printf("\n");
}
答案:2721
请说一下2721这数组的运算?
9.25 以下findmax返回s所指数组中最大元素的下标,数组中元素的个数由t传入,
请填空。
int findmax(int s[],int t)
{ int k,p;
for(p=0,k=p;p<t;p++) if(s[p]>s[k])__[1]___
return___[2]____
}
答案:k=p k
前面for结构不是就有k=p了吗,怎么后面还填上k=p?
9.26 以下程序统计从终端输入的字符中每个大写字母的个数,num[0]中统计字
母A的个数,其他以此类推。用#号结束输入。请填空。
#include<stdio.h>
#include<ctype.h>
main()
{ int num[26]={0},i;char c;
while(__[1]____ !='#')
if(isupper(c)) num[ __[2]__ ]+=1;
for(i=0;i<26;i++)
if(num[i]) printf("%c:%d\n",i+'A',num[i]);
}
答案 (c=getchar())
c-'A'
为什么第二空填c-'A'? 展开
#include<stdio.h>
#define N 5
int fun(char *s,char a,int n)
{ int j;
*s=a;j=n;
while(a<s[j]) j--;
return j;
}
main()
{ char s[N+1];int k;
for(k=1;k<=N;k++) s[k]='A'+k+1;
printf("%d\n",fun(s,'E',N));
}
答案: 3
疑问:完全就不知道3是怎么运算出来的?
9.23 若输入3个整数3 2 1,则以下程序的输出结果是:
#include<stdio.h>
void sub(int n,int uu[])
{ int t;
t=uu[n--];t+=3*uu[n];
n++;
if(t>=10) {uu[n++]=t/10; uu[n]=t%10;}
else uu[n]=t;
}
main()
{ int i,n,aa[10]={0};
scanf("%d%d%d",&n,&aa[0],&aa[1]);
for(i=1;i<n;i++) sub(i,aa);
for(i=0;i<=n;i++) printf("%d",aa[i]);
printf("\n");
}
答案:2721
请说一下2721这数组的运算?
9.25 以下findmax返回s所指数组中最大元素的下标,数组中元素的个数由t传入,
请填空。
int findmax(int s[],int t)
{ int k,p;
for(p=0,k=p;p<t;p++) if(s[p]>s[k])__[1]___
return___[2]____
}
答案:k=p k
前面for结构不是就有k=p了吗,怎么后面还填上k=p?
9.26 以下程序统计从终端输入的字符中每个大写字母的个数,num[0]中统计字
母A的个数,其他以此类推。用#号结束输入。请填空。
#include<stdio.h>
#include<ctype.h>
main()
{ int num[26]={0},i;char c;
while(__[1]____ !='#')
if(isupper(c)) num[ __[2]__ ]+=1;
for(i=0;i<26;i++)
if(num[i]) printf("%c:%d\n",i+'A',num[i]);
}
答案 (c=getchar())
c-'A'
为什么第二空填c-'A'? 展开
7个回答
展开全部
9.22——for(k=1;k<=N;k++) s[k]='A'+k+1;这一句的结果是s[0]未知、s[1]=='C'、s[2]=='D'、s[3]=='E'、s[4]=='F'、s[5]=='G'。fun(s,'E',N)这一句调用fun,fun中*s=a使s[0]=='E',然后j=n;使j==N也就是j==5。下面while(a<s[j]) j--;中a<s[j]就是'E'<s[j],s[5]=='G','E'<'G'成立j--为4后继续循环'E'<'F'也成立,j再减1为3后继续循环,'E'<'E'不再成立退出while反回j,看,这时的j刚好是3。
9.23——scanf("%d%d%d",&n,&aa[0],&aa[1]);后n==3,aa[0]==2,aa[1]==1,aa[2]~aa[9]==0。for(i=1;i<n;i++) sub(i,aa);实际就是sub(1,aa);sub(2,aa);。第一次调用sub(1,aa)中t=uu[n--]是t=uu[1]==aa[1]==1;t+=3*uu[n]-->t=t+3*aa[0]=1+3*2==7;然后n++恢复n==1。由于t>=10不成立,执行uu[1]=t;使aa[1]=7。第二次调用sub(2,aa)中t=uu[2]==aa[2]==0;t+=3*uu[n]-->t=t+3*aa[1]=0+3*7==21;这时t>=10成立,执行{uu[n++]=t/10和uu[n]=t%10,前者uu[2]=21/10==2,即aa[2]==2; 后者uu[3]=21%10==1,即aa[3]==1。主函数中for(i=0;i<=n;i++) printf("%d",aa[i]);输出aa[0]~aa[3],由于"%d"中的d后没有间隔,所以屏幕上就是2721,实际只是2、7、2、1四个数连起来了,并不是2721一个整数。
9.25——你不知道for的()中的第一个分号前的语句只在进入循环时执行一次吗?当for循环一次后p==1了,而k还是0,这不是就不等了吗?所以k保存了元素值最大的元素下标。
9.26——题目说了:num[0]中是'A'的个数,依次类推,意思是说num[1]中就是'B'的个数,num[2]中就是'C'的个数……num[25]中就是'Z'的个数。若c=='B',num[c-'A']不就是num['B'-'A'],这也就是num[1]呀,不刚好与num[1]存放'B'的个数对应吗?
9.23——scanf("%d%d%d",&n,&aa[0],&aa[1]);后n==3,aa[0]==2,aa[1]==1,aa[2]~aa[9]==0。for(i=1;i<n;i++) sub(i,aa);实际就是sub(1,aa);sub(2,aa);。第一次调用sub(1,aa)中t=uu[n--]是t=uu[1]==aa[1]==1;t+=3*uu[n]-->t=t+3*aa[0]=1+3*2==7;然后n++恢复n==1。由于t>=10不成立,执行uu[1]=t;使aa[1]=7。第二次调用sub(2,aa)中t=uu[2]==aa[2]==0;t+=3*uu[n]-->t=t+3*aa[1]=0+3*7==21;这时t>=10成立,执行{uu[n++]=t/10和uu[n]=t%10,前者uu[2]=21/10==2,即aa[2]==2; 后者uu[3]=21%10==1,即aa[3]==1。主函数中for(i=0;i<=n;i++) printf("%d",aa[i]);输出aa[0]~aa[3],由于"%d"中的d后没有间隔,所以屏幕上就是2721,实际只是2、7、2、1四个数连起来了,并不是2721一个整数。
9.25——你不知道for的()中的第一个分号前的语句只在进入循环时执行一次吗?当for循环一次后p==1了,而k还是0,这不是就不等了吗?所以k保存了元素值最大的元素下标。
9.26——题目说了:num[0]中是'A'的个数,依次类推,意思是说num[1]中就是'B'的个数,num[2]中就是'C'的个数……num[25]中就是'Z'的个数。若c=='B',num[c-'A']不就是num['B'-'A'],这也就是num[1]呀,不刚好与num[1]存放'B'的个数对应吗?
展开全部
9.22 以下程序的输出结果是:
#include<stdio.h>
#define N 5
int fun(char *s,char a,int n)
{ int j;
*s=a;//s[0]=a
j=n;
while(a<s[j]) j--;//比较数组s[]中第一个不少于a的字母的位置
return j;
}
main()
{ char s[N+1];int k;
for(k=1;k<=N;k++) s[k]='A'+k+1;//s[]=CDEFG
printf("%d\n",fun(s,'E',N));//调用fun();s[0]=E,s[5]>E,s[4]>E,s[3]=E,所以返回3
}
9.23
#include<stdio.h>
void sub(int n,int uu[])
{ int t;
t=uu[n--];//t=uu[n];n--
t+=3*uu[n];
n++;
if(t>=10) {uu[n++]=t/10;//uu[n]=t/10,n++
uu[n]=t%10;}
else uu[n]=t;
}
main()
{ int i,n,aa[10]={0};
scanf("%d%d%d",&n,&aa[0],&aa[1]);
for(i=1;i<n;i++) sub(i,aa);//sub(1,aa):t=aa[1]=1,t=t+3*aa[0]=1+6=5,aa[1]=t=7
//sub(2,aa):t=aa[2]=0;t=t+3*aa[1]=0+21=16>10,aa[2]=2,aa[3]=6
//sub(3,aa):t=aa[3]=6;t=t+3*aa[2]=6+6=12>10.aa[3]=1,aa[4]=2
for(i=0;i<=n;i++) printf("%d",aa[i]);//aa[]=2,7,2,1.......
printf("\n");
}
9.25for里面的是初始条件
9.26.26个字母的值是按顺序递增的,字母相减的值就是要存放的数组的下标值
#include<stdio.h>
#define N 5
int fun(char *s,char a,int n)
{ int j;
*s=a;//s[0]=a
j=n;
while(a<s[j]) j--;//比较数组s[]中第一个不少于a的字母的位置
return j;
}
main()
{ char s[N+1];int k;
for(k=1;k<=N;k++) s[k]='A'+k+1;//s[]=CDEFG
printf("%d\n",fun(s,'E',N));//调用fun();s[0]=E,s[5]>E,s[4]>E,s[3]=E,所以返回3
}
9.23
#include<stdio.h>
void sub(int n,int uu[])
{ int t;
t=uu[n--];//t=uu[n];n--
t+=3*uu[n];
n++;
if(t>=10) {uu[n++]=t/10;//uu[n]=t/10,n++
uu[n]=t%10;}
else uu[n]=t;
}
main()
{ int i,n,aa[10]={0};
scanf("%d%d%d",&n,&aa[0],&aa[1]);
for(i=1;i<n;i++) sub(i,aa);//sub(1,aa):t=aa[1]=1,t=t+3*aa[0]=1+6=5,aa[1]=t=7
//sub(2,aa):t=aa[2]=0;t=t+3*aa[1]=0+21=16>10,aa[2]=2,aa[3]=6
//sub(3,aa):t=aa[3]=6;t=t+3*aa[2]=6+6=12>10.aa[3]=1,aa[4]=2
for(i=0;i<=n;i++) printf("%d",aa[i]);//aa[]=2,7,2,1.......
printf("\n");
}
9.25for里面的是初始条件
9.26.26个字母的值是按顺序递增的,字母相减的值就是要存放的数组的下标值
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
9.22 解:在main中,s[ ]={ '','C','D','E','F','G'} (s[0]暂无值) ('A'+1就等于'B')
然后调用fun函数,*s=a就是s[0]='E',j=n=5
while循环,
第一次 'E'<s[5]='G' 成立,j变为4
第二次 'E'<s[4]='F' 成立,j变为3
第三次 'E'<s[3]='E' 不成立 循环结束
最后j=3,即fun(s,'E',N)=3
9.26 由于num[0]存放A的个数,当输入为A时,num[c-'A']就是num[0],刚好符合题意
9.25 刚开始是以s[k]=s[0]作为比较标准.当s[p]>s[0]时,就以那次比较的s[p]这个数作为新的比较标准
自然需要有语句k=p,最后最大值的下标存放在k中
然后调用fun函数,*s=a就是s[0]='E',j=n=5
while循环,
第一次 'E'<s[5]='G' 成立,j变为4
第二次 'E'<s[4]='F' 成立,j变为3
第三次 'E'<s[3]='E' 不成立 循环结束
最后j=3,即fun(s,'E',N)=3
9.26 由于num[0]存放A的个数,当输入为A时,num[c-'A']就是num[0],刚好符合题意
9.25 刚开始是以s[k]=s[0]作为比较标准.当s[p]>s[0]时,就以那次比较的s[p]这个数作为新的比较标准
自然需要有语句k=p,最后最大值的下标存放在k中
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
默认为返回int
7.3》
int f(int a,int b)//a=2, b=3
{ int c;
c=a;//c=2
if(a>b) c=1;// 2>3?为假
else if(a==b) c=0;//2==3?为假
else c=-1;//于是c=-1
return(c);//返回了-1,就是p的值了
}
////////////////////////////////////
7.6》c传的是值,而不是地址,因此fun函数不会改变C的值
=============
7.7
a=0.0
a =a+f(1)+f(2)+f(3)
看懂了吧 ,不懂的话继续展开
7.3》
int f(int a,int b)//a=2, b=3
{ int c;
c=a;//c=2
if(a>b) c=1;// 2>3?为假
else if(a==b) c=0;//2==3?为假
else c=-1;//于是c=-1
return(c);//返回了-1,就是p的值了
}
////////////////////////////////////
7.6》c传的是值,而不是地址,因此fun函数不会改变C的值
=============
7.7
a=0.0
a =a+f(1)+f(2)+f(3)
看懂了吧 ,不懂的话继续展开
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
9.22 分析:
for循环后 有了数组 s[1] 到s[6]的值 分别是 C D EFGH
s〔6〕=H
fun(s,'E',N)调用函数 s为数组的首地址,就是s〔0〕的地址
*s = E 就是 s[0]=E j=n=N=6
这样就可以进行while 比较 E<F j=5 E<G j=4 E<F j=3
E<E 不成立 j=3
9.25
你说的k=p是初始条件 不进入循环的 只是用来第一次比较的
9.26
num[0]代表A
num[1]代表B
num[2]代表C
依次
。。。。。
其中num[1]的1 不就是 B-A
for循环后 有了数组 s[1] 到s[6]的值 分别是 C D EFGH
s〔6〕=H
fun(s,'E',N)调用函数 s为数组的首地址,就是s〔0〕的地址
*s = E 就是 s[0]=E j=n=N=6
这样就可以进行while 比较 E<F j=5 E<G j=4 E<F j=3
E<E 不成立 j=3
9.25
你说的k=p是初始条件 不进入循环的 只是用来第一次比较的
9.26
num[0]代表A
num[1]代表B
num[2]代表C
依次
。。。。。
其中num[1]的1 不就是 B-A
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询