C语言集中上机题目
第一次实验 循环
1 编程
1.1 打印出以下图案
* * * * * * * * * * * * * * * *
* * * * *
* * *
*
1.2 编写程序实现输入整数n,输出如下所示由数字组成的菱形。(图中n=5) 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 3 2 1 1 2 3 2 1 1 2 1 1 2 思考题
1.以下不是死循环的语句是 。 A)for (y=1,x=9;x>++y ; x=i++) i=x ; B)for ( ; ; x++=i ) ; C)while (1) { x++ ; }
D)for (i=10 ; ; i--) sum+=i ;
2. 下面程序段的运行结果是 。
x=y=0;
while (x<15) y++,x+=++y ; printf(“%d,%d”,y,x);
A)20,7 B)6,12 C)20,8 D)8,20 3. 以下for循环的执行次数是 。
1
for (x=0,y=0; (y=123) && (x<4) ; x++) ;
A)无限循环 B)循环次数不定 C)4次 D)3次 4.写出下面程序运行的结果。
main ( )
{ int i,b,k=0 ;
for (i=1; i<=5 ; i++) { b=i%2;
while (b--==0) k++ ; }
printf(“%d,%d”,k,b); }
5. 写出下面程序运行的结果。
main ( ) { int a,b;
for (a=1,b=1 ; a<=100 ; a++) { if (b>=20) break;
if (b%3==1) { b+=3 ; continue ; } b-=5; }
printf(“%d\\n”,a); }
6. 写出下面程序运行的结果。
main ( )
{ int k=1,n=263 ;
do { k*= n ; n/=10 ; } while (n) ; printf(“%d\\n”,k); }
第二次实验 数组
1 编程
1.1 打印以下图案:
* * * * * * * * * * * * * * * * * * * * * * * * *
1.2 输入4×4的数组,编写程序实现: (1)求出对角线上各元素的和;
(2)求出对角线上行、列下标均为偶数的各元素的积; (3)找出对角线上其值最大的元素和它在数组中的位置。
2
2 思考题
1.下面程序的输出结果是 。
main ( )
{ char ch[7]=”12ab56”; int i,s=0;
for (i=0;ch[i]>?0?&&ch[i]<=?9?;i+=2) s=10*s+ch[i]-?0?; printf(“%d\\n”,s); }
A)1 B)1256 C)12ab56 D)ab 2.下面程序段的输出结果是 。
char c[5]={?a?,?b?,?\\0?,?c?,?\\0?} printf(“%s”,c);
A)?a??b? B)ab C)ab c D)abc 3.mian()
{ int m[] [3]={1,4,7,2,5,8,3,6,9}; int i, j, k=2; for(i=0;i<3;i++)
printf(“%d”,m[k][i]); }
A)456 B)258 C)369 D)789 4. 当从键盘输入18并回车后,下面程序的运行结果是________. main()
{int x,y,i,a[8],j,u,v; scanf(\ y=x;i=0; do {u=y/2; a[i]=y%2; i++;y=u; }while(y>=1) for(j=i-1;j>=0;j--) printf(\
5.若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为______.
3
(假设a[0][0]位于数组的第一个位置上。)
a)i*m+j b)j*m+i c)i*m+j-1 d)i*m+j+1
6. 当运行下面程序时,从键盘上输入7 4 8 9 1 5↙,则写出下面程序的运行结果。 main ( )
{ int a[6],i,j,k,m; for (i=0 ; i<6 ; i++) scanf (“%d”,&a[i]); for (i=5 ; i>=0; i--) { k=a[5];
for (j=4; j>=0; j--) a[j+1]=a[j] ; a[0]=k;
for (m=0 ; m<6 ; m++) printf(“%d ”,a[m]); printf(“\\n”); } }
第三次实验 函数
1 编程
1.1 写一函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字间空一个空格。如输入1990,应输出“1└┘9└┘9└┘0”。 1.2 用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数。
2 思考题
1.fun(int a,int b)
{ if(a>b) return(a); else return(b); }
main()
{ int x=3,y=8,z=6,r; r=fun(fun(x,y),2*z); printf(“%\\d\\n”,r); }
程序运行后的输出结果是
A)3 B)6 C)8 D)12
2.以下不正确的说法是 。
A)全局变量,静态变量的初值是在编译时指定的 B)静态变量如果没有指定初值,则其初值为0 C)局部变量如果没有指定初值,则其初值不确定
4
D)函数中的静态变量在函数每次调用时,都会重新设置初值
3.写出下面程序的运行结果。
# define MAX 10 int a[MAX], i ; sub1 ( )
{ for (i=0; i sub2 ( ) { int a[MAX], i ,max ; max=5; for (i=0; i sub3 (int a[ ]) { int i ; for (i=0; i main ( ) { sub1( ); sub3(a); sub2( ); sub3(a); } 4. 若输入的值是-125,写出下面程序的运行结果。 #include for (k=2; k<=sqrt(n); k++) { r = n % k ; while (!r) { printf(“%d”,k); n=n/k; if (n>1) printf(“*”); r = n % k ; } } if (n!=1) printf(“%d\\n”,n); } main ( ) { int n ; scanf(“%d”,&n); printf(“%d=”,n); if (n<0) printf(“-”); n = fabs(n); fun(n); } 5. 写出下面程序的运行结果。 int i=0; fun1 (int i) 5