【C刷题】day4

02-29 阅读 0评论

一、选择题

1、设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是( )

 A: n=0;while(ch=getchar()!='\n')n++;                             B: n=0;while(getchar()!='\n')n++;

【C刷题】day4,【C刷题】day4,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,最后,创建,错误,第1张
(图片来源网络,侵删)

C: for(n=0;getchar()!='\n';n++);                                         D: n=0;for(ch=getchar();ch!='\n';n++);

【答案】:

D

【解析】:

考点:for循环的逻辑

对于for循环,第一项初始化表达式只执行一次,因此ch只从输入流中取一个字符,之后就再不会取字符,因此会死循环

【C刷题】day4,【C刷题】day4,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,最后,创建,错误,第2张
(图片来源网络,侵删)

2、运行以下程序后,如果从键盘上输入 65 14 ,则输出结果为( )
int main()
{
int m, n;
printf("Enter m,n;");
scanf("%d%d", &m,&n);
while (m!=n) //1
{
  while(m>n) m=m-n; //2
  while(n>m) n=n-m; //3
}
printf("m=%d\n",m);
return 0;
}

A: 3 B: 2 C: 1 D: 0 

【答案】:

C

【解析】:

考点:while循环和嵌套循环(怎么理清思路)

【C刷题】day4

【C刷题】day4,【C刷题】day4,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,最后,创建,错误,第4张
(图片来源网络,侵删)

初值m=65,n=14;循环1判断m!=n为真,来到循环2判断m>n为真,执行m=m-n;直到m=9,n=14;循环2结束来到循环3判断n>m为真,执行n=n-m;直到m=9,n=5;循环3结束回到循环1,如此往复直到m==n时,循环结束

上面的图表示m和n的变化,

蓝色部分表示while(m>n) m=m-n; //2

红色部分表示:while(n>m) n=n-m; //3

外部循环一直进行,直到m=n=1停止


3、若运行以下程序时,从键盘输入 ADescriptor ,则下面程序的运行结果是( )
#include 
int main()
{
char c;
int v0=0,v1=0,v2=0;
 do
 {
   switch(c=getchar())
   {
    case'a':case'A':
    case'e':case'E':
    case'i':case'I':
    case'o':case'O':
    case'u':case'U':v1 += 1;
    default:v0+= 1;v2+=1;
    }
 }while(c!='\n');
printf("v0=%d,v1=%d,v2=%d\n",v0,v1,v2);
return 0;
}

A: v0=7,v1=4,v2=7      B: v0=8,v1=4,V2=8          C: v0=11,v1=4,v2=11       D:v0=12,v1=4,v2=12 

【答案】:

D

【解析】:

考点:do while循环的逻辑+case语句中的break易错点

注意点1:case语句后面没有break,那么执行完v1 += 1,还是会继续进入default:v0+= 1;v2+=1;

注意点2:do while循环是先执行,再进行判断,所以当c=r(倒数第二个字符),进入while循环,c就等于'\0',但是还是会执行do语句,v0和v2还是会+1


4、如下函数是求两个int数字最大公约数的,指出其中存在的问题【多选】( )
int gcd(char x,char y)
{
  int min = x  0; min--)
  if (x % min = 0 && y % min = 0)
  return min;
}

A: 参数类型不对 B: 循环变量min初值不对 C: 判断等于的符号不对 D: 返回类型不对  

【答案】:

ABC

【解析】:

考点:==和=(==表示判断是否相等,=表示赋值运算符)

1.题目说是求两个int数字的最大公约数,所以实参是int,形参用char不对,会发生截断丢失数据;

2.min在for循环开始时更新为0,不再是两个形参中的较小值,不然上一条语句求min没作用;

3.判断是否整除的时候误将==写成=赋值运算符;

4.函数最终要返回一个int值,返回值类型没问题,

但是这里要强调一个选项中没写出的问题,如果是牛客网上的题,会报编译错误,说该函数不是在所有情况下都有返回值,只有在if条件成立的情况下有返回值,一般在vs上这种情况能通过,编译器会给一个默认的返回值。(即格式问题)


5、执行下面的程序段,语句3的执行次数为( )
for(i = 0; i  i; j--) // (2)
state; // (3)

A: n(n+2)/2 B: (n-1)(n+2)/2 C: n(n+1)/2 D: (n-1)(n+2) 

【答案】:

C

【解析】:

考点:嵌套循环的循环总次数

外循环有n次,当i=0,内循环为n次,当i=1,内循环为n-1次,当i=2时,内循环为n-2次,以此类推,总次数为n+(n-1)+(n-2)+......+2+1,就是个等差数列,等于n(n+1)/2

【C刷题】day4


二、编程题

1.错误的集合

【C刷题】day4

 【参考答案】: 

思路:

创建一个count数组统计出现2次和出现0次的数,再去遍历数组,如果出现两次就是arr【0】,没出现就是arr【1】

1.统计数字出现的次数:count[nums[i]]++

2.易错点:count数组的大小应该开辟numsSize+1个int类型大小(因为统计数字出现的次数时count【n】这个n是可以取到的,那么就需要开辟n+1个空间)

int* findErrorNums(int* nums, int numsSize, int* returnSize)
{
    *returnSize=2;
    //根据flag判断这两个数是否找到
    int flag1=0;
    int flag2=0;
    //为返回数组创建空间
    int *arr=(int *)malloc(sizeof(int)*2);
    //创建:统计每个数出现次数的数组count
    int *count=(int *)malloc(sizeof(int *)*(numsSize+1));
    //给count数组初始化为0
    memset(count,0,sizeof(int)*(numsSize+1));
    //统计nums数组每个数字出现的次数
    for(int i=0;i

免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,人围观)

还没有评论,来说两句吧...

目录[+]