优化#include <stdio.h> void fun (int *a, int n){ int i,t; for(i=0;i<n/2;i++){ t=a[i]; a[i]=a[n-n/2+i]; a[n-n/2+i]=t; } } int main(){ int num,i,j; printf("请输入数组元素个数:"); scanf("%d", &num); int a[num]; printf("请输入数组元素:") ; for(i=0;i<num;i++){ scanf("%d", &a[i]); } fun(a, num); for(j=0;j<num;j++){ printf("%d ", a[j]); } }
时间: 2024-01-27 15:05:01 浏览: 77
这段代码可以再进行一些优化,主要是在函数fun中,可以将n/2提取出来作为循环上限,避免重复计算。同时,在输出数组元素时,每个元素后面加一个空格,可以更加清晰地显示数组元素。下面是优化后的代码:
```c
#include <stdio.h>
void fun(int *a, int n) {
int i, t, mid = n / 2;
for (i = 0; i < mid; i++) {
t = a[i];
a[i] = a[n - i - 1];
a[n - i - 1] = t;
}
}
int main() {
int num, i, j;
printf("请输入数组元素个数:");
scanf("%d", &num);
int a[num];
printf("请输入数组元素:");
for (i = 0; i < num; i++) {
scanf("%d", &a[i]);
}
fun(a, num);
for (j = 0; j < num; j++) {
printf("%d ", a[j]);
}
return 0;
}
```
这段代码的功能没有变化,仍然是翻转一个数组,但是将代码变得更加简洁和高效。
相关问题
#include<stdio.h> #include<stdlib.h> #include<assert.h> #include<string.h> #include<unistd.h> #include<pthread.h> int var=0; void *fun(void *); int main() { pthread_t id; int res = pthread_create(&id,NULL,fun,NULL); assert(res == 0); for(int i = 0;i < 10000; i++) { var++; printf("parent is %d\n",var); } exit(0); } void* fun(void *arg) { for(int i = 0;i < 10000; i++) { var--; printf("child is %d\n",var); } }
这是一个使用 pthread 线程库的 C 语言程序,其中包含了一个主线程和一个子线程。
主函数中创建了一个线程 id,并调用 pthread_create 函数创建一个新的线程。该函数的第一个参数是线程 id,第二个参数是线程属性,第三个参数是线程函数,最后一个参数是传给线程函数的参数。在这个程序中,线程属性为 NULL,线程函数为 fun,传递的参数为 NULL。
主线程和子线程都有一个 for 循环,循环的次数为 10000,每次循环都将变量 var 的值加一或减一,并输出当前的 var 值。可以看到,主线程和子线程交替执行,输出的结果也是交替的。
由于主线程和子线程是并发执行的,因此输出的结果可能会出现不同的顺序,这是正常的现象。
对这段代码进行改错#include <conio.h> #include <stdio.h> #include <stdlib.h> #define N 20 /**********FOUND**********/ void fun( int a, int n ) { int i, j, k, t ; for ( j = 0; j < n-1; j++) { k = j; for ( i = j + 1; i < n ; i++ ) /**********FOUND**********/ if ( a [i] < a[k] ) k = i; t = a[j] ; a[j] = a[k]; a[k] = t; } }
有两处错误需要进行改正:
1. 第一个错误是参数a应该是一个指针类型,而不是一个整型变量。因为如果传递的是一个整型变量,函数内部无法通过指针访问数组元素。因此需要将参数a修改为int a[]或者int *a。
2. 第二个错误是函数定义时缺少了返回值类型,应该将void fun修改为void。
修改后的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 20
void fun(int a[], int n) {
int i, j, k, t;
for (j = 0; j < n-1; j++) {
k = j;
for (i = j + 1; i < n; i++) {
if (a[i] < a[k]) {
k = i;
}
}
t = a[j];
a[j] = a[k];
a[k] = t;
}
}
int main() {
int a[N], i;
for (i = 0; i < N; i++) {
a[i] = rand() % 100;
printf("%d ", a[i]);
}
printf("\n");
fun(a, N);
for (i = 0; i < N; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
```
阅读全文