یک برنامهٔ C بنویسید که یک خط شامل عددهای ممیز شناور جداشده با فاصله یا کاما را از ورودی استاندارد بخواند، با استفاده از تابع strtod (از ) آنها را به double تبدیل کند و جمع، میانگین و واریانس نمونه (sample variance) را محاسبه و چاپ کند.
4.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:17 0.0
برای حل این مسئله میتوانید خط ورودی را با fgets در یک بافر بخوانید و سپس با استفاده از strtod و پارامتر endptr بهصورت تکراری رشته را پارس کنید (ptr = endptr بعد از هر بار تبدیل). کاراکترهای جداکننده مثل فاصله یا کاما بهطور خودکار با strtod نادیده گرفته میشوند اگر ptr را به سمت endptr ببرید؛ دقت کنید که در صورت عدم پیشرفت endptr باید حلقه را تمام کنید. برای محاسبهٔ واریانس نمونه میتوانید دو مرحلهای عمل کنید (ابتدا میانگین، سپس مجموع مربع اختلافها) یا از الگوریتم Welford برای یکعبور عددی پایدارتر استفاده نمایید. حتماً هدر را اضافه کنید و وضعیتهایی مانند ورودی نامعتبر یا تعداد صفر عناصر را هندل کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
نکتهٔ کلیدی: هنگام استفاده از strtod حتما بررسی کنید که endptr واقعاً به جلو حرکت کرده باشد تا از حلقهٔ بیپایان جلوگیری کنید و مقادیر غیرعددی را بهخوبی هندل کنید. برای ورودی، بهتر است با fgets بافر را پر کنید، اندازهٔ بافر را رعایت کنید و مقدار newline را از پایان رشته پاک کنید. برای واریانس نمونه، میتوانید از الگوریتم Welford در یک عبور استفاده کنید تا پایدارتر باشد. همچنین قبل از محاسبهٔ هر آماره، تعداد مقادیر را بررسی کنید و اگر هیچ مقدار یا فقط یک مقدار داشتید، خروجی مناسبی نمایش دهید. هدرهای stdio.h، stdlib.h، math.h را اضافه کنید و خطاها را در نظر بگیرید.
گزارش