您的当前位置:首页正文

C语言练习题1

2023-10-08 来源:钮旅网
一、 填空题(20分,每空1分)

1. 一个完整的C程序有且仅有一个 函数。 2. 在内存中存储一个字符 „a‟ 占用______个字节,

而存储字符串 ”abcdef” 则占用________个字节。 3. 表达式 4/5的值为________。

4. 设 int x=9,y=8,z=7,w; w=x>y>z; 则w的值为_________。 5. 设 x=4.5,a=7,y=3.4, 表达式x+a%3*(int)(x+y)%2/4的值为_____。 6. 设 a=14, 执行 a+=a-=a*=a 后,a=___________。 7. 设x=y=z=6, 执行 x=(y>z)?x+2:x-2; 后,x=__________。 8. getchar( )函数用于输入 , 而gets( )函数则用于输入

______________。 9. 设有定义语句:char ww[20]=” \\\\\wab\\n”; 则表达式:strlen(ww) 的值是

__________。 10. 设有定义语句:char str[7]=”abcdef”, 则数组元素str[2]中的字符是

______,数组元素str[6]中的字符是__________。 11. 函数中的形参和调用时的实参都是变量时,传递方式为________; 都是数组名时,传递方式为_________。

12. 设有 char *p=”12345”, 则printf(“%s”,p)的输出是 ;

而 printf(“%c”,*p)的输出则是_________。

13. 设有以下说明,则变量qq在内存中所占的字节数是________,如果将关

键字 struct 改为 union 则变量qq所占的字节数为________。 struct student{ char name[10];

int nl; float ave; } qq;

14. 巳知当前目录下有一个名为file.txt的文本文件,写出将该文件打开(只允许

写)的语句: FILE *fP; 。

二、 单项选择题(10分,每题1分)

1.已知:int main(int argc,char *argv[ ])...形成可执行文件ww.exe, 执行如下:ww a1 a2 a3 则:argc为_____。 A. 3

B. 1

C. 2

D. 4

2. 在C语言中,逻辑量“假”的值用______表示。

A. false B. 0 C. 非0 D. 负数

3. 已知函数原型声明为:char *www(char a, char b);该函数的类型为___。 A.指向字符型的指针 B.字符型 C.整型

D.指向整型的指针

4.有语句char str1[20]=”hello”, str2[10]= “world”;则将字符串“world”连接到”hello”之后,正确的语句为______。 A. str1=str1+”world”; 5.设有如下程序段:

B. strcat(str1 ;str2);

C. str1=str1+str2; D. strcat(str2 , str1); int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11} int *p[3]={a[0],a[1],a[2]},**pp; pp=p;

则对数组元素的错误引用是______。

A. pp[0][1] B. a[1][2] C. p[3][1] D. *(*(p+2)+2) 6.判断字符型变量 ch 的值是否为大写英文字母的表达式为______ A. „A‟<=ch<=‟Z‟

B. ch>=‟A‟ && ch<=‟Z‟ D. ch>=‟A‟ || ch<=‟Z‟

C. ch>‟a‟ && ch<=‟z‟

7.已知 w=3,x=2,y=3,z=3,a=4,b=2;则执行语句(a=w>x) || (b=y>z);后,a, b的值为 _________。 A.1和1 B. 0和0

C.1和2 D. 4和2

8.若有定义语句int a[]={1,2,3,4,5,6,7,8,9,10},*p=a; 值为 8 的数组元素的正确表示为______:

A. a[8] B. a+7

9.下列程序运行结果是______。 #define A 2

#define AA A+A/2 void main(void) {

printf(“%d,”,AA); printf(“%d\\n”,5*AA); }

A.3,11

B.3,15

C. p+7

D. *(p+7)

C.2,10 D.8,40

10. 若有如下定义,则对ex中的a成员的正确引用是_____。 struct sk { int a; float b;} ex, *p = &ex;

A. (*p).ex.a B. p->a C. p->ex..a D. p.ex.a

三、 写出以下程序的运行结果(30分, 每题5分)

1. 下面程序的运行结果为 #include void main( ) { int a,b,c,d; a=4; b=6; c=++a;

d=( cprintf(\"%d,%d,%d,%d\}

2. 下面程序的运行结果为 #include

void fun (int x, int y) {

int a, b; float d; a = x+14; b = y-4;

d = (float)(b/a);

printf (\"d=%f\\n\ }

void main(void) {

int b=9, a=6, c; c = b/a;

printf (\"c=%d\\n\ fun( a, b ); }

3.设从键盘上输入 Hello World! 下面程序的运行结果为 #include void main( void ) { char ss[20]; int i; gets(ss);

for( i=0; ss[i]!='\\0'; i++)

if( ss[i]>='A' && ss[i]<='Z') ss[i] = ss[i]+32 ; puts(ss); }

4.下面程序的运行结果为 #include int i=1;

void other( void ); void main(void) { int b = -10;

printf(\"b=%d\\n\ other( ); i = i+10; other( ); } void other( )

{ static int b; i=i+32;

printf(\"i=%d, b=%d\\n\ b = i; }

5.下面程序的运行结果为 #include void main(void)

{ int a[10]={78,89,98,66,54,76,45,82,62,95 }; int ka, ki, j; ka = ki = 0; for(j=1; j<10; j++)

{ if ( a[ki]>a[j] ) ki=j ;

if (a[ka] }

printf(“%d, %d\\n %d, %d\\n”, ki, a[ki], ka, a[ka] ); }

6. 运行时假定键盘输入数据为:1 2 3 4 5 6 7 8 9 10 下面程序的运行结果为 #include void main(void ) { int i ,a [10] ; int *p;

p = a;

for (i=0 ; i<10 ; i++ ) scanf ( “ %d” , p++ ) ; for (p=a ; pif ( *p % 2 ) printf ( “ %3d”, *p); }

四、程序填空(10分, 每空1分)

根据题目要求完善程序,请将内容写在对应标号上。 ⒈ 如下程序是输出200到1000之间的所有素数。 #include

#include ① void main(void) { int n, j, s;

for(n=201; n<1000; n+=2) { s = (int)sqrt((double)n);

for(j=2; ② ; j++) { if (n%j==0) ③ ; }

if (j>s) printf(“\\n%d”,n); } }

⒉通过函数实现主函数中变量a、b值的交换。 #include

void swap ( int * , int * ); void main (void ) { int a , b ;

scanf ( “%d , %d ” , &a , &b ) ;

swap ( ④ ) ; printf ( “\\n %d , %d \\n ” , a, b ) ; }

void swap ( int *x , ⑤ ) { ⑥ t=*x ; *x=*y ; ⑦ ; }

⒊统计字符串str中小写字母的个数

① ② ③ ④ ⑤ ⑥ ⑦ #include #include void main(void) { char str[80]; int iNum,i;

⑧ ⑧ gets(str);

for( i=0; ⑨ ; i++) ⑨ if( ⑩ ) iNum++; ⑩ printf( “iNum=%d”, iNum); }

五、编程题(30分)

1.求符号函数 1 x>0 y= 0 x=0

-1 x<0 输入x的值,输出结果(5分)。

2.输入6个整数,组成2行3列的二维数组,统计数组中的正数之和、正数个数以及负数之和、负数个数。(7分)

3.编写子函数exps,求ex≈1+x+x2/2!+x3/3!......,要求精度为10-6。在主函数中输入x,利用子函数exps 求(ex+e-x)/2的值,并在主函数中输出结果。(8分)

4.一个班有45人,用a数组存放一门课的成绩,编程输入a的成绩,统计不及格(<60分)的人数,并将成绩按降序排序,输出结果。(10分)

参考答案

一. 填空题(20分,每空1分)

1.main( ) 或主函数 2.1 7 3.0 4.0 5.4.5 6.0 7.4 8.一个字符 一串字符 9.6

10.‟c‟ ‟\\0‟ 11.值传递 地址传递 12.12345 1

13.16 10 14.fp = fopen (“file.txt” , ”w”); 二. 选择题(10分,每题1分)

1.D 2.B 3. A 4.B 5.C 6.B 7.C 8.D 9.A 10.B 三. 写出以下程序的运行结果(30分, 每题5分)

1.5, 6, 5, 0 数值每个一分,格式一分。 2.c=1 数值每个两分,格式一分。 d=0.000000

3.hello world! 大写字母变小写每个两分,其余不变1分。 4.b = -10 i = 33, b=0

i = 75, b=33 每个数据包括数据的格式各一分,。 5.6, 45 最小值位置,最小值各一分; 2, 98 最大值位置,最大值各一分; 格式1分

注释:最大值最小值颠倒扣2分。 6.1 3 5 7 9

数据各一分,格式错误扣一分。 四.程序填空(10分, 每空1分)

1. ① ②j<=s ③break

2.④ &a,&b ⑤ int *y ⑥ int t; ⑦ *y=t 3.⑧ iNum=0 ⑨i='a' && str[i]<='z' 五.编程题(30分)

说明:每个语法错误扣0.5,语法错误最多扣两分为止。 1. #include main()

{ float x,y; /*变量定义1分*/ scanf(“%f”, &x); /*输入1分*/ if(x>0)

y=1;

else if(x<0)

y=-1;

else

y=0; /*判断求值2分*/

printf(“x=%f, y=%f”, x,y); /*输出1分*/ }

2.#include main()

{

int i,j,a[2][3],k1=0,k2=0,sum1=0,sum2=0; /*变量说明1分*/ for (i=0;i<2;i++) for(j=0;j<3;j++)

scanf(“%d”, &a[i][j]); /*循环输入2分*/ for (i=0;i<2;i++) for(j=0;j<3;j++) if (a[i][j]>0)

{

sum1= sum1+ a[i][j]; k1++; }

else if (a[i][j]<0)

{

sum2= sum2+ a[i][j]; k2++; } /*统计求和3分*/

printf(“k1=%d, k2=%d”, k1,sum1,k2,sum2); /*输出1分*/ } ⒊

#include #include float exps(float); void main( void) {

float x,y; /*变量说明0.5分*/ scanf(“%f”,&x) /*输入0.5分*/ y=(exps(x)+exps(-x))/2 /*函数调用表达式2分*/ printf(“y=%f”,y); /*输出结果1分*/ }

float exps(float x) /*函数结构定义1分*/ {

float s=1,t=1; int i=1;

while( fabs(t)>1e-6) {

t=t*x/i; i++; s+=t; } /*迭代循环2分*/ return s; /*返回结果1分*/ } ⒋

#include #define NUM 45 void main(void) {

int i,j,a[NUM],sum=0; for(i=0;i/*变量说明1分*/ /*循环输入1分*/

/*循环统计2分*/

for(i=0;i{

int t; t=a[i]; a[i]=a[j]; a[j]=t; } for(i=0;i}

/*排序算法5分,冒泡、选择都可*/ /*循环输出1分*/