几道C语言题目

1.#include <stdio.h>
void main()
{
int n[3],i,j,k;

for(i=0;i<3;i++)
n[i]=0;
k=4;
for(i=0;i<k;i++)
for(j=0;j<3;j++)
n[j]+=n[i]+1;
for(i=0;i<3;i++)
printf(“%5d”,n[i]);
}
输出结果是13,14,17,,帮我在每个语句后面注释下,还有为什么结果是13,14,17.谢谢啦

2.计算2+22+222+2222+……22…2的和
#include <stdio.h>
void main()
{ int s=1,t=1,a,n;
(2)
scanf("%d"&n);
for(int i=2;i<=n;i++) {
t=t*10+1;
(3)
}
(4)
printf("SUM=%d\n",s);
}
(2)a=2 (3)s+=t (4)s*=a
问题:帮我给每个语句注释下,解释下每一句语句的作用,谢谢。

3. 输入10个学生的姓名和成绩,并将其姓名和平均成绩写入到d:\xscj.dat文件中。
#include "stdio.h"
struct score{
char name[10];
float cj[2];};
void main()
{float aver;
struct score n[10];
int i,j;
(5) ;
p=fopen( (6) );
for(i=0;i<10;i++)
{ (7) ;
scanf("%s",&n[i].name);
for(j=0;j<2;j++)
{ scanf("%f", (8) ]);
aver=aver+n[i].cj[j];
}
fprintf( (9) ,"%s,%f",n[i].name,aver/2);
printf("%s,%f\n",n[i].name,aver/2);
}
(10) ;
3. (5) FILE *p (6) “d:\\xscj.dat”,”w” (7)aver=0
(8) &n[i].cj[j] (9) p (10)fclose(p)

问题:希望能帮我解释一下这个程序,完全看不懂的,,谢谢啦,最好语句后面能注释一下。


1. char *p="girl";的含义是定义字符型指针变量p,p的值是字符串"girl"。 (2分) 1. True
2. 两个字符串中的字符个数相同时才能进行字符串大小的比较 (2分) 2. False
3. 如果想使一个数组中全部元素的值为0,可以写成 int a[10]=; (2分) 3. True
4. char c[]="Very Good"; 是一个合法的为字符串数组赋值的语句。 (2分) 4. True
5. 取地址运算符&与指针运算符*的优先级相同,结合方向为自右向左。 (2分) 5. True
6. 在二维数组中,行指针是指向一维数组的指针变量. (2分) 6. True
7. 程序进行编译时,不为形式参数分配存储空间. (2分) 7. True
8. 在语句int *p;和语句printf("%d",*p);中的*p含义相同。 (2分) 8. False
9. 对二维数组a来说,由于a+1与*(a+1)的值相等,因此二者的含义是一样的。 (2分) 9. False
10. 用gets函数可以接收一个含有空格的字符串。 (2分) TRUE
若有说明:int i,j=7,*p=&i;则与i=j;等价的语句是___B___。 (2分)
A. i=*p; B. *p=*&j; C. i=&j; D. i=**p; A B C D 2.
有以下程序段
int n=0,p;
do while(p!=12345&&n<3);
此处do-while循环的结束条件是____A__。 (2分)
A. p的值不等于12345并且n的值小于3
B. p的值等于12345并且n的值大于等于3
C. p的值不等于12345或者n的值小于3
D. p的值等于12345或者n的值大于等于3
A B C D 3.
若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是___D___。 (2分)
A. p=q; B. *p=*q; C. n=*q; D. p=n; A B C D 4.
有以下程序
void fun(char *a, char *b)

main()
{ char c1='A',c2='a',*p1,*p2;
p1=&c1; p2=&c2; fun(p1,p2);
printf("%c%c\n",c1,c2);
}
程序运行后的输出结果是____A____ (2分)
A. Ab B. aa C. Aa D. Bb A B C D 5.
有以下程序
void ss(char *s,char t)
{while(*s)
{if(*s==t) *s=t-'a'+'A';
s++;
}
}
main()
{char str1[100]="abcddfefdbd",c='d';
ss(str1,c); printf("%s\n",str1);
}
程序运行后的输出结果是___B___。 (2分)
A. ABCDDEFEDBD B. abcDDfefDbD C. abcAAfefAbA D. Abcddfefdbd A B C D 6.
为了判断两个字符串s1和s2是否相等,应当使用 (2分) D
A. if (s1= =s2) B. if (s1=s2) C. if ( strcpy (s1,s2)) D. if ( strcmp( s1,s2)= =0 ) A B C D 7.
有如下程序段
int *p,a=10,b=1;
p=&a; a=*p+b;
执行该程序段后,a的值为___B___。 (2分)
A. 12 B. 11 C. 10 D. 编译出错 A B C D 8.
若有定义:int *p[3];,则以下叙述中正确的是____B____ (2分)
A. 定义了一个基类型为int的指针变量p,该变量具有三个指针
B. 定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针
C. 定义了一个名为*p的整型数组,该数组含有三个int类型元素
D. 定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素
A B C D 9.
说明语句"int ( * p ) [] ;"的含义是 (2分) D
A. p是一个指向一维数组的指针变量
B. p是指针变量,指向一个整型数据
C. p是一个指向函数的指针,该函数的返回值是一个整型
D. 以上都不对
A B C D 10.
已知:char b[ 5 ] , *p=b; 则正确的赋值语句是 (2分) C
A. b="abcd"; B. *b="abcd"; C. p="abcd" ; D. *p="abcd";
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-06
1. 为了方便叙述,现将程序的没一行进行编号。(注:语句 for(i=0;i<k;i++) 中的k应该改为3才能运行得出结果 即 for(i=0;i<3;i++)
#include <stdio.h>
void main()
{
int n[3],i,j,k; (1)/变量的定义,定义了一个数组和三个整型变量 /
for(i=0;i<3;i++) (2)/数组的初始化循环开始/
n[i]=0; (3)/循环体部分,进行具体的赋值,结束/
k=4; (4)/这个完全是多余的,可以不用/
for(i=0;i<3;i++) (5)/数组的具体赋值循环开始,这一行是外循环/
for(j=0;j<3;j++) (6)/数组赋值的内循环开始,先外循环再内,比如对i=0的时,j=0,1,2/
n[j]+=n[i]+1; (7)/数组赋值的循环体部分,进行具体的赋值,循环结束/
for(i=0;i<3;i++) (8) 把上面循环对数组的赋值进行打印的循环
printf(“%5d”,n[i]); (9)/具体的输出内容/
}
注:n[j]+=n[i]+1; 等效于n[j]=n[j]+(n[i]+1);
(1)---(4)比较简单,就不说了。具体说说(5)--(7)是怎么执行的。具体过程如下:
首先,对 i 进行赋值,i=0时,j 分别等于 0,1,2.,把 i,j 的值带入n[j]+=n[i]+1;表达式中
执行 n[0]=n[0]+(n[0]+1);n[1]=n[1]+(n[0]+1);n[2]=n[2]+(n[0]+1);执行完以后,
n[0]=0+0+1=1;n[1]=0+1+1=2,;n[2]=0+1+1=2;
其次,重复以上步骤,i=1时,j分别等于0,1,2,把 i,j 的值带入n[j]+=n[i]+1;表达式中,
执行 n[0]=n[0]+(n[1]+1);n[1]=n[1]+(n[1]+1);n[2]=n[2]+(n[1]+1);执行完以后,
n[0]=1+2+1=4;n[1]=2+2+1=5,;n[2]=2+5+1=8;
最后,i=2时,把 i,j 的值带入n[j]+=n[i]+1;表达式中,
执行n[0]=n[0]+(n[2]+1);n[1]=n[1]+(n[2]+1);n[2]=n[2]+(n[2]+1)执行完以后,
n[0]=4+8+1=13;n[1]=5+8+1=14,;n[2]=8+8+1=17;
2.
#include <stdio.h>
void main()
{ int s=1,t=1,a,n; 定义变量并赋初值
(2) 对a进行赋值
scanf("%d"&n); 从键盘输入一个数,并保存到变量n 中
for(int i=2;i<=n;i++) 决定计算次数的循环
{
t=t*10+1; 对t进行重新赋值
(3) 对s进行重新赋值
}
(4) 计算s的最终值
printf("SUM=%d\n",s); 输出
}
(2)a=2 (3)s+=t (4)s*=a

至于第三个,属于文件的题,我也不懂了。
如果没看懂我上面说的两道题,还可以问我本回答被提问者采纳
第2个回答  2011-06-07

1、
main()
{
int i, j;
for (i=0;i<34;i++)//大马
for (j=0;j<(100-i*3)/2+1;j++)//中马
if ((100-i-j)%2==0 && 3*i+2*j+(100-i-j)/2 ==100)
printf("%d\t%d\t%d\n",i,j,100-i-j);

}
2、
x=35 y=-4 s=-29
3、
void strInverse(char* str)
{
assert(str != NULL); //断言判断其不为空
char * p1 = str;
char * p2 = str-1;
while(*++p2); //一般要求不能使用库函数strlen
p2 -= 1;
while(p1<p2)
{
char c = *p1;
*p1++ = *p2;
*p2-- = c;
}
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网