程序改错功能:把str1 数组中下标为偶数的元素中字符复制到str2 数组中。
时间: 2024-01-21 18:19:25 浏览: 177
以下是正确的程序:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "hello world";
char str2[100];
int len = strlen(str1);
for (int i = 0; i < len; i += 2) {
str2[i] = str1[i];
}
str2[len] = '\0';
printf("str1: %s\n", str1);
printf("str2: %s\n", str2);
return 0;
}
```
程序说明:
1. 定义 `str1` 和 `str2` 两个字符数组,并初始化 `str1`;
2. 使用 `strlen()` 函数获取 `str1` 的长度,存放在 `len` 变量中;
3. 使用 `for` 循环遍历 `str1` 数组,从下标为 0 开始,每次增加 2;
4. 在循环中,将 `str1` 中下标为偶数的元素中的字符复制到 `str2` 数组中;
5. 在循环结束后,需要在 `str2` 的最后一个位置添加上字符串结束符 `'\0'`,否则可能会输出乱码;
6. 最后,使用 `printf()` 函数分别输出 `str1` 和 `str2` 的值。
相关问题
C++1. 改错题 【题目】下面程序功能是: (1). 函数fun(…)是把数组a中各元素中的各位偶数拼接成一个反序的新数值存放到数组b中。假如某元素值为:654321,各位偶数拼接成一个反序的新数值246;元素值为:654300,各位偶数拼接成一个反序的新数值46。 (2). 主函数main()利用循环产生10个随机整数存入x数组并输出至屏幕,调用函数fun()产生数组y。最后输出数组y中的元素。 【要求】只允许在原语句上进行修改,不能增加或删除整条程序语句或修改算法。 #include<iostream> using namespace std; void fun(int a,int b) // { int i,n; for(i=0;i<10;i++) { int m; // n=a[i]; while(n=0) // { if(n%10/2==0) // m=m*10+n%10; n/=10; } a[i]=m; // } } void main() { int i,x[10],y[10]; cout<<"数组x中各元素数为:\n"; for(i=0;i<10;i++) { x[i]=rand(); cout<<x[i]<<'\t'; } fun(x[],y[]); // cout<<"\n数组y中各元素数为:\n"; for(i=0;i<10;i++) cout<<y[i]<<'\t'; cout<<"\n"; }
修改后的程序如下:
```c++
#include<iostream>
using namespace std;
void fun(int a[], int b[]) // 修改函数参数为数组类型,修改函数内部逻辑
{
for(int i=0; i<10; i++)
{
int n = a[i];
int m = 0; // 初始化 m,避免出现未定义的行为
while(n != 0) // 修改 while 循环条件
{
if(n % 10 % 2 == 0) // 修改判断条件
m = m * 10 + n % 10;
n /= 10;
}
b[i] = m; // 存储到 b 数组中
}
}
int main() // 修改主函数的返回值类型
{
int i, x[10], y[10];
cout << "数组x中各元素数为:\n";
for(i=0; i<10; i++)
{
x[i] = rand();
cout << x[i] << '\t';
}
fun(x, y); // 传入数组参数
cout << "\n数组y中各元素数为:\n";
for(i=0; i<10; i++)
cout << y[i] << '\t';
cout << "\n";
return 0; // 添加返回值
}
```
主要修改如下:
1. 修改函数参数为数组类型,同时修改函数内部逻辑。
2. 初始化变量 `m`,避免出现未定义的行为。
3. 修改 `while` 循环条件,应为 `n != 0`。
4. 修改判断条件为 `n % 10 % 2 == 0`。
5. 在主函数中传入数组参数。
6. 修改主函数的返回值类型为 `int`,并添加 `return 0`。
1.改错题 【题目】下面程序功能是: (1).函数fun(...)是把数组a中各元素的中各位偶数拼接成一个反序的新数值存放到数组b中。假如某元素值为:654321,各位偶数拼接成一个反序的新数值246;元素值为:654300,各位偶数拼接成一个反序的新数值46。 (2).主函数main()利用循环产生10个随机整数存入x数组并输出至屏幕,调用函数fun()产生数组y。最后输出数组y中的元素。 【参考结果】该程序运行后,最后的输出结果是(因随机数,该答案仅供参考): 数组y中各元素数为:4 648 46 62 6 42 84 82 2662 46442 【要求】只允许在原语句上进行修改,可以增加个别说明语句,但不能增加或删除整条程序语句或修改算法。 #include<iostream. h> #include<stdlib. h> void fun(int a, int b) { int i,n; for(i=0;i<10;i++) { int m; n=a[i]; while(n=0) { if(n%10/2==0) m=m∗10+n%10; n/=10; a[i]=m; } } void main() { int i,x[10],y[10]; for(i=0;i<10;i++) { x[i]=rand(); cout<<x[i]<<" "; } fun(x,y); Cout<<''|n Cout<<''|n 数组y中各元素数为:"; for(i=0;i<10;i++) cout<<y[i]<<' \backslash t'; <<' \backslash t'; cout<<"h"; cout<<"h"; }
【修改后的程序】
#include<iostream.h>
#include<stdlib.h>
void fun(int a[], int b[]) { //修改1:函数参数类型应为数组类型,而非int类型
int i,j;
for(i=0;i<10;i++) {
int m=0, n=a[i]; //修改2:变量m需要初始化为0
while(n!=0) { //修改3:while循环条件应为n!=0,而非n=0
if(n%10/2==0) m=m*10+n%10;
n/=10;
}
b[i]=m; //修改4:将结果存入数组b中
}
}
void main() {
int i,x[10],y[10];
for(i=0;i<10;i++) {
x[i]=rand();
cout<<x[i]<<" ";
}
fun(x,y);
cout<<"\n数组y中各元素数为:";
for(i=0;i<10;i++)
cout<<y[i]<<"\t";
cout<<"\n";
}
【修改说明】
1. 函数fun的参数类型应该是数组类型,而非int类型。因为要传递数组a和数组b,需要在函数定义中声明为数组类型。
2. 在函数fun中,变量m需要初始化为0。
3. 在函数fun中,while循环条件应该是n!=0,而非n=0。因为n=0是赋值操作,而非条件判断。
4. 在函数fun中,将结果存入数组b中,而非数组a中。因为要将处理后的结果存入新数组b中。
5. 修改了一些语法错误,如cout拼写错误、缺少分号等。
阅读全文