C语言练习题(带详解答案) 下载本文

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(max>a[j]) { max=a[j]; m=j; }

printf(?下标:%d\\n最大值:%d?, j, max) //j为for语句的循环变量,当for语句

执行完之后,j中的值为6,并非最大值下标,在执行某一次循环的比较过程中,将当时最大值的下标存在了m里

}

第四行改为:for(j=0;j<5;j++) 第五行改为:scanf(?%d?,&a[j]); 第七行改为:for(j=1;j<5;j++) 第八行改为:if(max

第十三行改为:printf(?下标:%d\\n最大值:%d?, m,max)

3.用一个函数求两个数之和。

sum(x,y) //函数定义的一般形式p173-174

{ float z; z=x+y;

return; //return语句后面可以返回0、常量、变量和表达式的值。 }

main()

{ float a,b;

int c; / /若定义变量的语句有错误,常见考点有两个:(1)变量的类型,(2)在定义用

于存放运算结果的变量时,一定要赋初值。一般赋值0或者循环初值。

scanf(\c=sum(a,b);

printf(\} 第一行改为:float sum(float x, float y ); 第四行改为:return(z);或者return z; 第八行:float c;

第十一行:printf(\

4. 程序读入20个整数,统计非负数个数,并计算非负数之和. #include ?stdio.h? main() {

int i, s , count ,n=20;

int a[n]; //数组定义的一般形式,详见p143, 其中的常量表达式不能为变量 s=count=1;

for( i=1, i<20, i- -) // for语句的格式,三个表达式之间用分号,且分号不可省略 scanf(?%d?, a[i] ); //若scanf语句有错误,常见考点有两个:(1)格式声明符号要与后面欲赋值的变量的类型一致,此题%d与n的类型int一致(详见p69-78);(2)变量的前面要有地址符号& for(i=0;i<20;i++) {

if(a[i]<0)

break; // break与continue的区别 p128. 在改错题中若错误出现在break语句,则

通常是将break换为continue;反之,若错误出现在continue,通常是将其换为break

s +=a[i]; count++; }

printf(?s=%f count=%f\\n?, s, count); //若printf语句有错误,常见考点有1个:格式声明符号要与后面欲输出的变量的类型一致 }

答案:int a[20]

s=count=0;

for(i=0;i<20;i--) scanf(?%d?,&a[i]);