pta题库c语言填空
时间: 2024-12-27 20:22:10 浏览: 4
### PTA 题库 C语言 填空题练习
#### 示例一:数组初始化与遍历
考虑如下代码片段:
```c
#include <stdio.h>
int main() {
int a[] = {1, 2, 3};
int n = sizeof(a)/sizeof(int);
for (int i = 0; i < n; ++i) {
printf("%d ", a[i]);
}
}
```
上述程序中,`n` 的计算方式是为了获取数组 `a` 中元素的数量。因此,在下面这段代码中空白处应该填写什么来实现相同的功能?
```c
#define SIZE 5
int b[SIZE];
...
for (int i = 0; i < ___ ; ++i) {
...
}
```
正确答案应该是 `SIZE` 或者 `sizeof(b)/sizeof(int)`[^1]。
#### 示例二:指针运算
对于以下代码段,
```c
char str[] = "hello";
char *p;
p = &str[0];
while (*p != '\0') {
putchar(*p++);
}
putchar('\n');
```
如果要修改此循环使得它能够打印字符串并逆序显示字符,则需要调整哪部分?具体来说,如何改变指针操作以及条件判断语句?
修正后的版本可以是这样的:
```c
char str[] = "hello";
char *start = str, *end;
// Move end to the last character of string.
for(end=start;*end!='\0';++end);
--end; // Point at the last non-null byte.
while(start<=end){
putchar(*end--); // Print from back and move forward.
}
if(start<end+1)
putchar(' ');
putchar('\n');
```
这里的关键在于理解指针移动的方向和终止条件的变化。
#### 示例三:函数调用约定
给定一段简单的交换两个整数值的代码:
```c
void swap(int x, int y) {
int t=x;x=y;y=t;
}
```
当尝试通过传递实际参数的方式使用该函数时发现并没有达到预期效果。这是因为传入的是副本而不是原始变量本身。那么应该如何定义这个函数才能真正意义上完成数据互换呢?
改进的方法之一就是采用指针作为形参:
```c
void swap(int *px, int *py) {
int tmp=*px;
*px=*py;
*py=tmp;
}
```
此时调用方也需要相应更改成提供地址的形式,比如 `swap(&var1,&var2)`。
阅读全文