C语言入门速成(一)

发布于 2023-02-10  541 次阅读


  • 快考试了,从0学起,刷一遍考试题库
  • 快两万字了才写一半,再开一篇吧

c语言概述

  1. 下面四个选项中,均不是c语言关键字的选项是( )。

A) scanf IF Type      B) getc char printf

C) include scanf case    D) while go pow

  • a
  • 函数名都不是
关键字大全

auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile 
while
  1. C程序一定会有什么函数

    A)mian B)main C)printf D)scan

  • b
  1. 下列四个选项中,均是C语言关键字的选项是( )。

A) auto enum include    B) switch typedef continue

C) signed union scanf     D) if struct type

  • b
  • include比较特殊,不是
  1. 一个C语言源程序是由( )。

A) 一个主程序和若干子程序组成 B) 函数组成

C) 若干过程组成 D) 若干子程序组成

  • b
  1. 下列选项中,合法的C语言关键字是( )。

A) VAR    B) cher    C) integer    D) default

  • d
  • a,b,c都没有
  1. 以下叙述不正确的是( )。

A) 一个C源程序可由一个或多个函数组成

B) 一个C源程序必须包含一个main函数

C) C程序的基本组成单位是函数

D) 在C程序中,注释说明只能位于一条语句的后面

  • d
  1. 以下叙述正确的是( )。

A) 在C程序中,main函数必须位于程序的最前面

B) C程序的每行中只能写一条语句

C) C语言本身没有输入输出语句

D) 在对一个C程序进行编译的过程中,可发现注释中的拼写错误

  • c
  1. 以下有4组用户标识符,其中合法的一组是( )

A) For -sub Case    B) 4d DO Size

C) f2_G3 IF abc    D) WORD void define

  • c
标识符必须以字母a~z、 A~Z或下划线开头,后面可跟任意个(可为0)字符,这些字符可以是字母、下划线和数字,其他字符不允许出现在标识符中;C语言中的关键字有特殊意义,不能作为标识符;
  1. C语言规定,在一个源程序中,main函数的位置( )。

A) 必须在最开始 B) 必须在系统调用的库函数的后面

C) 可以任意 D) 必须在最后

  • c
  1. 下面四个选项中,均是不合法的用户标识符的选项是( )

A) A P_0 do      B) float la0 _A

C) b-a goto int    D) _123 temp int

  • c
  1. 一个C程序的执行是从( )。

A) 本程序的main函数开始,到main函数结束

B) 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束

C) 本程序的main函数开始,到本程序文件的最后一个函数结束

D) 本程序文件的第一个函数开始,到本程序的main函数结束

  • a
  1. C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符( )。

A) 必须为字母        B) 必须为下划线

C)必须为字母或下划线    D) 可以是字母、数字和下划线中任一种字符

  • c
  1. 一个C语言源程序文件中有且仅有一个主函数。
  1. C 语言的应用比较广泛 , 不仅可用来编写应用软件 , 而且可用来编写系统软件。
  1. C 语言程序在书写上只能是一条语句写一行。
  1. C语言的书写格式不会影响程序的可读性。
  1. 在C语言中,一个函数的函数体一般包括。
  • 参数和返回值
  1. 若s是int型变量,且s=6 则下面表达式s%2+(s+1)%2的值为.
  • 1
  1. 从键盘输入a,b,x,y的值,计算以下算术表达式的值: (double)(a+b)/2+(int)x%(int)y

输入格式

只有一行,包含四个数a,b,x,y,用空格隔开。其中x和y是浮点数,a和b是整数。

输出

输出题目描述中表达式的值并保留6位小数。注意行尾输出换行。

img

  • double型默认6位,不加.6lf也可以
#include <stdio.h>

int main() {

        double x, y, ans;

        int a, b;
        printf("Input: ");

        scanf("%d %d %lf %lf",&a,&b,&x,&y);
    printf("Output:\n");

       ans=(double)(a+b)/2+(int)x%(int)y;

        printf("The ans is %.6lf\n", ans);

        return 0;
}

数据类型

  1. 在表示C语言的整型变量时,表示“无符号长整型”的符号是( )。

A) unsigned int    B) unsigned short

C) long int      D) unsigned long

  • d
  1. 下面四个选项中,均是不合法的转义字符的选项是( )。

A) ‘\””’ ‘\’ ‘\xf’    B) ‘\1011’ ‘\’ ‘\y'

C) ‘\011’ ‘\f’ ‘}’    D) ‘\abc’ ‘\101’ ‘xlf’

  • a
合法转义字符:

\?:在书写多个问号时使用,防止他们被解析为三字母词。

\”:用来表示字符常量“。

\\:用于表示一个反斜杠,防止他们被解释为一个转义序列符。

\a:警告字符,蜂鸣。

\b:退格符。

\f:进纸符。

\n:换行。

\r:回车。

\t:水平制表符。

\v:垂直制表符。

\ddd:ddd表示1~3个八进制数字。

\xdd:表示2个十六进制数字。
  1. 以下选项中,非法的字符常量是( )。

A)'\t'    B) '\17'    C) "n"    D) '\xaa'

  • c
  • \t作为制表符仍然是字符常量
  • "n"是字符串,不是字符,C不合法。
  1. 下面4个选项中,均是非法常量的选项是

A) 'as' -0fff '\0xa' B) '\' '\01' 12,456

C) -0x18 01177 0xf D) 0xabc '\0' "a"

  • a
  1. 下面四个选项中,均是正确的八进制数或十六进制数的选项是( )。

A) -10 0x8f -011    B) 0abc -017 0xc

C) 010 -0x11 0xf1    D) 0a12 -0x123 -0xa

  • c
  1. 在C语言中,char型数据在内存中的存储形式是( )。

A) 补码    B) 反码    C) 原码    D) ASCII码

  • d
  1. 设C语言中,一个int型数据在内存中占2个字节,则unsigned int型数据的取值范围为( )。

A) 0~255    B) 0~32767    C) 0~65535    D) 0~2147483647

  • c
  1. 在C语言中(以16位PC机为例),5种基本数据类型的存储空间长度的排列顺序为( )。

A)char<int<long int<=float<double

B) char=int<long int<=float<double

C) char<int<long int=float=double

D) char=int=long int<=float<double

  • a
char 1字节
short int 2字节
int 4字节
unsigned int 4字节
float 4字节
long 8字节
long long 8字节
unsigned long 8字节
double 8字节
  1. 下面四个选项中,均是合法整型常量的选项是( )。

A) 160 -0xffff 011    B) -0xcdf 01a 0xe

C) –01986 012 0668    D) -0x48a 2e5 0xe

  • a
  1. 下面四个选项中,均是不合法的浮点数的选项是( )。

    A) 160. 0.12 e3    B) 123 2e4.2 .e5

C) -.18 123e4 0.0    D) -e3 .234 1e3

  • b
规则1(含.类型) .前后至少有一个数字,
规则2(含e或E)e前后必须都有数字,前面不限可以为小数,后面必须为整数可负
  1. 表达式18/4*sqrt(4.0)/8值的数据类型为( )。

A) int    B) float    C) double    D) 不确定

  • c
  1. 下面4个选项中,均是合法转义字符的选项是

A) '\'' '\' '\n' B) '' '\017' '"' C) '\018' '\f' 'xab' D) '\0' '\101' 'x1f'

  • a
  1. 设变量a是整型,f是实型,i是双精度型,则表达式10+a+i*f值的数据类型为( )。

A) int    B) float    C)double    D) 不确定

  • c
  1. 下面四个选项中,均是正确的数值常量或字符常量的选项是( )。

A) 0.0 0f 8.9e ‘&’     B) ‘a’ 3.9e-2.5 1e1 ‘\’’

C) ‘3’ 011 0xff00 0a    D)+001 0xabcd 2e2 50.

  • d
  1. 下面四个选项中,均是不合法的整型常量的选项是( )。

    A) -0f1 -0xffff 0011    B) -0xcdf 017 12456

C) -018 999 5e2      D) -0x48eg -068 03f

  • d
  1. 若有定义:int a=7; float x=2.5,y=4.7; 则表达式x+a%3*(int)(x+y)%2/4的值是( )。

A)2.500000    B) 2.750000    C) 3.500000    D) 0.000000

  • a
  1. 下面四个选项中,均是合法的浮点数的选项是( )。

A) +1e+1 5e-9.4 03e2    B) -.60 12e-4 -8e5

C) 123e 1.2e-.4 +2e-1    D) -e3 .8e-4 5.e-0

  • b
  1. 设有说明:char w; int x; float y; double z; 则表达式w*x+z-y值的数据类型为( )。

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

  • d
  1. 下列定义变量和初始化合法的是( )。

A) short _a=1-.1e-1;    B) double b=1+5e2.5;

C) long do=0xfdaL;     D) float 2_and=1-e-3;

  • a
  1. 以下选项中属于C语言的数据类型是( )。

A) 复数型    B) 逻辑型    C)双精度型    D) 集合型

  • c
  1. 下面不正确的字符串常量是( )。

A) ‘abc’    B) ”1212”    C) ”0”    D) ” ”

  • a
  1. double 型变量在内存中占的字节数比 int 型变量在内存中占的字节数多。
  1. "a"是合法的字符串常量。
  1. printf可以作为变量名使用

顺序结构综合

  1. 输入实型数据a,b,然后输出a、b的值。 程序的运行效果应类似地如图1所示,图1中的5.79,6.8723是从键盘输入的内容。

img

#include<stdio.h>
int main()
{

    printf("please input two numbers:");
    double a, b;
    scanf("%lf,%lf", &a, &b);
    printf("Output:\n");
    printf("a=%.6lf,b=%.6lf\n", a, b);
    return 0;
}
  1. 输入一个小写英文字母,首先输出它及其ASCII码,然后输出其对应的大写字母及其ASCII码。编程可用素材:printf("Input a lowercase letter: ")...、printf("\n...(...)...。 程序的运行效果应类似地如图1所示,图1中的y是从键盘输入的内容。

img

#include <stdio.h>

int main(void)
{
    char ch;

    printf("Input a lowercase letter:");
    scanf("%c",&ch);

    printf("Output:\n");
    printf("%c(%d)\n", ch, ch);
    printf("%c(%d)\n", ch - 32, ch - 32);
    return 0;
}
  1. 从键盘输入一个正三角形的边长(整型),计算该三角形的面积和周长。注:根据海伦-秦九韶公式,area=sqrt(p(p-a)(p-b)(p-c)),其中p=(a+b+c)/2、a,b,c为三角形的3条边长。 程序的运行效果应类似地如图1所示,图1中的5是从键盘输入的内容。

img

  • 输出小数取整不需要%1,直接%.0f即可
#include <stdio.h>
#include <math.h>

int main(void)
{
    int side;
    printf("Input a side of triangle: ");
    scanf("%d", &side);
    printf("Output:\n");
    printf("The area of triangle is %.2f, the circle of triangle is %.0f.\n", 1.0 * side * side * sqrt(3) / 4, 3.0 * side);
    return 0;
}
  1. 从键盘读入一个任意字符,输出该字符ASCII的十六进制值(小写)。 程序的运行效果应类似地如图1所示,图1中的b是从键盘输入的内容

img

#include <stdio.h>

int main(void)
{
    char ch;

    printf("Input a character: ");
    scanf("%c",&ch);

    printf("Output:");
    printf("%x\n", ch);
    return 0;
}
  1. 从键盘输入一个正方体的边长(整型),计算该正方体的体积和表面积。 程序的运行效果应类似地如图1所示,图1中的5是从键盘输入的内容。

img

#include <stdio.h>

int main(void)
{
    int side;

    printf("Input a side of cube: ");
    scanf("%d", &side);
    printf("Output:\nThe volume of cube is %d, the surface area of cube is %d.\n", side * side * side, 6 * side * side);
    return 0;
}
  1. 从键盘输入x,y,z的值,编写程序输出以下表达式的值: x+z%3*(int)(x+y)%2/4 程序的运行效果应类似地如图1所示,图1中的2.5,4.7,7是从键盘输入的内容。

img

#include <stdio.h>

int main(void)
{
    int float_z;
    double float_x, float_y;

    printf("please input x,y,z:");
    scanf("%lf,%lf,%d", &float_x, &float_y, &float_z);
    printf("Output:");
    printf("%f\n", float_x + float_z % 3 * (int)(float_x + float_y) % 2 / 4);
    return 0;
}
  1. 从键盘输入一日期,年月日之间以“-”分隔,并以同样的形式但以“/”作分隔符输出。 程序的运行效果应类似地如图1所示,图1中的2009-12-9是从键盘输入的内容。

img

#include <stdio.h>

int main(void)
{
    int year, month, day;

    printf("please input a data:");
    scanf("%d-%d-%d", &year, &month, &day);
    printf("Output:\n");
    printf("the date is:%d/%d/%d\n", year, month, day);
    return 0;
}
  1. 从键盘上输入一个四位整数,计算各个位上的数字之和。编程可用素材:printf("Input a number with 4-digit: ")...、printf("Output:\nsum=...\n"...。 程序的运行效果应类似地如图1所示,图1中的1234是从键盘输入的内容。

img

  • %10可以获取个位,不断除以10以移动个位
#include <stdio.h>

int main(void)
{
    int number;

    printf("Input a number with 4-digit: ");
    scanf("%d", &number);
    printf("Output:\n");
    printf("sum=%d\n", number / 1000 + number / 100 % 10 + number / 10 % 10 + number % 10);
    return 0;
}
  1. 已知某产品单价是30 ,输入其数量是num(整型),输出其总价(整型)。 程序的运行效果应类似地如图1所示,图1中的8是从键盘输入的内容。

img

#include <stdio.h>

int main(void)
{
    int num;

    printf("please input num:");
    scanf("%d", &num);

    printf("Output:\ntotal=%d\n", 30 * num);
    return 0;
}
  1. 输入两个整数,输出这两个整数的和(每个数占4位宽,+和=左右均无空格)。 程序的运行效果应类似地如图1所示,图1中的3 4是从键盘输入的内容。

img

  • %4d表示占4位,小数也可以,如%4.6lf
#include <stdio.h>
int main(void)
{
    int a, b;
    printf("please input data: ");
    scanf("%d%d", &a, &b);
    printf("Output:\n");
    printf("%4d+%4d=%4d\n", a, b, a+b);
    return 0;
}
  1. 用scanf输入圆半径r,圆柱高h,求圆周长C1(=2πr)、圆面积S(=πr2)、圆柱体积V(=πr2h)。(注意:本题中规定圆周率取值为3.14)   程序的运行效果应类似地如图1所示,图1中的r=1.3,h=5是从键盘输入的内容。

img

#include <stdio.h>

int main(void)
{
    double rad, high, c1, s, ver;

    printf("Input: ");
    scanf("r=%lf,h=%lf", &rad, &high);
    c1 = 2 * rad * 3.14;
    s = 3.14 * rad * rad;
    ver = s * high;
    printf("Output:\n");
    printf("C1=%.2f\n", c1);
    printf("S=%.2f\n", s);
    printf("V=%.2f\n", ver);
    return 0;
}
  1. 输入一个华氏温度,要求输出摄氏温度,计算公式为c=5(F-32)/9。编程可用素材:printf("Input the degree:")...、printf("\nF(...)=C(...)...。   程序的运行效果应类似地如图1所示,图1中的120是从键盘输入的内容。

img

#include <stdio.h>

int main(void)
{
    double cel, fra;

    printf("Input the degree:");
    scanf("%lf", &fra);
    cel = 5 * (fra - 32) / 9;
    printf("Output:\n");
    printf("F(%.2f)=C(%.2f)\n", fra, cel);
    return 0;
}

选择结构if_else

  1. 当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是( )。

if(a<b)

if(c<d) x=1;

else

if(a<c)

if(b<d) x=2;

else x=3;

else x=6;

else x=7;

A) 1     B)2     C) 3     D) 6

  • b
  1. 两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是()。有问题

main()

{

int x;

scanf(“%d”, &x);

if(x++>5) printf(“%d”, x);

else printf(“%d\n”, x--);

}

A) 7和5     B) 6和3     C) 7和4     D)6和4

  • a???
  1. if(10<=x<=20) y=2*x+1;是合法的语句。
  • 好家伙,可以这么写
  1. 在c程序中,else的个数不能多于if的个数。
  1. 求方程式ax2+bx+c=0的根。

    输入格式

三个用空格隔开的整数a、b、c,保证a不为0。

输出

方程式ax2+bx+c=0的根,若有两个不同的实根,则输出这两个实根,用空格隔开;若有一个实根,请直接输出;若没有实根,请输出“no answer”(请注意不需要输出引号)。所有的实数输出请使用C语言的默认舍入方式保留4位小数,注意行尾输出换行。

img

#include <stdio.h>

#include <math.h>

int main() {

        int a, b, c, delta;

        double ans0, ans1, sqrt_delta;
        printf("please input a,b,c: ");

        scanf("%d %d %d", &a, &b, &c);
        printf("output:\n");

        /* 计算delta的值(b*b-4*a*c)并分类讨论 */

        delta = b * b - 4 * a * c;

        if (delta > 0) {

                sqrt_delta = sqrt(delta);

                ans0 = (-b - sqrt_delta) / (2.0 * a);

                ans1 = (-b + sqrt_delta) / (2.0 * a);

                printf("x1=%.4f, x2=%.4f\n", ans0, ans1);

        } else if (delta == 0) {

                ans0 = (-b) / (2.0 * a);

                printf("x=%.4f\n", ans0);

        } else {

                printf("no answer\n");

        }

        return 0;

}
  1. 读入3个实数,按照代数值由小到大的顺序输出这3个数。

输入格式

3个用空格隔开的实数。

输出

按由小到大的顺序输出这3个实数,用空格隔开,并保留两位小数。 请注意行尾输出换行。

img

  • 建议先排序,后输出
#include <stdio.h>

int main() {

        float a, b, c, t;
        printf("Input a,b,c: ");

        scanf("%f %f %f", &a, &b, &c);
        printf("Output:\n");

        if (a > b) {

                t = a; a = b; b = t;

        }

        if (a > c) {

                t = a; a = c; c = t;

        }

        if (b > c) {

                t = b; b = c; c = t;

        }

        printf("%.2f %.2f %.2f\n", a, b, c);

        return 0;

}
  1. 给你三角形的三条边,你能告诉我它是哪种三角形吗? 如果是直角三角形,请输出“good”。如果是等腰三角形,请输出“perfect”。否则,请输出“just a triangle”。 题目保证输入数据合法。

输入格式 每组样例包含了三个整数a,b,c,代表了三角形的三条边的长度。(0<a,b,c<300)

输出

对于每组样例,输出结果,每组结果占一行。

img

img

  • 服了,不讲武德,说了数据合法,示例里面又给了不合法数据的处理方式
#include<stdio.h>

int main()
{
        int t,a,b,c;

        printf("Please input a,b,c: ");
        scanf("%d%d%d",&a,&b,&c);
        printf("Output:\n");
        if(a+b>c && a+c>b && b+c>a)
        {
            if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)
                printf("good\n");
            else if(a==b||a==c||b==c)
                 printf("perfect\n");
            else
                printf("just a triangle\n");
        }
        else
            printf("Input error!\n");

        return 0;
}
  1. 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

输出示例:

img

img

  • 哈哈哈哈哈,这个婼智题只有60分,直接抄答案还是只有60分哈哈哈哈哈,做个hammer
#include <stdio.h>

int main()
{
    long a, b, c, d, e, x;
    printf("Please input a number:\n");
    scanf("%ld", &x);

    a = x / 10000 % 10;
    b = x / 1000 % 10;
    c = x / 100 % 10;
    d = x /10 % 10;
    e = x /1 % 10;
    printf("Output:\n");
    if (a != 0)
        printf("there are 5, %ld %ld %ld %ld %ld\n", e, d, c, b, a);
    else if (b != 0) 
        printf("there are 4, %ld %ld %ld %ld\n", e, d, c, b);
    else if (c != 0) 
        printf("there are 3, %ld %ld %ld\n", e, d, c);
    else if (d != 0) 
        printf("there are 2, %ld %ld\n", e, d);
    else if (e != 0) 
        printf("there are 1, %ld\n", e);
    return 0;
}
  1. 输入一个年份,判断是否是闰年。

    输入格式

输入一个整数year,表示年份。

输出

如果输入的年份是闰年,请输出“leap year”,否则请输出“not leap year”。 请注意不需要输出引号,行尾输出换行。

#include <stdio.h>

int main() {

        int year;
        printf("Input a year: ");

        scanf("%d", &year);
        printf("Output:\n");

        if (year % 4 == 0) {

                if (year % 100 == 0) {

                        if (year % 400 == 0) {

                                printf("%d isleap year\n",year);

                        } else {

                                printf("%d is not leap year\n",year);

                        }

                } else {

                        printf("%d is leap year\n",year);

                }

        } else {

                printf("%d is not leap year\n",year);

        }

        return 0;

}

选择结构switch

  1. 若输入B,以下程序的输出结果是( )。

main( )

{char grade; scanf(“%c”,&grade);

switch(grade)

{

case ‘A’:printf(“>=85.”);

case ‘B’:

case ‘C’:printf(“>=60.”);

case ‘D’:printf(“<60.”);

default: printf(“error.”);

}

} A) >=85.     B) >=60.     C)>=60.<60.error.     D) error.

  • c
  • 不break就会全部执行
  1. A) switch(w)            B) switch(x) {case 1.0: printf("\n"); {case 1,2: printf("\n"); case 2.0: printf("\n"); case 3: printf("\n"); } } C) switch(b)            D) switch(a+w); {case 1: printf("\n"); {case 1: printf("\n"); default: printf("\n"); case 2: printf("\n"); case 1+2: printf("\n"); default: printf("\n"); } }
  • c
  • switch后面的“表达式”,可以是 int、char和枚举型中的一种
  • default随便放
  1. 有如下程序

main( ) {int x=1,a=0,b=0; switch(x)

{ case 0: b++; case 1: a++; case 2: a++;b++; } printf(“a=%d,b=%d\n”,a,b); } 该程序的输出结果是( )。

A)a=2,b=1     B) a=1,b=1     C) a=1,b=0     D) a=2,b=2

  • a
  1. case语句后如没有break_顺序向下执行。
  1. 在switch语句中_每一个的case常量表达式的值可以相同。
  1. 给定一个百分制的成绩,输出成绩等级’A’、 ’B’、 ’C’、 ’D’、 ’E’。90分以上为’A’,80至89分为’B’,70至79分为’C’,60至69分为’D’,60分一下为’E’。

一个整数score,保证0<=score<=100.

输出

输出score对应的成绩等级。 请注意行尾输出换行。

样例输入

88

样例输出

B

img

  • 又是一个箬智题,标答是if
#include <stdio.h>

int main() {

        int score;

        char level;
        printf("Input: ");

        scanf("%d", &score);
        printf("Output:\n");

        if (score >= 90)

                level = 'A';

        else if (score >= 80)

                level = 'B';

        else if (score >= 70)

                level = 'C';

        else if (score >= 60)

                level = 'D';

        else

                level = 'E';

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

        return 0;

}
  1. 运输公司对用户计算运费。路程s越远,每吨×千米运费越低。标准如下:
s<250 没有折扣
250<=s<500 2%折扣
500<=s<1000 5%折扣
1000<=s<2000 8%折扣
2000<=s<3000 10%折扣
3000<=s 15%折扣

设每吨每千米货物的基本运费为p(price的缩写),货物重为w(weight的缩写),距离为s,折扣为d(discount的缩写),则总运费f(freight的缩写)的计算公式为:

f=p×w×s×(1-d)

现在给定p、w、s,计算总运费f。

三个用空格隔开的数p、w、s,其中p和w是实数,s是整数。

输出

输出总运费。 请保留4位小数,注意行尾输出换行。

img

#include <stdio.h>

#include <math.h>

int main() {

        int c, s;

        float p, w, d=0.0, f;
        printf("Input: ");

        scanf("%f %f %d", &p, &w, &s);
        printf("Output:\n");

        if (s >= 3000) d = 0.15;
        if (2000<=s<3000) d = 0.1;
       if (1000<=s<2000) d = 0.08;
        if (500<=s<1000) d = 0.05;
        if (250<=s<500) d = 0.02;
         if (s<250 ) d = 0;

        f = p * w * s * (1 - d);

        printf("%.4f\n", f);

        return 0;

}

关系与逻辑运算

  1. 表示如图所示的正确表达式是( )。

c2005.JPG

A) (x<=a)&&(x>=b)&&(x<=c)

B) (x<=a)||(b<=x<=c)

C) (x<=a)||(x>=b)&&(x<=c)

D) (x<=a)&&(b<=x<=c)

  • c
  • b和d没这写法
  1. 下列运算符中,不属于关系运算符的是()

A) <     B) >=     C) ==     D)!

  • d
  • d是逻辑运算符 非
  1. 能正确表示“当x的取值在[1, 10]和[200, 210]范围内为真,否则为假”的表达式是( )。

A) (x>=1)&&(x<=10)&&(x>=200)&&(x<=210)

B) (x>=1)||(x<=10)||(x>=200)||(x<=210)

C) (x>=1)&&(x<=10)||(x>=200)&&(x<=210)

D) (x>=1)||(x<=10)&&(x>=200)||(x<=210

  • c
  1. 下列运算符中优先级最低的是( )。

A) ? : B) += C) >= D) ==

  • b
  • ?是条件运算符,+=这种是赋值运算符
  • 一元算术运算符一>二元算术运算符一>关系运算符一>逻辑运算符-->条件运算符一>赋值运算符
  1. 逻辑运算符两侧运算对象的数据类型( )。

A)只能是0或1

B)只能是0或非0正数

C)只能是整型或字符型数据

D)可以是任何类型的数据

  • d
  1. 判断char型变量ch是否为大写字母的正确表达式是( )。

A) 'A'<=ch<='Z' B) (ch>='A')&(ch<='Z')

C) (ch>='A')&&(ch<='Z') D) ('A'<=ch)AND('Z'>=ch)

  • c
  1. 下列关系表达式中结果为假的是( )。

A) 0!=1 B) 2<=8

C) (a=2*2)==2 D) y=(2+2)==4

  • c
  1. 表达式max=(a>b)?a:b的作用是将a和b二者中较大值赋给max。
  1. 判断一个量是否为“真”时,以0代表“假”,以非零代表“真”。
  1. 程序是指
  • 可以独立运行的代码
  1. C源程序的基本单位是。
  • 函数
  1. C源程序文件的扩展名为
  • .c或.C
  1. 一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物。

输入格式

测试数据占1行,每行一个正整数a (a < 32768)

输出

包含两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用一个空格分开 如果没有满足要求的答案,则输出两个0。

img

img

#include<stdio.h>
int main()
{
    int a;
    printf("Please inout a:");
    scanf("%d",&a);
    if(a%2!=0||a>=32768){
        printf("Output:\n0 0");
        return 0;
    }
    int min,max; 
    min=a/2;
    max=a/4+1;
    printf("Output:\n%d %d",max,min);

    return 0;
}
  1. 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。提示:未嵌套语句为:Grade=score>=60?'B':'C';

示例:

img

img

#include<stdio.h>
int main()
{
    int input;
    char output;
    printf("Please input a score: ");
    scanf("%d",&input);
    printf("Output:\n");
    if(input>100 || input<0)
        {
            printf("Input error!\n");
            return 0;
        }

    output=input>=90?'A':(input>=60?'B':'C');

    printf("%d belongs to %c\n",input,output);
    return 0;
}
  • 这个制杖系统,如果把printf("Output:\n");和printf("%d belongs to %c\n",input,output);写在一起就会只有60分,服了
只有60分

#include<stdio.h>
int main()
{
    int input;
    char output;
    printf("Please input a score: ");
    scanf("%d",&input);
    #printf("Output:\n");
    if(input>100 || input<0)
        {
            printf("Input error!\n");
            return 0;
        }

    output=input>=90?'A':(input>=60?'B':'C');

    printf("Output:\n%d belongs to %c\n",input,output);
    return 0;
}

选择结构程序设计

  1. 输入三角形的三边长a、b、c(边长可以是小数),求三角形面积area,并输出。如果输入的三边构不成三角形,应给出“data error”的信息提示。注:根据“海伦-秦九韶”公式,area=√p(p-a)(p-b)(p-c),其中p=(a+b+c)/2。编程可用素材:printf("\nplease input triange sides:")...、printf("Output:\ndata error\n")...、printf("Output:\narea=...\n"...。 程序的运行效果应类似地如图1和图2所示,图1中的3,4,5和图2中的3,4,8是从键盘输入的内容

img

img

#include <stdio.h>
#include <math.h>

int main(void)
{
    double side1, side2, side3, circle, area;

    printf("please input triange sides:");
    scanf("%lf,%lf,%lf", &side1, &side2, &side3);
    printf("Output:\n");
    if (side1 + side2 > side3 && side1 + side3 > side2 && side2 + side3 > side1)
    {
        circle = (side1 + side2 + side3) / 2;
        area = sqrt(circle * (circle - side1) * (circle - side2) * (circle - side3));
        printf("area=%.2f\n", area);
    }
    else
    {
        printf("data error\n");
    }
    return 0;
}
  1. 输入x,y两个整数,输出其中较大的数。 程序的运行效果应类似地如图1所示,图1中的7,8是从键盘输入的内容。

img

  • 也可以判定后交换a,b,只输出a
#include <stdio.h>

int main(void)
{
    int number1, number2, max;

    printf("please input x,y:");
    scanf("%d,%d", &number1, &number2);

    if (number1 > number2)
    {
        max = number1;
    }
    else
    {
        max = number2;
    }
    printf("Output:\n%d is bigger\n", max);
    return 0;
}
  1. 输入月份,打印2003年该月有几天。当输入的月份超范围时,应显示“Invalid month input”。编程可用素材:printf("please input the month number:")...、printf("\nInvalid month input !\n")...、printf("\n 2003.... has ... days.\n"...。 程序的运行效果应类似地如图1和图2所示,图1中的4和图2中的13是从键盘输入的内容

img

img

  • 这样写利用switch的特性可以烧写一些,分号加不加无所谓
#include <stdio.h>

int main(void)
{
    int month, day;

    printf("please input the month number:");
    scanf("%d", &month);

    switch (month)
    {
        case 1:;
        case 3:;
        case 5:;
        case 7:;
        case 8:;
        case 10:;
        case 12:
            day = 31;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            day = 30;
            break;
        case 2:
            day = 28;
            break;
        default:
            day = 0;
            break;
    }

    printf("Output:\n");
    if (day == 0)
    {
        printf("Invalid month input !\n");
    }
    else
    {
        printf("2003.%d has %d days.\n", month, day);
    }
    return 0;
}
  1. 编写程序实现以下功能 从键盘输入3个整数,输出绝对值最大的数。编程可用素材:printf("Input 3 numbers: ")...、printf("\nThe number with maximum absolute value is ....\n"...。 程序的运行效果应类似地如图1所示,图1中的1,-362,300是从键盘输入的内容。

img

#include <stdio.h>
#include <math.h>

int main(void)
{
    int number1, number2, number3, max;

    printf("Input 3 numbers: ");
    scanf("%d,%d,%d", &number1, &number2, &number3);
    if (abs(number1) > abs(number2))
    {
        max = number1;
    }
    else
    {
        max = number2;
    }
    if (abs(max) < abs(number3))
    {
        max = number3;
    }
    printf("Output:\nThe number with maximum absolute value is %d.\n", max);
    return 0;
}
  1. 输入1个10进制整数,依次输出每一个数的八进制和十六进制表示。

输入格式

每行包含一个整数。

输出

对于每一行输入,输出一行,包含相应数的八进制和十六进制表示,用空格隔开。

img

img

  • 不知道为什么不能输出负数,加个判定就行了
#include<stdio.h>
int main()
{
    int a;
    scanf("%d",&a);
    printf("%o %x",a,a);
return 0;
}
#include <stdio.h>

int main() {

        int n;
        printf("Input: ");

                scanf("%d", &n);
                printf("Output:\n");

                if (n < 0) {

                        printf("-%o -%x\n", -n, -n);

                } else {

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

                }

        return 0;

}
  1. 已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与利润提成的关系如下(计量单位:元): profit<=1000         没有提成; 1000<profit<=2000     提成10%; 2000<profit<=5000     提成15%; 5000<profit<=10000     提成20%; 10000<profit        提成25%。 请根据输入的利润计算员工的薪水。编程可用素材:printf("Input profit: ")...、printf("Output:\nsalary=...\n"...。 程序的运行效果应类似地如图1所示,图1中的2000是从键盘输入的内容。

img

#include <stdio.h>

int main(void)
{
    int profit;
    double rate = 500;

    printf("Input profit: ");
    scanf("%d", &profit);
    if (profit <= 1000)
    {
        ;
    }
    else if (profit <= 2000)
    {
        rate += profit * 0.1;
    }
    else if (profit <= 5000)
    {
        rate += profit * 0.15;
    }
    else if (profit <= 10000)
    {
        rate += profit * 0.2;
    }
    else
    {
        rate += profit * 0.25;
    }
    printf("Output:\nsalary=%.2f\n", rate);
    return 0;
}
  1. 编写一个简单计算器程序,输入格式为:data1 op data2。其中data1和data2是参加运算的两个数(data1、data2必须定义为int,但二者相加可能超出int能表示的范围),op为运算符,它的取值只能是+、-、*、/、%。输出:计算除法输出小数点后两位,其他运算均输出整数。编程可用素材:printf("Please input data1 op data2: ")...、printf("\nError! chu shu wei 0.\n")...。 程序的运行效果应类似地如图1、图2、图3、图4、图5所示,图1中的3000 + 2000、图2中的3000 % 2000、图3中的3000 % 0、图4中的3000 / 0和图5中的3500 / 200是从键盘输入的内容。

img

img

img

img

img

#include <stdio.h>

int main()
{
    int data1, data2, flag = 0;
    char op;
    double result;

    printf("Please input data1 op data2: ");
    scanf("%d %c %d", &data1, &op, &data2);

    switch (op)
    {
        case '+':
            result = (double)data1 + data2;
            break;
        case '-':
            result = (double)data1 - data2;
            break;
        case '*':
            result = (double)data1 * data2;
            break;
        case '/':
            if (data2 == 0)
            {
                flag = 1;
                break;
            }
            result = (double)data1 / data2;
            break;
        case '%':
            if (data2 == 0)
            {
                flag = 1;
                break;
            }
            result = data1 % data2;
            break;
        default:
            break;
    }

    printf("Output:");
    if (flag == 0)
    {
        if (op == '/')
        {
            printf("\n%d%c%d=%.2f\n", data1, op, data2, result);
        }
        else
        {
            printf("\n%d%c%d=%.0f\n", data1, op, data2, result);
        }
    }
    else
    {
        printf("\nError! chu shu wei 0.\n");
    }
    return 0;
}
  1. x(x只考虑整数int且必须定义为int、但F(x)完全可能超过int的表示范围)通过键盘输入(输入前给出提示Please input x:),然后计算并在屏幕上输出函数值。编程可用素材:printf("Please input x: ")...、printf("\nF(...) = ..."...。     ┌ -5x+27 (x<0)   F(x)= ├ 7909 (x=0)      └ 2x-1 (x>0) 程序的运行效果应类似地如图1所示,图1中的3是从键盘输入的内容。输出F(3) = 5中使用的是小括号。

img

#include <stdio.h>

int main(void)
{
    int x;
    double y;

    printf("Please input x:");
    scanf("%d", &x);
    if (x < 0)
    {
        y = -5.0* x + 27;
    }
    else if (x == 0)
    {
        y = 7909;
    }
    else
    {
        y = 2.0 * x - 1;
    }
    printf("Output:\n");
    printf("F(%d) = %.0f\n", x, y);

    return 0;
}
  1. 以下程序的功能是:输入圆的半径r和运算标志m后,按照运算标志进行如下指定的计算。

运算标志m计算内容

a面积

c周长

b二者均计算(面积和周长)

\#include <stdio.h>
\#define pi 3.14159
int main()
{
 char m;
 float r, c, a;
 printf("input mark a c or b && r\n");
 scanf("%c%f", &m, &r);

 if (____)
 {
 a = pi * r * r;
 printf("area is %f\n", a);
 }

 if (____)
 {
 c = 2 * pi * r;
 printf("circle is %f\n", c);
 }

 if (____)
 {
 a = pi * r * r;
 c = 2 * pi * r;
 printf("area && circle are %f %f\n", a, c);
 }
 return 0;
}

-
  • 第一处:m=='a'
  • 第二处:m=='b'
  • 第三处:m=='c'

三种循环语句

  1. 以下描述中正确的是( )。 A) do-while循环中循环体内不能使用复合语句 B) do-while循环由do开始,用while结束,在while(表达式)后面不能写分号 C) 在do-while循环体中,一定要有能使while后面表达式的值变为零(“假”)的操作 D) do-while循环中,根据情况可以省略while
  • b
  • while(条件);
  1. C语言中,while和do-while循环的主要区别是( )。

A) do-while的循环体至少无条件执行一次

B) while的循环控制条件比do-while的循环控制条件更严格

C) do-while允许从外部转到循环体内

D) do-while的循环体不能是复合语句

  • a
  1. 对for(表达式1; ;表达式3)可理解为( )。

A) for(表达式1;0;表达式3)        B)for(表达式1;1;表达式3)

C) for(表达式1;表达式1;表达式3)     D) for(表达式1;表达式3;表达式3)

  • b
  1. 以下叙述正确的是:

    A.do---while语句构成的循环不能用其他语句构成的循环来代替。

    B.do---while语句构成的循环只能用break语句退出。

    C.用do---while语句构成的循环,在while 后的表达式为非零时结束循环。

D.用do---while语句构成的循环,在while后的表达式为零时结束循环。

  • d
  1. 下面有关for循环的正确描述是

    A.for循环只能用于循环次数已经确定的情况

    B.for循环是先执行循环体语句,后判断表达式

C.在for循环中,不能用break语句跳出循环体。

D.for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来

  • d
  1. for循环的三个表达式可以任意省略,while,do-while也是如此。
  1. 当初始条件满足时,while和do…while语句循环结果相同。
  1. do…while语句循环体至少执行一次。

\9. do-while循环的while后的分号可以省略。

  1. 输出介于a,b(含a,b,且a<=b)的所有“水仙花数”。所谓“水仙花数”是指一个数,其各位数字立方和等于该数本身。例如,153是一个“水仙花数”,因为153=13+53+33。

输入格式

100,200

输出

“水仙花数”,在每一个数之后输出一个空格。

请注意行尾输出换行。

img

#include<stdio.h>
int main()
{
    int a,b;
    printf("Input range:");
    scanf("%d,%d",&a,&b);
    printf("Output:\n");
    for(int i=a;i<=b;i++)
    {
        int n=i,m,count=0;
        while(n!=0)
        {
            m=n%10;
            n=n/10;
            count=count+m*m*m;
        }
        if(count==i)printf("%d ",i);
    }

    return 0;
}
  1. 在10万以内判断,一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

编程可用素材:printf("Output:\n");

img

  • 这里不用判定开方后是不是整数,只需要判定平方和原来是否相同就可以了
#include<stdio.h>
#include<math.h>
int main()
{
    long int i,x,y,z;
    printf("Output:\n");
        for (i=1;i<100000;i++)
    {
        x=sqrt(i+100);
        y=sqrt(i+268);
                if(x*x==i+100&&y*y==i+268)
            printf("%ld\n",i);
    }
    return 0;
}
  1. 输入:n(0<n<=9),输入越界时,提示"Input error!\n"并结束。

输出9*9乘法表,它的积左对齐,占3位

img

img

#include "stdio.h"
int main()
{
    int i,j,result,n;
        printf("Pleae input n: ");
        scanf("%d",&n);
    printf("Output:\n");
        if(n<=0 || n>9)
        {
            printf("Input error!\n");
            return 0;
        }
    for (i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            result=i*j;
            printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
        }   printf("\n");/*每一行后换行*/
    }

    return 0;
}
  1. 计算一个长整型数(最大不能超过2147483647、最小不能小于999)的最大三位数约数。
\#include <stdio.h>

\#define MAX 2147483647

int main(void)
{
 long i;
 int j;

 printf("请输入一个长整型数:");
 do
 {

 scanf("%1f", &i); //==错误在此处==

 if (i>MAX || i<999)
 {
  printf("数据输入错误,请重新输入:");
 }
 } while (i>MAX || i<999);

 for (j=999; j>=100; j--)
 {
 if (i%j == 0)
 {
  printf("%ld的最大的三位数约数是:%d\n", i, j);

  continue;  //==错误在此处==

 }
 }

 return 0;
}
  • 应改为ld%
  • 应改为break
  1. 搜索神秘的三位数——有这样一个3位数,组成它的3个数字阶乘之和正好等于它本身,即:abc = a! + b! + c!,例如145 = 1! + 4! + 5!。
\#include <stdio.h>

int main(void)
{
 int JC[] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880};
 int i, sum, x;

 for (i=100; i<1000; i++)
 {
 sum = 0;
 x = i;

 while (____)

 {
  sum += JC[x%10];
  x /= 10;
 }
 if (i == sum)
 {
  printf("%d\n",i);
 }
 }

 return 0;
}
  • 应填x!=0(标答:x>0)

循环结构程序设计

  1. 根据输入的n(约定n>0)在屏幕上显示对应的图案。程序的运行效果应类似地如图1和图2所示,图1中的3和图2中的5是从键盘输入的内容。

img

img

#include<stdio.h>
int main()
{
    int a;
    printf("Please input n: ");
    scanf("%d",&a);
    printf("Output:\n");
    for(int i=1;i<=a-1;i++)
    {
        for(int j=1;j<=a*2-1;j++)
        {

            if(j==i)
            {

                printf("@");
                continue;
            }
            if(j==a*2-i)
            {
                printf("@\n");
                break;
            }
            printf(" ");
        }
    }

    for(int q=1;q<=a;q++)
    {
        for(int t=1;t<=a*2-1;t++)
        {
            if(q==1)
            {
                for(int w=1;w<=a-1;w++)printf(" ");
                printf("@\n");
                break;
            }
            if(t==a-q+1)
            {
                printf("@");
                continue;
            }
            if(t==a+q-1)
            {
                printf("@\n");
                break;
            }
            printf(" ");
        }
    }

    return 0;
}
  1. 程序输入:第一行是一个正整数n(约定1<=n<=1000),表示一共有n个点。接下来的n行,每行2个整数,分别表示每个点的横坐标和纵坐标。 程序输出:输出横坐标最小的那个点的横坐标和纵坐标,如果横坐标最小的点有多个,则只输出其中纵坐标最小的那个点。 程序的运行效果应类似地如图1所示,图1中的5、5 2、2 3、2 4、3 2和4 1是从键盘输入内容。

img

#include<stdio.h>
int main()
{
    int a,temp1=1000,temp2=1000,temp0=1000,temp3=1000;
    printf("Input:\n");
    scanf("%d",&a);

    for(int i=1;i<=a;i++)
    {
        scanf("%d %d",&temp0,&temp1);
        if(temp0<temp2)
        {
            //printf("temp1=%d temp3=%d\n",temp0,temp3);
            temp2=temp0;
            temp3=temp1;
            continue;
        }
        if(temp0==temp2)
        {
            if(temp1<=temp3)
            {
                temp3=temp1;
                printf("haha");
                //printf("%d",temp3);
            }

        }
    }
    printf("Output: ");
    printf("%d %d",temp2,temp3);
    return 0;
}
  1. 根据输入的n(约定n>1)在屏幕上显示对应的图案。编程可用素材:printf("Please input n: ")...printf("Output:\n")...。 程序的运行效果应类似地如图1和图2所示,图1中的2和图2中的5是从键盘输入的内容。

img

img

#include<stdio.h>
int main()
{
    int n;
    printf("Please input n: ");
    printf("Output:\n");
    scanf("%d",&n);
    for(int hang=1;hang<=n;hang++)
    {
        //printf("hang=%d",hang);
        for(int lie=1;lie<=2*n-1;lie++)
        {
            if(hang==1)
            {
                for(int q=1;q<=n-1;q++)printf(" ");
                printf("a\n");
                break;
            }
            if(lie==n-hang+1)
            {
                printf("%c",hang+96);
                continue;
            }
            if(lie==n+hang-1)
            {
                //printf("lie=%d",lie);
                printf("%c\n",hang+96);
                break;
            }
        printf(" ");
        }
    }

for(int hang=n-1;hang>=1;hang--)
{
    for(int lie=1;lie<=2*n-1;lie++)
    {
        if(lie==n-hang+1)
        {
            printf("%c",hang+96);
            continue;
        }
        if(lie==n+hang-1)
        {
            //printf("lie=%d",lie);
            printf("%c\n",hang+96);
            break;
        }
        if(hang==1)
        {
            for(int q=1;q<=n-1;q++)printf(" ");
            printf("a\n");
            break;
        }
        printf(" ");
    }
}

    return 0;
}
  1. 编写一程序实现以下功能 设某企业2006年的产值为5000万,计划以后每年的增长率为x(x从键盘输入,例如输入8.75表示8.75%),计算该企业的产值在哪年实现翻番以及翻番时的产值,然后输出(输出时以万为单位,应考虑有小数)。编程可用素材:printf("Please input x: ")...、printf("\nyear = ... nian, chanzhi = ...\n"...。 程序的运行效果应类似地如图1所示,图1中的50.6是从键盘输入的内容。

img

#include<stdio.h>
int main()
{
    double n,m=5000.0;
    int count=0;
    printf("Please input x:");

    scanf("%lf",&n);

    printf("Output:\n");

    while(m<10000)
    {

        m=(100+n)*m/100;
        count=count+1;
        //printf("%d %lf\n",count,m);
    }
    printf("year = %d nian, chanzhi = %.2lf",2006+count,m);
    return 0;
}
  1. 输出n行星号,每行5个*星号。程序的运行效果应类似地如图所示,图中的4是从键盘输入的内容。

img

  • 行可以不用写循环
#include <stdio.h>

int main(void)
{
    int n, i;

    printf("please input n: ");
    scanf("%d", &n);
    printf("Output:\n");
    for (i = 1; i <= n; i++)
    {
        printf("*****\n");
    }
    return 0;
}
  1. 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

输入格式

一行字符。

输出

分别输出这行字符中的英文字母、空格、数字和其他字符的个数,用空格隔开。 请注意行尾输出换行

img

  • 不必使用ascll码,直接进行"a"<=input<="z"的比较就行了,符号部分则用else
#include <stdio.h>

#include <math.h>

int main() {

        char c;

        int letter, space, digit, other;
        printf("Input: ");

        letter = 0; space = 0; digit = 0; other = 0;

        while ((c = getchar()) != '\n') {

                if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z'))

                        letter++;

                else if (c == ' ')

                        space++;

                else if ('0' <= c && c <= '9')

                        digit++;

                else

                        other++;

        }
        printf("Output:\n");

        printf("%d %d %d %d\n", letter, space, digit, other);

        return 0;

}
  1. 把一个n * (2n-1) 的区域里除掏空成为一个镂空的三角形,减轻重量,但关键是为了追求另一种视觉效果。在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出来,以便看看效果。

输入格式

每行包含一个字符和一个整数n(3<=n<=35),不同的字符表示不同的花纹,整数n表示等腰三角形的高。显然其底边长为2n-1。

输出如图:(在其它镂空的地方以空格代替)

img

#include <stdio.h>

#include <math.h>

int main() 
{
    int a;
    char b;
    printf("Please input char and n: ");
    scanf("%c %d",&b,&a);
    printf("Output:\n");
    for(int i=1;i<=a;i++)
    {
        for(int q=1;q<=a*2-1;q++)
        {
            if(i==a)
            {
                for(int t=1;t<=a*2-1;t++)
                {
                    printf("%c",b);
                }
            break;
            }

            if(i==1)
            {
                for(int t=1;t<=a-1;t++)
                {
                    printf(" ");
                }
            printf("%c\n",b);
            break;
            }

            if(q==a-i+1)
            {
                printf("%c",b);
                continue;
            }

            if(q==a+i-1)
            {
                printf("%c\n",b);
                break;
            }
        printf(" ");
        }
    }   
    return 0;
}
  1. 从键盘输入1~9之间的一个数,根据输入的数,打印下三角乘法口诀表。要求积的输出占3个宽度,且左对齐。编程可用素材:printf("input a number(1~9): ")...。(未解决) 程序的运行效果应类似地如图1和图2所示,图1中的3和图2中的7是从键盘输入的内容

img

img

  • 考点是%-3d的应用,数字占3位并且向前对齐
#include <stdio.h>

#include <math.h>

int main() 
{
    int n;
printf("input a number(1~9):");
    scanf("%d",&n);
    printf("Output:\n");

    for(int i=1;i<=n;i++)
    {
        for(int q=1;q<=i;q++)
        {
            if(q==i)
            {
                if(q==n)
                {
                    printf("%d*%d=%-3d",i,q,i*q);
                    break;
                }
                printf("%d*%d=%-3d\n",i,q,i*q);
                break;
            }
            printf("%d*%d=%-3d",i,q,i*q);
        }
    }

    return 0;
}
  1. 给定两个正整数,计算这两个数的最小公倍数。

输入格式

输入测试数据,包括两个不大于1000的正整数。

输出

对于每个测试用例,给出这两个数的最小公倍数,每个实例输出一行。

样例输入

20 15

样例输出

60

img

img

#include<stdio.h>

int main()
{
    int a,b,k,t,i;
    printf("Please input a and b:");
    scanf("%d %d",&a,&b);
    if(a>1000||a<=0||b>1000||b<=0)
    {
        printf("Output:\nInput error!\n");
        return 0;
    }
    else
    {
    if(a<b)
    {
            k=a;
            a=b;
            b=k;
    }
    t=a*b;
    while(b!=0)
    {
            i=a%b;
            a=b;
            b=i;
    }
    printf("Output:");
    printf("%d\n",t/a);
    return 0;}
}
  1. 计算两个日期之间的天数。注:判断年份是否为闰年的方法——为400的倍数为闰年,如2000年;若非100的倍数,而是4的倍数,为闰年,如1996年。编程可用素材:printf("from the date (//):\n")...、printf("to the date(//):\n")、printf("Output:\nsum=%d\n"...。 程序的运行效果应类似地如图1和图2所示,图1中的2008/02/13、2010/04/24和图2中的2010/04/24、2008/02/13是从键盘输入的内容。

img

img

#include <stdio.h>

int runyear(int year);
int days(int year, int month, int day);

int main(void)
{
    int i, sum = 0;
    int year2, month2, day2;
    int year1, month1, day1;
    int temp;

    printf("from the date (****/**/**):\n");
    scanf("%d/%d/%d", &year2, &month2, &day2);
    printf("to the date(****/**/**):\n");
    scanf("%d/%d/%d", &year1, &month1, &day1);
    if (year1 > year2 || (year1 == year2 && month1 > month2)
        || (year1 == year2 && month1 == month2 && day1 > day2))
    {
        temp = year1;
        year1 = year2;
        year2 = temp;
        temp = month1;
        month1 = month2;
        month2 = temp;
        temp = day1;
        day1 = day2;
        day2 = temp;        
    }

    for (i = year1 ; i < year2; i++)
    {
        if (i == year1)
        {
            if (month1 <=2 && runyear(i) == 1)
            {
                sum = sum + 366;
            }
            else
            {
                sum = sum + 365;
            }
            continue;
        }
        if (runyear(i) == 1)
        {
            sum = sum + 366;
            continue;
        }
        sum = sum + 365;
    }

    sum = sum - days(year1, month1, day1) + days(year2, month2, day2);
    printf("Output:\nsum=%d\n", sum);
    return 0;
}

int runyear(int year)
{
    if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
    {
        return (1);
    }
    else
    {
        return (0);
    }
}

int days(int year, int month, int day)
{
    int j, m = 0;
    int array[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    for (j = 1; j < month; j++)
    {
        m = m + array[j];
    }
    m = m + day;
    if (runyear(year) == 1 && month > 2)
    {
        m++;
    }
    return (m);
}
  1. 根据输入的n在屏幕上显示对应的以#组成的菱形图案。编程可用素材:printf("Please input n: ")...。 程序的运行效果应类似地如图1和图2所示,图1中的4和图2中的1是从键盘输入的内容。

图1:

img

图2:

img

#include <stdio.h>
int main(void)
{
    int i, j, n;
    printf("Input\nPlease input n: \n");
    scanf("%d", &n);
    printf("Output:\n");
    for (i = 1; i <= n + 1; i++)
    {
        for (j = 1; j <= n + 1 - i; j++)
        {
            printf(" ");
        }
        for (j = 1; j <= 2 * i - 1; j++)
        {
            printf("#");
        }
        printf("\n");
    }
    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= i; j++)
        {
            printf(" ");
        }
        for (j = 1; j <= 2 * (n - i + 1) - 1; j++)
        {
            printf("#");
        }
        printf("\n");
    }

    return 0;
}
  1. 编写一程序P214.C实现以下功能 根据输入的n(约定n>0)在屏幕上显示对应的图案。

程序的运行效果应类似地如图1和图2所示,图1中的3和图2中的5是从键盘输入的内容。

img

img

#include <stdio.h>

int main(void)
{
    int i, j, n;

    printf("Please input n: ");
    scanf("%d", &n);
    printf("\noutput:\n");
    for (i = 1; i <= n; i++)
    {
        if (i == n)
        {
            printf("$\n");
            continue;
        }
        printf("$");
        for (j = 1; j <= (n - i) - 1; j++)
        {
            printf(" ");
        }
        printf("$");
        printf("\n");
    }
    for (i = 1; i <= n - 1 ; i++)
    {
        printf("$");
        for (j = 1; j <= i - 1; j++)
        {
            printf(" ");
        }
        printf("$");
        printf("\n");
    }
    return 0;
}
  1. 编写一程序实现以下功能 从键盘输入一个一百分制成绩,如果不在0~100范围内,则要求重新输入数据,直到输入的数据在0~100范围内。将输入的数据转换成等级‘A’,‘B’,‘C’,‘D’,‘E’。90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为‘E’,要求使用switch、case、default语句,结果赋值给变量grade,并将变量grade的值输出到屏幕上,注意输出是Output:只显示一次。编程可用素材:printf("please input the score(0-100): ")...、printf("score=...,grade=...\n",...。 程序的运行效果应类似地如图1所示,图1中的103和55.3是从键盘输入的内容。

img

  • switch不能直接判断范围,可以将数据/10,根据十位上面的值是多少来判断范围
#include <stdio.h>

int main(void)
{
    float score;
    char grade;

    printf("please input the score(0-100):");
    scanf("%f", &score);
    printf("Output:\n");
    while (score < 0 || score > 100)
    {
        printf("please input the score(0-100):");
        scanf("%f", &score);
    }
    switch ((int)score / 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';
            break;
    }
    printf("score=%.1f,grade=%c\n", score, grade);
    return 0;
}
  1. 编写程序实现以下功能 输入两个正整数m和n,求其最大公约数和最小公倍数。注:最大公约数也称最大公因子,指某几个整数共有因子中最大的一个;两个整数公有的倍数称为它们的公倍数,其中最小的一个正整数称为它们两个的最小公倍数。编程可用素材:printf("please input two integer numbers: ")...、printf("Output:\nthe greatest common divisor is ...\n"...、printf("the least common multiple is ...\n"...。 程序的运行效果应类似地如图1所示,图1中的35 15是从键盘输入的内容。

img

#include <stdio.h>

int main(void)
{
    int number1, number2, rem, i, j;

    printf("please input two integer numbers: ");
    scanf("%d%d", &number1, &number2);
    i = number1;
    j = number2;
    rem = number1 % number2;
    while (rem != 0)
    {
        i = number2;
        j = rem;
        rem = i % j;
    }

    printf("Output:\n");
    printf("the greatest common divisor is %d\n", j);
    printf("the least common multiple is %d\n", number1 * number2 / j);
    return 0;
}
  1. 程序功能:计算1/1 + 1/2 + … + 1/N之和并显示。注意:只修改/*********Found************/下面一行。
\#include<stdio.h>

\#define N 10

int main(void)
{
    /*********Found************/
    long jieguo = 0;
    int fm;

    for (fm = 1; fm <= N; fm++)
    {
        /*********Found************/
        jieguo += 1 / fm;
    }
    printf("%8.6f\n", jieguo);

 return 0;
}
  • 第一处:double
  • 第二处:jieguo=jieguo+1.0/fm
  1. 从键盘读入a和b的值(输入格式为a,b),在屏幕上显示b行a。
\#include<stdio.h>

int main(void)
{
    int a, b;

    /*********Found************/
    scanf("%d%d", &a, &b);
    /*********End************/

    while (b > 0)
    /*********Found************/
    ___________
    /*********End************/

        printf("%d\n", a);
        b--;
    /*********Found************/
    ___________
    /*********End************/

    printf("bye bye!\n");

 return 0;
}
  • 第一处:scanf("%d,%d", &a, &b);
  • 第二处:{
  • 第三处:}
  1. 显示用1、2、3、4个数字组成的互不相同且无重复数字的三位数。
\#include<stdio.h>

int main(void)
{
 int i, j, k;

 /*********Found************/
 for (i=1;____ ; i++)
    /*********End************/

 {
 for (j=1; j<5; j++)
 {
  for (k=1; k<5; k++)
  {
  /*********Found************/
  if (i!=k && i!=j && ______)
                /*********End************/

  {
   printf("%d%d%d ", i, j, k);
  }
  }
 }
 }

 return 0;
}
  • 第一处:i<5
  • 第二处:j!=k
  1. 从输入数据中统计正整数和负整数的个数。用输入0来结束输入,变量i存放正整数个数,变量j存放负整数的个数。
\#include<stdio.h>

int main(void)
{
 int i = 0, j = 0, n;

 printf("\ninput numbers:");
 scanf("%d", &n);
 /*********Found************/
 while (______________)
    /*********End************/

 {
 if (n > 0)
 {
  i++;
 }
 if (n < 0)
 {
  j++;
 }
 /*********Found************/
 _________________________
        /*********End************/
 }
 printf("i=%d,j=%d", i, j);

 return 0;
}
  • 第一处:n!=0
  • 第二处:scanf("%d", &n);

一维数组

  1. 以下不正确的定义语句是( )。

A)double x[5]={2.0, 4.0, 6.0, 8.0, 10.0};

B)int y[5]={0,1,3,5,7,9};

C)char c1[ ]={'1', '2', '3', '4', '5'};

D)char c2[ ]={'\x10', '\xa', '\x8'};

  • b
  • 可以不声明空间
  1. 若有定义float x[4]={1.3, 2.4, 5.6, 7.8}, y=6;,则错误的语句是( )。

A)y=x[3]; B)y=x+1; C)y=x[2]+1; D)x[0]=y;

  • b
  1. 对以下定义的正确理解是( )。

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

A)将5个初值依次赋给a[1]~a[5]

B)将5个初值依次赋给a[0]~a[4]

C)将5个初值依次赋给a[6]~a[10]

D)因为数组赋初值的个数不相同,所以此语句不正确

  • b
  1. 二维数组可以这样定义:int a[3,4]。
  1. 从键盘输入10个学生成绩(double),计算并输入这10个学生的平均成绩(保留小数点后2位)。

img

#include <stdio.h>

int main(void)
{
    int i;
    double arr[10];
    double sum = 0.0, aver;

    printf("Input:\n");
    for (i = 0; i < 10; i++)
    {
        scanf("%lf", &arr[i]);
        sum += arr[i];
    }
    aver = sum / 10;

    printf("Output:\n");
    printf("average=%.2f\n", aver);
    return 0;
}
  1. 对输入的n个数进行排序并输出。

输入格式

输入的第一行包括一个整数n(1<=n<=100)。 接下来的一行包括n个整数。

输出

将排序后的n个整数输出,每个数后面都有一个空格。

img

  • 一个简单的冒泡排序模板
#include <stdio.h>
#include <math.h>

int main() 
{
    int n,a[101];
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
        for(int i=1;i<=n;i++)
            {
                printf("%d ",a[i]);
            }
    for(int i=1;i<=n;i++)
    {
        for(int q=i;q<=n;q++)
        {
            if(a[i]>a[q])
            {
                a[0]=a[i];
                a[i]=a[q];
                a[q]=a[0];
            }
        }
    }

    for(int i=1;i<=n;i++)
        {
            printf("%d ",a[i]);
        }

    return 0;
}
  • 标答
#include<stdio.h>

int main()
{
        int n,i,j,t,a[100];
        printf("please input n:");
        scanf("%d",&n);
        printf("please input a[]:");
                for(i=0;i<n;i++)
                        scanf("%d",&a[i]);
                for(i=0;i<n-1;i++)
                        for(j=i+1;j<n;j++)
                                if(a[i]>a[j])
                                {
                                        t=a[i];
                                        a[i]=a[j];
                                        a[j]=t;
                                }
        printf("Output:\n");
                for(i=0;i<n;i++)
                        printf("%d ",a[i]);

        printf("\n");
        return 0;
}
  1. 输入n个整数,使前面的n-m个数顺序向后移动m个位置,最后的m个数变成最前面的m个数。

输入格式

第一行包含两个用空格隔开的整数n和m,保证n>m且n不超过50,如果输入不符合以上要求,要有“Input Error!”提示。第二行包含n个用空格隔开的整数。

输出

输出进行题目描述操作之后的n个整数,每个整数之后输出一个空格。 请注意行尾输出换行。

img

img

img

  • 这里提供一种简单的思路,分段打印即可
#include <stdio.h>
#include <math.h>

int main() 
{
    int n,a[101],s;
    scanf("%d %d",&n,&s);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=n-s+1;i<=n;i++)
    {
        printf("%d ",a[i]);
    }
    for(int i=1;i<n-s+1;i++)
    {
        printf("%d ",a[i]);
    }
}
  • 标答
#include <stdio.h>
int main() {
        void update(int x[], int n, int m);
        int a[50];
        int n, m, i;
        printf("Please input  n m:[n>m]\n");
        scanf("%d %d", &n, &m);
        if((n<=m)||(n>50))

        {
            printf("Output:\nInput Error!\n");
        }
        else
        {
            printf("Please input %d numbers:\n",n);
        for (i = 0;i < n;i++)
                scanf("%d", &a[i]);
        update(a, n, m);
        printf("Output:\nThe new sort numbers are:\n");
        for (i = 0;i < n;i++)
                printf("%d ", a[i]);
        printf("\n");
        }
        return 0;
}
void update(int x[], int n, int m) {
        int tmp[50];
        int i;
        for (i = 0;i < n;i++)
                tmp[i] = x[i];
        for (i = n - m - 1;i >= 0;i--)
                x[i + m] = x[i];
        for (i = 0;i < m;i++)
                x[i] = tmp[i + (n - m)];
}

二维数组

  1. 以下不能对二维数组a进行正确初始化的语句是( )。

A)int a[2][3]={0};

B)int a[ ][3]={{1,3},{0}};

C)int a[2][3]={{1,2},{3,4},{5,6}};

D)int a[ ][3]={1,2,3,4,5,6};

  • c
  • 花括号是行花括号对,列标不能省略,赋初始值不能{}
  1. 若有说明:int a[ ][4]={0,0};,则下面不正确的叙述是( )。

A)数组a的每个元素都可得到初值0

B)二维数组a的第一维大小为1

C)因为二维数组a中初值个数除以其第二维数值的商大于0小于等于1,故数组a的行数为1

D)只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0

  • d
  1. 若有说明:int a[3][4]={0};,则下面正确的叙述是( )。

A)只有元素a[0][0]可得到初值0

B)此说明语句不正确

C)数组a中各元素都可得到初值,但其值不一定为0

D)数组a中每个元素均可得到初值0

  • d
  1. 若有初始化int a[ ][3]={1,2,3,4,5,6,7};,则以下错误的是( )。未解决

A)引用a数组时,元素的两个下标值均不能超过2

B)a数组的第一维大小为3

C)a数组中包含9个元素

D)a数组中包含7个元素

  • d
  1. 设二维数组a有n行、m列,同类型的指针b指向a的第一个单元,则我们可以通过指针b以一维数组的方式访问数组a的任意单元。那么计算任一元素a[i][j]相对于指针b的偏移量为( )。

A)im+j B)jm+i C)im+j-1 D)im+j+1

  • a
  • 先列后行
  1. 若有说明:int a[3][4];,则数组a中各元素( )。

A)可在程序的运行阶段得到初值0

B)可在程序的编译阶段得到初值0

C)不能得到确定的初值

D)可在程序的编译或运行阶段得到初值0

  • c
  • 编译器不同则不同
  1. 以下各组选项中,均能正确定义二维实型数组a的选项是( )。

A)float a[3][4];

float a ;

float a[3][ ]={{1},{0}};

B)float a(3,4);

float a[3][4];

float a ={{0},{0}};

C)float a[3][4];

static float a ={{0},{0}};

auto float a ={{0},{0},{0}};

D)float a[3][4];

float a[3][ ];

float a[ ][4];

  • c
  1. 若有说明:int a[ ][3]={1,2,3,4,5,6,7};,则a数组第一维的大小是( )。

A)2 B)3 C)4 D)无确定值

  • b
  1. 从键盘上输入矩阵的阶数n(n<=14), 矩阵中元素的值等于其位置的行数和列数之和的n倍(行列的值从0开始计数),如n=3时,矩阵为 0 3 6 3 6 9 6 9 12 先输出该矩阵(显示时每个数宽度为4、右对齐),然后计算输出sum1和sum2的值:sum1为矩阵中所有不靠边元素之和、sum2为矩阵的一条对角线元素之和。编程可用素材:printf("Enter n: ")...、printf("sum1=...\nsum2=...\n"...。

img

img

#include <stdio.h>

int main(void)
{
    int i, j, n, sum1 = 0, sum2 = 0;
    int array[15][15];

    printf("Input:\nPlease Enter n:\n");
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            array[i][j] = (i + j) * n;
        }
    }

    for (i = 1; i < n - 1; i++)
    {
        for (j = 1; j < n - 1; j++)
        {
            sum1 += array[i][j];
        }
    }
    for (i = 0; i < n; i++)
    {
        sum2 += array[i][i];
    }
    printf("Output:\n");
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            printf("%4d", array[i][j]);
        }
        printf("\n");
    }
    printf("sum1=%d\nsum2=%d\n", sum1, sum2);
    return 0;
}

字符数组

  1. 对两个数组a和b进行如下初始化:

char a[ ]="ABCDEF";

char b[ ]={'A', 'B', 'C', 'D', 'E', 'F'};

则以下叙述正确的是( )。

A)a与b数组完全相同

B)a与b长度相同

C)a和b中都存放字符串

D)a的长度比b长

  • d
  • b存字符,a末尾自动加\0
  1. 有两个字符数组a、b,则以下正确的输入格式是( )。

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

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

  • b
  • 数组就是指针,不用加&
  1. 以下描述错误的是( )。

A)字符数组中可以存放ASCII字符集中的任何字符

B)字符数组的字符串可以整体输入、输出

C)字符数组中只能存放键盘上可以找到的字符

D)不可以用关系运算符对字符数组中的字符串进行比较

  • c
  1. 下程序段的运行结果是( )。

char c[5]={'a','b','\0','c','\0'};

printf("%s", c);

A)'a''b' B)ab C)ab□c D)ab□

注:□表示空格

  • b
  1. 判断字符串s1是否大于字符串s2,应当使用( )。

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

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

  • d
  1. 下面是对数组s的初始化,其中错误的是( )。

A)char s[5]={"abc"}; B)char s[5]={'a', 'b', 'c'};

C)char s[5]=" "; D)char s[5]="abcde";

  • d
  1. 有字符数组a[80]和b[80],则正确的输出形式是( )。

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

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

  • d
  1. 下面描述正确的是( )。

A)两个字符串所包含的字符个数相同时,才能比较字符串

B)字符个数多的字符串比字符个数少的字符串大

C)字符串"STOP□"与"STOP"相等

D)字符串"That"小于字符串"The"

注:□表示空格

  • d
  • 利用ASCII编码逐位按照顺序来比较的
  1. 判断字符串a和b是否相等,应当使用( )。

A) if (a==b) B) if(a=b)

C) if (strcpy(a,b)) D) if (!strcmp(a,b))

  • c
  1. 假设有char a[10]="abc";则strlen(a)的值为3。
  • strlen()不算\0的
  1. 对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。 在字符串中,单词之间通过空白符分隔,空白符包括:空格(' ')、制表符('\t')。

(注:程序中的字符串输入输出用gets和puts)。

输入格式

输入一行:待处理的字符串(长度小于100,逗号后要先输入一个空格再输入单词)。

输出

转换后的字符串。

img

  • 学校用不了cstring
#include <stdio.h>
#include <math.h>

int main() 
{
    char a[101];
    printf("please input str:");
    gets(a);
    int i=0;

    if(a[0]<='z'&&a[0]>='a')
    {
        a[0]=a[0]-32;
    }

    while(a[i])
    {
        if(a[i]==' ')
        {
            a[i+1]=a[i+1]-32;
        }
    i=i+1;
    }
    printf("Output:\n");
    puts(a);

}
  1. 从键盘读入一行字符(约定:字符数≤127字节),将其中的数字字符以及这些数字字符的数量在屏幕上显示,注意:要求先显示这些数字字符的数量。编程可用素材:printf("Input:\nPlease input string:\n")...、printf("\nOutput:\nThe Digit Number is:...、printf("\nThe Digit Number is following:...。 程序的运行效果应类似地如图1所示,图1中的this is a test!,ada12313 231 4(232 233是从键盘输入的内容。

img

img

#include <stdio.h>
void main()
{
    int i, j;
    char string[128];

    printf("Input:\nPlease input string:\n");
    gets(string);

    for (i = 0, j = 0; string[i] != '\0'; i++)
    {
        if (string[i] >= '0' && string[i] <= '9')
        {
            string[j] = string[i];
            j++;
        }
    }
    string[j] = '\0';
    printf("\nOutput:\nThe Digit Number is:%d\n", j);
    printf("\nThe Digit Number is following:%s\n", string);

}
  1. 编一个程序,读入用户输入的,以“.”结尾或无结尾符的一行文字,统计一共有多少个单词,并分别输出每个单词含有多少个字符.(凡是以一个或多个空格隔开的部分就为一个单词,不判断输入是否以"."结尾,单词中包含的数字也要统计)

输入格式

输入包括1行字符串,以“.”结束,字符串中包含多个单词,单词之间以一个或多个空格隔开。

输出

输出字符串中每个单词包含的字母的个数。

img

#include <stdio.h>
#include <math.h>

int main() 
{
    char a[101];
    printf("please input str:");
    gets(a);
    int i=0,count=0;
    printf("Output:\n");

    while(a[i]&&a[i]!='.')
    {

        if(a[i]==' '&&count!=0)
        {
            printf("%d ",count);
            count=0;

        }
        else count=count+1;

    i=i+1;
    }

printf("%d",count);

}

数组综合

  1. 求任意的一个m×m矩阵的最大数及其所在的行列数,m(2<=m<=20)及矩阵元素从键盘输入(只考虑int型)。

程序的运行效果应类似地如图所示,图中的5和 1 45 67 235 464 35 6 89 32342 8 347 9346 47 95 746 46 785 436 19434 634 3235 567 24 8465 25 是从键盘输入的内容。

img

  • 输入的是数字,类似于空格和回车的字符都不会对输入产生干扰
#include <stdio.h>

int main(void)
{
    int i, j, m, max, maxi, maxj;
    int array[20][20];

    printf("Please input m:");
    scanf("%d", &m);

    printf("\nPlease input array:\n");
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &array[i][j]);
        }
    }

    max = array[0][0];
maxi=0;maxj=0;
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < m; j++)
        {
            if (max < array[i][j])
            {
                max = array[i][j];
                maxi = i;
                maxj = j;
            }
        }
    }
    printf("Output:");
    printf("\nmax=%d,i=%d,j=%d\n", max, maxi, maxj);
    return 0;
}
2. 从键盘上读入一行字符(约定:字符数≤127字节),按以下方法将其加密变换:

    A->Z a->z     B->Y b->y     C->X c->x     …… ……     Z->A z->a 即字母A变成Z、字母B变成Y...,非字母字符不变。最后在屏幕上先显示这一行字符的长度,再显示生成的密文。 编程可用素材:printf("Please input string:")...、printf("Output:\nzi fu chuan chang du:...、printf("\nmi wen:...。 程序的运行效果应类似地如图1所示,图1中的sfasfk,lmw4tywerysfcvasgewr xfasftg是从键盘输入的内容

img

#include <stdio.h>

int main(void)
{
    int i;
    char string[128];

    printf("Please input string:");
    gets(string);

    for (i = 0; string[i] != '\0'; i++)
    {
        if (string[i] >= 'a' && string[i] <= 'z')
        {
            string[i] = 'a' + 25 - (string[i] - 'a');
        }
        if (string[i] >= 'A' && string[i] <= 'Z')
        {
            string[i] = 'A' + 25 - (string[i] - 'A');
        }
    }

    printf("Output:\nzi fu chuan chang du:%d", i);
    printf("\nmi wen:%s\n", string);

    return 0;
}
  1. 实现十进制转num换成R进制数,num和R从键盘读入(假定num为int且-32767<=num<=32767,R为int且2<=R<=16)。编程可用素材:printf("Input the num, R: ")...、printf("Output:\n")...。 程序的运行效果应类似地如图1和图2所示,图1中的4095,2和图2中的-32760,16是从键盘输入的内容。未解决

img

img

  1. ①程序运行时先显示Please input numbers:,再从键盘上读入一组整数(只考虑int型),数与数之间只使用空格或回车作分隔。数可正可负,最多10000个,但若读入的数为-222时,则表示输入结束且-222不算在该组数内。 ②对这一组数按从小到大的顺序进行排序。 ③将排序后的这一组数输出到屏幕上,输出格式为每行6个数,数与数之间使用逗号(,)分隔,两个逗号之间的宽度(不算逗号)为6且使用左对齐格式。注意,行尾没有逗号。

img

#include <stdio.h>

int main() 
{
    int a[10000],i;
    printf("Please input numbers:");
    for(i=1;i<=10000;i++)
    {
        scanf("%d",&a[i]);
        if(a[i]==-222) break;
    }
    printf("\nOutput:\n");
    //printf("%d",i);
    i=i-1;
    for(int q=1;q<=i;q++)
    {
        for(int w=q;w<=i;w++)
        {
            if(a[q]>a[w])
            {
                a[0]=a[q];
                a[q]=a[w];
                a[w]=a[0];
            }

        }
    }

    for(int q=1;q<i;q++)
    {
        if(q%6==0&&q!=i)
        {
            printf("%d\n",a[q]);
            continue;
        }
        printf("%-6d,",a[q]);

    }
    printf("%-6d",a[i]);
    return 0;
}
  1. 编写程序实现以下功能

用键盘输入的整数产生5*5矩阵N,并按行输出该矩阵,每个元素占4个数位、右对齐。 程序的运行效果应类似地如图1和图2所示,图1中的5和图2中的7是从键盘输入的内容。

img

img

#include <stdio.h>

int main(void)
{
    int n, i, j;
    int array[5][5];

    printf("Please input an integer:");
    scanf("%d", &n);

    printf("Output:\n");
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            array[i][j] = n + i + j;
            printf("%4d", array[i][j]);
        }
        printf("\n");
    }

    return 0;
}
  1. 输入10个整型数存入一维数组,输出值和下标都为奇数(数组第1个元素的下标为0)的元素及其个数,要求先输出个数。编程可用素材:printf("Input 10 integers.\n")...、printf("Output:\ncount=...\n"...、printf("a[...]=...\n"...。 程序的运行效果应类似地如图1所示,图1中的2 45 34 56 78 12 41 55 86 37是从键盘输入的内容。

img

#include <stdio.h>

int main(void)
{
    int i, count = 0;
    int array[10], barray[10];

    printf("Input 10 integers.\n");
    for (i = 0; i < 10; i++)
    {
        scanf("%d", &array[i]);
    }

    for (i = 0; i < 10; i++)
    {
        if (array[i] % 2 == 1 && i % 2 == 1)
        {
            barray[count] = i;
            count++;
        }
    }

    printf("Output:\ncount=%d\n", count);
    for (i = 0; i < count; i++)
    {
        printf("a[%d]=%d\n", barray[i], array[barray[i] ]);
    }
    return 0;
}
  1. 输入整数m,将所有大于1小于整数m的素数存入所指定的数组中(数组最多只存放100个素数,超过则提示“overflow”),输出素数的个数n及各素数——素数的输出格式为每个素数5列宽、右对齐、每行显示15个。若输入的m≤0,则提示“error”,程序终止。注:素数(Prime Number),亦称质数,指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。 编程可用素材:printf("input a number: ")...、printf("error")...、printf("overflow")...、printf("n=...\n"...。 程序的运行效果应类似地如图1、图2和图3所示,图1中的188、图2中的0和图3中的568是从键盘输入的内容

img

img

img

#include <stdio.h>

int main(void)
{
    int m, cnt = 0, i, j;
    int array[101];
    printf("Input:\nPlease input a number: \n");
    scanf("%d", &m);
    for (i = 2; i < m; i++)
    {
        for (j = 2; j < i; j++)
        {
            if (i % j == 0)
            {
                break;
            }
        }
        if (j == i)
        {
            array[cnt++] = i;
        }
        if (cnt > 100)
        {
            break;
        }
    }

    printf("Output:\n");
    if (m <= 0)
    {
        printf("error!\n");
    }
    else if (cnt > 100)
    {
        printf("overflow!\n");
    }
    else
    {
        printf("n=%d\n", cnt);
        for (i = 0; i < cnt; i++)
        {
            printf("%5d", array[i]);
            if ((i + 1) % 15 == 0)
            {
                printf("\n");
            }
        }
        printf("\n");

    }
    return 0;
}
  1. 保持数列有序:有n(约定n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。 程序输入:输入数据包含多组测试实例,每组数据由两行组成,第一行是n和x,第二行是已经有序的n个数的数列。n和x同时为0表示输入数据的结束,本行不做处理。 程序输出:对于每个测试实例,输出插入新的元素后的数列。 程序的运行效果应类似地如图1所示,图1中的3 3、1 2 4和0 0是从键盘输入内容。

img

#include <stdio.h>

int main(void)
{
    int i, j, n, x;
    int arr[101];

    printf("Input:\n");
    scanf("%d%d", &n, &x);
    while (n != 0 || x != 0)
    {
        for (i = 0; i < n; i++)
        {
            scanf("%d", &arr[i]);
        }

        for (j = n - 1; j >= 0 && x < arr[j]; j--)
        {
            arr[j + 1] = arr[j];
        }
        arr[j + 1] = x;
        printf("Output: ");
        for (i = 0; i <= n; i++)
        {
            printf("%d ", arr[i]);
        }
        printf("\n");

        scanf("%d%d", &n, &x);
    }
    return 0;
}
  1. 对从键盘输入的一行字符(约定:字符数≤127字节)进行排序(按每个字符的ASCII码由小到大)并输出。编程可用素材:printf("input the string: \n")...、printf("Output:")...。 程序的运行效果应类似地如图1所示,图1中的32679 dsg j7u6k dsvs346r23v5h@#sfsaf是从键盘输入的内容。

img

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

int main() 
{
    char a[128],b;
    printf("input the string:\n");
    gets(a);
    for(int i=0;i<=strlen(a)-1;i++)
    {
        for(int q=i;q<=strlen(a)-1;q++)
        {
            if(a[i]>a[q])
            {
                b=a[q];
                a[q]=a[i];
                a[i]=b;
            }
        }
    }
    printf("Output:");
puts(a);
    return 0;
}
  1. 求任意的一个m×m矩阵的主副对角线上元素之和(注:每个元素只计一次),m(2<=m<=20)及矩阵元素从键盘输入(只考虑int型,且不需考虑求和的结果可能超出int型能表示的范围)。

程序的运行效果应类似地如图所示,图中的5和 1 45 67 235 464 35 6 89 32342 8 347 9346 47 95 746 46 785 436 19434 634 3235 567 24 8465 25 是从键盘输入的内容。

img

#include <stdio.h>

int main(void)
{
    int i, j, m, sum = 0;
    int array[20][20];

    printf("Please input m:");
    scanf("%d", &m);

    printf("\nPlease input array:\n");
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &array[i][j]);
        }
    }

    for (i = 0; i < m; i++)
    {
        sum = sum + array[i][i] + array[i][m - i - 1];
    }
    if (m % 2 == 1)
    {
        sum = sum - array[m / 2][m /2];
    }
    printf("Output:\nsum=%d\n", sum);
    return 0;
}
  1. 编写一程序实现以下功能 求任意的一个m×m矩阵的周边元素之和,m(2<=m<=20)及矩阵元素从键盘输入(只考虑int型,且不需考虑求和的结果可能超出int型能表示的范围)。编程可用素材:printf("\nPlease input m: ")...、printf("\nPlease input array:\n")...、printf("Output:\nsum=...\n"...。 程序的运行效果应类似地如图1所示,图1中的5和 1 45 67 235 464 35 6 89 32342 8 347 9346 47 95 746 46 785 436 19434 634 3235 567 24 8465 25 是从键盘输入的内容。

img

/*
5
1 45 67 235 464
35 6 89 32342 8 
347 9346 47 95 746
46 785 436 19434 634
3235 567 24 8465 25

*/
#include <stdio.h>

int main(void)
{
    int i, j, m, sum = 0;
    int array[20][20];

    printf("Please input m:");
    scanf("%d", &m);

    printf("\nPlease input array:\n");
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &array[i][j]);
        }
    }

    for (i = 0; i < m; i++)
    {
        if (i == 0 || i == m - 1)
        {
            for (j = 0; j < m; j++)
            {
                sum += array[i][j];
            }
            continue;
        }
        sum = sum + array[i][0] + array[i][m - 1];
    }

    printf("Output:\nsum=%d\n", sum);
    return 0;
}
  1. 有一递推数列,满足f(0)=0,f(1)=1,f(2)=2, f(n+1)=2f(n)+f(n-1)f(n-2) (n>=2), 编写程序求f(n)的值(n由键盘输入,13>=n>=2)。编程可用素材:printf("Input n (13>=n>=2): ")...、printf("Output:\nf(...)=...\n"...。 程序的运行效果应类似地如图1所示,图1中的10是从键盘输入的内容。

img

#include <stdio.h>

int main(void)
{
    int i, n;
    double array[21];

    printf("Input n (13>=n>=2):");
    scanf("%d", &n);

    array[0] = 0;
    array[1] = 1;
    array[2] = 2;
    for (i = 3; i <= n; i++)
    {
        array[i] = 2 * array[i - 1] + array[i - 2] * array[i - 3];
    }
    printf("Output:\nf(%d)=%.0f\n", n, array[n]);
    return 0;
}
  1. 求斐波拉契数列的前n(n的范围为:3~20)项,并输出到屏幕上(数和数之间用字符'\t'隔开)。斐波拉契公式:f(1)=1,f(2)=1,f(n)=f(n-1)+f(n-2) (n≥3)。编程可用素材:printf("input a data(3--20):")...printf("Output:\n")...。 程序的运行效果应类似地如图1所示,图1中的11是从键盘输入的内容。

img

#include <stdio.h>

int main(void)
{
    int i, n;
    int array[21] = {1, 1};

    printf("input a data(3--20):");
    scanf("%d", &n);
    for ( i = 2; i < n; i++)
    {
        array[i] = array[i - 1] + array[i - 2];
    }

    printf("Output:\n");
    for ( i = 0; i < n - 1; i++)
    {
        printf("%d\t", array[i]);
    }
    printf("%d\n", array[i]);
    return 0;
}
  1. 编写程序实现以下功能 从键盘输入一行可带空格的字符串(约定:字符数≤127字节),按逆序输出该字符串。编程可用素材:printf("Input a string: ")...、printf("Output: ")...。 程序的运行效果应类似地如图1所示,图1中的abc xyz是从键盘输入的内容。

img

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

int main(void)
{
    int i;
    char string[128];

    printf("Input a string: ");
    gets(string);
    printf("Output: ");
    for (i = strlen(string) - 1; i >= 0; i--)
    {
        printf("%c", string[i]);
    }
    printf("\n");
    return 0;
}
  1. 输入3行3列的矩阵,输出所有元素的累加和(整型)。编程可用素材:printf("Please input the 3x3 Matrix:\n"...、printf("Output:\nsum=...\n"...。 程序的运行效果应类似地如图1所示,图1中的 9 20 13 16 51 79 32 8 6 是从键盘输入的内容。

img

#include <stdio.h>

int main(void)
{
    int i, j, sum = 0;
    int array[3][3];

    printf("Please input the 3x3 Matrix:\n");
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            scanf("%d", &array[i][j]);
            sum += array[i][j];
        }
    }

    printf("Output:\nsum=%d\n", sum);
    return 0;
}
届ける言葉を今は育ててる
最后更新于 2024-02-07