出一套c语言的考试卷子(包括40道选择,改错,填空,大题)并写出答案
时间: 2023-10-01 19:06:37 浏览: 52
以下是一套C语言的考试卷子,包括40道选择、改错、填空和大题,以及答案。
选择题(每题2分,共20分)
1.以下哪个关键字用于定义常量?
A. const
B. static
C. volatile
D. extern
答案:A
2.以下哪种数据类型不能存储负数?
A. short
B. int
C. float
D. unsigned int
答案:D
3.以下哪种运算符具有最高优先级?
A. ++
B. =
C. ==
D. *
答案:A
4.下列哪个函数用于从标准输入读取一个字符?
A. scanf()
B. gets()
C. getchar()
D. puts()
答案:C
5.以下哪个语句可以在程序中引用头文件stdio.h?
A. #include <stdio.h>
B. #include "stdio.h"
C. #include <stdio>
D. #include "stdio"
答案:A
6.以下哪个关键字用于定义结构体类型?
A. struct
B. typedef
C. union
D. enum
答案:A
7.以下哪个运算符用于获取变量地址?
A. &
B. *
C. #
D. %
答案:A
8.以下哪个数据类型可以存储浮点数?
A. char
B. int
C. float
D. long
答案:C
9.以下哪个关键字用于定义函数?
A. function
B. define
C. typedef
D. void
答案:D
10.以下哪个关键字用于在程序中定义局部变量?
A. static
B. extern
C. local
D. auto
答案:D
改错题(每题2分,共10分)
11.以下程序的输出结果是8。
```
#include <stdio.h>
int main()
{
int a = 6;
int b = 2;
int c = a / b;
printf("%d", c);
return 0;
}
```
请改正程序中的错误。
答案:将int c = a / b;改为float c = (float)a / b;
12.以下程序的输出结果是2。
```
#include <stdio.h>
int main()
{
int i;
for (i = 0; i < 3; i++);
{
printf("%d", i);
}
return 0;
}
```
请改正程序中的错误。
答案:将for (i = 0; i < 3; i++);改为for (i = 0; i < 3; i++)
13.以下程序的输出结果是5。
```
#include <stdio.h>
int main()
{
int a = 5;
int *p = a;
printf("%d", *p);
return 0;
}
```
请改正程序中的错误。
答案:将int *p = a;改为int *p = &a;
14.以下程序的输出结果是10。
```
#include <stdio.h>
int main()
{
int i = 0;
while (i < 10)
{
i++;
}
printf("%d", i);
return 0;
}
```
请改正程序中的错误。
答案:程序没有错误。
15.以下程序的输出结果是3。
```
#include <stdio.h>
int main()
{
int a = 3;
if (a == 3)
{
int a = 5;
printf("%d", a);
}
return 0;
}
```
请改正程序中的错误。
答案:将int a = 5;改为a = 5;
填空题(每空2分,共5分)
16.以下程序输出结果为____________。
```
#include <stdio.h>
int main()
{
int a[5] = {1, 2, 3, 4, 5};
int i, sum = 0;
for (i = 0; i < 5; i++)
{
sum += a[i];
}
printf("%d", sum);
return 0;
}
```
答案:15
17.以下程序输出结果为____________。
```
#include <stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = a > b ? a : b;
printf("%d", c);
return 0;
}
```
答案:5
18.以下程序输出结果为____________。
```
#include <stdio.h>
int main()
{
int a = 10;
int *p = &a;
*p = 20;
printf("%d", a);
return 0;
}
```
答案:20
19.以下程序输出结果为____________。
```
#include <stdio.h>
int main()
{
int a = 3;
int b = 5;
printf("%d", a + b);
return 0;
}
```
答案:8
20.以下程序输出结果为____________。
```
#include <stdio.h>
int main()
{
int a = 3;
int *p = &a;
printf("%d", *p);
return 0;
}
```
答案:3
大题(每题10分,共5题)
21.请写出一个函数,实现对两个整数的加法运算,并返回结果。
答案:
```
int add(int a, int b)
{
return a + b;
}
```
22.请写出一个程序,实现在屏幕上输出九九乘法表。
答案:
```
#include <stdio.h>
int main()
{
int i, j;
for (i = 1; i <= 9; i++)
{
for (j = 1; j <= i; j++)
{
printf("%d*%d=%2d ", j, i, j * i);
}
printf("\n");
}
return 0;
}
```
23.请写出一个程序,实现对数组进行排序。
答案:
```
#include <stdio.h>
void sort(int a[], int n)
{
int i, j, temp;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
int main()
{
int i, a[5] = {4, 2, 1, 5, 3};
sort(a, 5);
for (i = 0; i < 5; i++)
{
printf("%d ", a[i]);
}
return 0;
}
```
24.请写出一个程序,实现对字符串进行逆序输出。
答案:
```
#include <stdio.h>
#include <string.h>
void reverse(char s[])
{
int i, j;
char temp;
for (i = 0, j = strlen(s) - 1; i < j; i++, j--)
{
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
int main()
{
char s[100];
gets(s);
reverse(s);
printf("%s", s);
return 0;
}
```
25.请写出一个程序,实现对链表进行反转。
答案:
```
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
};
struct node *reverse(struct node *head)
{
struct node *p, *q, *r;
p = head;
q = NULL;
while (p != NULL)
{
r = p->next;
p->next = q;
q = p;
p = r;
}
return q;
}
int main()
{
int i;
struct node *head, *p, *q;
head = NULL;
for (i = 0; i < 5; i++)
{
p = (struct node *)malloc(sizeof(struct node));
p->data = i + 1;
p->next = NULL;
if (head == NULL)
{
head = p;
}
else
{
q->next = p;
}
q = p;
}
head = reverse(head);
p = head;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
return 0;
}
```