0


10.3复习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

通过做题对之前的知识进行复习


1.选择题

1.1执行下面程序,正确的输出是( )

int x=5,y=7;voidswap(){int z;
  z=x;
  x=y;
  y=z;}intmain(){int x=3,y=8;swap();printf("%d,%d\n",x, y);return0;}

答案解析:
swap函数调用时用的是全局变量,主函数中定义的变量只在主函数中有效,因为主函数也是一个函数,它与其他函数是平行关系;输出语句这里,考虑局部优先的原则,故输出3,8

这时候你可能会疑惑要是x,y的值传给swap函数的话会输出多少呢

int x =5, y =7;voidswap(int x,int y){int z;
    z = x;
    x = y;
    y = z;}intmain(){int x =3, y =8;swap(x,y);printf("%d,%d\n",x, y);return0;}

在这里插入图片描述
显然没有交换,那么怎么才能交换呢,这就要考察c语言中的传值调用和传址调用了

int x =5, y =7;voidswap(int* x,int* y){int z;
    z =*x;*x =*y;*y = z;}intmain(){int x =3, y =8;swap(&x,&y);printf("%d,%d\n",x, y);return0;}

在这里插入图片描述
这样就交换好了。

1.2以下不正确的定义语句是( )

A:double x[5]={2.0,4.0,6.0,8.0,10.0};
B:char c2[]={'\x10','\xa','\8'};
C:char c1[]={'1','2','3','4','5'};
D:int y[5+3]={0,1,3,5,7,9};

答案解析:
正确答案:B
本题B选项考查转义字符,有如下格式,但八进制数字是0-7,没有8,故B选项中’\8’是错误的
\ddd ddd表示1到3个八进制数 如:\130 转义为 字符X
\xhh hh表示1到2位十六进制数 如:\x30 转义为 字符0
130八进制对应88 30十六进制对应48
这里考察转义字符,我们需要用到
在这里插入图片描述

1.3 test.c 文件中包括如下语句,文件中定义的四个变量中,是指针类型的变量为【多选】( )

#defineINT_PTRint*typedefint* int_ptr;
INT_PTR a, b;
int_ptr c, d;

答案解析:
因为#define是宏定义,仅仅是直接替换,INT_PTR a, b; 进行宏替换后代码是这样的:int *a, b;这里的int *是a的类型,b的类型是int,故此次b只是int类型。而typedef是把该类型定义一个别名,别名是一个独立的类型了,使用这个类型创建的变量都是这个类型的。所以 a,c,d才是指针类型

1.4 若给定条件表达式 (M)?(a++):(a–) ,则其中表达式 M ( )

A: 和(M==0)等价 B: 和(M==1)等价 C: 和(M!=0)等价 D: 和(M!=1)等价

答案解析:
正确答案:C
给定条件表达式(M)?(a++):(a–)。 (表达式1)? (表达式2): (表达式3)为三目运算符。
计算规则为:先判断表达式1是否为真,若为真,则计算表达式2,并将表达式2的结果作为整个表达式最终的结果,表达式3不计算;否则,表达式3的结果为最终结果,表达式2不计算。 在此表达式中,若M=0,为假,计算a–; 若M≠0,为真,计算a++; 若要求与M等价,则要满足M取0时为假,取非0数值时为真。 c选项中:假定M取0,则M表示假,当M是0时,表达式M!=0不成立,为假,计算a–; 当M取非0数值时,M为真,表达式M!=0成立,为真,计算a++; 符合题意,选C

1.5有如下定义语句,则正确的输入语句是【多选】( )

int b;char c[10];
A:scanf("%d%s",&b,&c); B:scanf("%d%s",&b,c);
C:scanf("%d%s",b,c); D:scanf("%d%s",b,&c);

答案解析: 正确答案:AB &c和c两个地址值是一样的,程序的效果相同,也没错,但同时也必须把变量b的地址给scanf,故CD错误,AB正确

2.编程题

2.1题目一

在这里插入图片描述

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 最大位数
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */int*printNumbers(int n,int* returnSize ){// write code herescanf("%d",&n);int i=0;*returnSize=pow(10,n)-1;int*arr=(int*)malloc(sizeof(int)*(*returnSize));//动态申请空间for(i=0;i<=*returnSize;i++){
        arr[i]=i+1;}return arr;}

2.2题目二

在这里插入图片描述

#include<stdio.h>intmain(){int i, j, k;int n =0;int num =0;scanf("%d %d %d",&i,&j,&k);int arr1[12]={31,29,31,30,31,30,31,31,30,31,30,31};int arr2[12]={31,28,31,30,31,30,31,31,30,31,30,31};if(((i %4==0)&&(i %100!=0))|| i %400==0)//注意会判断闰年{for(n =0; n <j -1; n++){
            num += arr1[n];}int ret = num + k;printf("%d", ret);}else{for(n =0; n < j -1; n++){
            num += arr2[n];}int ret = num + k;printf("%d", ret);}return0;}
标签: c++ 算法 开发语言

本文转载自: https://blog.csdn.net/weixin_69939913/article/details/127153199
版权归原作者 咕噜缘 所有, 如有侵权,请联系我们删除。

“10.3复习”的评论:

还没有评论