C语言复习题 下载本文

printf(\ printf(\

} return 0; }

5.鸡兔共有30只,脚共有90个,下列程序段是计算鸡兔各有多少只,请填空。

for(x=1;x<=29;x++) {

y=30-x;

if( )printf(\}

三、读程序

#include int main () {

int n1=0,n2=0,n3=0,n4=0; char c;

printf (\请输入一行字符:\\n\ while ((c=getchar())!='\\n') { if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))

n1++;

else if(c= =' ')

n2++ ;

else if(c>='0'&&c<='9')

n3++;

else n4++; }

printf(\英文字母个数为:%d\\n空格个数为:%d\\n数字个数为:%d\\n其他字符的个数为:%d\\n\

return 0; }

根据编译、连接和运行程序回答下列问题:

① 本题的循环进行条件是什么?终止条件是什么?循环体做什么? ② 对循环体的语句加上注释。 ③ 绘制程序的流程图或N-S图。 程序2代码:#include int main () {

int i,j;

for(i=1;i<=5;i++) for(j=1;j<=9;j++) {

if(j<=5-i||j>=5+i) printf(\ else printf(\ if(j= =9) printf(\ }

return 0; }

根据编译、连接和运行程序回答下列问题:

① 本题是双重循环,用到循环变量i,j,其中,它们谁控制行?谁控制列?是如何控制的? ② 程序中的if-else语句在循环体中起什么作用?

③ 将程序中if(j= =9) printf(\语句去掉,重新编译、连接、运行程序,观察程序结果并同原程序结果相比较有何不同,若不同请分析原因及说明该语句在程序中的作用。

程序3代码: 方法1:

#include

#include int main() {

int i,j,a,n,s=0;

printf(\请输入a n\\n\scanf(\ for(j=1;j<=n;j++) for(i=0;i

printf(\ return 0; }

方法2:

#include int main() { int a,n;

printf(\请输入a n的值\\n\ scanf(\ int s=a;

for(int i=2;i<=n;i++) {

a=a*10+a; s+=a; }

printf(\ return 0; }

根据编译、连接和运行程序回答下列问题: ① 比较方法1和方法2的算法区别。

② 方法1中表达式s+=a*pow(10,i)中的pow( )是什么函数?调用此函数时去掉#include头文件,再去编译、连接和运行程序观察出现什么情况?

③ 解决本题的核心算法是什么? 程序4代码: #include int main() {

int n,score,max,min,aver; aver=0; n=0;

max=100;min=0; printf(\ while(1) { scanf(\ if(score<0) break; aver+=score; n++; if(score>max) max=score;

if(score

aver=aver/n;

printf(\

printf(\ printf(\ printf(\ return 0; }

根据编译、连接和运行程序回答下列问题:

① 输入并运行程序。输入数据如下:92 85 64 78 53 98-1。其中前6个是学科分数,最后输入的一个负数作结束标志。分析结果是否正确,如不正确,请找出错误的原因,修改后重新运行,直到结果正确为止。

② 程序中if(score<0) break;语句起何作用?

③ 程序中当循环个数不确定时是如何处理的?程序中是如何求最高分、最低分的?这种算法有何特别之处?

习题6

1.选择题

(1)在下列数组定义、初始化或赋值语句中,正确的是___。 A)int a[8]; a[8]=100; B)int x[5]={1,2,3,4,5,6}; C)int x[ ]={1,2,3,4,5,6}; D)int n=8; int score[n];

(2)若已有定义:int i, a[100]; 则下列语句中,不正确的是____。 A)for ( i=0; i<100; i++ ) a[i]=i; B)for ( i=0; i<100; i++ ) scanf ( \ C)scanf (\ D)for ( i=0; i<100; i++ ) scanf ( \

(3)与定义char c[ ]={\不等价的是___。 A)char c[ ]={?G?,?O?,?O?,?D?,?\\0?}; B)char c[ ]=\ C)char c[4]={\ D)char c[5]={?G?,?O?,?O?,?D?,?\\0?};

(4)若已有定义:char c[8]={\则下列语句中,不正确的是___。 A)puts (c); B)for(i=0;c[i]!= '\\0';i++) printf(\ C)printf (\ D)for(i=0;c[i]!= '\\0';i++) putchar( c );

(5)若定义a[ ][3]={0,1,2,3,4,5,6,7}; 则a数组中行的大小是___。 A)2 B)3 C)4 D)无确定值 (6)以下程序的运行结果是___。 #include void f ( int b[ ] ) { int i=0; while(b[i]<=10) { b[i]+=2; i++; } } A)2 7 12 11 13 9 B)1 7 12 11 13 7 C)1 7 12 11 13 9 D)1 7 12 9 13 7 (7)若执行以下程序段,其运行结果是___。 char c[ ]={'a', 'b', '\\0', 'c', '\\0'}; printf ( \

A) ab c B)'a' 'b' C) abc D) ab

(8)数组名作为参数传递给函数,作为实际参数的数组名被处理为___。 A)该数组长度 B)该数组元素个数 C)该函数中各元素的值 D)该数组的首地址

(9)当接受用户输入的含空格的字符串时,应使用函数__。 A)scanf( ) B)gets( ) C) getchar( ) D)getc( ) (10)执行下面的程序段后,变量k中的值为___。 int k=3, s[2]={1}; s[0]=k; k=s[1]*10; A)不定值 B) 33 C) 30 D) 0 (11)在定义 int a[5][4]; 之后;对a的引用正确的是___。 A)a[2][4] B) a[5][0] C)a[0][0] D)a[0,0] 2.程序填空

(1)以下程序用来检查二维数组是否对称(即:对所有i,j都有a[i][j]=a[j][i])。 #include int main ( )

{ int a[4][4]={1,2,3,4, 2,2,5,6, 3,5,3,7, 8,6,7,4}; int i, j, found=0; for ( j=0; j<4; j++ ) { for (i=0; i<4; i++ ) if ( ___________________ ) { found= ___________________ ; break; } if (found) break; } if (found) printf (\不对称\\n\ else printf(\对称\\n\ return 0; }

(2)给定一3 ×4的矩阵,求出其中的最大元素值,及其所在的行列号: int main( )

{ int i,j,row=0,colum=0,max; static int a[3][4]={{1,2,3,4},{9,8,7,6},{10,-10,-4,4}}; _____________; for(i=0;i<=2;i++) for(j=0;j<=3;j++) { _____________; ____________; } printf(\}

(3)以下程序的功能是从键盘上输入若干个字符(以回车键作为结束)组成一个字符数组,然后输出该字符数组中的字符串,请填空。 #include main ( )

{ char str[81]; int i;

for ( i=0; i<80; i++ ) { str[i]=getchar( ); if (str[i]= ='\\n') break; } str[i]= ' \\0'; _____________; while ( str[i]!= ' \\0' ) putchar(_____________); }

3.阅读程序并写出运行结果

(1)写出下列程序的运行结果并分析之。 #include int main( )

{ static int a[4][5]={{1,2,3,4,0},{2,2,0,0,0},{3,4,5,0,0},{6,0,0,0,0}}; int j,k; for (j=0;j<4;j++) { for(k=0;k<5;k++) { if (a[j][k]= =0) break; printf(\ } } printf(\ return 0; }

(2)写出下列程序的运行结果并分析。 #include int main ( )

{ int a[6][6],i,j; for (i=1 ;i<6 ; i++) for ( j=1;j<6;j++) a[i][j]= i*j; for (i=1 ;i<6 ; i++) { for ( j=1;j<6;j++) printf( \ printf(\ }

Return 0; }

4.读程序

(1)用循环移位法将数组num中的最后一个数移到最前面,其余数依次往后移一个位置。某同学设计程序代码如下:

#include int main() {

int i,tem,num[10]={0,1,2,3,4,5,6,7,8,9}; tem=num[9];

for(i=1;i<=10;i++) num[i]=num[i-1]; num[0]=tem; printf(\

for(i=0;i<10;i++) printf(\ return 0; }