一、选择题
1、以下程序段的输出结果是()
#include<stdio.h>
int main()
{
char s[] = "\\123456\123456\t";
printf("%d\n", strlen(s));
return 0;
}
A: 12
答案解析:
正确答案:A
这里考查转义字符,注意:\\ 表示字符'\',\123表示字符'{',\t表示制表符,这些都是一个字符知识点:
1、转义字符常考察两个:
①\ddd ddd表示1~3个八进制
②\xhh hh表示1~2个十六进制数
2、转义字符以反斜杠开头
2、若有以下程序,则运行后的输出结果是( )
#include <stdio.h>
#define N 2
#define M N + 1
#define NUM (M + 1) * M / 2
int main()
{
printf("%d\n", NUM);
return 0;
}
A: 4 B: 8
答案解析:
正确答案:B
宏只是替换,替换后NUM的样子是(2+1+1)*2+1/2,计算得8知识点:#define是宏定义,只进行替换
3、下面3段程序代码的效果一样吗( )
int b;
(1)const int *a = &b;
(2)int const *a = &b;
(3)int *const a = &b;
A: (2)=(3) B: (1)=(2)
答案解析:
正确答案:B
const在*的左边,则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变);在*的右边,则指针的指向不可变。简记为"左定值,右定向"。(1)和(2)const都在*的左边,(3)中const在*的右边,所以应该选择B
二、编程题
等差数列 2,5,8,11,14, ... 。(从 2 开始的 3 为公差的等差数列),求等差数列前 n 项和。
注意:本题有多组输入
输入描述:输入一个正整数 n 。
输出描述:输出一个相加后的整数。
等差数列_牛客题霸_牛客网
示例:
输入:2 输入:275
输出:7 输出:113575
说明:2+5=7 说明:2+5+...+821+824=113575
代码1:
分析:这就是一个等差求和问题,我们知道两个公式就可以简单的写出来了①求和公式:Sn=n(a1+an)/2;②通项公式:an=a1+(n-1)d
步骤:
1. 定义三个变量n an a1
2.多组输入:while(scanf("%d",&n)!=EOF)
3.循环体(输出):an=a1+(n-1)*3(公差d=3)
#include <stdio.h>
//代码1
int main()
{
unsigned int n=0;
int an=0;
int a1=2;
while(scanf("%d",&n)!=EOF)
{
an=a1+(n-1)*3;
printf("%d",n*(a1+an)/2);
}
return 0;
}
//代码2
int main()
{
unsigned int n=0;//无符号整数
while( scanf("%d",&n)!=EOF)//可以多组输入
{
printf("%d",2*n+(n-1)*n*3/2);
}
return 0;
}
代码2:
分析:不知道等差公式也没问题,可以用累加的方式求出最后的答案
步骤:
1.定义三个变量n i j sum
2.多组输入:while(scanf("%d",&n)!=EOF)
3.循环体(累加:for(嵌套循环)):
for(i=1;i<=n;i++)
{
sum+=j;
j+=3;
}
4.输出:printf("%d",sum);
#include<stdio.h>
int main()
{
int n=0;//输入的正整数
int i=1;//累加次数
int j=2;//下一项
int sum=0;//相加后的整数
while(scanf("%d",&n)!=EOF)//多组输入
{
//累加
for(i=1;i<=n;i++)
{
sum+=j;
j+=3;
}
printf("%d",sum);//输出
}
return 0;
}
以上代码仅供参考,还有很多写法,正确即可。
最后希望尽量大家在牛客网上答题,有些编程在自己的编译器可以实现但在牛客不能实现。