linux pthread_create() 产生斐波那契数列

linux pthread_create() 产生斐波那契数列,第1张

1. pthread_join 是阻塞函数,运行该函数后主线程会阻塞等待子线程 *** 作结束,你把pthread_join放在主线程输出之后,存在这样的问题:在子线程还没赋值完成前,父线程已经把未 *** 作的值输出了。

2.传递参数错误,pthread_create传递的是"&a",也就是数组的起始地址的地址,你只是改变数组值,不需要对起始地址更改,完全可以传递 a,而且看你thread_fun函数应该传递的是a。

3. 最关键的,我纳闷怎么没输出,检查了下你的thread_fun才发现“for(k=2k<=512k++)”,数组越界了! 造成的结果是把n值直接给改了。。

修改版 (有warning, 最好把参数设成void *):

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <pthread.h>/*pthread_create()......*/

#include <unistd.h>

pthread_t ntid

void *thread_fun(int *p) {/*.......*/

int k

p[0] = 0

p[1] = 1

for(k=2k<512k++)

{

p[k] = p[k-1] + p[k-2]

}

return NULL

}

int main(void){

int err

int i,n

int a[512]

printf("Please enter n:(n>=3 &n<=512) ")

scanf("%d",&n)

/*........*/

err=pthread_create(&ntid,NULL,thread_fun,(void *)a)

if (err!=0) {

fprintf(stderr, "......: %s\n", strerror(err))

exit(1)

}

pthread_join(ntid,NULL)/*...1.....*/

for(i = 0 i<=n i++){

printf("F[%d] = %d\n",i,a[i])

}

}

50分就给你做一题吧。

#!/bin/sh

#模拟计算器

case $2 in

1) sum=$(($1+$3))|echo "$1 + $3=$sum"

2) sum=$(($1-$3))|echo "$1 - $3=$sum"

3) sum=$(($1*$3))|echo "$1 * $3=$sum"

4) sum=$(($1/$3))|echo "$1 / $3=$sum"

esac

代码如下:

int a[20]={1,1};

printf(“%d\t%d\t”,a[0],a[1]);

for(int i=0;i<20;i++)

{

printf(“%d\t”,a[i]=a[i-1]+a[i-2]);

}

扩展资料:

如何掌握C语言基础知识及技巧:

首先准备一台PC,学编程一般对PC没有太大的要求,一般主流的配置就好。

有了电脑之后,就得考虑安装什么 *** 作系统了,主流使用的 *** 作系统是windows,不过在这里不建议学习C编程使用windows,建议使用Linux。所以学习者最好安装双系统,或者彻底习惯Linux系统。

不管学习哪门编程语言,都建议学习者必须有一本关于此语言的全面知识的书籍,大一般采用的是谭浩强老师的《C语言程序设计》,还有 《C语言C++学习指南》从入门到精通(语法篇)视频课程在线学习等,建议学习者可以去仔细研读


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8733789.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-20
下一篇2023-04-20

发表评论

登录后才能评论

评论列表(0条)

    保存