一、选择题
1、以下程序段的输出结果是()
#include<stdio.h> int main() { char s[] = "\\123456\123456\t"; printf("%d\n", strlen(s)); return 0; }
A: 12 B:13 C: 16 D: 以上都不对
答案解析:
正确答案: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 C: 9 D: 6
答案解析:
正确答案: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) C: 都不一样 D: 都一样
答案解析:
正确答案: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; }
以上代码仅供参考,还有很多写法,正确即可。
最后希望尽量大家在牛客网上答题,有些编程在自己的编译器可以实现但在牛客不能实现。