信协第一学期考核

(普通题一题20分) 共七道题 选做

题目一:数组(array

从键盘输入一个长度为N(比如10)的整型数组,第一行输出小于零的数,第二行输出零的个数,第三行输出大于零的数,维持原数组顺序,不进行排序。

 输入描述 :第一行键盘输入 n,第二行输入n个数。

输出描述:

第一行输出小于零的数,第二行输出零的个数,第三行输出大于零的数。

样例输入:

10

2  -5  -89  75  0  -89  0  93  48  0

样例输出:

-5  -89  -89

3

2  75  93  48

 解答:

#include <stdio.h>
#include <stdlib.h>
#define N 15
int main()
{
    int n,a[N],i,count=0;
    char c;
    scanf(“%d”,&n);
    for(i=0;i<n;i++)
    {
        scanf(“%d”,&a[i]);
    }
    for(i=0;i<n;i++)
    {
        if(a[i]<0)
        {
            printf(“%4d”,a[i]);
        }
    }
    printf(“\n”);
    for(i=0;i<n;i++)
    {
        if(a[i]==0)
        {
            count++;
        }
    }
    printf(“%4d\n”,count);
    for(i=0;i<n;i++)
    {
        if(a[i]>0)
        {
            printf(“%4d”,a[i]);
        }
    }
}

题目二:计算两个整数的最大公约数

按如下函数原型,采用欧几里德算法编写计算两个整数的最大公约数的函数Gcd()。欧几里德算法,也称辗转相除法。其基本思想是:对正整数ab,连续进行求余运算,直到余数为0为止,此时非0的除数就是最大公约数。

/* 函数功能:计算ab的最大公约数,输入负数时返回-1 */

int Gcd(int a, int b)

要求如下:

1)从键盘任意输入的两整数

     主函数调用Gcd()函数,并输出两整数的最大公约数。

2Gcd函数原型为:

     int Gcd(int a, int b);

     如果输入的数不是正整数,则返回-1

     否则,返回两个数的最大公约数。

3**输入提示信息格式要求:“Input a,b:\n”

       输入两个整数时用,号分隔

     **输出提示信息要求:

     如果输入的数不是正整数,则输出“Input error!\n”

否则按如下格式输出“Gcd=%d\n”

 解答:

#include<stdio.h>

void main()

{

int a,b,c;

int gcd(int,int);

printf(“input two integers:”);

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

if(a,b<=0)

    {

        printf(“Input error!\n”);

    }

c=gcd(a,b);

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

}

int gcd(int x,int y)

{

int t;

while(y)

{

t=x%y;

x=y;

y=t;

}

return x;

}

题目三:计算圆的面积。

要求:

1)圆的半径r的值为110(包括110)之间的正整数;

2)用符号常量定义PI3.14

3)当圆的面积小于50时输出圆的面积并对圆的面积求累加和,

     大于等于50时结束循环;

4)输出累加和的结果

5)不用数组编程

**要求输入提示信息为:无输入提示信息和输入数据

**要求输出格式为:

1“area=%.2f\n”                

2“sum=%.2f\n”

 解答:

#include <stdio.h>
void main ()
{
    int r;
  float s;
  float PI=3.14;
  float sum=0;
  for(r=1;r<11;r++)
  {
       s=PI*r*r;
  if(s<50)
  {
      printf(“%f”,s);
      sum+=s;
  }
  else
  {
      printf(“%f”,sum);

break;
  }
  }

  return 0;
}

题目四:汉语数字

输入一个整形数,按汉语习惯输出

要求

输入提示信息为:请输入数字:

提示信息为:汉语为:

样例:

请输入数字:1052

汉语为:一千零五十二

 解答:

# include <stdio.h>
# include <string.h>

void ChangeType1(char * px, char * pn, char * pw, int len);

int main(void)
{
char x[100];
char num[10][] = {‘零’,’一’,’二’,’三’,’四’,’五’,’六’,’七’,’八’,’九’};
char wei[4][] = {‘\0′,’十’,’百’,’千’};
char danwei[3][] = {‘\0′,’万’,’亿’};
int len;
int lx;
char * pn = num, * pn2 = num2, * px = x, * pw = wei, * pw2 = wei2, * pdw = danwei

printf(“请输入数字:”);
lx=strlen(x);
for(i=0;i<lx;i++)
x[i]=x[i]-‘0’;
for(i=0;i<lx;i++)
{
d=lx-i;
puts(num2[x[i]]);
if(d==2||d==6||d==10)
puts(wei[0]);
if(d==3||d==7||d==11)
puts(wei[1]);
if(d==4||d==8||d==12)
puts(wei[2]);
if(d==5)
puts(danwei[0]);
if(d==9)
puts(danwei[1])
}??????

题目五:统计师的难题

一天统计师小明收到上司的一大串文字,让小明找出其中的数字,英文和其他

内容(空格与其他字符)的个数,请你写程序帮助小明解决这个问题。

输入

输入可能有多组测试用例,每个用例包含一行字符。

输出

每个用例包括 3 个整数,分别代表英文个数、 数字个数、其他内容个数,整数间以空格分隔。

样例输入

adfawef12345 *&

AFSAF587

样例输出

7 5 3

5 3 0

解答:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
 int n=0,i;;
 printf(“请输入行数:”);
 scanf(“%d”,&n);
 char** s;
 s=(char**)malloc(sizeof(char*)*n);
 for(i=0;i<n;i++)
 {
  s[i]=(char*)malloc(sizeof(char)*128);
 }
 for(i=0;i<n;i++)
 {
  scanf(“%s”,s[i]);
 }
 for(i=0;i<n;i++)
 {
  int len=strlen(s[i]);
  int j,alpha=0,digit=0,other=0;
  for(j=0;j<len;j++)
  {
   if(s[i][j]>=’0′ && s[i][j]<=’9′)
   {
    digit++;
   }
   else if((s[i][j]>=’A’ && s[i][j]<=’Z’) || (s[i][j]>=’a’ && s[i][j]<=’z’))
   {
    alpha++;
   }
   else
   {
    other++;
   }
  }
  printf(“%d %d %d\n”,alpha,digit,other);
 }
 return 0;
}

 

题目六:人民币

100元人民币兑换10,5元和1元的纸币(每一种都要有)50,请用穷举法编程计算共有几种兑换方案,每种方案各兑换多少张纸币.     

****输入提示信息要求为:无

****输出格式要求为:

“x = %d, y = %d, z = %d\n”

“count = %d\n”

 解答:

#include <stdio.h>

int main ()

{

   int x,y,z,count=0;

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

   {

       for(y=1;y<11;y++)

       {

           z=50-x-y;

           if(10*x+5*y+z==100);

           {

               count++;

               printf(“x=%d,y=%d,z=%d\n”,x,y,z);

           }

       }

题目七:素性检测

从键盘任意输入一个整数m,若m不是素数,则对m进行质因数分解,并将m表示为质因数从小到大顺序排列的乘积形式输出,否则输出”It is a prime number”。例如,用户输入90时,程序输出90 = 2 * 3 * 3 * 5;用户输入17时,程序输出”It is a prime number”。

输入提示信息:“Input m:”

输入格式:“%d”

输出格式:

是素数时输出“It is a prime number\n”

否则输出用“%d = “,”%d * “

运行示例1:

Input m:90↙

90 = 2 * 3 * 3 * 5

运行示例2:

Input m:13↙

It is a prime number

 解答:

#include <stdio.h>
#include <stdlib.h>

void main()
{
    int a,b,i,f[10]={0},t=0,flag=1;
    scanf(“%d”,&a);
    b=a;
    for(i=2;i<a;)
    {
        if(b%i==0)
        {
            f[t]=i;
            b/=i;
            t++;
            flag=0;
        }
        else
        {
            i++;
        }
    }
    if(flag)
    {
        printf(“It is a prime number”);
    }
    else
    {
        printf(“%d = “,a);
        for(t=1;f[t]!=0;t++)
        {
            printf(“%2d *”,f[t-1]);
        }
        printf(“%2d”,f[t-1]);
    }
}

题目八:正弦

已知求正弦sin(x)的近似值的多项式公式为:

sin(x)=x−x 3  3!  +x 5  5!  −x 7  7!  +⋯+(−1) n x 2n+1  (2n+1)!  +…

 

要求输入xe,按上述公式计算sin(x)的近似值,要求计算的误差小于给定的e

**输入格式要求:“%f%f” 提示信息:“Enter x & eps:”

**输出格式要求:“sin(%f)=%f\n”  “%d,sin(%f)=%f\n”

程序运行示例如下:

Enter x & eps:5 0.000001

sin(5.000000)=-0.958924

13,sin(5.000000)=-0.958924

 

(提高题部分一题40分)共3题 选做

提高题一:堆栈

堆栈是数据结构中的重要线性结构,最先进入栈中的元素最后才能出栈,现在

给出三种操作指令(进栈,出栈,查询栈中中位数),请你根据指令输出当前

操作的是哪个值,其中如果栈中数量为偶数,中位数定义为其中较小的元素,

比如栈中元素自底向上为 3 1 4 2,那么中位数为 2

输入

第一行输入给出所输入指令的总条数 N<1000,随后 N 行给出每个指令:

Push k 代表将 k 入栈, k 为小于 500 的正整数, Pop 代表出栈, Find 代表查

询栈中中位数。

输出

针对每个输入的指令,如果是 Pop Find 操作则输出相应操作的元素。指令

非法则输出“Error”

样例输入

12

Pop

Find

Push 3

Find

Push 2

Find

Push 1

Find

Pop

Pop

Pop

Pop

样例输出

Error

Error

3 2 2 1 2 3

Error

 

提高题二:结构体
定义存放一个学生信息的结构体类型,学生信息包括:姓名,学号,性别,院系,要求在随意输入5个学生的相关信息后,按照学号从小到大顺序输出这些学生的信息。 
输入:
先输入5名学生的信息,按学号顺序排序输出后在输入要统计的院系名称 
输出
先按学号从小到大的顺序输出学生信息 
样例输入
zhang3 20149003 M 信息系 
zhang5 20149005 F 信息系 
zhang10 20149010 F 管理系 
zhang1 20149001 M 会计系 
zhang9 20149009 M 会计系 
样例输出
zhang1 20149001 M 会计系 
zhang3 20149003 M 信息系 
zhang5 20149005 F 信息系 
zhang9 20149009 M 会计系 
zhang10 20149010 F 管理系 

提高题三:字符串插入

通过指针实现字符串插入的功能,一个字符串插入到另一个字符串的任意位置要求将源字符串srcStr连接到目的字符串dstStr任意位置

输入:

字符串srcStrabc

字符串dstStrhahaha

插入dstStr的第几位:3

输出:

结果为:hahabcaha

 

posted on 2017-12-17 23:29 20175207冷南 阅读() 评论() 编辑 收藏

版权声明:本文为ln-0407原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://www.cnblogs.com/ln-0407/p/8053878.html