C语言简单编程题目两道,求高手做一下。高分!!!!
很多大学都有类似的网站,你可以百度一下.
ACM网站上的题目 难度 与 C(谭浩强)或者C++(潜能)书上题目比较:可以这么说吧,书上的最难的题目,在POJ上是最简单的。而 hdu(杭电)上 的题目有非常多跟书难度上差不多。
ACM网站 上的题目,用什么语言写都可以,不过用C,C++得还是多。 所有题目都适合用C++写。
个人认为,一般没有题目是C++特色的,只有你编出的程序具有C++特点。
//第一题:这个绝对简单,便捷。界面良好 ---打印菱形
#include
int main()
{
int i,j,n;
printf("请输入菱形高:n = ");
while( scanf("%d",&n) && n>0 )
{
printf("
");
puts("--------------------------------------------------------------------------------");
for( i = 0 ; i< n ; i++ )
{
for(j=0;j < n-i ; j++ )
printf(" ");
for(j=0;j < (i<<1)+1 ; j++ )
printf("*");
printf("
");
}
for( i = n-2 ; i>=0 ; i-- )
{
for(j=0;j < n-i ; j++ )
printf(" ");
for(j=0;j < (i<<1)+1 ; j++ )
printf("*");
printf("
");
}
puts("--------------------------------------------------------------------------------");
printf("请输入菱形高:n = ");
}
return 0;
}
/*
请输入菱形高:n = 8
------------------------
*
***
*****
*******
*********
***********
*************
***************
*************
***********
*********
*******
*****
***
*
------------------------
*/
/*第二题:输入n个点的平面坐标,程序将这些点按照距离原点从近到远的顺序进行排序并输出。(n>=6)。*/
#include
#include
#include
#include
#define MAXN 200
typedef struct PO
{
double x;
double y;
double z;
} POINT;
POINT a[MAXN];
POINT * p[MAXN];
int cmp( const void * a, const void * b )
{
if( ((POINT*)a)->z > ((POINT*)b)->z )
return 1;
else
return -1;
}
void Init()
{
int i;
for( i = 0 ; i < MAXN ; i++ )
{
p[i] = &a[i];
}
}
int main()
{
int n,i,j,k;
while(1)
{
Init();
printf("
有几个点? n=");
scanf("%d",&n);
if(n<=0) continue;
for(i=0;i<n;i++)
{
printf("请输入第 %d 个点的 x 和 y 坐标: ",i+1);
scanf("%lf%lf",&a[i].x,&a[i].y);
a[i].z = sqrt(a[i].x*a[i].x + a[i].y * a[i].y);
}
qsort(a,n,sizeof(POINT),cmp);
printf("到原点距离排序后输出:
");
for(i=0;i<n;i++)
{
printf("( %lf , %lf ) = %lf
",p[i]->x,p[i]->y,p[i]->z);
}
}
return 0;
}
/*
有几个点? n=6
请输入第 1 个点的 x 和 y 坐标: 1 9
请输入第 2 个点的 x 和 y 坐标: 8 77
请输入第 3 个点的 x 和 y 坐标: 0 0
请输入第 4 个点的 x 和 y 坐标: 37 3
请输入第 5 个点的 x 和 y 坐标: 89 102
请输入第 6 个点的 x 和 y 坐标: 34 23
到原点距离排序后输出:
( 0.000000 , 0.000000 ) = 0.000000
( 1.000000 , 9.000000 ) = 9.055385
( 37.000000 , 3.000000 ) = 37.121422
( 34.000000 , 23.000000 ) = 41.048752
( 8.000000 , 77.000000 ) = 77.414469
( 89.000000 , 102.000000 ) = 135.369864
*/
///////哥们。赶紧加分呀。。通宵给你做出来了。。。。。
//又不明白的加我 695033480 。 我负责到底!!!
#include <stdio.h>
#include <stdlib.h>
#define MAX 200
int main(void)
{
int a[MAX], i = 0;
srand(time(NULL)); // 时间种子, 保证真随机, 每次不会相同
while (i < MAX) {
a[i] = rand() % 10000; // 随机获得10000以下数字, 0-9999
if (a[i] < 1000) { // 不是4位数
continue; // 重新随机
}
i++;
}
FILE *fp;
if ((fp = fopen("in.dat", "wb")) == NULL) {
printf("Open failed.\n");
}
//fwrite(a, sizeof(a), 1, fp); // 将数据写入文件, 字节的方式
for (i = 0; i < MAX; i++) { // 字符的方式, 看你下面的scanf, 可能你是要这种
fprintf(fp, "%d ", a[i]);
}
return 0;
}
第2题 :
void isVal(void)
{
int i, tmp, val;
int count = 0, j = 0;
for (i = 0; i < MAX; i++) { // 循环验证所有数字
count = 0; // 每次清0
tmp = a[i]; // 为了不改变a数组的值, 用tmp保存着
while (tmp > 0) { // 依次取得4个位存到val变量中
val = tmp % 10; // 个十百位位的顺序
tmp /= 10; // 每次除10, 以去掉个位数
if (val == 0 || val == 2 || val == 4
|| val == 6 || val == 8) { // 取得的数只要是这5个数中任意一个, count计数就加1
count ++;
}
}
if (count == 4) { // 如果count=4表示4个位都是0/2/4/6/8
b[j++] = a[i]; // 则复制此数字到b数组中, 同时j自增1
}
}
cnt = j; // j的值就是总共符合要求的数, 全局变量cnt赋值与j相同即可.
for (i = 0; i < cnt - 1; i++) { // 冒泡排序将b从小到大排列
for (j = 0; j < cnt - 1 - i; j++)
if (b[j] > b[j + 1]) {
tmp = b[j];
b[j] = b[j + 1];
b[j + 1] = tmp;
}
}
return;
}
void isval(int * a,int *b,int &cnt)
{
int t=0;
int min;
int j=0;
/***********提取符合条件的数*************/
for(int i=0;i<200;i++)
{
n=a[i]%1000;
if(n==0 || n=2 || n==6 || n==8)
{
*b++=a[i];
t++;
}
}
cnt=t;
/***********对数进行排序*************/
for(i=0;i<cnt-1;i++)
{
for(j=i+1;j<cnt;j++)
{
if(b[i]>b[j])
{
min=b[j];
b[j]=b[i];
b[i]=min;
}
}
}
}
相关视频
两道C语言题目,求答案和解析,谢谢~
第9题:【C】核心知识点:1、逗号表达式,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。2、++a与a++的区别,前者为先自加1而后引用当前值参与计算,后者为先引用当前值参与计算而后自加1。x=(a=3,b=++a);1)执行a=3,此时a值为3;2)执行++a,此时a值为4;3)执行b=++a,此时b值为4,a值为4;4)此时
两道很基础的C语言题 求求好心人帮忙给出答案和解析
第二次循环i=1,s[1]为'9',不满足if,所以j还是1,i自加1变为2 从这个过程可以看出,缺的那个空,实际上是你填s数组的结束位置的,因为j实际上就已经是有效的字母的后一个位置,所以那个空直接填s[j]='\\0';就行了。第二题:for循环中,每一次开头length都被设置为0,while循环是用来...
两道c语言题目求解
define f(x)(x*x)main(){int i1,i2;i1=f(8)\/f(4); \/\/看一下除数 i2=f(4+4)\/f(2+2);\/\/除数 printf("%d,%d\\n",i1,i2);} 这样答案就是C,第二道题,题目可以这样看 main(){ struct cmplx { int x;int y;}cnum[2];cnum[0].x=2;cnum[0].y=4;cnum[1].x...
两道C语言编程题
把输入排列成如下格式:m1 m1 m1 m1 m1 m1 m1 m1 m1 m1 m1 m1 m1 m1 m1 m1 m1 m1 m1 m1 m1 m1 m1 m1 m1 m2 m2 m2 m2 m2 m2 m2 m2 m2 m2 m2 m2 m2 m2 m2 m2 m2 m2 m2 m2 m2 m2 m2 m2 m2 其中m1是第一个矩阵的元素,m2是第二个。第二题,什么叫做动态的画出路线?一...
请问这两道c语言题目怎么个写法,求告知?
左:输出是5。右:3 5 7。左:因为China后面是\\0,\\0是字符串结束标记,所以i的值是5,k的值是7。因为num=i<k ? i : k;中i<k成立,则把i==5的值赋给了num。右:for循环中i的取值只有0 1 2三个数,所以x[i][2-i]有三:x[0][2]、x[1][1]和x[2][0]三项;数组x规...