本文目录一览:
求29.30.31答案和解释 c语言程序设计
29、数组的下标值必须是整数,且不能越界,数组a的下标值范围是0--9
A
*(a+i)
等价于a[i]
B
a[p-a+i]
等价于a[i]
,因为p=a
,所以p-a+i=i
C
p+i
是数组中下标值为i的元素的地址
D
*(a[i])
等价于a[i]
所以本题答案是:C
30、strcpy(s1,s2)
字符串赋值函数,把串s2放在s1的位置上,所以s1必须有足够的存储空间来存放串s2
A
st1
是一维数组可以存放字符串teacher1
B
st4
是一个指针变量,但是该指针指向一个连续的存储空间teacher1
C
st3
是指针变量,但是该指针没有指向任何存储空间,所以不能把串teacher1放在st3
D
st1
是一维数组可以存放字符串teacher1
所以本题答案是:C
31、p
、q
是指针变量,存放的是n的地址
A
p=q
,p、q指针类型相同,可以直接赋值
B
*p=*q
也可以
C
n=*p
原理同B项
D
p
是指针,应该存放n的地址,即p=n
所以本题答案是:D
c语言答案
C语言程序设计复习:
- 理解以下术语的含义:数组、函数、地址 指针 指针变量 直接访问 间接访问、结构体
- 用起泡法对10个数由小到大排序(P134例题)
- 输入10个学生的成绩,分别用函数实现下列功能:
1)计算所有学生的平均分;
2)计算学生成绩中最高分;
3)计算学生成绩中最低分;
4)统计及格学生人数;
5)查找成绩为指定成绩(如90)记录,如果没有,请给出提示,如果有,请统计满足条件的记录数。 - 有一个已经排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。(P153习题7.4)
- 编写一个函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字字符间空一个空格。如输入1990,应输出“1 9 9 0”。(要求用函数)(P202习题8.8)
- 编写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。(要求用指针,不能使用strlen()函数) (P279习题10.6)
- 编写一个程序,打入月份号,输出该月的英文月名。例如,输入“3”则输出“March”(要求用指针数组)。(P279习题10.18)
- 将一个数组中的值按逆序重新存放。例如,输入的数组顺序为8,6,5,4,1,要求改为1,4,5,6,8。(P153习题7.5)
- 编写一个函数用“起泡法”对输入的10个字符按由小到大顺序排序(要用函数)。(P202习题8.11)
- 将数组a中n个整数按相反顺序存放(要用函数)。(P237例题10.7)
- 输入一行文字,找出其中大写字母、小写字母、空格、数字及其他字符各有多少。(要求用指针实现)(P279习题10.8)
- 编写一个函数,将两个字符串连接(要用自定义函数,不能用strcat函数)。(P202习题8.6)
- 输入3个字符串,按照由小到大的顺序输出。(要求用指针) (P278习题10.2)
- 输入10整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:1、输入10个数; 2、进行处理; 3、输出10个数(数据对换要求用指针实现)(P278习题10.3)
参考答案:
2、用起泡法对10个数由小到大排序
#include <stdio.h>
void main()
{
int a[10];
int i, j, t;
printf("input 10 numbers :\n");
for (i = 0; i < 10; i++)
scanf("%d", &a[i]);
printf("\n");
for (j = 0; j < 9; j++)
for (i = 0; i < 10 - j; i++)
if (a[i] > a[i + 1])
{
t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
printf("the sorted numbers :\n");
for (i = 0; i < 10; i++)
printf("%d ", a[i]);
}
3、用递归方法求n阶勒让德多项式的值
#include <stdio.h>
float p(int n, int x);
void main()
{
int x, n;
printf("input n x:");
scanf("%d,%d", &n, &x);
printf("n=%d,x=%d\n", n, x);
printf("P%d(%d)=%6.2f\n", n, x, p(n, x));
}
float p(int n, int x)
{
if (n == 0)
return 1;
else if (n == 1)
return x;
else
return ((2 * n - 1) * x * p((n - 1), x) - (n - 1) * p((n - 2), x)) / n;
}
4、输入3个整数,按由小到大的顺序输出(要求用指针类型)
#include <stdio.h>
void sort(int *a, int *b, int *c);
void main()
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
sort(&a, &b, &c);
printf("a=%d,b=%d,c=%d\n", a, b, c);
}
void sort(int *a, int *b, int *c)
{
int tmp;
if (*a > *b)
{
tmp = *a;
*a = *b;
*b = tmp;
}
if (*a > *c)
{
tmp = *a;
*a = *c;
*c = tmp;
}
if (*b > *c)
{
tmp = *b;
*b = *c;
*c = tmp;
}
}
5、输入10个学生的成绩,分别用函数实现下列功能:
#include <stdio.h>
int average(int a[]);
int max(int a[]);
int min(int a[]);
int pass(int a[]);
int search(int a[], int g);
void main()
{
int i, j, g;
int score[10], aver, m1, m2, p, s;
printf("Please input 10 scores:\n");
for (i = 0; i < 10; i++)
scanf("%d", &score[i]);
printf("\n");
aver = average(score);
m1 = max(score);
m2 = min(score);
p = pass(score);
printf("平均分为:%d\n", aver);
printf("最高分为:%d\n", m1);
printf("最低分为:%d\n", m2);
printf("及格人数为:%d\n", p);
printf("需要查找吗?\n");
printf("输入1继续查找,输入0退出(1/0):");
scanf("%d", &j);
if (j == 1)
{
printf("请输入要查找的分数:\n");
scanf("%d", &g);
s = search(score, g);
if (s == 0)
printf("没有满足条件的记录");
else
printf("成绩为%d的学生共有%d名\n", g, s);
}
}
int average(int a[])
{
int i;
int aver, sum = a[0];
for (i = 1; i < 10; i++)
sum = sum + a[i];
aver = sum / 10;
return aver;
}
int max(int a[])
{
int i;
int m = a[0];
for (i = 1; i < 10; i++)
if (m < a[i])
m = a[i];
return m;
}
int min(int a[])
{
int i;
int m = a[0];
for (i = 1; i < 10; i++)
if (m > a[i])
m = a[i];
return m;
}
int pass(int a[])
{
int i;
int s = 0;
for (i = 0; i < 10; i++)
if (a[i] >= 60)
s++;
return s;
}
int search(int a[], int g)
{
int i;
int s = 0;
for (i = 0; i < 10; i++)
if (a[i] == g)
s++;
return s;
}
6、已有一个已排好次序的数组,要求输入一个数后,按原先排序的规律将它插入数组中。
#include <stdio.h>
void main()
{
int a[11] = {1, 4, 6, 9, 13, 16, 19, 28, 40, 100};
int temp1, temp2, number, end, i, j;
printf("初始数组如下:");
for (i = 0; i < 10; i++)
printf("%5d", a[i]);
printf("\n");
printf("输入插入数据:");
scanf("%d", &number);
end = a[9];
if (number > end)
a[10] = number;
else
{
for (i = 0; i < 10; i++)
{
if (a[i] > number)
{
temp1 = a[i];
a[i] = number;
for (j = i + 1; j < 1; j++)
{
temp2 = a[j];
a[j] = temp1;
temp1 = temp2;
}
break;
}
}
}
for (i = 0; i < 11; i++)
printf("a%6d", a[i]);
}
7、编写一个函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字字符间空一个空格。如输入1990,应输出“1 9 9 0”。
#include <stdio.h>
#include <string.h>
void stradd(char str[]);
void main()
{
char str[80];
printf("输入一串数字\n\n");
gets(str);
stradd(str);
printf("\n\n加空格后的字符串\n\n");
puts(str);
}
void stradd(char str[])
{
char a[80];
int i = 0, j;
for (j = 0; str[j] != '\0'; j++)
{
a[i] = str[j];
a[i + 1] = ' ';
i += 2;
}
a[i] = '\0';
for (i = 0; a[i] != '\0'; i++)
{
str[i] = a[i];
}
str[i] = '\0';
}
8、编写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。(要求用指针实现)
#include <stdio.h>
int stringlength(char *str)
{
int n;
n = 0;
while (*str != 0)
{
n++;
str++;
}
return n;
}
int main()
{
char str[100];
int len;
printf("Please input a string: ");
scanf("%s", str);
len = stringlength(str);
printf("The string’s length is %d.", len);
return 0;
}
9、编写一个程序,打入月份号,输出该月的英文月名。例如,输入“3”则输出“March”,要求用指针数组处理。
#include <stdio.h>
main()
{
char *month_name[13] = {"illegal month", "January", "February", "March", "April",
"May", "June", "July", "August", "September", "October", "November", "December"};
int n;
printf("Input month: ");
scanf("%d", &n);
if ((n <= 12) && (n >= 1))
printf("It is %s.\n", *(month_name + n));
else
printf("It is wrong.\n");
}
10、将一个数组中的值按逆序重新存放。例如,输入的数组顺序为8,6,5,4,1,要求改为1,4,5,6,8。
#include <stdio.h>
#define N 5
void main()
{
int a[N], i, temp;
printf("enter array a:\n");
for (i = 0; i < N; i++)
scanf("%d", &a[i]);
printf("array a:\n");
for (i = 0; i < N; i++)
{
temp = a[i];
a[i] = a[N - i - 1];
a[N - i - 1] = temp;
}
printf("\nNow, array a:\n");
for (i = 0; i < N; i++)
printf("%4d", a[i]);
printf("\n");
}
11、编写一个函数用“起泡法”对输入的10个字符按由小到大顺序排序(要用函数)。
#include <stdio.h>
#include <string.h>
void sort(char str[]);
void main()
{
char str[80];
printf("输入一个字符串\n\n");
gets(str);
sort(str);
printf("\n\n字符由小到大排序为:\n\n");
puts(str);
}
void sort(char str[])
{
int i, j;
char temp;
for (i = 0; i < strlen(str); i++)
{
for (j = 0; j < strlen(str) - i - 1; j++)
{
if (str[j] > str[j + 1])
{
temp = str[j];
str[j] = str[j + 1];
str[j + 1] = temp;
}
}
}
}
12、将数组a中n个整数按相反顺序存放(要用函数)。
#include <stdio.h>
void inv(int x[], int n)
{
int temp, i, j, m = (n - 1) / 2;
for (i = 0; i <= m; i++)
{
j = n - 1 - i;
temp = x[i];
x[i] = x[j];
x[j] = temp;
}
return;
}
void main()
{
int i, a[10] = {3, 7, 9, 11, 0, 6, 7, 5, 4, 2};
printf("转换前的数组为:\n");
for (i = 0; i < 10; i++)
printf("%d,", a[i]);
printf("\n");
inv(a, 10);
printf("转换后的数组为:\n");
for (i = 0; i < 10; i++)
printf("%d,", a[i]);
printf("\n");
}
13、输入一行文字,找出其中大写字母、小写字母、空格、数字及其他字符各有多少?(要求用指针实现)
#include <stdio.h>
#include <string.h>
int main()
{
char str[40];
int count[5] = {0, 0, 0, 0};
printf("Please input a string .\n");
scanf("%s", str);
char *p = str;
int n = strlen(str);
for (int i = 0; i < n; i++)
{
if (*(p + i) >= 'A' && *(p + i) <= 'Z')
{
count[0]++;
}
else if (*(p + i) >= 'a' && *(p + i) <= 'z')
{
count[1]++;
}
else if (*(p + i) >= '0' && *(p + i) <= '9')
{
count[2]++;
}
else if (*(p + i) == ' ')
{
count[3]++;
}
else
{
count[4]++;
}
}
printf("大写字母 小写字母 数字 空格 其他字符:\n");
for (int i = 0; i < 5; i++)
{
printf("%d\t ", count[i]);
}
printf("\n\n");
return 0;
}
14、编写一个函数,将两个字符串连接。
#include <stdio.h>
#include <string.h>
void concatenate(char string1[], char string2[], char string[])
{
int i, j;
for (i = 0; string1[i] != '\0'; i++)
string[i] = string1[i];
for (j = 0; string2[j] != '\0'; j++)
string[i + j] = string2[j];
string[i + j] = '\0';
}
void main()
{
char s1[100], s2[100], s[100];
printf("input string1:");
scanf("%s", s1);
printf("input string2:");
scanf("%s", s2);
concatenate(s1, s2, s);
printf("the new string is %s", s);
}
15、输入3个字符串,按照由小到大的顺序输出。 (要求用指针实现)
#include <stdio.h>
void main()
{
void sort(int *a, int *b, int *c);
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
sort(&a, &b, &c);
printf("a=%d,b=%d,c=%d\n", a, b, c);
}
void sort(int *a, int *b, int *c)
{
int tmp;
if (*a > *b)
{
tmp = *a;
*a = *b;
*b = tmp;
}
if (*a > *c)
{
tmp = *a;
*a = *c;
*c = tmp;
}
if (*b > *c)
{
tmp = *b;
*b = *c;
*c = tmp;
}
}
16、输入10整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:1、输入10个数; 2、进行处理; 3、输出10个数(数据对换要求用指针实现)
#include <stdio.h>
void input(int number[])
{
int i;
printf("input 10 numbers:");
for (i = 0; i < 10; i++)
scanf("%d", &number[i]);
}
void max_min_value(int number[])
{
int *max, *min, *p, temp;
max = min = number;
for (p = number + 1; p < number + 10; p++)
if (*p > *max)
max = p;
else if (*p < *min)
min = p;
temp = number[0];
number[0] = *min;
*min = temp;
if (max == number)
max = min;
temp = number[9];
number[9] = *max;
*max = temp;
}
void output(int number[])
{
int *p;
printf("Now, they are: ");
for (p = number; p < number + 10; p++)
printf("%d", *p);
printf("\n");
}
void main()
{
int number[10];
input(number);
max_min_value(number);
output(number);
}
C语言程序设计试题
- 一条简单语句是以
;
字符作为结束符的,一条复合语句是分别以{
字符和}
字符作为开始符和结束符的。 - 任何一个C++程序至少且只能包含一个
主
函数,且程序总是从这个函数开始执行,不论这个函数的位置如何。一个函数定义由函数头
和函数体
两部分组成。 - C++头文件和源程序文件的扩展名分别为
.h
和.cpp
。 cout
与操作符<<
配合使用才能显示输出,cin
与操作符>>
配合使用才能实现输入。- 数据类型
int
、char
、bool
、float
、double
、int *
等的类型长度分别为4
、1
、1
、4
、8
和4
。 - 数值常量46、0173和0x62对应的十进制值分别为
46
、123
和98
。 - 字符串
"It\’s\40a\40C++programe!"
中包含有19
个字符。 - 若
x=5
,y=10
,则计算y*=++x
表达式后,x
和y
的值分别为6
和60
。 - 若
x=25
,则计算y=x--
表达式后,x
和y
的值分别为24
和25
。 - 假定
x
和ch
分别为int
型和char
型,则sizeof(x)
和sizeof(ch)
的值分别为4
和1
。 - 假定
x=64
,y=88
,则x<<2
和y>>2
的值分别为128
和44
。 - 假定
x
是一个逻辑量,则x&&true
的值与x
的值相同,x||false
的值也与x
的值相同。 - 假定
x
是一个逻辑量,则x&&!x
和x||!x
的值分别为0
和1
。 - 假定
x=10
,则表达式x=10?20:30
的值为20
。 - 表达式
sqrt(81)
和pow(6,3)
的值分别为9
和216
。 - 数学算式
(1+x)sin48°
和axbex+1
对应的算术表达式分别为(1+x)*sin(48*3.14159/180)
和a*pow(x,b)*exp(x+1)
。 - 逻辑表达式:
a=x||b>2*y+10
的相反式为:~(a=x&&b<=2*y+10)
。 - 在嵌套的
if
语句中,每个else
关键字与它前面最接近的if
关键字相配套。 - 在
for
语句中,假定循环体被执行次数为n
,则表达式1共被计算n
次,表达式2共被计算n
次,表达式3共被计算n
次。 - 执行
for
和while
循环时,每次是先进行条件
的判断,然后再执行循环
,执行do
循环时则相反。
c语言二级考试题及答案
2011年3月全国计算机等级考试二级笔试试卷
C语言程序设计
(考试时间90分钟,满分100分)
选择题
- A
- B
- D
- D
- B
- A
- C
- D
- A
- B
- A
- D
- A
- A
- A
- A
- D
- C
- A
- D
- B
- D
- B
- C
- D
- C
- D
- C
- C
- C
- A
- B
- C
- D
- B
- C
- D
- D
- B
- B
填空题
- 顺序
- DEBFCA
- 单元测试
- 主键
- D
- 3
- 1217
- 09
- 4
- 20 0
- i-1
- double avg(double a, double b)
- 13715
- e(E)moclew
- 123456
2010年9月全国计算机等级考试二级C笔试试卷答案
选择题
15:BCDAA10:DDCCA
6
1115:CBBAD20:DAACB
16
2125:BCBDC30:CBDDA
26
3135:ACBCD40:BACBD
36
填空
- 1DCBA2345
- n-1
- 25
- 结构化
- 物理设计
- 2008
- 15
- 非0
- 1 4 13 40
- i
- 2
- a[row][col]
- 3
- *s
- FILE
C语言程序设计2015A卷-
判断题(每小题1分,共15分)
- 标准C中,只有数值型数据才能进行4则混合运算。
- 标准C中,_a是合法的自定义标识符。
- 有定义:float f;表达式f+=(int)3.6%2”不符合C语言语法。
- 标准C中,逻辑运算的结果只有是1表示满足条件,而结果是0表示不满足条件。
- 以下运算符排列顺序满足按照优先级从高到低的排列:‘’、‘!’、‘==’、‘-’。
- 语句for(;;);是非法的。
- 在C语言程序中可以由多个源文件构成,每个源文件都可以有自己的main()函数。
- while和do-while的主要区别是后者至少无条件执行一次。
- 数组名代表数组的首地址是常量,所以将实参数组名表示地址传给形参数组名是错误的。
- 当函数没有返回值类型时,表示函数类型为void。
- C语言中,指针变量作函数参数时,它们不是采取单向值传递的方式。
- 一个函数中只允许有一条return语句。
- 在C语言中,如果没有说明变量的存储类型是auto类型的。
- 由于指针中所存放的地址都是整数,所以整型指针和浮点型指针可以相互赋值。
填空题(每空1分,共15分)
- 若a=4;b=5,c=6;则表达式c==(b=-a); 中c的值是(1)。
- 计算表达式的值:
4&&-4的值:(2);
设int a=3,b=4,c=5,则表达式a||b+cb==c的值:(3);
设x=2.5, a=7, y=4.7,则表达式x+a%3*(int)(x+y)%2/4的值:(4);
设a=12,则表达式a*=a/5的值:(5); - 若int x = 4,y = 6,z = 0;有循环while(x = y) {z ++;y--;}
则循环语句执行完后,z值为(6)。 - 变量的指针就是指该变量的(7)。
- 若有定义int (*p)[4],则标识符p是(8);若有定义int *p[4],则标识符p是(9);
- 已有定义:char p[ ]={"France","Chinese","Russia","America"};则语句printf("%s",p[2]);printf("%c",(p[1]+2));printf("%c",((p+1)+1));
的输出结果分别为:(10)、(11)、(12)。 - 已有定义: int x=65; 若格式化输出结果为"A, 65",则对应的格式化输出语句为printf("(13) ,(14) ", x, x)。
- 已定义:int a[][2]={1, 2, 3, 4, 2, 6, 7, 2};则a[3][0]=(15)。
简答题(每题4分,共12分)
- 简述选择语句if和else语句对与switch语句的区别。
- 简述在循环语句中,break和continue的区别。
- 若int a[5],p=a;简述p++和(*p)++的区别。
下列各程序中每个程序各有2个错误,指出错误语句,写出对应正确语句(每小题4分,共16分)
- (1)缺
#include
;(2)scanf("%f",a);
改为scanf("%f",&a);
- (1)缺
sum=0;
(2)for(i=1; i=3; i++)
改为for(i=0;i<3;i++)
- (1)
p1=p2
改为*p1=*p2
(2)swap(a, *p)
改为swap(a, p)
- (1)在
if(m<0)
语句后添加else if(m==0) a=1;
(2)添加return(a);
程序填空题:下列程序中缺少若干条语句,在对应的下划线上填上合适的语句,每一个下划线只填一条语句(每小题6分,共24分)
- (1)
x=0;
(2)if(n==x)
(3)s++;
或s=s+1;
- (4)
num[i]
(5)max num[i]?
(6)num[i]!=0
- (7)
n-i-1
(8)a[j]>a[j+1]
(9)a[j+1]=temp
- (10)
count=0;
(11)n%10
(12)n>0
或n!=0
或n
阅读下列程序,写出运行结果(第一小题4分,第二小题6分,共10分)
#*#*#*
main i=1 j=2 k=2
sub i=1 j=2 k=1 x=2
sub i=1 j=2 k=1 x=3
编程题(8分)
#include <stdio.h>
int strcompare(char c1, char c2);
void main()
{
int i, j, flag = 0;
char str1[90], str2[90];
gets(str1);
gets(str2);
i = 0;
do
{
flag = strcompare(str1[i], str2[i]);
i++;
} while (str1[i] != '\0' || str2[i] != '\0' && flag == 0);
if (flag < 0)
printf("%s小于%s ", str1, str2);
else if (flag == 0)
printf("%s 等于%s ", str1, str2);
else
printf("%s大于%s ", str1, str2);
printf("两个字符串中相同的字串为:");
j = 0;
i--;
while (j < i)
{
printf("%c", str1[j]);
j++;
}
}
int strcompare(char c1, char c2)
{
int v;
v = c1 - c2;
return v;
}
《C语言程序设计》试题1 求解 请勿乱填 非常感谢
CCCBA,DBD9D
CDBBB,BCBAC不敢保证全对。。。
第九题我觉得答案是2。。。