C语言学习初级阶段课后习题及OJ代码

一、数据

1.1、数据课后习题

  • int占用4个字节空间, float占用4个字节空间, char占用1个字节空间 √
  • scanf读取标准输入,%d用来匹配int整型,%f 匹配float类型%c 匹配字符√
  • scanf““%d”,&i),当我们输人 10 回车后,i读取到了10,那么标准缓冲区中已经空了
    解释:这时标准缓冲区中并没有空,里边还有n字符
  • int i,char c;float f,scanf(“%d %c%f” ,&i,&c,&f);当混合读取时,因为%c不能忽略空格和n,所以需要在期前面加一个空格√
  • 十进制是0-9,八进制是0-8,十六进制是0-9,A-F,请问是否正确A正确B错误
    答案: B
    解释八进制是0-7,总计8种变化情况,并不是0-8
  • 整型数124对应的十六进制值是Ox7c
    解释:把一个10转为16进制,只要不断除16即可,124除16,商是7,余数是12,而12就是c,因此是Ox7c
  • int i=5;float f=i/2;那么f的值为2.5
    答案:B
    解释:因为i是整型,所以除2是整除,得到的值是2,如果要得到2.5
    是(float)i/2
  • printf的 format参数中含有%c代表要输出字符,%d代表整型,%f代表浮点, %s代表字符串 √
  • printf的输出默认是右对齐,不是左对齐。如果需要左对齐,那么加入负号。

1.2、数据OJ代码

1.2.1、题目1

在这里插入图片描述

正确代码:

#include <stdio.h>
int main()
{
  int a;
  int b;
  scanf("%d%d",&a,&b);
  int c=a+b;
  printf("%d\n",c);
  return 0;
}

错误代码:

#include <stdio.h>
int main()
{
  int a;
  int b;
  int c=a+b;
  scanf("%d%d",&a,&b);
  printf("%d\n",c);
  return 0;
  //输出结果为任意数
}

解释:因为scanf先输入a和b,此时就不再执行int c=a+b的语句,此时会赋值任意数。

1.2.2、题目2

在这里插入图片描述

#include <stdio.h>
int main()
{
  int a;
  scanf("%d",&a);
  printf("%c\n",a);
  return 0;
}

在ASCLL码表中,97对应的就是a,所以直接用%c读取就行。

二、运算符与表达式

2.1、课后习题

在这里插入图片描述

2.2、OJ代码

2.2.1、题目1

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
scanf("%d",&a);
    if(a%4==0 && a%100!=0 || a%400==0)
    {
        printf("yes");
    }
    else{
        printf("no");
    }
  return 0;
}
2.2.2、题目2

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,m;
char j;
float k;
scanf("%d %c%f",&i,&j,&k); 
printf("%5.2f",i+j+k);
}

三、选择、循环

3.1、课后习题

在这里插入图片描述
在这里插入图片描述

3.2、OJ代码

3.2.1、题目1

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
//对称数
int main()
{
    int a;//定义一个整型变量a
    int b=0,backup_a; //定义一个整型变量b和临时存放backup_a
    scanf("%d",&a);//从键盘读取a,一1定要记得加&
    backup_a=a;//把a的值备份一下
    while(a)  //12321  当取到最左边的1的时候,取余是为0
    {
        b=b*10+a%10;//b把原有的值乘以10,然后再加余数
        //此时a%10就为1
        a=a/10; //下一次循环不需要个位了,则除以10 剩下的就是1232  12321除以10=1232,这样就去掉了最后面的值
    }
    if(b==backup_a){
        printf("yes\n");
    }
    else{
        printf("no\n");
    }
return 0;
}


3.2.2、题目2

在这里插入图片描述

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

int main()
{
    int i,n,result=1;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        result=result*i;//i用来遍历 n用来控制边界  
        //result用来保存结果
    }
    printf("%d\n",result);
   
}


3.2.3、题目3

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
//换钞票
int main()
{
    int a,b,c,d,count=0;//分别代码10 5 2 1元
    for(a=1;a<=10;a++)//a为10块,换成100最多只能换10张
    {
        for(b=1;b<=20;b++){
            for(c=1;c<=40;c++)//本来2块可以有50张,但是题目要求,总和不能超过40张,所以写成c<=40
            {
                for(d=1;d<=40;d++)//本来1块可以有100张,但是题目要求,总和不能超过40张,所以写成c<=40
                {
                    if(a+b+c+d==40 && a*10+b*5+c*2+d*1==100)
                    {
                        count+=1;//count++
                    }
                }
            }
        }
    }
   printf("%d",count);
   return 0;
}


四、一维数组与字符数组

4.1、课后习题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2、OJ代码

4.2.1、题目1

在这里插入图片描述

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

int main(){
    int a[100];//整型数组
    int count;//元素个数
    scanf("%d\n",&count);//读取元素个数
    int i;
    for(int i=0;i<count;i++){
        scanf("%d",&a[i]);//循环读取多个整型元素
    }
    //判断整型数组中2出现的次数
    int acount=0;//记录2出现的次数

    for(int i=0;i<count;i++)
        {   
            if(a[i]==2)
            {acount++;}
        }
    printf("%d\n",acount);
    return 0;
}

4.2.2、题目2

在这里插入图片描述

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

int main(){
    char c[100];//定义字符串数组
    char ct[100]={0};//逆转后的字符串数组,初始化的目的是为了让ct有结束符
    gets(c);//输入字符串
    int i,g;//i是原字符串的游标  g是反转后的字符串的游标
    int count;//计算输入字符串的长度大小
    count=strlen(c);
    for(int i=0,g=count-1;i<count;i++,g--)
    {
        
        ct[g]=c[i];
    }
    
    int result = strcmp(c, ct);

    if (result < 0)

    {

    printf("%d\n",-1);

    }

    else if (result > 0)

    {

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

    }

    else {

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

    }
    return 0;
}

五、指针

5.1、指针课后习题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2、OJ课后习题

5.2.1、题目1

在这里插入图片描述

#include <stdio.h>

void change(int *j)//j=&i;
{
    *j=*j/2;
}
int main()
{
    int i;
    scanf("%d",&i);
    //printf("%d\n",i);//查看i是否读取正确 
    change(&i);
    printf("%d\n",i);
    return 0;
}

5.2.2、题目2

在这里插入图片描述

#include <stdio.h>


int main()
{
    int n;//代表申请的空间的大小
    scanf("%d",&n);//读取
    char c;
    scanf("%c",&c);//清除标准缓冲区的\n
    char *p;
    p=(char *)malloc(n);//申请n个字节大小的空间,强制转换为cahr*
    gets(p);//可以使用fgets(p,stdin)
    puts(p);
    return 0;
}

六、函数

6.1、函数题目

函数递归的核心:1.找公式 2.找结束条件
在这里插入图片描述

6.2、OJ题目

在这里插入图片描述

#include <stdio.h>
//上台阶问题
int step(int n)
{   
    if(1==n||2==n)
    {
        return n;
    }
    return step(n-1)+step(n-2);//递归的公式放在这里
}
int main()
{
    int n,result;
    scanf("%d",&n);//n不可以太大
    result=step(n);
    printf("%d\n",result);
    return 0;
    
}

七、结构体指针

7.1、相关知识点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ASCLL码表

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值