精华内容
下载资源
问答
  • 1. 若变量已正确定义并赋值,以下符合C语言语法的表达式是 A.a:=b+1 B.a=b=c+2 18.5%3 D.a=a+7=c+b 正确答案B 答案解析选项A中包含一个合法的运算符:=;选项C应改为(int)18.5%3;选项D可理解为两个表达式:a+7=c+b和a=...
  • 以下整理自湖南大学考研真题。 2010年 1、C语言源程序文件经过C编译程序编译连接之后生产一个后缀为...3、表达式_____不符合C语言语法,若变量以正确定义并赋值 A、4&&3 B、+a C、a=b=5 D、...

    以下整理自湖南大学考研真题。

    2010年

    1、C语言源程序文件经过C编译程序编译连接之后生产一个后缀为“.exe”的文件

     

    2、以下选项中不正确的整型常量是()

    A、12L    B、-10    C、1,900    D、123U

     

    3、表达式_____不符合C语言语法,若变量以正确定义并赋值

    A、4&&3    B、+a    C、a=b=5    D、int(3.14)

     

    4、在字符数组str[]="hello\nworld\n"中,‘\n’为一个字符,该数组长度为13

     

    5、结构体的赋值:

    struct node{
        char s[10];
        int k;
    }p[4];

    p[0]->k=2正确,p[0].s="abc"错误。

     

    6、C语言中基本的数据类型有 整型、字符型、浮点型

     

    7、C语言中普通整型变量的类型说明符为 int ,在内存中占 2 字节,有符号普通整型的数据范围是 -32768~32767(-2^15~2^15-1)

     

    8、原码反码和补码:(8位,以-35为例)

    原码

    最高位存放符号, 正数为0, 负数为1。

    例:-35 --> 10100011

    反码

    正数的反码是其本身;

    负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。

    例: 10100011 --> 11011100

    补码

    正数的补码就是其本身;

    负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1。 (即在反码的基础上+1)

    例:11011100 --> 11011101

    注:考试给的答案是16位。

     

    9、所谓“指针”就是 地址 ,“&”运算符的作用是 按位与或取地址 ,“*”运算符的作用是 乘积或指针

     

    10、文件:

    建立一个名为“myfile”的文件:

    FILE *fp;
    fp=fopen("myfile.txt", "w");

    要记住最后要关闭文件流:

    fclose(fp);

     

    11、sizeof()计算当前字符数组总元素个数,包括'\0';strlen()不包括'\0':

    char s[9] = "computer";
    printf("%d\n",sizeof(s));
    printf("%d\n",strlen(s));

    12、从键盘读取字符串的方法:

    char str[100];
    gets(str);
    puts(str);

     


    2011年

    1、函数参数传递时传值与传地址的区别:

    传值 把实参的值赋给形参,对形参的值进行修改不会影响到实参。
    传地址 传递的是地址,实参和形参指向同一对象,改变形参的值实参的值也会相应改变。

     

    2、#include <filename.h> 和 #include "filename.h"的区别:

    <> 从标准头文件的位置引用头文件。(标准或系统提供的头文件)
    "" 引用的是用户程序目录中相对路径里面的头文件。(程序自己的头文件)

     

    3、sizeof()的使用:

    详细可参考:https://blog.csdn.net/u011677209/article/details/52837065

    #include <stdio.h>
    #include <stdlib.h>
    
    void fun(char str[100]){
        printf("3,%d\n",sizeof(str));
    }
    
    int main()
    {
        char str[]="Hello";
        char *p=str;
        printf("1,%d\n",sizeof(str));
        printf("2,%d\n",sizeof(p));
        fun(str);
        return 0;
    }
    

     如上程序,在32位系统中,输出结果为:

    1,6
    2,4
    3,4

     (1)sizeof()的作用是返回一个对象或者类型所占的内存字节数,str数组中,加上结束符'\0'一共是6个字符,char类型占1个字节,因此共6字节。

    (2)指针p记录了另一个对象str的地址,等于计算机内部地址总线的宽度。所以在32位计算机中 ,一个指针变量的返回值必定是4(注意结果是以字节为单位)。

    (3)在fun()函数中,数组是“传址”的,只会把实参的地址传进去,而不会分配一个大小为100的数组,所以它实际上相当于是一个指针,因此结果也为4。

     

    4、分析下面的程序:

    #include <stdio.h>
    #include <stdlib.h>
    
    char *GetMemory(){
        char p[]="hello world";
        return p;
    }
    
    void Test(){
        char *str=NULL;
        str=GetMemory();
        printf(str);
    }
    
    int main()
    {
        Test();
        return 0;
    }

    函数GetMemory()中返回的p是其局部变量,在该函数执行完“return p;”后p就被释放掉了,因此在Test()中str并没有获取到p的值,输出的是乱码。

     

    5、有序数据序列的查找——二分法:

    #include<stdio.h>
    //递归算法
    int recurbinary(int *a, int key, int low, int high)
    {
        int mid;
        if(low > high)
            return -1;
        mid = (low + high)/2;
        if(a[mid] == key) return mid;
        else if(a[mid] > key)
            return recurbinary(a,key,low,mid -1);
        else
            return recurbinary(a,key,mid + 1,high);
    }
    
    //非递归算法
    int binary( int *a, int key, int n )
    {
        int left = 0, right = n - 1, mid = 0;
        mid = ( left + right ) / 2;
        while( left < right && a[mid] != key )
        {
            if( a[mid] < key ) {
                left = mid + 1;
            } else if( a[mid] > key ) {
                right = mid;
            }
            mid = ( left + right ) / 2;
        }
        if( a[mid] == key )
            return mid;
        return -1;
    }
    int main()
    {
        int a[] = {1,2,3,4,5,6,7,8,9,12,13,45,67,89,99,101,111,123,134,565,677};
        printf("%d\n",recurbinary(a,45,0,20));
        printf("%d\n",binary(a,3,21));
        return 0;
    }
    

    原理:

    (1)定义3个变量left, right, mid分别表示有序数组查找部分的起始位、结束位和中间位,若元素总个数为偶数,则中间位表示中间左边的那一位。

    (2)判断mid和查找值key的大小关系,若key<mid则在[left,mid-1]范围内查找;若key>mid则在[mid+1,right]范围内查找。

    展开全文
  • 3.7 是否可以安全地认为,一旦&&和||左边的表达式已经决定了整个表达式的结果,则右边的表达式不会被求值? 3.8 为什么表达式printf("%d%d",f1(),f2());先调用了f2?我觉得逗号表达式应该确保从左到右的求值顺序。...
  • C语言复习题集.docx

    2020-03-09 13:38:28
    C 语 C 语言复习题集 'D' - 'A' == 'd' - 'a' 一 判断题 1-1C 语言程序是从源文件的第...则 x % 2 是符合 C 语言语法的表达式. 正确答案F 1-4如果变量已经正确定义则表达式 fahr ++ 与 fahr + 1 等价 正确答案F 1-5以下
  • c语言练习题

    2013-01-02 12:08:35
    14、 若变量已正确定义并赋值,表达式( )不符合C语言语法。 A)4&&3 B)+a C)a=b=5 D)int(3)14) 15、 C语句”x*=y+2;”还可以写作( ) A) x=x*y+2; B) x=2+y*x; C) x=x*(y+2); D) x=y+2*x; 16、 下列...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    3.7 是否可以安全地认为,一旦&&和||左边的表达式已经决定了整个表达式的结果,则右边的表达式不会被求值? 36  3.8 为什么表达式printf("%d %d", f1(), f2()); 先调用了f2?我觉得逗号表达式应该确保从左到右的...
  • 3.7 是否可以安全地认为,一旦&&和||左边的表达式已经决定了整个表达式的结果,则右边的表达式不会被求值? 36  3.8 为什么表达式printf(%d %d, f1(), f2()); 先调用了f2?我觉得逗号表达式应该确保从左到右的求...
  • 你必须知道495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    3.4 这是个巧妙的表达式: a ˆ= b ˆ= a ˆ= b 它需要临时变量就可 以交换a 和b 的值。. . . . . . . . . . . . . . . . . . . . . . . . . 14 3.5 我可否用括号来强制执行我所需要的计算顺序? . . . . . . . . ....
  • o 4.4 这是个巧妙的表达式: a ^= b ^= a ^= b 它需要临时变量就可以交换 a 和 b 的值。 o 4.5 我可否用括号来强制执行我所需要的计算顺序? o 4.6 可是 && 和 || 运算符呢?我看到过类似 while((c = getchar())...
  • 符号名命名要符合语法 C. 充分考虑程序执行效率 D. 程序注释可有可无 (25) 下面对对象概念描述错误是______。(A) A. 任何对象都必须有继承性 B. 对象是属性和方法封装体 C. 对象间通讯*消息传递 D. *作...
  • 符号名命名要符合语法 C. 充分考虑程序执行效率 D. 程序注释可有可无 (25) 下面对对象概念描述错误是(A) 注:P55 A. 任何对象都必须有继承性 B. 对象是属性和方法封装体 C. 对象间通讯靠消息传递 D. ...
  • 面试问题合集二

    2019-10-26 15:10:08
    笔试 下列属于面向对象的基本要素有()。 下面哪个单词是java语言的关键字()。 表达式“(a+b)*(c-d)”的后缀表示为()。 再关系模型中,实现“关系中允许出现相同的元组”的约束是...则以下符合c语言语法的...

    笔试

    1. 下列属于面向对象的基本要素有()。
    2. 下面哪个单词是java语言的关键字()。
    3. 表达式“(a+b)*(c-d)”的后缀表示为()。
    4. 再关系模型中,实现“关系中不允许出现相同的元组”的约束是通过()来实现。
    5. 已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是()。
    6. 在c语言中,下列()是合法的标识符。
    7. 若有以下定义:int x=2,y=3;float i;则以下符合c语言语法的表达式是()。
    8. 若二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为()。
    9. 在一下一组运算符中,优先级最高的运算符是()。
    10. 软件开发方法的基础模型是()。

    编程题

    1,给定一个英文字符串。统计出其出现频率最高的5个单词及其出现次数。单词不区分大小写,数字不能当作单词,切无意义单词(the,is,are,that)不统计。注意:字符串存在空格,逗号,冒号,引号和回车换行,这些都可以当成拆分单词的依据。

    展开全文
  • 试卷

    千次阅读 2012-04-20 21:34:38
    一. 选择题 1.已知变量说明如下: int k,a,b;...则以下不符合c语言语法的是( A ) (A) x%(-3) (B)w+=-3 (C) k=(a=2,b=3,a+b) (D) a+=a-=(b=1)*(a=2) 2.若int x=0,y=2,z=5; 则下列表达式
    一. 选择题 
    1.已知变量说明如下:
    int k,a,b;
    unsigned long w=5;
    double x=1.42;
    则以下不符合c语言语法的是( A )
    (A) x%(-3)          (B)w+=-3
    (C) k=(a=2,b=3,a+b)    (D) a+=a-=(b=1)*(a=2)
    2.若int x=0,y=2,z=5; 则下列表达式值为假的是( D )
    (A) ‘x’&&’yy’  (B) x<y  (C) x||y+z&&y+z  (D)  !((x<y)&&!Z||1)
    3.若定义float a; 则表达式 a=1 , a+1,a+=a;的值是( B )
    (A)2   (B)2.0  (C)4    (D) 4.0
    4.以下是正确的字符型常量的是(B   )
    (A) ‘\’   (B) ‘\\’  (C) “\\”    (D) “\”
    5.若int 类型占用两个字符,则以下程序段的输出结果是( C )
      int a=-2;
      printf(“%d,%u\n”,a,a);
    (A)-2,-2  (B)-2,32766 (C)-2,32768 (D)-2,65534
    6.下列运算符中优先级最低的是(  D )
    (A)>=   (B) <=   (C)!=    (D)+=
    7.下列运算符中优先级最高的是( D )
    (A)<<         (B) <=   (C)&&    (D)%
    8.执行程序段
      int a,b,c;
      a=b=c=0;
      ++a||++b&&++c;
     后,变量a,b,c的值分别是( D )
    (A) 0 0 0     (B)1 0 0  (C)1 1 0   (D)1 1 1
    9.以下程序段中循环体执行了(  D)次
     int n=1000;
     while(---n>=0)
      printf(“%d”,n);
    (A)988    (B)999    (C)1000   (D)1001
    10.下面程序段的执行结果是(C  )
    #define prt(a,b) if(!a) b=a
    main()
    {
    int x=1,y=0;
    if(x>y) prt(x,y);
    else prt (y,x);
    printf(“%d,%d”,x,y);
    }
    (A) 1;0   (B)  0,1    (C) 0,0   (D) 编译出错
    11.表达式”c=*p++”的执行过程是( A )
    (A)赋值*p的值给c后在执行p++
    (B)赋值*p的值给c后在执行*p++
    (C)赋值p的值给c后在执行p++
    (D)赋值p的值给c后在执行*p++
    12.若main函数前省略返回值类型,以下说法正确的是( B )
    (A)main 是特殊的函数,没有返回值
    (B)main是特殊的函数,系统根据实际程序给定返回值类型
    (C)省略返回值类型,默认为void
    (D)省略返回值类型,默认为 int
    13.下面程序的输出结果(  B )
     int a=1,b=2;
    printf(“%d\n”,a=a+1,a+6,b+2);
    (A) 1   (B) 2    (C) 4     (D) 8
    14.下面程序输出结果是(  C )
    int a=1,b=2;
    printf(“%d\n”,(a=a+1,a+6,b+2));
    (A) 1   (B) 2    (C) 4     (D) 8
    15.设int类型占用2字节,这下面程序结果是( D )
    int a=-1;
    printf(“%d,%o,%u\n”,a,a,a);
    (A) -1,-1,-1  (B) -1,-77777,-32768  (C) -1,177777,-32768 (D) -1,177777,65535
    16.下面程序段的输出结果是( C )
    int x=‘y’;
    printf(“%c”,(x=x-’a’+3+’A’)-’Z’>0?x-’Z’+’A’-1:x);
    (A) Y  (B) Z    (C) B    (D) C
    17.若x为int类型,则与逻辑表达式!X等价的表达式是( A )
    (A)x==0   (B)x==1  (C) x!=0   (D) x!=1
    18.下面程序段的运行结果是( B )
    int x=2,y=3,z=4;
    z=x<y?++x:++y;
    printf(“%d,%d,%d\n”,x,y,z);
    (A) 2,3,4   (B) 3,3,3   (C) 3,4,3   (D)  3,4,2
    19.下面程序段的运行结果是( C )  //注意:c++执行了3次
    int a=1,b=3,c=0;
    switch(a%3)
    {
    case 0 :c++;break;
    case 1:c++;
    Switch(b%2){
    default:c++;                           //没有break
    case 0:c++;break;}}
    Printf(“%d”,c);
    (A) 1    (B) 2     (C) 3   (D) 4
    20.下面说法中正确的是( D  )
    (A)在switch语句中一定要用break语句
    (B)break语句是switch语句的一部分
    (C)break语句只能用于switch语句
    (D)在switch语句中不一定要使用break语句
    21.以下数组初始化错误的是(C  )
    (A)int a[5]={1,2,3,4,5};
    (B)  int a[5]={1,2,3,4,5,};
    (C)  int a[5]={1,2,3,4,5,6};  
    (D)  int a[5]={1,2,3,4};
    22.对于下面程序段,说法正确的是( C )
    int a=5;
    for(;a=0;) a--;
    (A) 循环体语句执行了一次
    (B) 循环体语句一次也不执行
    (C) 循环体语句执行了5次
    (D) 编译出错
    23.下面程序段的运行结果是( A )
    int a=5,b=3,c=1;
    while(a>b>c) a+=1,b+=2,c+=3;
    printf(“%d,%d,%d\n”,a,b,c);
    (A)5,3,1    (B) 6,5,4   (C) 7,7,7   (D) 8,9,10
    24.语句int x=100;while(x--);执行后变量x的值是( C )
    (A)0  (B)1        (C)-1   (D)-2
    25.若有以下语句,则能表示数组元素的表达式是(  D )
    int a[3][5],(*p)[5];p=a;
    (A) p+1  (B) *(p+2)  (C) *(p+1)+2  (D) *(*p+2)
    26.若有定义char c[5],*p=c;以下正确的语句是(  C )
    (A)c=“1234”;  (B) *c=“1234”;   (C) p=“1234”;  (D)*p=“1234”;
    27.若有以下定义,则使数组元素a[2]值为4的表达式为( D )
    int a[]={1,2,3,4,5,6,7,8,9,10},*p=a;
    (A)p+=2,*(p++)  (B) p+=2,*++p   (C) p+=3,*p++  (D) p+=2,++*p
    28.若有以下定义,则值为3的表达式是(   )   ???????
    (A)a[1]+1   (B) *(p+1)+1  (C) p++,p[0][1]  (D) (*a+1)+1
    29.下面程序段的输出结果是( C )
    int a=1,b=2,*p,**pp;
    p=&a;pp=&p;p=&b;             //把b的地址赋给指针变量p,此时指针变量间接指向b
    printf(“%d,%d,\n”,*p,**pp);
    (A) 1,1   (B) 1,2    (C) 2,2    (D) 2,1  
    30.以下所列出的函数原型申明中,错误的是(C )
    (A)int (*f)(int);     (B)int  f(int*);    
    (C) struct aa{ int a; int b; } f(struct aa);  (D) struct aa{int a; int b;}; struct aa f(struct aa);
    31.以下描述中,不正确的是( B )
    (A)调用函数时,实参可以是常量.表达式
    (B)调用函数时,形参可以是常量.表达式
    (C)调用函数时,实参与形参的类型必须匹配
    (D)调用函数时,要为形参分配存储单元
    32.在函数调用语句 fun(a+b,(x+y),fun(n,m,(a,b)));中,实参的个数是( A  )
    (A)3   (B)4    (C)5    (D) 语句有错误
    33.设有以下宏定义;
    #define N 5
    #define f(M)  ((N+1)*M)
    则语句x=2*(N+1)+2*f(N+1);执行后,整型变量x的值是( C  )
    (A)84  (B)73    (C)74   (D)语句有错误
    34.以下说明中,标识符AA代表变量的是( C )
    (A)typedef struct { int a; double b; } AA;
    (B) #define AA struct aa  
     AA{ int a;double b; };
     (C)struct {int a ;double b;}AA;
    (D) struct aa{ int a;double b; }
      typedef struct aa AA;
    35.对于文件操作,以下错误的说法是( A )
    (A)若用”r+”方式打开文件,则可以进行输入和输出,但输入后不能直接进行输出
    (B)若用”r”方式打开一个不存在的文件,则会返回NULL指针
    (C)若用”w”方式打开不存在的文件,则会创建该文件
    (D)若用”a”方式打开一个不存在的文件,则会返回NULL指针
    36.若要打开C盘work目录下file1.txt文件进行读操作,正确的语句是(C )
    (A)fopen(“c:\work\file1.txt”,”r”);
    (B)open(“c:\work\file1.txt”,’r’);
    (C)fopen(“c:\\work\\file1.txt”,”r”);
    (D)fopen(“c:\\work\\file1.txt”,’r’);
    二.程序填空题
    1.下面函数可以检查给定的字符串中括号是否匹配对,若配对返回0,否则返回1
    int fun(char *p )
    {
     int n; char  *q;
     for(q=p;*q;q++)
     if(*q=='(')
      n=1;
      else if(*q==')')
              {
       n--;
       if(*q=='\n') return 1;
              }
    if(n>0) return 1;
    else return 0;
    } 
    2. 下面的函数实现将一个单向链表里的结点倒置排列,请填写完整
    struct node* fun(struct node*head){
        Struct node *p,*q;
        If(head==NULL||head->next == NULL)  //只有链表为空或只有一个结点
            return head;
        P=head;                //p从第1个结点起
        q=p->next;             //q从第2个结点起,并且q几乎总在p的下一个结点位置
        while(q != NULL) {
            p->next = q->next; //第1个结点直接指向第3个结点
            q->next=head;      //q作为新的首结点
            head=q;            //head重新定位
            q = p->next;       //p总是出现在p的下一个位置
        }
        return head;
    } 
     3. 下面程序实现统计当前目录下文件file.txt中子串”read”出现的次数,请填写完整
    #include<stdio.h>
    #include<string.h>
    main()
    {
     FILE *fp;
    Int t ,ch,num=0;
    char str[5]=“read”,buf[5];
    if(() {
    printf(“cannot open the file\n”); exit(1);
    }
    for(t=0;t<4;t++) buf[t]=_____________________________________; buf[t]=‘\0’;
    if( strcmp( str,buf )==0 ) num++;
    while( (ch=fgetc(fp))!=EOF ) {
     for( t=0;t<3;t++ ) _____________________________________;
    ________________________________________;
    if(strcmp(str,buf)==0) num++;
    }
    fclose(fp);
    printf(“the number of read is: %d\n”,num);
    } 
    4. 下面函数实现将一个N*N的整型矩阵实现转置并存储在原矩形中
    #define N 5
    void fun(int (*a)[N])
    {
     int i,j,t;
     for(i=0;i<N;i++)
      for(j=i+1;j<N;j++)
      {
       t=a[i][j];
       a[i][j]=a[j][i];
       a[j][i]=t;
      }
    } 

     5. 下面函数都实现字符串的拷贝功能

    char *fun1(char *s1,char *s2)
    {
        int i;
        for(i=0;(++s1[i]=++s2[i])!='\n';i++);
     return s1;
    }
    char *fun2(char *s1,char *s2)
    {
        char *p;
        p=s2;
        for(p=0;(++*s1=++*s2)!='\n';p++);
        return s1;
    }
    6. 下面函数实现数组的排序(升序),请填写完整(选择排序法)
    void inv(int a[],int n)
    {
     int i,j,k;
     for(i=0;i<n-1;i++)
     {
      k=i;
      for(j=i+1;j<n ;j++)
       if(a[k]<a[j])  k=j;
      if(k!=i)
      {
       int temp=a[i];
       a[i]=a[k];
       a[k]=temp;
      }
     } 


    }7. 下面函数实现将一个表示浮点数的字符串转换为double类型的值
    double fun(char *s)
    {
     double x=0,y=0;t=10;
     int c,f=1;
    while(*s)
     {
     if(*s==‘.’) f=0;
    else
    {
    c=*s-’0’;
    if(_______) { x=x*10+c; }
    else {  y=y+c/1;______________; }
    }
     s++;
    }
    ____________________;
    }
    三.读程题
     1.从键盘输入4,程序运行结果是:_______//这题没有scanf,gets,getchar无法输入
      #include<stdio.h>
      #define N 20
      main()
     {
       int a[N],I,j;
       for(i=2;i<N;i++) a[i]=1;
       for(i=2;i<N;i++)
        if(a[i])  for(j=2*I;j<N;j+=i) a[j]=0;
        for(i=2;i<N;i++) if(a[i]) printf(“%4d”,i);
    }
    2.下面函数的功能是:将数组中的数据倒序输出
    void fun(int a[],int n)
    {
    if(n>1) fun(&a[1],n-1);
    printf(“%d”,a[0]);  
    }
     3.下面程序若输入12345,则输出是9303
    #include<stdio.h>  
    void main()
    {
     int n,x=0,t;
     scanf("%d",&n);
     do{
        t=n%16;
        x=x*10+t;
      }
     while(n/=16);
        printf("%d",x);    
    }   
    4.下面程序,若从键盘输入4,这输出_________________
    #include<stdio.h>
    #define N 10
    void main()
    {
     int a[N][N],k,i,j,n;
     scanf("%d",&n);
     for (k=1;k<=n;k++)  
     {
      for(i=0,j=k-1;j<n;i++,j++)
       a[i][j]=k;
      for(j=0,i=n+1-k;i<n;i++,j++ )  
       a[i][j]=k;
     }
     for(i=0;i<n;i++)
     {
      for(j=0;j<n;j++)  
       printf("%4d",a[i][j]);
      printf("%n");
     }
    }
    5.设整数在内存占用4个字节,则以下程序若从键盘输入-375,则输出是__________
    #include<stdio.h>
    void main()
    {
        int x,i;
     unsigned m=1<<31;
        scanf("%d",&x);
     for(i=1;i<=32;i++)
     {
        putchar(x&m ? '1' :'0');
        x<<=1;
        if(i%4==0)  
         putchar(' ');
      }
    }   
    6.下面函数的功能是:求数组中比第一个数小的数,
    int fun(int a[],int n)
    {
     int x;
     if(n==1) return a[0];
     else
      x=fun(&a[1],n-1);
        return x<a[0]?x:a[0];
    } 
    四.编程题
    1.利用一维整型数组可以实现超长整数的加法,编程实现;从键盘输入两个40位正整数,输出其和
    #include<stdio.h>
    #define N 2
    void main()
    {
    	int a[N],b[N],s[N+1],i,t=0;
    	for(i=N-1;i>=0;i--)       /*输入数组a*/
    		scanf("%d",&a[i]);
    
    	for(i=N-1;i>=0;i--)       /*输入数组b*/
    		scanf("%d",&b[i]);
    	for(i=0;i<N-1;i++)
    	{
    		s[i]=a[i]+b[i]+t;
    		if(s[i]>10)
    		{
    			t=s[i]/10;
    			s[i]=s[i]%10;
    		}
    		else  t=0;
    	}
    
    	if(t==0)
    		for(i=N-1;i>=0;i--)
    			printf("%d",s[i]);
    	else
    	{
    		s[i]=t;
    		for(i=N;i>=0;i--)
    			printf("%d",a[i]);
    	}
    }  
    
    2.编程找出一个M*N矩阵中的鞍点
    /*
    编程找出一个M*N矩阵中的鞍点
    由键盘输入一个3行4列的矩阵,输出矩阵中的鞍点
    (即在矩阵行中最大,列中最小的数)。若没有鞍点,输出“NO”字样。
    
    */
    #include<stdio.h>
    #include<stdlib.h>
    #define M 3
    #define N 4
    void main()
    {
    	int a[M][N],i,j,k;
    	int max,t;
    	for(i=0;i<M;i++)
    		for(j=0;j<N;j++)
    			scanf("%d",&a[i][j]);
    	for(i=0;i<M;i++)
    	{
    		max=0;                        //此时假设每一行的最大值是第一个数即a[i][0]
    		for(j=i+1;j<N;j++)            //找出列中的最大值
    		{
    			if(a[i][j]>a[i][max])
    				max=j;
    		}
    		for(t=1,k=0;k<M&&t;k++)      //判断是否在列中是不是最小值
    		{
    			if(a[k][max]<a[i][max])  //如果还存在数比a[k][max]的值还小,则置t=0,
    				t=0;                 //t是一个标识,t=0  表示不存在,
    		}
    	}
    	if(t) printf("yes,%d\n",a[i][max]);
    	else  printf("no");
    }


    3.编写函数实现计算任意n*4整型矩阵上的周边元素之和
    int fun( int a[][4],int n)
    {
       int s=0;
       int i;
       for(i=0;i<4;i++) s=s+a[0][i]+a[n-1][i];
          for(i=1;i<n-1;i++) s=s+a[i][0]+a[i][3];
          return s;

    }

    /*
    编程计算矩阵5*4整数矩阵周边各元素之和,矩阵的各元素从键盘输入
    */
    #include<stdio.h>
    void main()
    {
    	int a[5][4],i,j,sum=0;
    	for(i=0;i<5;i++)
    		for(j=0;j<4;j++)
    			scanf("%d",a[i][j]);
    	sum+=a[i][j];
    
    	for(i=0;i<4;i++)
    		for(j=0;j<3;j++)
    			sum-=a[i][j];
    
    	printf("sum=%d\n",sum);
    }

    /*
    编写函数实现计算任意N*4整型矩阵上的周边元素之和
    假设输入的数值
    1  2  3  4
    5  6  7  8
    9  10 11 12
    13 14 15 16
    */
    #include<stdio.h>
    #define N 3
    int fun(int a[][4],int n)
    {
    	int i,sum=0;
    	for(i=0;i<4;i++)
    		sum+=a[0][i]+a[n-1][i];   //第一行和最后一行的和,此时的i代表的是列数
    	for(i=1;i<n-1;i++)
    		sum+=a[i][0]+a[i][3];       //第一列的的第二行开始到 n-1行的     和最后一列的的第二行开始到 n-1行的,此时的i代表的是行数
    	return sum;
    }
    void main()
    {
    	int i,j;
    	int a[N][4];
    	for(i=0;i<N;i++)
    		for(j=0;j<4;j++)
    			scanf("%d",&a[i][j]);
    	int s=fun(a,N);
    	printf("矩阵N*4周边的元素之和为:%d",s);
    	printf("\n");
    }



    展开全文
  • LINGO软件学习

    2009-08-08 22:36:50
    集名字必须严格符合标准命名规则:以拉丁字母或下划线(_)为首字符,其后由拉丁字母(A—Z)、下划线、阿拉伯数字(0,1,…,9)组成总长度超过32个字符字符串,且区分大小写。 注意:该命名规则同样适用...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    因为Linux与Windows不同,其后台运行着许多进程,所以强制关机可能会导致进程数据丢失,使系统处于稳定状态,甚至在有系统中会损坏硬件设备(硬盘)。在系统关机前使用 shutdown命令,系统管理员会通知所有...
  • 读者可以学习到以下几个方面技巧:  掌握Oracle数据库中独有SQL强大特征;  读取并理解SQL执行计划;  快速分析并改进表现欠佳SQL;  通过提示及配置文件等来控制执行计划;  在程序中优化查询而无需改动...
  • 读者可以学习到以下几个方面技巧:  掌握Oracle数据库中独有SQL强大特征;  读取并理解SQL执行计划;  快速分析并改进表现欠佳SQL;  通过提示及配置文件等来控制执行计划;  在程序中优化查询而无需改动...
  • 6.8.3 计算表达式的值 268 6.8.4 获得项值 270 6.8.5 分析数 271 6.8.6 整合程序 274 6.8.7 扩展程序 275 6.8.8 提取子字符串 277 6.8.9 运行修改过程序 279 6.9 C++/CLI编程 279 6.9.1 理解泛型函数 280...
  • 6.8.3 计算表达式的值 268 6.8.4 获得项值 270 6.8.5 分析数 271 6.8.6 整合程序 274 6.8.7 扩展程序 275 6.8.8 提取子字符串 277 6.8.9 运行修改过程序 279 6.9 C++/CLI编程 279 6.9.1 理解泛型函数 280...
  • 说明:Oracle中需要创建用户一定是要具有dba(数据库管理员)权限用户才能创建,而且创建新用户具备任何权限,连登录都可以。 用法:create user 新用户名 identified by 密码 例子: 2. 修改密码 说明:...
  • 9.2.2 确定数据表里有多少条内容重复数据记录(DISTINCT) 172 9.2.3 限制查询结果中数据列个数 172 9.2.4 限制查询结果中数据记录个数(LIMIT) 173 9.2.5 在使用LIMIT关键字确定数据表里数据记录数...
  • 而软件开发过程是一种高密集度脑力劳动,软件开发模式及技术 能适应软件发展需要。致使大量质量低劣软件涌向市场,有花费大量人力、财力, 而在开发过程中就夭折。软件危机主要表现在两个方面: (1) ...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

以下不符合c语言语法的表达式

c语言 订阅