C 基础练习2

下面程序的输出结果是( )

int x = 3;
do
{
printf(“%d\n”,x -= 2);  //当x=3时x-=2后x的值为1
}while(!(-- x));//当x非0时!x结果为0,当x=0时!x值为非0

下面程序的输出结果是( )

void main(){
int a[]={1,7,12,15};
int *p1=a,*p2 = p1++; //自增运算,P1++表示先赋值后自增,即现将p1的值赋给p2,P1再自增,此时p1为a[1]
*p1 += *p2++;  //*的优先级与++一样,所以先运算*p1=*p1+*p2,此时p1=a[1]=8;再运算P2++,此时P2=a[1]
printf(“%d %d”,*p1,*p2);
}

下面程序的输出结果是( )

int func(int *p){

   return (*p--= 3) - 1;  //(*p--=3)表示将3赋值给*p之后p--此时p指向第一个元素,(*p--=3)-1表示(*p=3)-1与p--无关

}

void main(){
     int arr[]={10,7,5};
     int *p = arr + 1;
     printf("%d",func(p) + *p);//*p仍然指向第二个元素即3,因为func中仅仅是形参自减而实参未改变,改变的实参指针指向的地址的值
}

下面程序的输出结果是( )

void main(){
    int i = 1;
    switch(i){
        printf("hello ");  //不在case或者default语句中不会执行
        case 1:printf("Hi ");  //没有break语句会执行之后的所有语句顾输出 Hi Bye
        case 2:printf("Bye ");
    }
}

下面程序的输出结果是( 45 )


void main(){
    int a,b = 0;
    static int c[10]={9,2,3,4,5,6,7,8,0,1};
    for(a = 0;a < 10;a ++)
        b += c[a];
    printf("%d",b);
}

运行以下程序后文件的内容为( B )
几种文件读写的方式
 (1)用”r”方式打开的文件,不能向其输入数据,并且该文件已存在,否则出错;
  (2)用”w”方式打开的文件,只能向该文件输入数据,如果所打开的文件不存在,则在打开时新建一个以指定的名字命名的文件;如果指定文件存在,则在打开时将该文件删去,然后新建一个新的文件;
  (3)如果函数fopen打开文件出错,则fopen返回一个空指针值NULL;
  (4)在程序开始运行时,系统自动打开3个标准文件:标准输入(stdin),标准输出(stdout),标准出错输 出(stderr)。如果要使用输入输出终端,则不需要打开,可以直接使用,如fputc(stdout,’a’);向屏幕输出字符a。

void main()
{
    char str[100];  //文件名
    FILE *p1,*p2;
    gets(str);
    p1 = fopen(str,”w”);//"w"为覆盖写,即原文件有内容则删除后写
    p2 = fopen(str,”w”);  //fopen格式为(文件名,打开方式);
    fputc(‘A’,p1);
    fputc(‘B’,p2);  //"w"打开,故将P1写的A覆盖后只剩B
    fclose(p1);
    fclose(p2);
}

下面程序的输出结果是( 2 )

long fib(int n)
{ 
if(n > 2) return (fib(n - 1) + fib(n - 2));
    else return 1;
}
void main(){
printf(“%d\n”,fib(3));
}

下面程序的输出结果是(12480 )

void main()
{
    char c = 48;
    int i,mark = 01;
    for(i = 0;i < 5;i ++)
    {
        printf(“%c”,c|mark); //|为二进制或,规则为有一个为1则结果为1
        mark = mark << 1;  //左移操作
}
}

下面程序的功能是将字符串src逆序输出,请将下面程序的错误改正,缺少的代码补全。//为改错语句

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<time.h>

void main()
{
char *src = "hello,world";
char *dest,*d,*p;
int len,i;
len=strlen(src);  //strlren 计算字符串的长度不包含结束标志符
dest = (char *)malloc(len);
//dest=(char*)malloc((len+1)*sizeof(char));  //len不包括结束标识符所以dest的长度要在len之上加1
p=src[len];
//p = &src[len-1];  //len-1为字符串最后一位,且需要取地址符
d = dest;
while(len--!= 0)
    d ++ = p --;
//    *(d++)=*(p--);  //指针值得赋值需要添加“*”
//    *d = '\0';    //字符串最后一位需要添加结束标志符
printf("%s",dest);
}

输出结果为a=7,b=30

#define SQUARE(x)  ((x)*(x));  //宏语句的定义

void main()
{
    int a = 5,b;
    b = SQUARE(a++);  //等价语句与a*(a++);a++,则得a=7,b=30
    printf("%d,%d",a,b);

}

运行结果为 1,2,4,0

void main()
{
    void fun(int a[],int n);
    int a[] = {1,2,4,8};
    int i;
    fun(a,4);  //数组数据在函数调用过程中不能采用传值调用的参数传递方法,而是采用传址调用
    for(i = 0;i < 4;i ++)
      printf(“%d,”,a[i]);
}

void fun(int a[],int n)
{
    int i,*p;
    for(i = 0;i < n;i ++)
      p = &a[i];
    *p = 0;
}

下面这段程序的功能是什么?//截取字符串从m位开始之后的所有字符,当m大于字符串长度时返回空

char str[100];
char string[100];

void main()
{
    void fun(int m);
    int m;
    gets(str);
    scanf(“%d”,&m);
    fun(m);
    printf(“%s\n”,string);
}

void fun(int m)
{
    int len,i;
    len = strlen(str);
    if(m > len)
    {
        string[0] = ‘\0’;
        return ;
}
for(i = 0;str[m - 1] != ‘\0’;i ++,m ++)
    string[i] = str[m - 1];
string[i] = ‘\0’;
}

C语言的隐式类型转换发生的四种情况
1、算术运算式中,低类型能够转换为高类型。
2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给它。
3、函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。
4、函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋给调用函数。


逆序/头插法建立链表

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<time.h>

typedef struct Node{   //typedef 将node作为结构体别名,之后使用时只需要别名即可,否则需要用struct Node的形式使用
    int x;
    struct Node* next;
}node;    

void main()
{
   node *s,*head;
   head=(node*)malloc(sizeof(node)); //sizeof()内的参数为变量而非变量指针
   head->x=0;
   head->next=NULL;
   int num;
   node* temp=head;
   for(int i=0;i<20;i++)
   {
      s=(node*)malloc(sizeof(node));
      scanf("%d",&s->x);
      s->next=head->next;  //逆序即头插法
      head->next=s;
   }
   s=head->next;  //输出循环时使用
   while(s!=NULL)  //此处为s!=NULL而非S->next!=NULL
   {
       printf("%d",s->next);
       s=s->next;
   }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值