下图中的题目怎么做?C语言编程。

作者&投稿:虿牵 (若有异议请与网页底部的电邮联系)
C语言编程下图怎么做?~

方法有很多种:
一、直接循环,通过变量计数判断每个字符输出的内容。缺点:逻辑繁琐。
二、把图像看成固定长度的多行字符串(最大行宽用常量或动态数组)。
这样两个题目就都统一成一个思路,那就是循环重复打印一个字符串。而这个字符串在每次循环都改变自己的内容。
改变内容的方法:初始用两个指针指向这个字符串的中心位置,不断往两边移动,移动同时改变指向地址的值。
这里,如指针移动到两头,程序就结束,那么打印的就是题目二的三角形。如到两头再往回走,打印的就是菱形。
另外要注意:1、菱形是固定字符黑桃。而三角形是循环打印大写字母。
2、字符之间是有宽度的,不能直接用%s输出一行字符串,需要循环输出指定宽度字符。
因此,按照编程思想,输出打印一个字符串以及循环大写字母这两个功能是要重复调用的,要单独写函数。
下面是代码:

#include
#define MLEN 50//图形最大行宽度
void show1();//对应题目1的菱形
void show2();//对应题目2的三角形
void showLine(char lnStr[],int n,int d);//打印输出一行图形,参数:行数组、数组长度、字符间隔大小
char getLetter();//每次调用,返回A~Z的一个字母,字母循环
int main()
{
show1();
show2();
return 0;
}
void showLine(char lnStr[],int n,int d)
{
int i;
for(i=0;i<n;i++) printf("%*c",d,lnStr[i]);
printf("
");
}
char getLetter()
{
char b;
static char w='A';
b=w;
if(w<'Z') w++;
else w--;
return b;
}
void show1()
{
int i,flag=1,n=0;
char lnStr[MLEN]={0},*p0=NULL,*p1=NULL;
while(n=MLEN)
printf("请输入菱形最大宽度n(字符个数n必须是大于1且小于%d的奇数):",MLEN),scanf("%d",&n);
for(i=0;i<n;i++) lnStr[i]=' ';//初始化一行空格
p0=p1=&lnStr[n/2];//指针初始指向中间
while(p0<=p1)
{
if(flag) *p0=*p1=5,p0--,p1++;//标识为1,两指针指向地址值变黑桃,之后分别向两边移动
else *p0=*p1=' ',p0++,p1--;//标识为0,两指针指向地址值变空格,之后分别向中间移动
showLine(lnStr,n,2);
if(p0+1==&lnStr[0]) p0++,p1--,flag=0;//两指针移动到两头,开始反向移动
}
}
void show2()
{
int i,n=0;
char lnStr[MLEN]={0},*p0=NULL,*p1=NULL,*p=NULL;
while(n=MLEN)
printf("请输入三角形底边宽度n(字符个数n必须是大于1且小于%d的奇数):",MLEN),scanf("%d",&n);
for(i=0;i<n;i++) lnStr[i]=' ';//初始化一行空格
p0=p1=&lnStr[n/2];//指针初始指向中间
while(1)
{
showLine(lnStr,n,2);
if(p0+1==&lnStr[0]) break;
p=p0;
while(p<=p1) *p=getLetter(),p++;
//两指针之间的地址值循环取大写字母,之后分别向两边移动
p0--,p1++;
}
}

应用同余定理,可以比较简单地求出。其实是个老题目,说法略不同而已——

代码文本:
#include "stdio.h"
int main(int argc,char *argv[]){
int n,m,ans,i;
printf("Please enter n & m(int n,m>0)...
");
if(scanf("%d%d",&n,&m)==2 && n>0 && m>0){
ans=0;
for(i=1;i<=n;i++)
ans=(ans+m)%i;
printf("
The result is %d
",ans%n+1);
}
else
printf("Input error, exit...
");
return 0;
}

代码文本:

#include "stdio.h"

int myf(int n){

if(n==1 || n==2)

return 1;

return 3*myf(n-1)+2*myf(n-2);

}

int main(int argc,char *argv[]){

int sum,n,t;

printf("Enter n(int n>0)...
n=");

if(scanf("%d",&n) && n>0){

for(sum=0,t=1;t<n;sum+=myf(t++));

t=myf(n);

printf("%d%d
",t,t+sum);

}

else

printf("Input error, exit...
");

return 0;

}



#include<stdio.h>


int f(int n, int f1, int f2) {

  if (n == 1)

    return f1;

  else

    return f(n - 1, f2, 3 * f2 + 2 * f1);

}


int main() {

  int n, s = 0;

  scanf("%d", &n);

  for (int i = 1; i <= n; i++)

    s += f(i,1,1);

  printf("%d %d", f(n, 1, 1), s);

  return 0;

}



下图中的题目怎么做?C语言编程。
答:int myf(int n){ if(n==1 || n==2)return 1;return 3*myf(n-1)+2*myf(n-2);} int main(int argc,char *argv[]){ int sum,n,t;printf("Enter n(int n>0)...\nn=");if(scanf("%d",&n) && n>0){ for(sum=0,t=1;t<n;sum+=myf(t++));t=myf(n);printf("...

C语言编程下图怎么做?
答:一、直接循环,通过变量计数判断每个字符输出的内容。缺点:逻辑繁琐。二、把图像看成固定长度的多行字符串(最大行宽用常量或动态数组)。这样两个题目就都统一成一个思路,那就是循环重复打印一个字符串。而这个字符串在每次循环都改变自己的内容。改变内容的方法:初始用两个指针指向这个字符串的中心位...

下图所示的题目用C语言怎么编,求高手指教
答:假定 array[] 是全局量,无参 sort() 才能工作。include <stdio.h> int array[]={45,56,76,234,1,34,23,2,3}; // 假定 array[] 是全局量 void sort();int main(){ // int i; // 输出检查结果时要一个循环变量 sort();// for ( i=0;i<9;i++) printf("%d ",arr...

C语言:下列图片中的题目咋编程?
答:题目没有明确字符串长度,假定不超过500——代码文本:include "stdio.h"int main(int argc,char *argv[]){ char s[501];int i,j,k;printf("Please enter a contains various character string(# end)...\n");for(i=0;(s[i]=getchar())!='#' && i<500;i++);for(i--;s[i]=...

兄弟们,这道题该怎么做(c语言)?
答:按照题目要求编写的程序如下(见图,图中有重复的地方只需写一次).

C语言,请问图中的题怎么做?? 请给出代码,让我琢磨下。谢谢。
答:这个代码没有按题目分析的办法做,只把长短数末尾对齐而不移动短的,总以长的作被加数。这样方便些。此代码可做两个299位十进制数相加。供参考……include "stdio.h"#include "string.h"int main(void){ char a[301],b[301],*pa=a,*pb=b; int i,j,la,lb; a[0]=b[0]='0'...

这个c语言题怎么编
答:include <stdio.h>int main(){int a,b,c;scanf("%d%d%d",&a,&b,&c);while(a||b||c){if(a<b) {a+=b;a-=b=a-b;}if(b<c) {b+=c;b-=c=b-c;}if(a

C语言:大佬做一下图片上英语题目的C编程,咋写?
答:按题目要求,写一个在数组中查找素数的函数,找到返回该数,没找到返回-1;主函数中定义至少两个数组,一个有素数,一个没有,作两次独立调用输出结果。代码文本:include "stdio.h"int prime(int *p,int n){//数组中找素数 int i,k;for(k=0;k<n;k++){ if(p[k]>2 && !(p[k]&1) ...

怎么用C语言编写这道题的程序?急~~~
答:1.将x/2求余,将余数逐个保留到数组t[]中。2.x=x/2.3.x不为0,循环,到第一步重新开始。4.x为0,结束循环。将数组逆序输出。代码:include "stdio.h"void TenToTwo(int x) //八进制 的改一下就是了。{ int t[50]; //保留结果 int tmp,i=-1,j;while(x!=0){ //保留余数 tm...

C语言程序设计,题目如图,怎么编啊?求大神!
答:int unpassCount = 0;//不及格人数 printf("请输入学生名字和分数,输入成绩为时-1时,结束输入\n");while(inputCount < 30){printf("请输入第%d个学生名字:",inputCount + 1);scanf("%s",stu[inputCount].name);printf("请输入分数:");scanf("%f",&stu[inputCount].score);if(stu[...