【无标题】

  • 顺序结构:

 1.   求圆的面积

【问题描述】输入圆的半径,求圆的面积。PI取3.14。

【输入形式】3

【输出形式】28.260

【样例输入】

【样例输出】

【样例说明】输出的面积值保留3位小数。

#include <stdio.h>

#include <stdlib.h>

#define PI 3.14

int main()

{

    double r,s;

       scanf("%lf",&r);

    s=PI*r*r;

    printf("%.3lf",s);

    return 0;

}

2. 找零钱

【问题描述】模拟购买东西时的场景,通过键盘输入商品的价格和收取顾客的钱数,通过计算输出应找给顾客的钱数。

【输入形式】程序可以处理浮点数(小数)类型的钱数

【输出形式】输出保留两位小数的钱数

【样例输入】54.8, 100

【样例输出】45.20

【样例说明】输入时两个数据中间用逗号分隔

#include <stdio.h>

#include <stdlib.h>

int main()

{

   double p,s,c;

   scanf("%lf,%lf",&p,&s);

   c=s-p;

   printf("%.2lf",c);

    return 0;

}

3. 计算摄氏温度

【问题描述】输入华氏温度,输出对应摄氏温度,保留2位小数。

计算公式如下,其中:c 表示摄氏温度,f 表示华氏温度

c = 5/9*(f-32)

【样例输入】45

【样例输出】7.22

【样例说明】注意输出值要保留2位小数。

#include <stdio.h>

#include <stdlib.h>

int main()

{

   double f,c;

   printf("请输入华氏温度:");

   scanf("%lf",&f);

   c=5/9.0*(f-32);

   printf("%.2lf",c);

    return 0;

}

4. 计算3门功课的平均分

【问题描述】编写程序,依次输入某位学生的数学、英语和计算机课程的成绩,计算并输出该生3门课程的平均分。

【输入形式】整数,数据用逗号分隔

【输出形式】小数

【样例输入】75,98,88

【样例输出】87.0

【样例说明】输出的成绩保留1位小数

#include <stdio.h>

#include <stdlib.h>

int main()

{

  double a,b,c,d;

  printf("请输入数学成绩:");

  printf("请输入英语成绩:");

  printf("请输入计算机成绩:");

  scanf("%lf,%lf,%lf",&a,&b,&c);

  d=(a+b+c)/3;

  printf("%.1lf",d);

    return 0;

}

5. 编程,输入一个三位正整数,求解并输出该数的个位数、十位数和百位数。

【问题描述】2.1.5 编程,输入一个三位正整数,求解并输出该数的个位数、十位数和百位数。

【输入形式】输入三位正整数

【输出形式】依次输出个、十、百位,用空格分隔

【样例输入】152

【样例输出】2 5 1

【样例说明】输入的152是一个整数(3位整数),输出的2 5 1是三个整数,之间用空格分隔,他们分别是152的个位、十位、百位数字。

#include <stdio.h>

#include <stdlib.h>

int main()

{

   int n,a,b,c;

   scanf("%d",&n);

   a=n%10;

   b=n/10%10;

   c=n/100;

   printf("%d %d %d",a,b,c);

    return 0;

}

  • 分支结构:

1. 5.2 编程题 《求分段函数的值》

【问题描述】输入x,计算并输出下列分段函数sign(x)的值。要求定义和调用函数sign(x) 实现该分段函数。

【输入形式】从键盘输入整数x

【输入输出样例1】(下划线部分表示输入)

Enter x: 10

sign(10)=1

【输入输出样例2】(下划线部分表示输入)

Enter x: -5

sign(-5)=-1

【输入输出样例3】(下划线部分表示输入)

Enter x: 0

sign(0)=0

【样例说明】

输入提示符后要加一个空格。例如&ldquo;Enter x: &rdquo;,其中&ldquo;:&rdquo;后要加一个且只能一个空格。

输出语句的&ldquo;=&rdquo;两边无空格。

英文字母区分大小写。必须严格按样例输入输出。

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int x,y;

    printf("Enter x: ");

    scanf("%d",&x);

    if(x<0)

       y=-1;

    else if(x==0)

       y=0;

    else if(x>0)

       y=1;

    printf("sign(%d)=%d",x,y);

    return 0;

}

2. 《能否被3,5,7整除》

【问题描述】

编程,从键盘输入一个整数,判断它能否被3,5,7整除,并输出以下信息之一:

⑴ Can be divisible by 3,5,7.即能同时被3,5,7整除;

⑵ Can be divisible by ?,?.      (其中?为3,5,7之一) 即能被其中两个数(要指出哪两个)整除;

⑶ Can be divisible by ?.        (其中?为3,5,7之一)

   即能被其中一个数(要指出哪一个)整除;

⑷ Can not be divisible by 3,5,7。 即不能被3,5,7任一个整除。

【输入形式】从键盘输入一个整数。

【输出形式】按题目要求及样例,输出该整数能否被3,5,7整除。

【样例输入1】 441

【样例输出1】 Can be divisible by 3,7.

【样例输入2】 1024

【样例输出2】 Can not be divisible by 3,5,7.

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int n;

    scanf("%d",&n);

    if(n%3==0 && n%5==0 && n%7==0)

        printf("Can be divisible by 3,5,7.");

    else if(n%3==0 && n%5==0)

        printf("Can be divisible by 3,5.");

    else if(n%3==0 && n%7==0)

        printf("Can be divisible by 3,7.");

    else if(n%5==0 && n%7==0)

        printf("Can be divisible by 5,7.");

    else if(n%3==0)

        printf("Can be divisible by 3.");

    else if(n%5==0)

        printf("Can be divisible by 5.");

    else if(n%7==0)

        printf("Can be divisible by 7.");

    else

         printf("Can not be divisible by 3,5,7.");

    return 0;

}

3. 计算水费

【问题描述】某城市水费采用阶梯计算方法,月用水量在0~10吨的,每吨按3.6元计算;月用水量在11~20吨的,应收水费按公式“3.6*10 + 5.0*(吨数-10)”计算,即超出10吨的部分按每吨5.0元计算;月用水量在20吨以上的,应收水费按公式“3.6*10 + 5.0*10 + 8.0*(吨数-20)”计算,即超出20吨的部分按每吨8.0元计算。输入用水量,输出水费。

【样例输入】5.0

【样例输出】18.00

【样例说明】输出值保留2位小数

#include <stdio.h>

#include <stdlib.h>

int main()

{

   double x,y;

   scanf("%lf",&x);

   if(x<=10)

      y=3.6*x;

   else if(11<x&&x<=20)

      y=3.6*10+5.0*(x-10);

   else

      y=3.6*10+5.0*10+8.0*(x-20);

   printf("%.2lf",y);

    return 0;

}

4. 从键盘 输入三个整数a,b,c,编程求最大数并输出结果。

【输入形式】三个数逗号分隔

【样例输入】5,16,2

【样例输出】16

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int main()

{

  int a,b,c,max;

  scanf("%d,%d,%d",&a,&b,&c);

  if(a>b)

    max = a;

  else  max = b;

  if (max<c)

    max = c;

    printf("%d",max);

  return 0;

 }

5. 3.1.4 计算等级分

【问题描述】

输入五级制成绩(A ~E),输出相应的百分制成绩(0 ~100)区间,

要求使用switch 语句?五级制成绩对应的百分制成绩区间为:

A(90 ~100)?B(80 ~89)?C(70 ~79)?D(60 ~69)和E(0 ~59)?

如果输入不是(A~E)输出errno

【输入形式】从键盘输入等级。

【输入样例1】(下划线部分表示输入)

Input Grade: B

【输出样例1】

B is 80 ~89

【输入样例2】(下划线部分表示输入)

Input Grade: X

【输出样例2】

errno

【样例说明】

输入提示符后要加一个空格。例如&ldquo;Input Grade: &rdquo;,其中&ldquo;:&rdquo;后要加一个且只能一个空格。

输出语句的&ldquo;=&rdquo;两边无空格。

英文字母区分大小写。必须严格按样例输入输出。

#include <stdio.h>

#include <stdlib.h>

int main()

{

   char a;

   printf("Input Grade: ");

   scanf("%c",&a);

   switch(a)

   {

       case'A':printf("A is 90~100");break;

       case'B':printf("B is 80~89");break;

       case'C':printf("C is 70~79");break;

       case'D':printf("D is 60~69");break;

       case'E':printf("E is 0~59");break;

       default:printf("errno");

   }

    return 0;

}

6. 判断是否为元音字母

【问题描述】输入一个字符,如果该字符是元音字母(a,e,i,o,u),输出yes,否则输出no。要求使用switch-case语句编码。

【样例输入】b

【样例输出】no

【样例说明】是元音字母,输出小写yes,不是元音字母,输出小写no。

#include <stdio.h>

#include <stdlib.h>

int main()

{

   char ch;

   scanf("%c",&ch);

   switch(ch)

   {

    case'a':

    case'o':

    case'e':

    case'u':

    case'i':printf("yes\n");break;

    default:printf("no\n");

   }

    return 0;

}

7. 判断字符种类

【问题描述】输入一个字符,参考ASCII码表判断该字符的种类为控制字符、数字、大写字母、小写字母、其他,输出判断结果。

【输入形式】一个字符

【输出形式】严格按“样例说明”中给定的方式输出

【样例输入】a

【样例输出】lower case

【样例说明】输出内容为下面的五种之一: control character, figure, upper case, lower case, others

#include <stdio.h>

#include <stdlib.h>

int main()

{

    char ch;

    scanf("%c",&ch);

    if(ch>=0&&ch<=31)

        printf("control character");

    else if (ch>=48&&ch<=57)

        printf("figure");

    else if(ch>=65&&ch<=90)

        printf("upper case") ;

    else if(ch>=97&&ch<=122)

        printf("lower case");

    else

        printf("others");

    return 0;

}

  • 循环结构:

1. 求1到n之间所有奇数的累加和

【问题描述】求1到n之间所有奇数的累加和

【输入形式】输入n值

【输出形式】输出所有奇数的累加和

【样例输入】100

【样例输出】sum=2500

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int main()

{

 int n,i,sum;

 scanf("%d",&n);

 sum=0;

 for(i=1;i<=n;i++)

 {

     if(i%2==0)

         continue;

     else

        sum=sum+i;

 }

  printf("sum=%d",sum);

    return 0;

}

2.  如果你第一天能够挣一块钱,第二天能够挣两块钱,第三天能够挣三块钱,以此类推,那么n天以后你总共挣了多少钱?

【问题描述】如果你第一天能够挣一块钱,第二天能够挣两块钱,第三天能够挣三块钱,以此类推,那么n(n>10)天以后你总共挣了多少钱?

【输入形式】输入n的值,即工作天数

【输出形式】输出你工作n天挣的钱数

【样例输入】20

【样例输出】sum=210

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int main()

{

  int n,i,sum=0;

  scanf("%d",&n);

  for(i=1;i<=n;i++)

  {

      sum=sum+i;

  }

   printf("%d",sum);

    return 0;

}

3.  编写一个程序,此程序要求输入一个整数。打印出从输入的值到比输入的值大10的所有整数值

【问题描述】编写一个程序,此程序要求输入一个整数。打印出从输入的值到比输入的值大10的所有整数值(也就是说,如果输入为5,那么输出就从5到15)。要求在各个输出值之间用1个空格分开。

【输入形式】输入一个整数

【输出形式】输出所有等于或大于该整数的整数值,如果输入为5,那么输出就从5到15

【样例输入】5

【样例输出】5 6 7 8 9 10 11 12 13 14 15

【样例说明】要求在各个输出值之间用1个空格分开

#include <stdio.h>

#include <stdlib.h>

int main()

{

  int n,a,i;

  scanf("%d",&n);

  printf("%d ",n);

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

  {

    a=n+i;

    printf("%d ",a);

  }

    return 0;

}

4.  求1到n(n<10)阶乘值的累加和

【问题描述】求1到n(n<10)阶乘值的累加和

【输入形式】输入n值

【输出形式】输出1到n所有数阶乘值的累加和

【样例输入】5

【样例输出】sum=153

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int n,y=1,i,sum=0;

    printf("请输入一个数:");

    scanf("%d",&n);

    for(i=1;i<=n;i++)

    {

        y=y*i;

        sum=sum+y;

    }

    printf("sum=%d",sum);

    return 0;

}

5.  找最大最小整数

【问题描述】编写一个程序,用户输入若干整数,试找出其中的最大数和最小数。

【输入形式】用户在第一行待输入数据个数,在第二行输入数据。

【输出形式】程序在下一行输出数据的最大值和最小值

【样例输入】

 5

 89 62 96 74 52    

【样例输出】96 52

【样例说明】用户第一次输入的为数据个数(5),在下一行依次输入5个数据(89 62 96 74 52),他们之间用空格分隔。输出为5个数中的最大值和最小值,输出时候两个数之间用空格分隔。

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int i,n,x,y,min,max;

    scanf("%d",&n);

    scanf("%d",&x);

        max=x;

        min=x;

    for(i=1;i<=n-1;i++)

    {

       scanf("%d",&y);

        if(y>max)

            max=y;

        else if(y<min)

            min=y;

    }

    printf("%d %d",max,min);

    return 0;

}

6.  素数判断

【问题描述】输入一个正整数,判断其是否为素数(只能被1和其本身整除的正整数)。如果用户输入合法的正整数(int类型),则判断该数是否为素数,是输出'Y',不是输出'N';如果用户输入小于等于0的数,则输出“input error”。

【输入形式】输入一个正整数,回车

【输出形式】是素数输出'Y'(大写字母),不是素数输出'N'(大写字母),输入负数时,输出“input error”

【样例输入】7

【样例输出】Y

【样例输入】4

【样例输出】N

【样例输入】-9

【样例输出】input error

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int main()

{

   int i,x,y=0,z=0;

   scanf("%d",&x);

   if(x<=0)

    printf("input error");

    if(x>0)

   {

       for(i=1;i<=x;i++)

   {

       y=x%i;

       if(y!=0)

        z++;

   }

   if(z==x-2)

    printf("Y");

   else

    printf("N");

   }

    return 0;

}

7.  菱形图片输出

【问题描述】请利用循环控制输出一个如下所示的图形。

   #

  ###

 #####

#######

 #####

  ###

   #

【输入形式】没有输入

【输出形式】输出就是以上图形

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int main()

{

  int i,j,k;

   for (i=1;i<=4;i++)

  {

     for(j=1;j<=4-i;j++)

        printf(" ");

     for(k=1;k<=2*i-1;k++)

        printf("#");

    printf("\n");

  }

   for(i=1;i<=3;i++)

  {

      for(j=1;j<=i;j++)

        printf(" ");

      for(k=1;k<=7-2*i;k++)

        printf("#");

      printf("\n");

  }

    return 0;

}

8.  百鸡百钱

【问题描述】我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何? 请输出一组满足条件的鸡翁、鸡母、鸡雏的个数?

【输出形式】鸡翁 鸡母 鸡雏的个数

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int x,y,z;

    for(x=1;x<=100;x++)

    {

        for(y=0;y<=100;y++)

        {

            for(z=0;z<=100;z++)

            {

                if(x+y+z==100 && 5*x+3*y+z/3.0==100)

                    printf("*%d*%d*%d*\n",x,y,z);

            }

        }

    }

    return 0;

}

9.  水仙花数判断

【问题描述】输入一个三位数,判断它是否为水仙花数,水仙花数的定义为该数的每一位数字的立方和等于该数,例如:153=1*1*1+3*3*3+5*5*5

【输入形式】只能输入一个三位数的正整数

【输出形式】是水仙花数,输出数字1,不是输出0

【样例输入】153

【样例输出】1

【样例说明】只能输入三位的正整数,输出只能是数字1或者0,不能输出其他(提示:printf("%d",1);)

#include <stdio.h>

#include <stdlib.h>

int main()

{

 int num,a,b,c;

 scanf("%d",&num);

 a=num%10;

 b=(num/10)%10;

 c=num/100;

 if(a*a*a+b*b*b+c*c*c==num)

    printf("1");

    else

        printf("0");

 return 0;

}

10. 4-求1-1000之内的所有完数

【问题描述】将1-1000之内的所有完数输出(1不是完数)。若一个数等于其所有真因子之和则称之为完数,如28=1+2+4+7+14

【输入形式】无输入

【输出形式】输出数据用逗号分隔

【样例输出】

6 ,28,...

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int i,x,y;

    for(i=1;i<=1000;i++)

    {

        y=0;

        for(x=1;x<i;x++)

        {

            if(i%x==0)

            y=y+x;

        }

        if(y==i)

        printf("%d,",i);

    }

    return 0;

}

  • 函数:

1. 计算计算两整数的最大值函数

【问题描述】用函数编程计算两整数的最大值,在主函数中调用该函数计算并输出从键盘任意输入的两整数的最大值。完善max()函数。

 #include <stdio.h>

 int main()

{

    int a,b;

    int m;

    scanf("%d%d",&a,&b);

    m=max(a,b);

    printf("max=%d\n",m);

    return 0;

}

int max(int x,int y)

{

}

【输入形式】输入两个数以空格间隔

【输出形式】输出两数中的最大值

【样例输入】3 5

【样例输出】max=5

【样例说明】

#include <stdio.h>

int max(int x,int y)

{

   int max;

   if (x>y)

    max=x;

   else max=y;

   return max;

}

 int main()

{

    int a,b;

    int m;

    scanf("%d%d",&a,&b);

    m=max(a,b);

    printf("max=%d\n",m);

    return 0;

}

2. 编写求a的n次方的函数

【问题描述】函数MyPow()用以求a的n次方,请完善。

#include <stdio.h>

double MyPow(double x,int y)

{

}

int main()

{

    double a;

    int x;

    scanf("%lf%d",&a,&x);

    printf("%.2lf",MyPow(a,x));

    return 0;

}

【输入形式】以空格间隔输入两个数

【输出形式】输出a的x次方

【样例输入1】5 3

【样例输出1】125.00

【样例输入2】3.5 3

【样例输出2】42.88

【样例说明】

#include <stdio.h>

#include <math.h>

double MyPow(double x,int y)

{

    double s;

    s= pow(x,y);

    return s;

}

int main()

{

    double a;

    int x;

    scanf("%lf%d",&a,&x);

    printf("%.2lf",MyPow(a,x));

    return 0;

}

3. 计算两个数之差的绝对值的函数编程

【问题描述】fun()函数的作用是计算两个数之差的绝对值,并将差值返回调用函数,请编写fun()函数

#include <stdio.h>

int fun(int x,int y)

{

}

int main()

{

    int n1,n2,n;

    scanf("%d%d",&n1,&n2);

    n=fun(n1,n2);

    printf("%d",n);

    return 0;

}

【输入形式】输入两个数,以空格隔开

【输出形式】输出差值的绝对值

【样例输入】8 4

【样例输出】4

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int fun(int x,int y)

{

   int s;

   s=abs(x-y);

   return s;

}

int main()

{

    int n1,n2,n;

    scanf("%d%d",&n1,&n2);

    n=fun(n1,n2);

    printf("%d",n);

    return 0;

}

4. 求阶乘的函数编程

【问题描述】编程计算组合数blob.png,完善fac()函数

#include <stdio.h>

int fac(int n)

{

}

int main()

{

    int m,k,c;

    scanf("%d%d",&m,&k);

    c=fac(m)/(fac(k)*fac(m-k));

    printf("%d\n",c);

    return 0;

}

【输入形式】输入m、k的值,且保证m>k

【输出形式】输出最终结果

【样例输入】10 8

【样例输出】45

【样例说明】输入数据以空格间隔

#include <stdio.h>

int fac(int n)

{

    int i,fa=1;

    for (i=1;i<=n;i++)

    {

        fa=fa*i;

    }

   return fa;

}

int main()

{

    int m,k,c;

    scanf("%d%d",&m,&k);

    c=fac(m)/(fac(k)*fac(m-k));

    printf("%d\n",c);

  return 0;

}

5. 判断整数是否是完全数的函数编程

【问题描述】如果一个正整数m的所有小于m的不同因子(包括1)加起来正好等于m本身,那么称它为完全数。比如6=1+2+3。请编写一个判断完全数的函数IsPerfect(),判断从键盘输入的整数是否是完全数。

#include <stdio.h>

int main()

{

    int n;

    scanf("%d",&n);

    IsPerfect(n);

    return 0;

}

void IsPerfect(int m)

{

}

【输入形式】输入一个整数

【输出形式】判断此数是否是完全数

【样例输入1】6

【样例输出1】6 is a perfect num

【样例输入2】16

【样例输出2】16 is not a perfect num

【样例说明】

#include <stdio.h>

void IsPerfect(int m)

{

    int i,sum=0;

    for(i=1;i<m;i++)

    {

        if (m%i==0)

            sum+=i;

    }

    if (m==sum)

        printf("%d is a perfect num",m);

    else printf("%d is not a perfect num",m);

}

int main()

{

    int n;

    scanf("%d",&n);

    IsPerfect(n);

    return 0;

}

6. 判断一个整型数a是否为素数的函数编程

【问题描述】函数IsPrime()用来判断一个整型数a是否为素数,若是素数,函数返回1,否则返回0,请编写IsPrime()函数

#include <stdio.h>

int IsPrime(int a)

{

}

int main()

{

    int n;

    scanf("%d",&n);

    if(IsPrime(n))

      printf("yes");

    else

        printf("not");

    return 0;

}

【输入形式】输入一个整数

【输出形式】是素数,输出yes,不是素数,输出no

【样例输入1】5

【样例输出1】yes

【样例输入2】8

【样例输出2】no

【样例说明】

#include <stdio.h>

int IsPrime(int a)

{

    int z,i;

    for(i=2;i<a;i++)

    {

        if(a%i==0)

            break;

    }

    if (i==a)

        z=1;

    else z=0;

    return z;

}

int main()

{

    int n;

    scanf("%d",&n);

    if(IsPrime(n))

        printf("yes");

    else

        printf("no");

    return 0;

}

  • 附加题:

1. 已知:int a=5,b=6,w=1,x=2,y=3,z=4;执行语句“(a=w>x)&&(b=y>z);”后b 的值为6

2. 已知: int a=2, b=7;

计算下列表达式的值:5

a=4,b=1,a>b?++a:++b;

 选择题

1. 已知:char a=’a’;float b=2.3;double c=41;int d;则执行语句d=a+b+c;后变量d的数据类型为  A   

(A) int  (B) char  (C) float  (D) double

2. 若有变量定义int a; double b; 要输入数据存放在a和b中,则下面正确的输入数据的语句为:C

A. scanf("%d%f",a,b);

B. scanf("%d%f",&a,&b);

C. scanf("%d%lf",&a,&b);

D. scanf("%d%lf",a,b);

3. 若变量a的数据类型为double,执行下面两条语句后:a=3.5;

printf("%d",a);输出的数据或判断正确的是:D

A. 3

B. 4

C. 3.500000

D. 输出格式错误

4. 题目内容:有输入语句:int a,b,c; scanf("a=%d,b=%d,c=%d", &a, &b, &c); 为使变量a的值为1,b的值为3,c的值为2,从键盘输入数据的正确形式应当是D(注:#表示空格)

(A)  132<回车>

(B)  1,3,2<回车>

(C)  a=1#b=3#c=2<回车>

(D)  a=1,b=3,c=2<回车>

5. i=1;for(;i<=100;i++)  sum+=i;与以上语句序列不等价的有( C)。

A. for(i=1; ;i++) {sum+=i;if(i==100)break;}

B. for(i=1;i<=100;){sum+=i;i++;}

C. i=1;for(;i<=100;)sum+=i;

D. i=1;for(; ;){sum+=i;if(i==100)break;i++;}

6.  设整型变量x和y的值均为7,则表达式“x/(y-4)”的值是C

A. 3

B. -3

C. 2

D. 1

7. void main( )

{ int i;

    for(i=0;i<5;i=i+1)

      { if(i==3)

         { i=i+1;

      printf("%d\n",i);

            break;

         }

        printf("%d",i=i+1);

      }

     } 请选择(C)

 A.15  B.5  C.135  D.12345

8. void main( )

   {

     int j=0,k=0,a=0;

     while(j<2)

     {

        j=j+1;

        a=a+1;

        k=0;

     }

     while(k<=3)

      { k=k+1;

        if(k%2!=0)

            continue;

        a=a+1;

       }

      a=a+1;

      printf("%d\n",a);

    }请选择(【C】)

A.6  B.8  C.5  D.10

9.if(a=0)是合法的。A

A)对

B)错

10.   main()

{ int n=4;

while (n--)

    printf(〞%d〞,--n);

        }请选择(A)

  A. 20 B.31 C.321  D.210

11.   main()

   int x=10,y=10,i;

   for(i=0;x>8;y=++i)

   printf("%d%d",x--,y);

       }请选择(D)

A.10192           B.9876            C.10990           D.101091

12.   void main( )

   {  int i,a=0;

      for(i=1;i<=5;i=i+1)

        {

        do

          { i=i+1;

            a=a+1;

          }while(i<3);

        }

     i=i+1;

     printf("a=%d,i=%d",a,i);

     }请选择(【A】)

A.a=3,i=7 B.a=0,i=6 C.a=3,i=6 D,i=2,i=6

六、数组:

1. 若有定义:int aa[8];,则不能代表数组元素aa[1]地址的是(C) 。

A. &aa[0]+1     B. &aa[1]      C. &aa[0]++      D. aa+1

2. 以下程序的输出结果是(A)。

int main()

{int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0;

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

    for(j=i;j<=i;j++)

        t=t+b[i][b[j][j]];

printf("%d\n",t);}

A. 3           B. 4              C. 1          D. 9

 编程题

1. 递归:递归求阶乘

【问题描述】递归函数求阶乘,完善函数

long Fact(int n)

{

    if(n<0)

        return 0;

    else if(n==1||n==0)

        _______________;

    else

        _______________;

}

int main()

{

    int n;

    scanf("%d",&n);

    printf("%ld\n",Fact(n));

    return 0;

}

【输入形式】输入一个数

【输出形式】输出对应的阶乘值

【样例输入】5

【样例输出】120

【样例说明】

#include <stdio.h>

#include <stdlib.h>

long Fact(int n)

{

    int t=1,i;

    if(n<0)

        return 0;

    else if(n==1||n==0)

     return t;

    else

       for(i=1;i<=n;i++)

    {

        t=t*i;

    }

    return t;

}

int main()

{

    int n;

    scanf("%d",&n);

    printf("%ld\n",Fact(n));

}

2. 递归求年龄

【问题描述】递归求解:n个人,第一个人2岁,以后每一个人比前一个人大2岁,求第n个人几岁?n值从键盘输入

int age(int n)

{

}

int main()

{

    int n;

    scanf("%d",&n);

    printf("age(%d)=%d\n",n,age(n));

}

【样例输入】3

【样例输出】age(3)=6

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int age(int n)

{

 int t=2,i;

 if(n==1)

 return t;

 else

  for(i=1;i<=n;i++)

 {

     t=2*n;

 }

   return t;

}

int main()

{

    int n;

    scanf("%d",&n);

    printf("age(%d)=%d\n",n,age(n));

}

3. 一维数组:设数组a包括10个整型元素,求a中各相邻两个元素的和,并将和存入数组b中。

【问题描述】设数组a包括10个整型元素,求a中各相邻两个元素的和,并将和存入数组b中。数组a中的元素通过从键盘输入赋值。

【输入形式】1 2 3 4 5 6 7 8 9 10

【输出形式】3 5 7 9 11 13 15 17 19

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int main()

{

   int a[10],b[9],i,x;

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

  {

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

  }

  for(x=1;x<10;x++)

  {

      b[x-1]=a[x-1]+a[x];

      printf("%d ",b[x-1]);

  }

    return 0;

}

4. 定义一个一维整型数组,先对数组中的元素赋初始值,然后按冒泡排序法对数组元素进行由小到大排序

【问题描述】定义一个一维整型数组,先对数组中的元素赋初始值,然后按冒泡排序法对数组元素进行由小到大排序,并打印输出排序结果。要求把冒泡排序写成一个函数。

基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

【输入形式】给待排序的数组赋初始值,以空格分隔,假设数组包含8个元素

【输出形式】输出排序后的数组元素,以空格分隔

【样例输入】3 1 5 7 2 4 9 6

【样例输出】1 2 3 4 5 6 7 9

【样例说明】

#include <stdio.h>

#include <stdlib.h>

#define N 8

int main()

{

    int grade[N],temp,i,j;

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

    {

        scanf("%d",&grade[i]);

    }

        for(i=0;i<N-1;i++)

        {

            for(j=0;j<N-i-1;j++)

            {

                if (grade[j]>grade[j+1])

                {

                    temp=grade[j];

                    grade[j]=grade[j+1];

                    grade[j+1]=temp;

                }

            }

        }

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

    {

        printf("%d ",grade[i]);

    }

    return 0;

}

5. 输入的一个整数插入到数组a中,使得插入后,数组a中的元素仍然由小到大顺序排列

【问题描述】已知数组a[10]={ 12,17,20,25,28,30}中的前6个元素已按由小到大顺序排列,输入的一个整数插入到数组a中,使得插入后,数组a中的元素仍然由小到大顺序排列。

【输入形式】输入一个整数

【输出形式】输出数组a中的元素,以空格分隔

【样例输入】13

【样例输出】12  13  17  20  25  28  30

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int num[10]={12,17,20,25,28,30},in,i,j;

    scanf("%d",&in);

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

    {

        if(num[i]>in)

            break;

    }

    for(j=6;j>i;j--)

    {

        num[j]=num[j-1];

    }

        num[i]=in;

        printf("\n");

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

        {

            printf("%d ",num[i]);

        }

        return 0;

}

6. 编写程序,删去一维数组中所有相同的数,使之只剩一个。

【问题描述】已知一个包含10个元素的一维整型数组a中的数已按由小到大的顺序排列,编写程序,删去一维数组中所有相同的数,使之只剩一个。

【输入形式】给数组a赋已按由小到大的顺序排列的初始值,空格分隔

【输出形式】输出数组a的元素,空格分隔

【样例输入】1 1 2 2 3 3 3 4 4 4

【样例输出】1 2 3 4

【样例说明】

#include<stdlib.h>

#include<stdio.h>

#define N 100

int delete_elem(int arr[], int new_arr[])

{

    int i = 0, new_arr_len = 0;

    int flag[N] = { 0 };

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

    {

        if (flag[arr[i]] == 0)

        {

            new_arr[new_arr_len++] = arr[i];

            flag[arr[i]] = 1;

        }

    }

    return new_arr_len;

}

int main()

{

    int i,arr[N];

    int new_arr[N];

    int arr_len = 10;

    int new_arr_len;

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

    {

        scanf("%d", &arr[i]);

    }

    new_arr_len = delete_elem(arr, new_arr);

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

    {

        printf("%d ", new_arr[i]);

    }

    return 0;

}

7. 编写程序,把N×N(把N定义成常量)矩阵A加上矩阵A的转置,存放在矩阵B中。

【问题描述】编写程序,把N×N(把N定义成常量3)矩阵A加上矩阵A的转置,存放在矩阵B中。

【输入形式】为3×3的矩阵赋初始值,矩阵元素均为整数,元素之间用空格分隔

【输出形式】输出求得的矩阵B,元素之间用空格分隔

【样例输入】

1  1  1   

2  2  2

3  3  3

【样例输出】

2  3  4

3  4  5

4  5  6

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int a[3][3],b[3][3],c[3][3],m,n;

    for (m=0;m<3;m++)

    {

        for(n=0;n<3;n++)

        {

           scanf ("%d",&a[m][n]);

        }

    }

    for (m=0;m<3;m++)

    {

        for(n=0;n<3;n++)

        {

            b[m][n]=a[n][m];

        c[m][n]=a[m][n]+b[m][n];

        }

    }

    for (m=0;m<3;m++)

    {

        for(n=0;n<3;n++)

        {

        printf ("%d ",c[m][n]);

        }

         printf("\n");

    }

    return 0;

}

函数选择填空:

1. 已知函数abc的定义为:

void abc()

{...}

则函数定义中void的含义是D

A.以下三个答案全是错误的            B.执行函数abc后,函数不再返回

C.执行函数abc后,可以返回任意类型   D.执行函数abc后,函数没有返回值

2. 以下正确的函数声明形式是 C

(A)  double fun(int x, int y)

(B)  double fun(int x; int y)

(C)  double fun(int x, int y);

(D)  double fun(int x, y);

3. 以下说法正确的是D

A. 定义函数时,形参的类型说明可以放在函数体内

B. return后边的值不能为表达式

C. 如果形参与实参的类型不一致,以实参类型为准

D. 如果函数值的类型与返回值表达式类型不一致时,以函数值类型为准

4. 以下正确的函数形式是D

A double fun(int x,int y)            B fun(int x,y)

  {  z=x+y;                            {  int z;

     return z;                            return z;

   }                                    }               

C fun(x,y)                           D double fun(int x,int y)

  { int x,y;                           {  double z;

   double z;                             z=x+y;

    z=x+y;                                return z;

    return z;                           }

   }

5. 以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)的值,请选择填空。 D

#include <stdio.h>

float f(float,float);

int main()

    float x,y,z,sum;

    scanf("%f%f%f",&x,&y,&z);

    sum=f( ________ );

    printf("sum=%f\n",sum);

}

float f(float a,float b)

{

    float value;

    value=a/b;

    return value;

}

 A.x-y,x+y   B. z+y,z-y    C.z-y,z+y    D.x+y,x-y

6. 在C语言程序中,以下正确的描述是B          

(A)  函数的定义可以嵌套,但函数的调用不可以嵌套

(B)  函数的定义不可以嵌套,但函数的调用可以嵌套

(C)  函数的定义和函数的调用均不可以嵌套

(D)  函数的定义和函数的调用均可以嵌套

7. 如果在一个函数中的复合语句中定义了一个变量,则该变量D

A. 为非法变量            B.在该函数中有效

C.在本程序范围内均有效   D.只在该复合语句中有效

8. c语言程序由函数组成。它的B。

(A)主函数必须在其他函数之前,函数内可以嵌套定义函数

(B)主函数可以在其他函数之后,函数内不可以嵌套定义函数

(C)主函数必须在其他函数之前,函数内不可以嵌套定义函数

(D)主函数必须在其他函数之后,函数内可以嵌套定义函

9. 以下不正确的说法是D

A.在不同函数中可以使用相同名字的变量

B.形式参数是局部变量

C.在函数内定义的变量只在本函数范围内有效

D.在函数内的复合语句中定义的变量在本函数范围内有效

10.阅读程序,选择程序的运行结果:A

#include <stdio.h>

main()

{

 int x;

 X = try(5);

 printf("%d\n",x);

}

try(int n)

{

 if(n>0)

  return ( n*try(n-2));

 else

  return (1);

}

A.15

B.120

C.1

D.前面的答案均不正确

七、字符数组:

选择题

1. 有两个字符数组a、b,则以下正确的输入语句是B。

A.gets(a,b);          B.scanf("%s%s",a,b);

C.scanf("%s%s",&a,&b);     D.gets("a"),gets("b");

2. 字符串“\ta\017bc”的长度(不包括结束符)是 B        

(A)  9

(B)  5

(C)  6

(D)  7

3. 为了判断两个字符串s1和s2是否相等,应当使用D

A.if(s1==s2) B.if(s1=s2)  C.if(strcpy(s1,s2)  D.if(strcmp(s1,s2)==0)

4. 调用strlen("abcd\0ef\0g"的返回值是A

A.4  B.5  C.8  D.9

5. 判断字符串s1是否大于字符串s2,应当使用D

A.if(s1>s2)         B.if(strcmp(s1,s2))

C.if(strcmp(s2,s1)>0)    D.if(strcmp(s1,s2)>0)

6.

有字符数组a[80]和b[80],则正确的输出语句是D。

A.puts(a,b);      B.printf("%s,%s",a[],b[]);

C.putchar(a,b);     D.puts(a),puts(b);

7. 已知:char str1[10],str2[10]={"books"};则在程序中能够将字符串"books"赋给数组str1的正确语句是B

A.str1={"books"};  B.strcpy(str1,str2);  C.str1=str2  D.strcpy(str2,str1);

8. 若有定义和语句:char s[10]; s="abcd";printf("%s\n",s);

则下面结果正确的是(D)。

A) 输出abcd                           B) 输出a

C) 输出abc                            D) 编译不通过

 编程题

1. 字符串逆序

【问题描述】编写程序:将键盘输入的字符串逆序存放,逆序后的字符串仍然保留在原来的字符数组中,最后输出。(不得调用任何字符串处理函数)

提示:借助于一个中间变量temp,将数组中首尾对称位置的元素互换。i指向数组首部元素,从0依次加1变化;j指向数组尾部的元素,从n-1依次减1变化;当变化到i>j时结束元素互换操作。

【输入形式】从键盘输入一行字符串。

【输出形式】输出其逆序字符串

【样例输入】

 hello world

【样例输出】

 dlrow olleh

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int main()

{

    char a[30],x;

    int i,j=0;

    gets(a);

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

    {

       j++;

    }

    for(i=0;i<j/2;i++)

    {

        x=a[i];

        a[i]=a[j-1-i];

        a[j-1-i]=x;

    }

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

    {

        printf("%c",a[i]);

    }

    return 0;

}

2. 字符串连接

【问题描述】将两个字符串连接起来后输出,不采用strcat函数。

【输入形式】分行输入两个字符串(不超过50个字符)

【输出形式】输出合并后的字符串

【样例输入】

 good

 morning

【样例输出】

 goodmorning

【样例说明】分行输入"good"和"morning"两个字符串,则输出字符串"goodmorning"。

#include <stdio.h>

#include <stdlib.h>

int main()

{

    char a[50],b[50];

    int i=0,j=0,k,n;

    gets(a),gets(b);

    while(a[i]!='\0')

    {

         i++;

    }

     while(b[j]!='\0')

    {

         j++;

    }

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

    {

        printf("%c",a[k]);

    }

    for(k=0;k<j;k++)

    {

        n=i+1;

        a[n-2]=b[k];

        printf("%c",a[n-2]);

    }

    return 0;

}

3. 字符数组

【问题描述】编程实现如下功能:从键盘输入两个字符串,对其进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdefg和abceef,则输出为-1。

【输入形式】分行输入两个字符串(不超过50个字符)

【输出形式】输出两个字符串第一个不相同字符的ASCII码之差

【样例输入】

abcdefg

abceef

【样例输出】

-1

【样例说明】

输入的两个字符串分别为abcdefg和abceef,则输出为-1。

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main()

{

   char a[50],b[50];

   int i,j=0,n;

   gets(a),gets(b);

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

   {

       for(;i==j;j++)

       {

           if(a[i]!=b[j])

           break;

       }

       i++;

       if(a[i]!=b[i])

        break;

   }

   n=a[i]-b[j];

   printf("%d",n);

    return 0;

}

4. 编程题《编程判断输入的一串字符是否为“回文”》

【问题描述】

编程判断输入的一串字符是否为回文。所谓回文,是指顺读和倒读都一样的字符串。如XYZYX和xyzzyx都是回文。

【输入形式】

首先打印提示"Input a string:”;然后直接在冒号后面输入字符串,字符串中可以包含空格;字符串以回车结束。

【输出形式】

    如果判定是回文,则打印YES;换行;

    如果判定不是回文,则打印NO;换行。

【运行时的输入输出样例1】(下划线部分表示输入)

Input a string:abcddcba

YES

【运行时的输入输出样例2】(下划线部分表示输入)

Input a string:abcddcb

NO

#include <stdio.h>

#include <stdlib.h>

int main()

{

    char a[30];

    int i=0,j;

    printf("Input a string:");

    gets(a);

    while(a[i]!='\0')

    {

         i++;

    }

    for(j=0;j<=(i-1)/2;j++)

    {

        if(a[j]!=a[i-1-j])

           break;

    }

    if(j>(i-1)/2)

        printf("YES");

    else

        printf("NO");

    return 0;

}

5. 输出其中最大的字符串

【问题描述】输入5个字符串,输出其中最大的字符串。

【输入形式】首先打印提示"Input 5 srings:";然后另起一行输入五个字符串,每个字符串之间用空格或回车或制表符隔开。

【输出形式】首先打印Max is:;紧跟后面输出最大的一个字符串;空格;换行。

【运行时的输入输出样例】(下划线部分表示输入)

Input 5 srings:

Wang

Li

Zha

Jin

Xian

Max is:Zha

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main()

{

   char str[80], max[80];

      int i;

      printf("Input 5 srings:\n");

       scanf("%s", max);

       for(i=1;i<=4;i++)

       {

         scanf("%s", str);

          if(strcmp(max,str)<0)

         strcpy(max,str);

       }

       printf("Max is:%s\n", max);

    return 0;

}

八、结构体:

选择题

1. 定义以下结构体类型

struct a

{

  int x;

  float f;

}a1,a2,a3;

结构体变量a1,a2,a3的所分配内存空间的总和是C

A.  4       B.12      C.18      D.6

2. 设有以下说明语句

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

    则下面的叙述不正确的是    C

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

    B. struct stu 是用户定义的结构体类型

    C. stutype 是用户定义的结构体类型名

    D. a 和b 都是结构体成员名

3. struct KeyWord

{

  float i;

  long j;

char key[20];

  int id;

 }kw={1,2,“void”,3};

则下列叙述中不正确的是C

A.      printf(“%f”,kw.i);

B.      printf(“%ld”,kw.j);

C.      printf(“%c”,kw.key);

D.      printf(“%d”,kw.id);

4.

struct Person

{

  char name[20];

  int age;

}class1,class2;

     则下面输入语句不正确的是D

A.      scanf(“%d”,&class1.age);

B.      scanf(“%s”,class1.name);

C.      gets(class2.name);

D.      scanf(“%c”,&class2.name);

5. 读程序,看程序运行结果 B

struct Person

{

  char name[20];

  int age;

};

main()

{

   int flag=1;

   struct Person class1={“Sarah”,12};

   struct Person class2={“John”,14};

   if(class1.age>=class2.age)

      flag=0;

   if(flag=1) printf(“%d,%s”,flag,class1.name);

   else printf(“%d,%s”,flag,class2.name);

}

A.0,Sarah       B.1,Sarah        C.0,John      D.1,John

编程题

1. 7-职工信息的输入和输出

【问题描述】

有以下职工信息,使用结构体数组存储这些信息,从键盘输入5条记录,之后在屏幕上依次输出职工信息。

struct card{

int stuffID;//职工编号

int bonus; //工资

};

【输入形式】

先输入第1条记录的职工编号,再输入工资,之间用空格分割,回车换行后输入第2条记录

【输出形式】

分五行输出数据,每行数据均使用空格分割

【输入样例】

1001 8000

1002 9000

【输出样例】每行数据均使用一个空格分割,分五行输出

1001 8000

1002 9000

【样例说明】

#include <stdio.h>

#include <stdlib.h>

struct card

{

int stuffID;//职工编号

int bonus; //工资

}people[4];

 int main ()

 {

     int i;

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

     {

         scanf("%d",&people[i].stuffID);

         scanf("%d",&people[i].bonus);

         printf("\n");

     }

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

     {

         printf("%d",people[i].stuffID);

         printf("%d",people[i].bonus);

         printf("\n");

     }

     return 0;

 }

2. 结构体数组输出(商品信息)

【问题描述】现有一组商品信息包括:编号、商品名、定价、库存

101  book     34    600

102  food     56    700

103  shoes    199    750

104  note     40    840

使用结构体数组存储商品信息,并在屏幕上依次输出商品信息。

【输入形式】无

【输出形式】输出数据分4行,每行数据之间用1个空格分隔

【样例输入】

【样例输出】输出数据分4行,每行数据之间用1个空格分隔

101     book     34    600

102     food     56    700

103     shoes    199    750

104     note     40    840

【样例说明】

#include <stdio.h>

#include <stdlib.h>

struct things

{

    char num[4];

    char name[6];

    char price[4];

    char good[4];

};

int main()

{

    int i;

    struct things str[4]={{"101","book","34","600"},

                      {"102","food","56","700"},

                      {"103","shoes","199","750"},

                      {"104","note","40","840"}};

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

    {

        printf("*%s*%s*%s*%s*\n",str[i].num,str[i].name,str[i].price,str[i].good);

    }

    return 0;

}

3. 8-对存入结构体的银行卡信息按照金额从小到大排序

【问题描述】

有以下银行卡信息,使用结构体数组存储这些信息,从键盘输入5条记录,对金额按从小到大的顺序排序,并输出排序后的5条记录。

struct card{

int cardID;//银行卡编号

int bonus; //金额

};

【输入形式】先输入第1条记录的考号,再输入金额,之间用空格分隔,回车换行后输入第2条记录

【输出形式】 分五行输出数据,每行数据均使用空格分割

【输入样例】

1001  20

1002  80

1003  50

1004  10

1006  40

【输出样例】

1004  10

1001  20

1006  40

1003  50

1002  80

【样例说明】

#include <stdio.h>

#include <stdlib.h>

struct card

{

    int cardID;

    int bonus;

}infor[4];

int main()

{

    int i;

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

    {

        scanf("%d ",&infor[i].cardID);

        scanf("%d",&infor[i].bonus);

        printf("\n");

    }

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

    {

        printf("%d ",infor[i].cardID);

        printf("%d",infor[i].bonus);

        printf("\n");

    }

}

4. 8-结构体数组插入

【问题描述】有以下学生信息,使用结构体数组存储这些信息(4分)

struct student{

int num;//学号

int computer; //计算机成绩

}s[5]={{101,75},{103,80},{104,85},{106,90}};

再输入一条新记录,插入到结构体数组中,让5条记录按计算机成绩升序有序。

【输入形式】每条记录的2个数据都使用空格分隔

【输出形式】分五行输出数据,每行数据均使用空格分隔

【输入样例】102 88

【输出样例】每行数据均使用一个空格分隔,分五行输出

101 75

103 80

104 85

102 88

106 90

【样例说明】

#include <stdio.h>

#include <stdlib.h>

struct student

{

int num;//学号

int computer; //计算机成绩

}s[5]={{101,75},{103,80},{104,85},{106,90}};

int main()

{

    int i,j,k;

    scanf("%d%d",&s[4].num,&s[4].computer);

    for(k=0;k<5;k++)

    {

        if(s[k].computer>s[4].computer)

        {

            break;

        }

    }

    for(j=5;j<5-k;j--)

    {

        s[j].computer=s[j-1].computer;

    }

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

    {

        printf("%d ",s[i].num);

        printf("%d",s[i].computer);

        printf("\n");

    }

    return 0;

}

5. 8-结构体数组删除

【问题描述】有以下类信息,使用结构体数组存储这些信息

struct class{

int id;//类编号

char info[20]; //类信息

}a[5]={{1,"aaa"},{2,"bbb"},{6,"ccc"},{7,"ddd"},{4,"eee"}};

从键盘输入一个类编号,如果有该类,删除该类信息,并输出删除后剩余类信息;如果没有,全部输出。

【输出形式】分五行输出数据,每行数据均使用空格分隔

【输入样例】

1

【输出样例】每行数据均使用一个空格分隔,分五行输出

2 bbb

6 ccc

7 ddd

4 eee

【样例说明】

#include <stdio.h>

#include <stdlib.h>

struct class

{

    int id;

    char info[20];

}a[5]={{1,"aaa"},{2,"bbb"},{6,"ccc"},{7,"ddd"},{4,"eee"}};

int main()

{

    int i,j;

    struct class str[1];

    scanf("%d",&str[0].id);

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

    {

        if(a[i].id==str[0].id)

            break;

    }

    if(i==5)

    {

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

    {

        printf("%d %s\n",a[i].id,a[i].info);

    }

    }

    else

    {

        for(j=i;j<5;j++)

    {

        a[j]=a[j+1];

    }

    }

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

    {

        printf("%d %s\n",a[i].id,a[i].info);

    }

   return 0;

}

6. 结构体数组,录入显示并计算学生平均分

【问题描述】有以下类信息,使用结构体数组存储这些信息

struct student{

int num; //学生序号

char name[20];//学生名字

float math; //数学成绩,保留0位小数,提示输出格式是 %0.f

}stu[4];

从键盘输入4条记录,之后在屏幕上依次输出这些类信息,并计算出数学平均成绩,保留2位小数 。

【输入形式】每条记录的3个数据都使用空格分隔

【输出形式】分四行输出数据,每行数据均使用空格分隔;最后一行显示如输出样式avg=

【输入样例】

1 aaa 45

2 bbb 67

3 ddd 77

4 qqq 88

【输入形式】每行数据均使用一个空格分隔,分四行输出

【输出形式】

1 aaa 45

2 bbb 67

3 ddd 77

4 qqq 88

avg=69

【样例输入】

【样例输出】

【样例说明】

#include <stdio.h>

#include <stdlib.h>

struct student

{

  int num;//学生序号

  char name[20];//学生名字

  float math;//数学成绩

  }stu[4];

int main()

{

    int i,j;

    double sum=0,ave=0;

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

    {

        scanf("%d%s%f",&stu[i].num,&stu[i].name,&stu[i].math);

    }

    for(j=0;j<4;j++)

    {

        sum=sum+stu[j].math;

    }

    ave=sum/4;

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

    {

        printf("%d %s %0.f\n",stu[i].num,stu[i].name,stu[i].math);

    }

    printf("avg=%0.lf",ave);

    return 0;

}

九、指针:

填空题

1. 下面程序的输出结果是    71

int  ast(int x,int y,int *cp,int *dp)

{*cp=x+y;

  *dp=x-y;}

main( )

{int a,b,c,d;

a=4;b=3;

ast(a,b,&c,&d);

printf(“%d%d\n”,c,d);

}

选择题

1. 若有定义:int x,*pb;则以下正确的赋值表达式是(A)。

(A)pb=&x           (B)pb=x         (C)*pb=&x          (D)*pb=*x

2. 以下程序的输出结果是(B)。

A)9.000000    B)1.500000      C)8.000000     D)10.500000

void  sub(float  x,float *y,float *z)

{*y=*y-1.0;

*z=*z+x);}

main()

{float a=2.5,b=9.0,*pa,*pb;

pa=&a;pb=&b;

sub(b-a,pa,pb);

printf(“%f\n”,a);

}

3. 已知char s[20]=”programming”,*ps=s;则不能引用字母O的表达式(

D )

A)*(ps+2)     B)s[2]      C)ps[2]    D)ps+=2

4. 以下能正确进行字符串赋初值的语句是(   c  )

A)char  s[5]={ 'a', 'e', 'i', 'o', 'u'};    B) char s[5]= "good! " ;

C) char *s;                         D)char a[5];

s="good";                          s="good";

5. 设有如下定义:

    int arr[ ]={6,7,8,9,10};

    int *ptr;

    则下列程序段的输出结果为(A)。

ptr=arr;

ptr+=2;

  printf ("%d,%d\n",*ptr,*(ptr+2));

A)8,10            B)6,8            C)7,9             D)6,10

6. 以下程序段的输出结果是(A)。

static  char a[ ]=”Basic”;

char *ptr;

for(ptr=a;ptr<a+5;ptr++)

printf(“%s\n”,ptr);

A) Basic       B)B      C)c           D) Basic

      asic          a          ic            

       sic           s          sic

       ic             i          asic

       c             c          Basic

7. 执行以下程序段后的y值为(A  )。

static  int a[ ]={1,23,5,7,9};

int y,x,*ptr;

y=1;

ptr=&a[1];

for(x=0;x<3;x++)

y*=*(ptr+x);

A)805       B)15       C)945     D)无确定值

编程题

1. 使用指针判断一个串是否为回文串

【问题描述】编写函数IsPaliString(),要求使用头指针和尾指针判断一个字符串是否为回文串,如果是返回1,不是返回0.编写main函数,输入一组字符串,调用IsPaliString()函数,输出YES(是否为回文串)或NO(不是回文串)。程序框架如下:

int IsPaliString(char str[]);

int main()

{

    return 0;

}

int IsPaliString(char str[])

{

 }

【样例输入】MADAM

【样例输出】YES

【样例输入】world

【样例输出】NO

【样例说明】输入的字符串中不含空格

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main()

{

    char name[20];

    int flag=1,i;

    scanf("%s",name);

    i=strlen(name);

    char *start=name;

    char *end=name+(i-1);

    for(;start<=end;start++,end--)

    {

        if (*start!=*end)

        {

            flag=0;

            break;

        }

    }

    if (flag)

        printf("YES");

    else printf("NO");

    return 0;

}

2. 指针做函数参数

【问题描述】写一个函数,求一个字符串的长度。在主函数中输入字符串,并输出其长度。

【输入形式】输入字符串,以回车结束。

【输出形式】整数

【样例输入】hello world!

【样例输出】12

【样例说明】函数参数必须是指针类型。

#include <stdio.h>

int lenstr(char *str)

{

    int i = -1;

    while (str[++i]!='\0');

    return i;

}

int main()

{

    char p[1000];

    gets(p);

    printf("%d\n", lenstr(p));

    return 0;

}

3. 编写一个程序,初始化一个 double 数组,然后把数组内容复制到另外两个数组

【问题描述】编写一个程序,初始化一个 double 数组,然后把数组内容复制到另外两个数组(3 个数组都需要在主程序中声明)。制作第一份拷贝的函数使用数组符号。制作第二份拷贝的函数使用指针符号,并使用指针的增量操作。把目标数组名和要复制的元素数目做为参数传递给函数。也就是说,如果给定了下列声明,函数调用应该如下面所示:

double source [5];

double targetl[5];

double target2 [5];

copy_arr (source, target1, 5); //使用数组方式进行复制

copy_ptr (source, target1,5); //使用指针方式进行复制

【输入形式】为source数组赋初始值,用空格分隔

【输出形式】输出数组target1和target2中保存的数值,以逗号分隔,保留1位小数

【样例输入】1.1  2.2  3.3  4.4  5.5

【样例输出】

1.1, 2.2, 3.3, 4.4, 5.5,

1.1, 2.2, 3.3, 4.4, 5.5,

【样例说明】

#include <stdio.h>

#include <stdlib.h>

void copy_arr(double source[],double target1[],int a)

{

    int i;

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

        target1[i]=source[i];

}

void copy_ptr(double *source,double *target2,int a)

{

    int i;

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

        *target2++=*source++;

}

int main()

{

    int k;

    double source[5],target1[5],target2[5];

    for(k=0;k<5;k++)

        scanf("%lf ",&source[k]);

    copy_arr(source,target1,5);

    copy_ptr(source,target2,5);

    for(k=0;k<5;k++)

        printf("%.1lf,",target1[k]);

    printf("\n");

    for(k=0;k<5;k++)

        printf("%.1lf,",target2[k]);

    return 0;

}

4. 8.4.4 编程题《定义函数strmcpy(s,t,m),实现字符串复制》

【问题描述】

字符串复制。输入一个字符串t和一个正整数m,将字符串t中从第m个字符开始的全部字符复制到字符串s中,再输出字符串s。要求用字符指针定义并调用函数strmcpy(s,t,m),它的功能是将字符串t中从第m个字符开始的全部字符复制到字符串s中。

【输入形式】

首先打印提示&ldquo;Input a string:";然后直接在冒号后面输入字符串,作为t的内容,字符串中可以包含空格;字符串以回车结束。

    打印提示&ldquo;Input an integer:&rdquo;;然后直接在冒号后面输入一个正整数,代表m的值;回车。

【输出形式】首先打印&ldquo;Output is:&rdquo;;紧跟后面输出字符串s中的内容;换行。

【运行时的输入输出样例】(下划线部分表示输入)

Input a string:happy new year

Input an integer:7

Output is:new year

【答案】

#include <stdio.h>

#include <stdlib.h>

void strmcpy(char a[],char b[],int n)

{

    int i=0,k;

    if(n==0)

    {

        k=0;

        while(b[k]!='\0')

        {

            a[i++]=b[k];

            k++;

        }

        a[i]='\0';

    }

    else

    {

        k=n-1;

         while(b[k]!='\0')

        {

            a[i++]=b[k];

            k++;

        }

        a[i]='\0';

    }

}

int main()

{

    char a[30],b[30];

    int m;

    printf("Input a string:");

    gets(b);

    printf("Input an integer:");

    scanf("%d",&m);

    strmcpy(a,b,m);

    printf("Output is:");

    puts(a);

    return 0;

}

十、文件:

选择题

1. 若以”a+”方式打开一个已存在的文件,则以下叙述正确的是:A

A.文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作

B.文件打开时,原有文件内容不被删除,位置指针移到文件开头,可作重写或读操作

C.文件打开时,原有文件内容被删除,只可作写操作

D.以上各种说法皆不正确

2. 设fp是指向某个文件的指针,且已读到文件末尾,则库函数feof(fp)的返回值是:C

A.EOF

B.-1

C.非零值

D.NULL

3. 标准库函数fgets(p1,k,f1)的功能是B

A.从f1所指的文件中读取长度为k的字符串存入p1所指的内存

B.从f1所指的文件中读取长度不超过k-1的字符串存入p1所指的内存

C.从f1所指的文件中读取k个字符串存入p1所指的内存

D从f1所指的文件中读取长度为k-1的字符串存入p1所指的内存

4. 若要用fopen函数打开一个新的二进制文件,该文件既要能读也要能写,则文件方式字符串应是B

A. ab+   B.wb+    C. rb+    D. ab

5. 若要指定打开C盘上子目录myfile下的文件test.bin,在调用函数fopen时,第一个参数的正确格式是 C

A.C:myfile\test.bin

B.C:\myfile\\test.bin

C.C:\\myfile\\test.bin

D.C:\myfile\test.bin

6. 已知函数的调用形式是:fread(buffer,size,count,fp); 其中buffer代表的是:C

A.一个整型变量,代表要读入的数据项总数

B.一个文件指针,指向要读的文件

C.一个指针或数组名,指向要读入数据的存放地址

D.一个存储区,存放要读的数据项

7. fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是 C

A.只写

B.追加

C.读或读写

D.答案B和C都正确

编程题

1. 【问题描述】创建一个文本文件data.txt,从键盘输入自己的姓名和学号,并保存到data.txt文件中,关闭该文件。然后重新打开data.txt文件,从中读取姓名和学号并打印之。例如输入形式如下:

输入姓名:李焕哲

输入学号:2016014110033

从文件中读取的数据输出形式如下:

李焕哲

2016014110033

【输入形式】输入姓名和学号

【输出形式】输出姓名和学号

【样例输入】

【样例输出】

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int main()

{

   FILE *pf;

    char name[50];

    char num[20];

    if((pf=fopen("data.txt","w"))==NULL)

    {

        printf("cann't open date");

        exit(0);

    }

    printf("输入姓名:");

    gets(name);

    printf("输入学号:");

    gets(num);

    fputs(name,pf);

    fputs("\n",pf);

    fputs(num,pf);

    fclose(pf);

    if((pf=fopen("data.txt","r"))==NULL)

    {

        printf("cann't open date");

        exit(0);

    }

    if(fgets(name,50,pf)!=EOF)

        puts(name);

    if(fgets(num,20,pf)!=EOF)

        puts(num);

    fclose(pf);

    return 0;

}

2. 【问题描述】创建一个文本文件rw.txt,若该文件已存在则打开该文件,从键盘输入一个字符串,并用putc函数把该字符串逐个字符的追加该文件的尾部,关闭该文件。然后重新打开rw.txt文件,从中用getc逐个读取字符,用putc打印到屏幕上。每个输入的字符串占一行

【输入形式】输入一个字符串写入文件

【输出形式】输出文件中的所有字符串

【样例输入】hello world

【样例输出】hello world

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int main()

{

   FILE *fp;

    char a,b;

    if((fp=fopen("rw.txt","a+"))==NULL)

    {

        printf("cannot open file\n");

        exit(0);

    }

   a=getchar();

   while (a!='\n')

   {

       fputc(a,fp);

       a=getchar();

   }

    fclose(fp);

    if((fp=fopen("rw.txt","a+"))==NULL)

    {

        printf("cannot open file\n");

        exit(0);

    }

    b=fgetc(fp);

    while (b!=EOF)

    {

      putchar(b);

      b=fgetc(fp);

    }

    fclose(fp);

    return 0;

}

3. 【问题描述】打开前面创建的文件data.txt,并在文件未尾添加以下两行数据

Jack

2012103110033

关闭该文件。然后重新打开data.txt文件,从中读取姓名和学号并打印之。

【输入形式】输入上面的内容

【输出形式】输出文件中的内容,每个字符串占一行

【样例输入】

Jack

2012103110033

【样例输出】

......以前的文件内容

Jack

2012103110033

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int main()

{

    FILE *fp;

    char name [100];

    char num[100];

    if((fp=fopen("data.txt","a+"))==NULL)

    {

        printf("can not open file\n");

        exit(0);

    }

    printf("输入姓名:");

     gets(name);

     printf("输入学号:");

     gets(num);

     fputs(name,fp);

     fputc('\n',fp);

     fputs(num,fp);

     fclose(fp);

     if((fp=fopen("data.txt","r+"))==NULL)

     {

        printf("can not open file\n");

        exit(0);

     }

     fgets(name,100,fp);

     fgets(num,100,fp);

     puts(name);

     puts(num);

           fclose(fp);

    return 0;

}

4. 【问题描述】创建一个二进制文件bin.dat,再创建一个一维数组a[8],给a[8]赋初始值,然后把数组中的元素及其累加和保存到文件bin.dat中,关闭文件。然后重新打开bin.dat文件,从中读取前面保存的内容

【输入形式】给一维数组赋初始值

【输出形式】从文件中读取内容并打印它们

【样例输入】2 3 4 5 6 7 8 9

【样例输出】2 3 4 5 6 7 8 9 44

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int a[8];

    int i,sum=0;

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

    {

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

        sum+=a[i];

    }

    FILE *fp;

    if((fp=fopen("bin.dat","wb+"))==NULL)

    {

        printf("can not open file\n");

        exit(0);

    }

    fclose(fp);

    if((fp=fopen("bin.dat","rb+"))==NULL)

    {

        printf("can not open file\n");

        exit(0);

    }

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

    {

        printf("%d ",a[i]);

    }

    printf("%d",sum);

    return 0;

}

5. 【问题描述】打开前面创建的二进制文件bin.dat,向末尾追加8个整数及其累加和,关闭文件。然后重新打开bin.dat文件,从中读取前面保存所有的内容。

【输入形式】向末尾追加8个整数及其累加和

【输出形式】从中读取前面保存所有的内容

【样例输入】2 1 3 4 5 6 7 8

【样例输出】2 1 3 4 5 6 7 8 36

【样例说明】

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int a[8];

    int i,sum=0;

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

    {

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

        sum+=a[i];

    }

    FILE *fp;

    if((fp=fopen("bin.dat","wb+"))==NULL)

    {

        printf("can not open file\n");

        exit(0);

    }

    fclose(fp);

    if((fp=fopen("bin.dat","rb+"))==NULL)

    {

        printf("can not open file\n");

        exit(0);

    }

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

    {

        printf("%d ",a[i]);

    }

    printf("%d",sum);

    return 0;

}

补充题目:

1

重复数字检查(4分)

题目内容:

从键盘输入一个数,检查这个数中是否有重复出现的数字。如果这个数中有重复出现的数字,则显示“Repeated digit!”;否则显示“No repeated digit!”。

已知函数原型:

int CountRepeatNum(int count[], int n);

若有重复数字,则该函数返回重复出现的数字;否则返回-1.

程序运行结果示例1

Input n:

28212

Repeated digit!

程序运行结果示例2

Input n:

12345

No repeated digit!

输入提示:"Input n:\n"

输入格式"%ld"

输出格式:

有重复数字,输出信息: "Repeated digit!\n"

没有重复数字,输出信息: "No repeated digit!\n"

代码:

#include <stdio.h>

#include <stdlib.h>

int CountRepeatNum(int count[], int n);

int main()

{

    int cnt[10];

    long n;

    printf("Input n:\n");

    scanf("%ld",&n);

    if(CountRepeatNum(cnt,n)==-1)

        printf("No repeated digit!");

    else

         printf("Repeated digit!");

    return 0;

}

int CountRepeatNum(int count[], int n)

{

    int i=0,cnt1=0;

    int j,k=0;

    int flag=0;

    //分离出所有的数并存放在数组count中

    while(n>=10)

    {

        count[i]=n%10;

        n/=10;

        i++;

        cnt1++;

    }

    count[cnt1]=n;

//    for(i=0;i<cnt1+1;i++)

//        printf("%d ",count[i]);

//    printf("\n");

    for(j=0;j<cnt1;j++)

    {

        //flag=0;

        for(k=j+1;k<=cnt1;k++)

            if(count[j]==count[k])

        {

            flag=1;

            break;

        }

    }

    if(flag==0)

            return -1;

   else

            return 1;

}

2 教授的课(4分)

题目内容:

教授正在为一个有N个学生的班级讲授离散数学课。他对某些学生缺乏纪律性很不满意,于是决定:如果课程开始后上课的人数小于K,就取消这门课程。从键盘输入每个学生的到达时间,请编程确定该课程是否被取消。如果该门课程被取消,则输出“Yes”,否则输出“No”。假设教授在时刻0开始上课。如果一个学生的到达时间是非正整数,则表示该学生在上课前进入教室。如果一个学生的到达时间是正整数,则表示该学生在上课后进入教室。如果一个学生在时刻0进入教室,也被认为是在上课前进入教室。假设到达时间的绝对值不超过100,学生数N不超过1000。要求在输入学生的到达时间之前,先输入N和K。

已知函数原型:

//函数功能:根据数组a中记录的学生到达时间确定课程是否被取消,取消则返回1,否则返回0

int IsCancel(int a[], int n, int k);

程序运行结果示例1

Input n,k:

4,3

-1 -3 4 2

YES

程序运行结果示例2

Input n,k:

5,3

-1 -2 -3 0 4

NO


 

输入提示:"Input n,k:\n"

输入格式

"%d,%d"

"%d"

输入包括两行数据:

    1行是n,k的值。

    2行是学生的到达时间。

输出格式: 

课程被取消,输出"YES"

课程不取消,输出"NO"

代码:

#include <stdio.h>

#include <stdlib.h>

int IsCancel(int a[], int n, int k);

int main()

{

    int i,n,k,flag,a[100];

    printf("Input n,k:\n");

    scanf("%d,%d",&n,&k);

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

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

    flag=IsCancel(a,n,k);

    if(flag==0)

        printf("YES");

    else

        printf("NO");

    return 0;

}

int IsCancel(int a[], int n, int k) //统计数组中<=0的数的个数<=k(表示没有迟到的学生人数)

{

    int i,cnt=0;

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

        if(a[i]<=0)

          cnt++;

    if(cnt<=k)

        return 0;  //yes

    else

        return 1;  //no

}

3 题目内容:

请编程找出一个M*N矩阵中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。如果矩阵中没有鞍点,则输出“No saddle point!”

已知函数原型:

void FindSaddlePoint(int a[][N], int m, int n);

在该函数中输出有无鞍点的信息。

程序运行结果示例1

Input m,n:

3,3

Input matrix:

1 2 3

4 5 6

7 8 9

a[0][2] is 3


 

程序运行结果示例2

Input m,n:

3,4

Input matrix:

3 4 7 5

0 1 8 2

9 3 2 6

No saddle point!

输入提示: "Input m,n:\n"

        “Input matrix:\n" 

输入格式

输入矩阵大小: "%d,%d"

输入矩阵元素: "%d"

输出格式:

找到鞍点的输出格式:"a[%d][%d] is %d\n"
 

没找到鞍点的输出格式:"No saddle point!\n"

4 计算三位阶乘和数(4分)

题目内容:

试求出所有三位阶乘和数:m=a!+b!+c!(其中a为百位数字,b为十位数字,c为个位数字。约定0!=1,并输出所有的m)

输入格式:

输出格式:"%ld\n"

代码:

#include <stdio.h>

#include <stdlib.h>

long fac(int n);

int main()

{

    int a,b,c;

    int i;

    for(i=100;i<999;i++)

    {

        a=i/100;

        b=i/10%10;

        c=i%10;

        if(i==fac(a)+fac(b)+fac(c))

            printf("%ld\n",i);

    }

    return 0;

}

long fac(int n)

{

    int i;

    long f=1;

    if(n==0)

        f=1;

    else

    {

        for(i=1;i<=n;i++)

        f*=i;

    }

    return f;

}

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值