C语言试题三(程序设计题——含知识点详解)

👉一、程序填空

1.输入一个字符,判断该字符是数字、字母、空格还是其他字符。
main( )
{ char ch;
  ch=getchar();
  if(   ch>=’a’&&ch<=’z’|| ch>=’A’&&ch<=’Z’      )
    printf("It is an English character\n");
  else if(   ch>=0&&ch<=9)
printf("It is a digit character\n");
else if(   ch== ‘  ’  )
printf("It is a space character\n");
   else          
printf("It is other character\n");  }1空:字符在计算机中以ASCII码的形式存储。所以当输入的字符,即ch中字符所对应的ASCII码的范围在英文字母的ASCII码的范围内即可,参照p377。由于英文字母又分为大写字母和小写字母,因此此处用一个逻辑或表达式,表示ch中是小写字母或者大写字母,都能使得表达式成立。ch>=97&&ch<=122|| ch>=65&&ch<=90
	需要注意的是,对于本题区间所对应的表达式,不可写作97<=ch<=122,也不可写作’A’<=ch <=’Z’. 对于97<=ch<=122因为在计算此表达式时的顺序是从左向右,因此先计算97<=ch。无论ch中的取值如何,表达式97<=ch的值只有两种情况:01.所以无论是0还是1,都小于122,因此97<=ch<=122恒成立。

第3空,判断ch中是否为空格,也是通过ch中字符与空格字符的ASCII码来判断。在判断表达式的值是否相等时,用关系符号==;不要用赋值符号=2.下列程序的功能是从输入的整数中,统计大于零的整数个数和小于零的整数个数。用输入0来结束输入,用i,j来放统计数,请填空完成程序。
      void main()
        {    int       n,i=0,j=0;
          printf(“input a integer,0 for end\n”);
          scanf(%d”,&n);
          while  (  n或n!=0  )   { 
if(n>0) i=   i+1   ;
              else  j=j+1;
               }
          printf(“i=%4d,j=%4d\n”,i,j);
        }
此题用i来记录大于零的整数,用j记录小于零的整数。所以循环条件是n(或者n!=0)即当n不为0时执行循环体。在循环体中是一个选择语句。如果n>0,则令i加1,相当于令正整数的个数加1;否则(即n<0,令j加1,相当于令负整数的个数加13.编程计算135+……+101的值
#include <stdio.h>
void main()
{	int i, sum = 0;
	for (i = 1;   i<=101      ;   i=i+2;     )
			sum = sum + i;
	printf("sum=%d\n", sum);  }
for语句的一般形式详见p120.
表达式1为i = 1,为循环变量赋初值,即循环从1开始,本题从1101,因此终值是101,表达式2是循环条件,用来控制循环的结束,因此循环条件为i<=101;表达式3为循环变量的自增,本题是
4.编程计算135…+99的值
main()
{	  int  i, sum = 0;
i=1;
while (   i<100    )
		{	sum = sum + i;
              I=i+2        ;   }
	printf("sum=%d\n", sum);
}
5.从键盘输入一个字符,判断它是否是英文字母。
#include <stdio.h>    	  
void main()
{char  c;
 printf("input a character:"); 
 c=getchar();
if(c>=  ‘A’  &&c<=  ‘Z’  || c>=‘a’ &&c<=  ‘z’)       printf("Yes\n");
 else     printf("No");
}
6. 下面程序的功能是在a数组中查找与x值相同的元素所在位置,请填空。
      #include <stdio.h>
        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 <stdio.h>
   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<n≤10),再输入n个整数,用选择法将它们从小到大排序后输出。 
   
#include <stdio.h>
int main(void){
    int i, index, k, n, temp;
        int a[10];                /* 定义1个数组a,它有10个整型元素*/
    printf(“Enter n: ");
               scanf(%d”,&n);             
    printf(“Enter %d integers: ", n);
    for(i = 0; i < n; i++)  
        scanf("%d", &a[i]);
    for(k = 0; k < n-1; k++){   /* 对n个数排序 */
        index = k;
        for(   int I = index + 1 ; I < n ; i++    )  
            if(       a[index]>a[i];         )  index = i;    
            	a[k]=a[index];        
    }
    printf("After sorted: ");
    for(i = 0; i < n; i++)      /* 输出n个数组元素的值 */
            printf(%d”,a[i]);                  
    return 0;}    

👉二、程序改错


一、 下面每个程序的划线处有语法或逻辑错误,请找出并改正,使其得到符合题意的执行结果。
1.求1 2 3 4   n
  main()
{  long int sum;  / /若定义变量的语句有错误,常见考点有两个:(1)变量的类型,(2)在定义用于存放运算结果的变量时,一定要赋初值。一般赋值0或者循环初值。
int n,i=1;
scanf("%d",n);  //若scanf语句有错误,常见考点有两个:(1)格式声明符号要与后面欲赋值的变量的类型一致,此题%d与n的类型int一致(详见p69-78);(2)变量的前面要有地址符号&
printf(“\n”);
while(i<n)    // 循环条件用于控制循环的次数,若以i<n 为循环条件,则意味着i的终值为n-1, 由于且i初值为1,因此一共能够循环n-1次。比要求少了1次,因此应改为i<=n 或者i<n+1
{  sum=sum*i; // 若不为sum赋初值,则此处无法计算sum*i。
i++;
}
printf("sum=%d",sum);  //若printf语句有错误,常见考点有1个:格式声明符号要与后面欲输出的变量的类型一致,此题%d与sum的类型long int不一致,应改为%ld(详见p69-78);

}
sum应初始化 即加入sum=1  
第四行改为:scanf(%d”,&n);
第六行改为:while(i<=n)或者 while(i<n+1)
第十行改为:printf("sum=%ld",sum);

 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<a[j])
第十三行改为: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("%f,%f",&a,&b);
c=sum(a,b);
printf("\nSum is %f",sum);
}
  第一行改为:float sum(float x, float y );
  第四行改为:return(z);或者return z;
  第八行:float c;
  第十一行:printf("\nSum is %f",c);

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]);
continue;
printf(“s=%d  count=%d\n”,s,count);

5. 从键盘输入整数x的值,并输出y的值.  
  main()
   { float  x,y;              
     scanf(%d”,&x);                     
y=3.5+x;
     printf(“y=%d”);                       
   }
正确的:        int x;  float y;
               printf(“y=%f”,y); 

6 编程计算下面分段函数, 输入x, 输出y
 
main()
{ int x,y;
      printf(“\n Input x:\n”);
      scanf(%d”, x); // 错误同上题scanf
if(x<0)   
y=x-1;
else if(x>=0||x<=10)  //  ||表示逻辑或,当左边表达式成立或者右边表达式成立时,整个表达式成立。 &&表示逻辑与,当左边表达式和右边表达式同时成立时,整个表达式成立。此处用逻辑表达式来表示x的区间[0,10], 因此应改用逻辑与符号
        y=2x-1;  // C语言中乘号不能省略,且用*表示乘法运算
else    
y=3x-1; // C语言中乘号不能省略,且用*表示乘法运算
printf(“y=%d”,&y);  //printf与scanf不用,printf后面给出的是变量名列表或表达式列表,无需地址符号
}
第一处改为:scanf(%d”,& x);
第二处改为:x>=0&&x<=10
第三处改为:y=2*x-1;
第四处改为:y=3*x-1;
第五处改为:printf(“y=%d”,y);


7.100~300间能被3整除的数的和。  
main()
  { int n;
long sum; / /若定义变量的语句有错误,常见考点有两个:(1)变量的类型,(2)在定义用于存放运算结果的变量时,一定要赋初值, 一般赋值0或者循环初值。
   for(n=100,n<=300,n++)  // for语句的格式,三个表达式之间用分号,且分号不可省略
      { 
if(n%3=0)    //  = 是赋值符号,用于将右边的值赋给左边的变量;== 是关系符号,用来判断两个值是否相等 。改错中if后面表达式中的赋值符号是常见的考点。
         sum=sum*n;
       }
     printf(%ld ”,sum);
  }
第一处改为:long sum=0;
第二处改为:for(n=100;n<=300;n++)
第三处改为:if(n%3==0)
第四处改为:sum=sum+n;
8. 求表达式 的值
#include <stdio.h>
#include <math.h>
int fun(int x, int y);
main()
{	int a,b;  float f;
scanf(%d,%d”,a,b); //与改错第1题中的scanf错误相同
if(ab>0){  // C语言中乘号不能省略,且用*表示乘法运算
fun(a,b); // 调用带有返回值的函数,应将函数的返回值保存在变量里
printf("The result is:%d\n", &f)   //与第6题中printf错误相同 
}
            else printf(“error!);}
fun(x, y)      // 定义函数的一般形式p173-174             
{	float result;
	        result = sqrt(a+b);
	        return;  //return语句后面可以返回0、常量、变量和表达式的值。
}
第一处改为:if(a*b>0)
第二处改为:f= fun(a,b); 
第三处改为:printf("The result is:%d\n",f);
第四处改为:float fun(int x, int y)
第五处改为:f= fun(a,b); 
第六处改为:result = sqrt(a*b);
第七处改为:return result;

👉三、程序设计

                  
1.输入2个整数,求两数的平方和并输出。 
  #include <stdio.h>
  int main(void)
{ intt  a ,b,s;  
 printf("please input a,b:\n");
 scanf("%d%d”,&a,&b);
	 s=a*a+b*b;
printf("the result  is %d\n",s);
return 0;	
 }  
2. 输入一个圆半径r,当r>0时,计算并输出圆的面积和周长,否则,输出提示信息。
#include <stdio.h>
   #define PI 3.14 
int main(void)
{ double  r ,area , girth;  
 printf("please input r:\n");
 scanf("%lf",&r);
	 if (r>=0)                        
	      { area =PI*r*r;
           girth =2*PI*r ;
	        printf("the area is %.2f\n", area);	
printf("the girth is %.2f\n", girth);}
else  
printf("Input error!\n"); 
return 0;
 }  
3、已知函数y=f(x),编程实现输入一个x值,输出y值。
                   2x+1   (x<0)
             y=    0     (x=0) 
                   2x-1  (x>0) 
  
#include <stdio.h>
void main()
{ int x,y;
scanf(%d”,&x);
if(x<0) y=2*x+1;
else if(x>0) y=2*x-1;
else  y=0;
printf(%d”,y);
}
4.从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,等级为A;80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;score<60,等级为E。
 #include <stdio.h>
void main(){
	int    data;          
	char  grade;                    
	printf("Please enter the score:");
	scanf("%d”, &data);  
	switch(data/10)                   
	{   case 10:  
       case 9 :  grade=’A’;  break; 
		case 8:  grade=’B’;	  break;
		case 7:  grade=’C’;	  break;
       case 6:  grade=’D’;	  break; 
		default:  grade=’E’;
	}
    printf("the grade is %c”,grade);
}

5. 编一程序每个月根据每个月上网时间计算上网费用,计算方法如下:
                 
要求当输入每月上网小时数,显示该月总的上网费用(6)
#include <stdio.h>
void main()
 { int hour;
  float fee;
  printf(“please input hour:\n”);
 scanf(%d”,&hour);
 if(hour<=10)
   fee=30;
 else if(hour>=10&&hour<=50)
  fee=3*hour;
 else fee=hour*2.5;
 printf(“The total fee is %f”,fee);
}

6. 从键盘输入10个整数,统计其中正数、负数和零的个数,并在屏幕上输出。
#include <stdio.h>
void main( ) {
int a, i,p=0,n=0,z=0;
      printf("please input number"); 
for(i=0;i<10;i++){
scanf("%d,",&a);
  if (a>0)      p++;
else if (a<0)      n++;
else z++;
}
     printf("正数:%5d, 负数:%5d,零:%5d\n",p,n,z);
}
7、编程序实现求1-10之间的所有数的乘积并输出。
#include <stdio.h>
void  main( )
   {  int  i;
long sum=1;
      for(i=1; i<=10; i=i+1)
          sum=sum*i;
      printf(“the sum of odd is :%ld”,sum);
}
8. 从键盘上输入10个数,求其平均值。
#include <stdio.h>
void main(){ 
	int  a,i,sum=0;                 
	float ave;;                  
	for(i=0;i<10;i++){
          scanf("%d",&a); 
          sum+=a;
	}
    ave=(float)sum/10;
	printf("ave = %f\n", ave); 
}
9、编程序实现求1-1000之间的所有奇数的和并输出。
   #include <stdio.h>
   void main( )
   {  int  i, sum=0;
      for(i=1; i<1000; i=i+2)
          sum=sum+i;
      printf(“the sum of odd is :%d”,sum);
}

10.有一个分数序列:2/13/25/38/513/8,……编程求这个序列的前20项之和。
#include <stdio.h>
void main(){
 int i,t,n=20;
  float a=2,b=1,s=0;
for(i=1;i<=n;i++)
{s=s+a/b;
t=a;
a=a+b;
b=t;
}
 printf("sum=%6.2f",s);
}


11.从键盘输入两个数,求出其最大值(要求使用函数完成求最大值,并在主函数中调用该函数)     
#include <stdio.h>
float max(float x,float y);
void main()
{  float a,b,m;
scanf("%f,%f",&a,&b);
m=max(a,b);
printf("Max is %f\n",m);
}
float max(float x,float y)
{
if (x>=y) 
  return x;
else
return y;
}

12. 编写程序,其中自定义一函数,用来判断一个整数是否为素数,主函数输入一个数,输出是否为素数。
#include <math.h>
#include  <stdio.h>
int IsPrimeNumber(int number)
{	int i;
	if (number <= 1)	
		return 0;
	for (i=2; i<sqrt(number); i++)
	{	if ((number % i) == 0)	
			return 0; 	}
	return 1;}
 void main()
{ int n;
  printf(“Please input n:);
  scanf(%d”,&n);
  if(IsPrimeNumber(n))
     printf(“\n%d is a Prime Number”,n);
  else  printf(“\n%d is not a Prime Number”,n);}


13、从键盘输入n个数存放在数组中,将最小值与第一个数交换,输出交换后的n个数。
#include <stdio.h>
int main(void){
      int i,n,iIndex,temp;
	  int a[10];
      printf("Enter n: ");
	  scanf("%d", &n);
      printf("Enter %d integers:\n ");
        for(i=0;i<n;i++)
	      scanf("%d", &a[i]);
	  iIndex=0;
      for(i=1;i<n;i++){
		 if(a[i]<a[iIndex])   	iIndex=i;
	   }
     temp=a[0];a[0]=a[iIndex];a[iIndex]=temp;
     for(i=0;i<n;i++)
	   printf("%5d", a[i]);
	 printf("\n");
     return 0;
}    


第二种解法 利用函数
#include<stdio.h>

int comp(int arry[], int n)
{
	int i,index,temp;
	printf("为数组赋值:\n");
	for(i=0;i<n;i++)
	{		scanf("%d",&arry[i]);
	}
	for(i=1,index=0;i<=n-1;i++)
	{	if(arry[i]<arry[index])
		{	index=i;
		}
	}
	temp=arry[0];arry[0]=arry[index];arry[index]=temp;
	for(i=0;i<n;i++)
		{			printf("%d  ",arry[i]);			
		}
	return 0;
}
main()
{	int n;
	int a[10];
	printf("为n赋值:\n");
	scanf("%d",&n);
	comp(a,n);}


  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想new的出来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值