C语言基础练习练习题复习(带详解答案).doc 下载本文

内容发布更新时间 : 2024/6/2 21:48:03星期一 下面是文章的全部内容请认真阅读。

A) auto B) register C) static D) extern

29.未指定存储类别的变量,其隐含的存储类别为( A )。 A)auto B)static C)extern D)register 30. 若有以下说明语句: struct student { int num; char name[ ]; float score; }stu;

则下面的叙述不正确的是: ( D )

A. struct是结构体类型的关键字

B. struct student 是用户定义的结构体类型 C. num, score都是结构体成员名 D. stu是用户定义的结构体类型名 31.若有以下说明语句: struct date { int year; int month; int day; }brithday;

则下面的叙述不正确的是__C___.

A) struct是声明结构体类型时用的关键字 B) struct date 是用户定义的结构体类型名 C) brithday是用户定义的结构体类型名 D) year,day 都是结构体成员名

32. 以下对结构变量stul中成员age的非法引用是 B struct student { int age; int num; }stu1,*p; p=&stu1;

A) stu1.age B) student.age C) p->age D) (*p).age 33.设有如下定义:

struck sk { int a;

习题

float b; }data; int *p;

若要使P指向data中的a域,正确的赋值语句是 C A) p=&a;

B) p=data.a; C) p=&data.a; D)*p=data.a;

34.设有以下说明语句:

typedef struct stu { int a; float b; } stutype;

则下面叙述中错误的是( D )。 A、struct是结构类型的关键字

B、struct stu是用户定义的结构类型 C、a和b都是结构成员名

D、stutype是用户定义的结构体变量名 41. 在C语言中,以 D 作为字符串结束标志

A)’\\n’ B)’ ’ C) ’0’ D)’\\0’ 42.下列数据中属于“字符串常量”的是( A )。

A.“a” B.{ABC} C.‘abc\\0’ D.‘a’ 若干个字符构成字符串

在C语言中,用单引号标识字符;用双引号标识字符串 选项B,C,分别用{}和’’标识字符串 选项D,标识字符。

43.已知char x[]=\则关于两个数组长度的正确描述是

B .

A)相同 B)x大于y C)x小于y D)以上答案都不对

C语言中,字符串后面需要一个结束标志位'\\0',通常系统会自动添加。

对一维数组初始化时可采用字符串的形式(例如本题数组x),也可采用字符集合的形式(例如本题数组y)。在以字符串形式初始化时,数组x不尽要存储字符串中的字符,还要存储字符串后的结束标志位,因此数组x的长度为6;在以字符集合形式初始化时,数组y,仅存储集合中的元素,因此数组y长度为5

习题

4.编程计算1+3+5…+99的值

main()

{ int i, sum = 0;

i=1;

while ( i<100 )

{ sum = sum + i;

I=i+2 ; } printf(\}

5.从键盘输入一个字符,判断它是否是英文字母。 #include void main() {char c;

printf(\ c=getchar();

if(c>= ‘A’ &&c<= ‘Z’ || c>=‘a’ &&c<= ‘z’) printf(\\\n\ else printf(\}

6. 下面程序的功能是在a数组中查找与x值相同的元素所在位置,请填空。 #include void main() { int a[10],i,x;

printf(“input 10 integers:”); for(i=0;i<10;i++)

scanf(“%d”,&a[i]);

printf(“input the number you want to find x:”);

scanf(“%d”, &x );

for(i=0;i<10;i++)

if( x==a[i] ) break;

if( i<10 )

printf(“the pos of x is:%d\\n”,i);

else printf(“can not find x!\\n”);

习题

}

7.程序读入20个整数,统计非负数个数,并计算非负数之和。 #include main( )

{ int i, a[20], s, count; s=count=0;

for(i=0; i<20; i++) scanf(“%d”, &a[i] ); for(i=0; i<20; i++)

{ if( a[i]<0 ) continue ; s+=a[i] ; count++; }

printf(“s=%d\\t count=%d\\n”, s, count”); }

8. 输入一个正整数n (1

#include int main(void){

int i, index, k, n, temp;

/* 定义1个数组a,它有10个整型元素*/ printf(“Enter n: \

printf(“Enter %d integers: \ n); for(i = 0; i < n; i++) scanf(\

for(k = 0; k < n-1; k++){ /* 对n个数排序 */ index = k;

for( )

if( ) index = i; }

printf(\

for(i = 0; i < n; i++) /* 输出n个数组元素的值 */ return 0;}

习题

一、 程序改错

一、 下面每个程序的划线处有语法或逻辑错误,请找出并改正,使其得到符合题意的执行结果。 1.求1?2?3?4???n main()

{ long int sum; / /若定义变量的语句有错误,常见考点有两个:(1)变量的类型,(2)在定义用于存放运算结果的变量时,一定要赋初值。一般赋值0或者循环初值。

int n,i=1;

scanf(\//若scanf语句有错误,常见考点有两个:(1)格式声明符号要与后面

欲赋值的变量的类型一致,此题%d与n的类型int一致(详见p69-78);(2)变量的前面要有地址符号&

printf(“\\n”);

while(i

终值为n-1, 由于且i初值为1,因此一共能够循环n-1次。比要求少了1次,因此应改为i<=n 或者i

{ sum=sum*i; // 若不为sum赋初值,则此处无法计算sum*i。 i++; }

printf(\ //若printf语句有错误,常见考点有1个:格式声明符号要与

后面欲输出的变量的类型一致,此题%d与sum的类型long int不一致,应改为%ld(详见p69-78);

}

sum应初始化 即加入sum=1 第四行改为:scanf(“%d”,&n);

第六行改为:while(i<=n)或者 while(i

2.求一个数组中最大值及其下标。

main( )

{ int max,j,m; int a[5];

for(j=1;j<=5;j++) // j=1为循环变量j赋初值为1,同时用j作为数字元素的逻辑

地址下标。因此输出的时候只能从a[1]开始输出,无法输出a[0].因此应将j赋初值0,相应的循环条件改为j<5或者j<=4用于控制循环执行5次

scanf(“%d”,a); //若scanf语句有错误,常见考点有两个:(1)格式声明符号要与

后面欲赋值的变量的类型一致,此题%d与a的类型int一致(详见p69-78);(2)变量的前面要有地址符号&

max=a[0];

for(j=1;j<=5;j++) //修改思路与上一个for语句同

if(ma 下标存

习题